[{"data":1,"prerenderedAt":191610},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-11-03-cnn-ji-chu\u002Fch2-jing-dian-shen-jing-wang-luo":3,"wiki-doc-nav":20027},{"id":4,"title":5,"body":6,"description":20020,"extension":20021,"meta":20022,"navigation":216,"path":20023,"seo":20024,"stem":20025,"__hash__":20026},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":8,"toc":20014},"minimark",[9,13,18,23,27,34,41,44,50,55,60,63,67,72,76,81,84,89,92,95,98,101,106,109,114,119,125,130,133,137,140,145,840,845,848,853,856,859,1336,1339,1342,1345,1348,3467,3470,3475,3480,4276,4279,4284,5065,5069,6728,6732,7446,7450,7454,7459,7464,7469,7472,7477,7482,7487,7492,7497,7501,7506,8792,8797,8800,8803,8806,8961,8964,8967,10183,10188,10883,10887,10891,10896,10901,10904,10909,10914,10919,10924,10929,10934,10939,10944,10949,10954,10959,10964,10969,10974,10979,10984,10989,10994,10999,11004,11009,11014,11019,11024,11029,11034,11039,11044,11049,11054,11058,11062,11065,12549,12553,14201,14205,14899,14903,14906,14909,15459,15462,15466,15469,16866,16870,16873,17453,19243,19247,19250,20010],[10,11,5],"h1",{"id":12},"_2经典神经网络",[14,15,17],"h3",{"id":16},"_21lenet与alexnet","2.1.LeNet与AlexNet",[19,20,22],"h4",{"id":21},"_211原理介绍","2.1.1.原理介绍",[24,25,26],"p",{},"LeNet-5",[28,29,30],"ol",{},[31,32,33],"li",{},"原理",[24,35,36],{},[37,38],"img",{"alt":39,"src":40},"","\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",[24,42,43],{},"B是batch批次；C是channel通道",[28,45,47],{"start":46},2,[31,48,49],{},"网络参数详细",[24,51,52],{},[37,53],{"alt":39,"src":54},"\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",[24,56,57],{},[37,58],{"alt":39,"src":59},"\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",[24,61,62],{},"AlexNet",[28,64,65],{},[31,66,33],{},[24,68,69],{},[37,70],{"alt":39,"src":71},"\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",[28,73,74],{"start":46},[31,75,49],{},[24,77,78],{},[37,79],{"alt":39,"src":80},"\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",[24,82,83],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[24,85,86],{},[37,87],{"alt":39,"src":88},"\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",[24,90,91],{},"数据处理中的图像增强操作:",[24,93,94],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[24,96,97],{},"①增加数据量，保证训练数据充足；②防止过拟合",[24,99,100],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[24,102,103],{},[37,104],{"alt":39,"src":105},"\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",[24,107,108],{},"提升网络精确度的方法：LRN正则化",[24,110,111],{},[37,112],{"alt":39,"src":113},"\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",[24,115,116],{},[37,117],{"alt":39,"src":118},"\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",[28,120,122],{"start":121},3,[31,123,124],{},"AlexNet的总结",[24,126,127],{},[37,128],{"alt":39,"src":129},"\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",[24,131,132],{},"比LeNet模型要深一丢丢",[19,134,136],{"id":135},"_212代码实现","2.1.2.代码实现",[24,138,139],{},"（1）LeNet",[28,141,142],{},[31,143,144],{},"模型搭建",[146,147,151],"pre",{"className":148,"code":149,"language":150,"meta":39,"style":39},"language-python shiki shiki-themes github-light github-dark","# 导入库\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","python",[152,153,154,163,173,178,192,198,211,218,243,249,255,268,274,295,300,306,364,377,383,413,450,478,484,497,503,526,547,568,573,579,590,608,620,636,648,660,676,692,704,713,718,737,743,771,777,783,789,794,800,806,817],"code",{"__ignoreMap":39},[155,156,159],"span",{"class":157,"line":158},"line",1,[155,160,162],{"class":161},"sJ8bj","# 导入库\n",[155,164,165,169],{"class":157,"line":46},[155,166,168],{"class":167},"szBVR","import",[155,170,172],{"class":171},"sVt8B"," torch\n",[155,174,175],{"class":157,"line":121},[155,176,177],{"class":161},"# 导入神经网络层\n",[155,179,181,184,187,189],{"class":157,"line":180},4,[155,182,183],{"class":167},"from",[155,185,186],{"class":171}," torch ",[155,188,168],{"class":167},[155,190,191],{"class":171}," nn\n",[155,193,195],{"class":157,"line":194},5,[155,196,197],{"class":161},"# 导入展示神经网络参数的包\n",[155,199,201,203,206,208],{"class":157,"line":200},6,[155,202,183],{"class":167},[155,204,205],{"class":171}," torchsummary ",[155,207,168],{"class":167},[155,209,210],{"class":171}," summary\n",[155,212,214],{"class":157,"line":213},7,[155,215,217],{"emptyLinePlaceholder":216},true,"\n",[155,219,221,224,228,231,234,237,240],{"class":157,"line":220},8,[155,222,223],{"class":167},"class",[155,225,227],{"class":226},"sScJk"," LeNet",[155,229,230],{"class":171},"(",[155,232,233],{"class":226},"nn",[155,235,236],{"class":171},".",[155,238,239],{"class":226},"Module",[155,241,242],{"class":171},"):\n",[155,244,246],{"class":157,"line":245},9,[155,247,248],{"class":161},"    # 模型初始化:\n",[155,250,252],{"class":157,"line":251},10,[155,253,254],{"class":161},"    # 定义一些网络层和激活函数\n",[155,256,258,261,265],{"class":157,"line":257},11,[155,259,260],{"class":167},"    def",[155,262,264],{"class":263},"sj4cs"," __init__",[155,266,267],{"class":171},"(self):\n",[155,269,271],{"class":157,"line":270},12,[155,272,273],{"class":161},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[155,275,277,280,283,286,289,292],{"class":157,"line":276},13,[155,278,279],{"class":263},"        super",[155,281,282],{"class":171},"(LeNet,",[155,284,285],{"class":263},"self",[155,287,288],{"class":171},").",[155,290,291],{"class":263},"__init__",[155,293,294],{"class":171},"()\n",[155,296,298],{"class":157,"line":297},14,[155,299,217],{"emptyLinePlaceholder":216},[155,301,303],{"class":157,"line":302},15,[155,304,305],{"class":161},"        # 定义网络层\n",[155,307,309,312,315,318,321,325,327,330,333,336,338,341,343,346,348,351,353,356,358,361],{"class":157,"line":308},16,[155,310,311],{"class":263},"        self",[155,313,314],{"class":171},".c1",[155,316,317],{"class":167},"=",[155,319,320],{"class":171},"nn.Conv2d(",[155,322,324],{"class":323},"s4XuR","in_channels",[155,326,317],{"class":167},[155,328,329],{"class":263},"1",[155,331,332],{"class":171},",",[155,334,335],{"class":323},"out_channels",[155,337,317],{"class":167},[155,339,340],{"class":263},"6",[155,342,332],{"class":171},[155,344,345],{"class":323},"kernel_size",[155,347,317],{"class":167},[155,349,350],{"class":263},"5",[155,352,332],{"class":171},[155,354,355],{"class":323},"padding",[155,357,317],{"class":167},[155,359,360],{"class":263},"2",[155,362,363],{"class":171},")\n",[155,365,367,369,372,374],{"class":157,"line":366},17,[155,368,311],{"class":263},[155,370,371],{"class":171},".sig",[155,373,317],{"class":167},[155,375,376],{"class":171},"nn.Sigmoid()\n",[155,378,380],{"class":157,"line":379},18,[155,381,382],{"class":161},"        # 定义池化\n",[155,384,386,388,391,393,396,398,400,402,404,407,409,411],{"class":157,"line":385},19,[155,387,311],{"class":263},[155,389,390],{"class":171},".s2",[155,392,317],{"class":167},[155,394,395],{"class":171},"nn.AvgPool2d(",[155,397,345],{"class":323},[155,399,317],{"class":167},[155,401,360],{"class":263},[155,403,332],{"class":171},[155,405,406],{"class":323},"stride",[155,408,317],{"class":167},[155,410,360],{"class":263},[155,412,363],{"class":171},[155,414,416,418,421,423,425,427,429,431,433,435,437,440,442,444,446,448],{"class":157,"line":415},20,[155,417,311],{"class":263},[155,419,420],{"class":171},".c3",[155,422,317],{"class":167},[155,424,320],{"class":171},[155,426,324],{"class":323},[155,428,317],{"class":167},[155,430,340],{"class":263},[155,432,332],{"class":171},[155,434,335],{"class":323},[155,436,317],{"class":167},[155,438,439],{"class":263},"16",[155,441,332],{"class":171},[155,443,345],{"class":323},[155,445,317],{"class":167},[155,447,350],{"class":263},[155,449,363],{"class":171},[155,451,453,455,458,460,462,464,466,468,470,472,474,476],{"class":157,"line":452},21,[155,454,311],{"class":263},[155,456,457],{"class":171},".s4",[155,459,317],{"class":167},[155,461,395],{"class":171},[155,463,345],{"class":323},[155,465,317],{"class":167},[155,467,360],{"class":263},[155,469,332],{"class":171},[155,471,406],{"class":323},[155,473,317],{"class":167},[155,475,360],{"class":263},[155,477,363],{"class":171},[155,479,481],{"class":157,"line":480},22,[155,482,483],{"class":161},"        # 定义平展层\n",[155,485,487,489,492,494],{"class":157,"line":486},23,[155,488,311],{"class":263},[155,490,491],{"class":171},".flatten",[155,493,317],{"class":167},[155,495,496],{"class":171},"nn.Flatten()\n",[155,498,500],{"class":157,"line":499},24,[155,501,502],{"class":161},"        # 定义全连接层\n",[155,504,506,508,511,513,516,519,521,524],{"class":157,"line":505},25,[155,507,311],{"class":263},[155,509,510],{"class":171},".f5",[155,512,317],{"class":167},[155,514,515],{"class":171},"nn.Linear(",[155,517,518],{"class":263},"400",[155,520,332],{"class":171},[155,522,523],{"class":263},"120",[155,525,363],{"class":171},[155,527,529,531,534,536,538,540,542,545],{"class":157,"line":528},26,[155,530,311],{"class":263},[155,532,533],{"class":171},".f6",[155,535,317],{"class":167},[155,537,515],{"class":171},[155,539,523],{"class":263},[155,541,332],{"class":171},[155,543,544],{"class":263},"84",[155,546,363],{"class":171},[155,548,550,552,555,557,559,561,563,566],{"class":157,"line":549},27,[155,551,311],{"class":263},[155,553,554],{"class":171},".f7",[155,556,317],{"class":167},[155,558,515],{"class":171},[155,560,544],{"class":263},[155,562,332],{"class":171},[155,564,565],{"class":263},"10",[155,567,363],{"class":171},[155,569,571],{"class":157,"line":570},28,[155,572,217],{"emptyLinePlaceholder":216},[155,574,576],{"class":157,"line":575},29,[155,577,578],{"class":161},"    # 写工具->写前向传播\n",[155,580,582,584,587],{"class":157,"line":581},30,[155,583,260],{"class":167},[155,585,586],{"class":226}," forward",[155,588,589],{"class":171},"(self,x):\n",[155,591,593,596,598,600,603,605],{"class":157,"line":592},31,[155,594,595],{"class":171},"        x",[155,597,317],{"class":167},[155,599,285],{"class":263},[155,601,602],{"class":171},".sig(",[155,604,285],{"class":263},[155,606,607],{"class":171},".c1(x))\n",[155,609,611,613,615,617],{"class":157,"line":610},32,[155,612,595],{"class":171},[155,614,317],{"class":167},[155,616,285],{"class":263},[155,618,619],{"class":171},".s2(x)\n",[155,621,623,625,627,629,631,633],{"class":157,"line":622},33,[155,624,595],{"class":171},[155,626,317],{"class":167},[155,628,285],{"class":263},[155,630,602],{"class":171},[155,632,285],{"class":263},[155,634,635],{"class":171},".c3(x))\n",[155,637,639,641,643,645],{"class":157,"line":638},34,[155,640,595],{"class":171},[155,642,317],{"class":167},[155,644,285],{"class":263},[155,646,647],{"class":171},".s4(x)\n",[155,649,651,653,655,657],{"class":157,"line":650},35,[155,652,595],{"class":171},[155,654,317],{"class":167},[155,656,285],{"class":263},[155,658,659],{"class":171},".flatten(x)\n",[155,661,663,665,667,669,671,673],{"class":157,"line":662},36,[155,664,595],{"class":171},[155,666,317],{"class":167},[155,668,285],{"class":263},[155,670,602],{"class":171},[155,672,285],{"class":263},[155,674,675],{"class":171},".f5(x))\n",[155,677,679,681,683,685,687,689],{"class":157,"line":678},37,[155,680,595],{"class":171},[155,682,317],{"class":167},[155,684,285],{"class":263},[155,686,602],{"class":171},[155,688,285],{"class":263},[155,690,691],{"class":171},".f6(x))\n",[155,693,695,697,699,701],{"class":157,"line":694},38,[155,696,595],{"class":171},[155,698,317],{"class":167},[155,700,285],{"class":263},[155,702,703],{"class":171},".f7(x)\n",[155,705,707,710],{"class":157,"line":706},39,[155,708,709],{"class":167},"        return",[155,711,712],{"class":171}," x\n",[155,714,716],{"class":157,"line":715},40,[155,717,217],{"emptyLinePlaceholder":216},[155,719,721,724,727,730,734],{"class":157,"line":720},41,[155,722,723],{"class":167},"if",[155,725,726],{"class":263}," __name__",[155,728,729],{"class":167},"==",[155,731,733],{"class":732},"sZZnC","\"__main__\"",[155,735,736],{"class":171},":\n",[155,738,740],{"class":157,"line":739},42,[155,741,742],{"class":161},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[155,744,746,749,751,754,757,760,763,766,769],{"class":157,"line":745},43,[155,747,748],{"class":171},"    device",[155,750,317],{"class":167},[155,752,753],{"class":171},"torch.device(",[155,755,756],{"class":732},"\"cuda\"",[155,758,759],{"class":167}," if",[155,761,762],{"class":171}," torch.cuda.is_available() ",[155,764,765],{"class":167},"else",[155,767,768],{"class":732}," \"cpu\"",[155,770,363],{"class":171},[155,772,774],{"class":157,"line":773},44,[155,775,776],{"class":161},"    # 如果就是想指定用cpu用下方代码:\n",[155,778,780],{"class":157,"line":779},45,[155,781,782],{"class":161},"    # device=\"cpu\"\n",[155,784,786],{"class":157,"line":785},46,[155,787,788],{"class":161},"    # print(device)\n",[155,790,792],{"class":157,"line":791},47,[155,793,217],{"emptyLinePlaceholder":216},[155,795,797],{"class":157,"line":796},48,[155,798,799],{"class":161},"    # 实例化模型\n",[155,801,803],{"class":157,"line":802},49,[155,804,805],{"class":161},"    # 将模型放到设备中去运行\n",[155,807,809,812,814],{"class":157,"line":808},50,[155,810,811],{"class":171},"    model",[155,813,317],{"class":167},[155,815,816],{"class":171},"LeNet().to(device)\n",[155,818,820,823,826,828,830,833,835,837],{"class":157,"line":819},51,[155,821,822],{"class":263},"    print",[155,824,825],{"class":171},"(summary(model,(",[155,827,329],{"class":263},[155,829,332],{"class":171},[155,831,832],{"class":263},"28",[155,834,332],{"class":171},[155,836,832],{"class":263},[155,838,839],{"class":171},")))\n",[24,841,842],{},[37,843],{"alt":39,"src":844},"\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",[24,846,847],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[28,849,850],{"start":46},[31,851,852],{},"训练",[24,854,855],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[24,857,858],{},"在训练之前可以将数据展示看一下",[146,860,862],{"className":148,"code":861,"language":150,"meta":39,"style":39},"# 建立画图的函数，用于展示数据\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",[152,863,864,869,874,886,898,911,916,928,933,945,950,962,966,970,991,1003,1008,1029,1040,1044,1049,1067,1079,1084,1095,1100,1112,1116,1121,1138,1154,1159,1164,1177,1190,1203,1208,1212,1217,1239,1257,1280,1293,1306,1316,1331],{"__ignoreMap":39},[155,865,866],{"class":157,"line":158},[155,867,868],{"class":161},"# 建立画图的函数，用于展示数据\n",[155,870,871],{"class":157,"line":46},[155,872,873],{"class":161},"# torchvision中包含很多内置的数据集\n",[155,875,876,878,881,883],{"class":157,"line":121},[155,877,183],{"class":167},[155,879,880],{"class":171}," sklearn.externals.array_api_compat.torch ",[155,882,168],{"class":167},[155,884,885],{"class":171}," squeeze\n",[155,887,888,890,893,895],{"class":157,"line":180},[155,889,183],{"class":167},[155,891,892],{"class":171}," torchvision.datasets ",[155,894,168],{"class":167},[155,896,897],{"class":171}," FashionMNIST\n",[155,899,900,902,905,908],{"class":157,"line":194},[155,901,168],{"class":167},[155,903,904],{"class":171}," numpy ",[155,906,907],{"class":167},"as",[155,909,910],{"class":171}," np\n",[155,912,913],{"class":157,"line":200},[155,914,915],{"class":161},"# 引入处理数据集的包\n",[155,917,918,920,923,925],{"class":157,"line":213},[155,919,183],{"class":167},[155,921,922],{"class":171}," torchvision ",[155,924,168],{"class":167},[155,926,927],{"class":171}," transforms\n",[155,929,930],{"class":157,"line":220},[155,931,932],{"class":161},"# 从torch库中引入数据处理的包\n",[155,934,935,937,940,942],{"class":157,"line":245},[155,936,168],{"class":167},[155,938,939],{"class":171}," torch.utils.data ",[155,941,907],{"class":167},[155,943,944],{"class":171}," Data\n",[155,946,947],{"class":157,"line":251},[155,948,949],{"class":161},"# 导入画图的库\n",[155,951,952,954,957,959],{"class":157,"line":257},[155,953,168],{"class":167},[155,955,956],{"class":171}," matplotlib.pyplot ",[155,958,907],{"class":167},[155,960,961],{"class":171}," plt\n",[155,963,964],{"class":157,"line":270},[155,965,217],{"emptyLinePlaceholder":216},[155,967,968],{"class":157,"line":276},[155,969,217],{"emptyLinePlaceholder":216},[155,971,972,975,977,980,983,985,988],{"class":157,"line":297},[155,973,974],{"class":171},"train_data",[155,976,317],{"class":167},[155,978,979],{"class":171},"FashionMNIST(",[155,981,982],{"class":323},"root",[155,984,317],{"class":167},[155,986,987],{"class":732},"'.\u002Fdata'",[155,989,990],{"class":171},",\n",[155,992,993,996,998,1001],{"class":157,"line":302},[155,994,995],{"class":323},"                        train",[155,997,317],{"class":167},[155,999,1000],{"class":263},"True",[155,1002,990],{"class":171},[155,1004,1005],{"class":157,"line":308},[155,1006,1007],{"class":161},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[155,1009,1010,1013,1015,1018,1021,1023,1026],{"class":157,"line":366},[155,1011,1012],{"class":323},"                        transform",[155,1014,317],{"class":167},[155,1016,1017],{"class":171},"transforms.Compose([transforms.Resize(",[155,1019,1020],{"class":323},"size",[155,1022,317],{"class":167},[155,1024,1025],{"class":263},"224",[155,1027,1028],{"class":171},"),transforms.ToTensor()]),\n",[155,1030,1031,1034,1036,1038],{"class":157,"line":379},[155,1032,1033],{"class":323},"                        download",[155,1035,317],{"class":167},[155,1037,1000],{"class":263},[155,1039,363],{"class":171},[155,1041,1042],{"class":157,"line":385},[155,1043,217],{"emptyLinePlaceholder":216},[155,1045,1046],{"class":157,"line":415},[155,1047,1048],{"class":161},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[155,1050,1051,1054,1056,1059,1062,1064],{"class":157,"line":452},[155,1052,1053],{"class":171},"train_loader",[155,1055,317],{"class":167},[155,1057,1058],{"class":171},"Data.DataLoader(",[155,1060,1061],{"class":323},"dataset",[155,1063,317],{"class":167},[155,1065,1066],{"class":171},"train_data,\n",[155,1068,1069,1072,1074,1077],{"class":157,"line":480},[155,1070,1071],{"class":323},"                             batch_size",[155,1073,317],{"class":167},[155,1075,1076],{"class":263},"64",[155,1078,990],{"class":171},[155,1080,1081],{"class":157,"line":486},[155,1082,1083],{"class":161},"                             # 数据是否打乱\n",[155,1085,1086,1089,1091,1093],{"class":157,"line":499},[155,1087,1088],{"class":323},"                             shuffle",[155,1090,317],{"class":167},[155,1092,1000],{"class":263},[155,1094,990],{"class":171},[155,1096,1097],{"class":157,"line":505},[155,1098,1099],{"class":161},"                             # 规定加载数据的进程\n",[155,1101,1102,1105,1107,1110],{"class":157,"line":528},[155,1103,1104],{"class":323},"                             num_workers",[155,1106,317],{"class":167},[155,1108,1109],{"class":263},"0",[155,1111,363],{"class":171},[155,1113,1114],{"class":157,"line":549},[155,1115,217],{"emptyLinePlaceholder":216},[155,1117,1118],{"class":157,"line":570},[155,1119,1120],{"class":161},"# 获得一个batch的数据\n",[155,1122,1123,1126,1129,1132,1135],{"class":157,"line":575},[155,1124,1125],{"class":167},"for",[155,1127,1128],{"class":171}," step,(b_x,b_y) ",[155,1130,1131],{"class":167},"in",[155,1133,1134],{"class":263}," enumerate",[155,1136,1137],{"class":171},"(train_loader):\n",[155,1139,1140,1143,1146,1149,1152],{"class":157,"line":581},[155,1141,1142],{"class":167},"    if",[155,1144,1145],{"class":171}," step ",[155,1147,1148],{"class":167},">",[155,1150,1151],{"class":263}," 0",[155,1153,736],{"class":171},[155,1155,1156],{"class":157,"line":592},[155,1157,1158],{"class":167},"        break\n",[155,1160,1161],{"class":157,"line":610},[155,1162,1163],{"class":161},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[155,1165,1166,1169,1171,1174],{"class":157,"line":622},[155,1167,1168],{"class":171},"batch_x",[155,1170,317],{"class":167},[155,1172,1173],{"class":171},"b_x.squeeze().numpy()  ",[155,1175,1176],{"class":161},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[155,1178,1179,1182,1184,1187],{"class":157,"line":638},[155,1180,1181],{"class":171},"batch_y",[155,1183,317],{"class":167},[155,1185,1186],{"class":171},"b_y.numpy()   ",[155,1188,1189],{"class":161},"#将张量转换成功numpy数组\n",[155,1191,1192,1195,1197,1200],{"class":157,"line":650},[155,1193,1194],{"class":171},"class_label",[155,1196,317],{"class":167},[155,1198,1199],{"class":171},"train_data.classes  ",[155,1201,1202],{"class":161},"#训练集标签\n",[155,1204,1205],{"class":157,"line":662},[155,1206,1207],{"class":161},"# print(class_label)\n",[155,1209,1210],{"class":157,"line":678},[155,1211,217],{"emptyLinePlaceholder":216},[155,1213,1214],{"class":157,"line":694},[155,1215,1216],{"class":161},"# 可视化一个batch的图像\n",[155,1218,1219,1222,1225,1227,1229,1232,1234,1236],{"class":157,"line":706},[155,1220,1221],{"class":171},"plt.figure(",[155,1223,1224],{"class":323},"figsize",[155,1226,317],{"class":167},[155,1228,230],{"class":171},[155,1230,1231],{"class":263},"12",[155,1233,332],{"class":171},[155,1235,350],{"class":263},[155,1237,1238],{"class":171},"))\n",[155,1240,1241,1243,1246,1248,1251,1254],{"class":157,"line":715},[155,1242,1125],{"class":167},[155,1244,1245],{"class":171}," ii ",[155,1247,1131],{"class":167},[155,1249,1250],{"class":171}," np.arange(",[155,1252,1253],{"class":263},"len",[155,1255,1256],{"class":171},"(batch_y)):\n",[155,1258,1259,1262,1265,1267,1269,1272,1275,1278],{"class":157,"line":720},[155,1260,1261],{"class":171},"    plt.subplot(",[155,1263,1264],{"class":263},"4",[155,1266,332],{"class":171},[155,1268,439],{"class":263},[155,1270,1271],{"class":171},",ii ",[155,1273,1274],{"class":167},"+",[155,1276,1277],{"class":263}," 1",[155,1279,363],{"class":171},[155,1281,1282,1285,1288,1290],{"class":157,"line":739},[155,1283,1284],{"class":171},"    plt.imshow(batch_x[ii,:,:],",[155,1286,1287],{"class":323},"cmap",[155,1289,317],{"class":167},[155,1291,1292],{"class":171},"plt.cm.gray)\n",[155,1294,1295,1298,1300,1302,1304],{"class":157,"line":745},[155,1296,1297],{"class":171},"    plt.title(class_label[batch_y[ii]],",[155,1299,1020],{"class":323},[155,1301,317],{"class":167},[155,1303,565],{"class":263},[155,1305,363],{"class":171},[155,1307,1308,1311,1314],{"class":157,"line":773},[155,1309,1310],{"class":171},"    plt.axis(",[155,1312,1313],{"class":732},"\"off\"",[155,1315,363],{"class":171},[155,1317,1318,1321,1324,1326,1329],{"class":157,"line":779},[155,1319,1320],{"class":171},"    plt.subplots_adjust(",[155,1322,1323],{"class":323},"wspace",[155,1325,317],{"class":167},[155,1327,1328],{"class":263},"0.05",[155,1330,363],{"class":171},[155,1332,1333],{"class":157,"line":785},[155,1334,1335],{"class":171},"plt.show()\n",[24,1337,1338],{},"用matplotlib进行展示的过程可以后续再补",[24,1340,1341],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[24,1343,1344],{},"训练次数就是按照批次过整个训练集数据的次数",[24,1346,1347],{},"模型训练：",[146,1349,1351],{"className":148,"code":1350,"language":150,"meta":39,"style":39},"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",[152,1352,1353,1360,1367,1371,1383,1389,1400,1410,1420,1430,1440,1445,1457,1467,1471,1475,1480,1491,1504,1515,1532,1543,1583,1599,1611,1622,1627,1639,1655,1666,1677,1688,1696,1700,1705,1710,1714,1719,1729,1750,1754,1758,1763,1768,1773,1793,1797,1802,1812,1816,1821,1830,1836,1842,1848,1859,1864,1869,1875,1881,1892,1898,1909,1915,1925,1931,1941,1947,1957,1962,1968,1979,1984,1989,1995,2012,2044,2060,2065,2071,2077,2087,2093,2104,2110,2120,2126,2136,2142,2152,2158,2168,2174,2189,2195,2206,2212,2223,2229,2235,2241,2247,2258,2264,2284,2290,2301,2307,2313,2319,2325,2331,2337,2343,2364,2370,2386,2392,2406,2412,2427,2433,2442,2448,2457,2463,2469,2478,2484,2495,2501,2520,2526,2537,2543,2563,2579,2585,2599,2605,2611,2622,2628,2634,2644,2650,2661,2667,2677,2682,2688,2740,2787,2792,2798,2819,2825,2846,2852,2858,2868,2873,2879,2895,2943,2949,2955,2961,2972,2978,2984,2990,3009,3024,3033,3042,3051,3060,3066,3072,3080,3085,3091,3102,3108,3128,3134,3140,3146,3163,3169,3175,3181,3187,3193,3220,3244,3250,3256,3262,3273,3284,3290,3307,3330,3353,3359,3364,3373,3383,3389,3394,3400,3413,3419,3430,3441,3461],{"__ignoreMap":39},[155,1354,1355,1357],{"class":157,"line":158},[155,1356,168],{"class":167},[155,1358,1359],{"class":171}," copy\n",[155,1361,1362,1364],{"class":157,"line":46},[155,1363,168],{"class":167},[155,1365,1366],{"class":171}," time\n",[155,1368,1369],{"class":157,"line":121},[155,1370,217],{"emptyLinePlaceholder":216},[155,1372,1373,1375,1378,1380],{"class":157,"line":180},[155,1374,168],{"class":167},[155,1376,1377],{"class":171}," pandas ",[155,1379,907],{"class":167},[155,1381,1382],{"class":171}," pd\n",[155,1384,1385,1387],{"class":157,"line":194},[155,1386,168],{"class":167},[155,1388,172],{"class":171},[155,1390,1391,1393,1395,1397],{"class":157,"line":200},[155,1392,183],{"class":167},[155,1394,939],{"class":171},[155,1396,168],{"class":167},[155,1398,1399],{"class":171}," Dataset\n",[155,1401,1402,1404,1406,1408],{"class":157,"line":213},[155,1403,183],{"class":167},[155,1405,892],{"class":171},[155,1407,168],{"class":167},[155,1409,897],{"class":171},[155,1411,1412,1414,1416,1418],{"class":157,"line":220},[155,1413,183],{"class":167},[155,1415,922],{"class":171},[155,1417,168],{"class":167},[155,1419,927],{"class":171},[155,1421,1422,1424,1426,1428],{"class":157,"line":245},[155,1423,168],{"class":167},[155,1425,939],{"class":171},[155,1427,907],{"class":167},[155,1429,944],{"class":171},[155,1431,1432,1434,1436,1438],{"class":157,"line":251},[155,1433,168],{"class":167},[155,1435,956],{"class":171},[155,1437,907],{"class":167},[155,1439,961],{"class":171},[155,1441,1442],{"class":157,"line":257},[155,1443,1444],{"class":161},"# 导入模型\n",[155,1446,1447,1449,1452,1454],{"class":157,"line":270},[155,1448,183],{"class":167},[155,1450,1451],{"class":171}," model ",[155,1453,168],{"class":167},[155,1455,1456],{"class":171}," LeNet\n",[155,1458,1459,1461,1463,1465],{"class":157,"line":276},[155,1460,183],{"class":167},[155,1462,186],{"class":171},[155,1464,168],{"class":167},[155,1466,191],{"class":171},[155,1468,1469],{"class":157,"line":297},[155,1470,217],{"emptyLinePlaceholder":216},[155,1472,1473],{"class":157,"line":302},[155,1474,217],{"emptyLinePlaceholder":216},[155,1476,1477],{"class":157,"line":308},[155,1478,1479],{"class":161},"# 处理训练集与验证集函数--->划分数据集\n",[155,1481,1482,1485,1488],{"class":157,"line":366},[155,1483,1484],{"class":167},"def",[155,1486,1487],{"class":226}," train_val_data_process",[155,1489,1490],{"class":171},"():\n",[155,1492,1493,1496,1498,1500,1502],{"class":157,"line":379},[155,1494,1495],{"class":171},"    train_data",[155,1497,317],{"class":167},[155,1499,979],{"class":171},[155,1501,987],{"class":732},[155,1503,990],{"class":171},[155,1505,1506,1509,1511,1513],{"class":157,"line":385},[155,1507,1508],{"class":323},"                            train",[155,1510,317],{"class":167},[155,1512,1000],{"class":263},[155,1514,990],{"class":171},[155,1516,1517,1520,1522,1524,1526,1528,1530],{"class":157,"line":415},[155,1518,1519],{"class":323},"                            transform",[155,1521,317],{"class":167},[155,1523,1017],{"class":171},[155,1525,1020],{"class":323},[155,1527,317],{"class":167},[155,1529,832],{"class":263},[155,1531,1028],{"class":171},[155,1533,1534,1537,1539,1541],{"class":157,"line":452},[155,1535,1536],{"class":323},"                            download",[155,1538,317],{"class":167},[155,1540,1000],{"class":263},[155,1542,363],{"class":171},[155,1544,1545,1548,1550,1553,1556,1558,1561,1564,1566,1569,1571,1573,1576,1578,1580],{"class":157,"line":480},[155,1546,1547],{"class":171},"    train_data,val_data",[155,1549,317],{"class":167},[155,1551,1552],{"class":171},"Data.random_split(train_data,[",[155,1554,1555],{"class":263},"round",[155,1557,230],{"class":171},[155,1559,1560],{"class":263},"0.8",[155,1562,1563],{"class":167},"*",[155,1565,1253],{"class":263},[155,1567,1568],{"class":171},"(train_data)),",[155,1570,1555],{"class":263},[155,1572,230],{"class":171},[155,1574,1575],{"class":263},"0.2",[155,1577,1563],{"class":167},[155,1579,1253],{"class":263},[155,1581,1582],{"class":171},"(train_data))])\n",[155,1584,1585,1588,1590,1593,1595,1597],{"class":157,"line":486},[155,1586,1587],{"class":171},"    train_dataloader ",[155,1589,317],{"class":167},[155,1591,1592],{"class":171}," Data.DataLoader(",[155,1594,1061],{"class":323},[155,1596,317],{"class":167},[155,1598,1066],{"class":171},[155,1600,1601,1604,1606,1609],{"class":157,"line":499},[155,1602,1603],{"class":323},"                                       batch_size",[155,1605,317],{"class":167},[155,1607,1608],{"class":263},"128",[155,1610,990],{"class":171},[155,1612,1613,1616,1618,1620],{"class":157,"line":505},[155,1614,1615],{"class":323},"                                       shuffle",[155,1617,317],{"class":167},[155,1619,1000],{"class":263},[155,1621,990],{"class":171},[155,1623,1624],{"class":157,"line":528},[155,1625,1626],{"class":161},"                                       # 规定8个进程\n",[155,1628,1629,1632,1634,1637],{"class":157,"line":549},[155,1630,1631],{"class":323},"                                       num_workers",[155,1633,317],{"class":167},[155,1635,1636],{"class":263},"8",[155,1638,363],{"class":171},[155,1640,1641,1644,1646,1648,1650,1652],{"class":157,"line":570},[155,1642,1643],{"class":171},"    val_dataloader",[155,1645,317],{"class":167},[155,1647,1058],{"class":171},[155,1649,1061],{"class":323},[155,1651,317],{"class":167},[155,1653,1654],{"class":171},"val_data,\n",[155,1656,1657,1660,1662,1664],{"class":157,"line":575},[155,1658,1659],{"class":323},"                                   batch_size",[155,1661,317],{"class":167},[155,1663,1608],{"class":263},[155,1665,990],{"class":171},[155,1667,1668,1671,1673,1675],{"class":157,"line":581},[155,1669,1670],{"class":323},"                                   shuffle",[155,1672,317],{"class":167},[155,1674,1000],{"class":263},[155,1676,990],{"class":171},[155,1678,1679,1682,1684,1686],{"class":157,"line":592},[155,1680,1681],{"class":323},"                                   num_workers",[155,1683,317],{"class":167},[155,1685,1636],{"class":263},[155,1687,363],{"class":171},[155,1689,1690,1693],{"class":157,"line":610},[155,1691,1692],{"class":167},"    return",[155,1694,1695],{"class":171}," train_dataloader,val_dataloader\n",[155,1697,1698],{"class":157,"line":622},[155,1699,217],{"emptyLinePlaceholder":216},[155,1701,1702],{"class":157,"line":638},[155,1703,1704],{"class":161},"# 验证是否出错\n",[155,1706,1707],{"class":157,"line":650},[155,1708,1709],{"class":161},"# train_val_data_process()\n",[155,1711,1712],{"class":157,"line":662},[155,1713,217],{"emptyLinePlaceholder":216},[155,1715,1716],{"class":157,"line":678},[155,1717,1718],{"class":161},"# 定义模型训练函数\n",[155,1720,1721,1723,1726],{"class":157,"line":694},[155,1722,1484],{"class":167},[155,1724,1725],{"class":226}," train_model_process",[155,1727,1728],{"class":171},"(model,train_dataloader,val_dataloader,num_epochs):\n",[155,1730,1731,1733,1735,1737,1739,1741,1743,1745,1748],{"class":157,"line":706},[155,1732,748],{"class":171},[155,1734,317],{"class":167},[155,1736,753],{"class":171},[155,1738,756],{"class":732},[155,1740,759],{"class":167},[155,1742,762],{"class":171},[155,1744,765],{"class":167},[155,1746,1747],{"class":732}," 'cpu'",[155,1749,363],{"class":171},[155,1751,1752],{"class":157,"line":715},[155,1753,217],{"emptyLinePlaceholder":216},[155,1755,1756],{"class":157,"line":720},[155,1757,217],{"emptyLinePlaceholder":216},[155,1759,1760],{"class":157,"line":739},[155,1761,1762],{"class":161},"    # 定义优化器\n",[155,1764,1765],{"class":157,"line":745},[155,1766,1767],{"class":161},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[155,1769,1770],{"class":157,"line":773},[155,1771,1772],{"class":161},"    # lr为学习率\n",[155,1774,1775,1778,1780,1783,1786,1788,1791],{"class":157,"line":779},[155,1776,1777],{"class":171},"    optimizer",[155,1779,317],{"class":167},[155,1781,1782],{"class":171},"torch.optim.Adam(model.parameters(),",[155,1784,1785],{"class":323},"lr",[155,1787,317],{"class":167},[155,1789,1790],{"class":263},"0.001",[155,1792,363],{"class":171},[155,1794,1795],{"class":157,"line":785},[155,1796,217],{"emptyLinePlaceholder":216},[155,1798,1799],{"class":157,"line":791},[155,1800,1801],{"class":161},"    # 定义损失函数使用交叉熵损失函数\n",[155,1803,1804,1807,1809],{"class":157,"line":796},[155,1805,1806],{"class":171},"    criterion",[155,1808,317],{"class":167},[155,1810,1811],{"class":171},"nn.CrossEntropyLoss()\n",[155,1813,1814],{"class":157,"line":802},[155,1815,217],{"emptyLinePlaceholder":216},[155,1817,1818],{"class":157,"line":808},[155,1819,1820],{"class":161},"    # 将模型放到GPU中进行训练\n",[155,1822,1823,1825,1827],{"class":157,"line":819},[155,1824,811],{"class":171},[155,1826,317],{"class":167},[155,1828,1829],{"class":171},"model.to(device)\n",[155,1831,1833],{"class":157,"line":1832},52,[155,1834,1835],{"class":161},"    # 复制当前模型的参数\n",[155,1837,1839],{"class":157,"line":1838},53,[155,1840,1841],{"class":161},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[155,1843,1845],{"class":157,"line":1844},54,[155,1846,1847],{"class":161},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[155,1849,1851,1854,1856],{"class":157,"line":1850},55,[155,1852,1853],{"class":171},"    best_model_wts",[155,1855,317],{"class":167},[155,1857,1858],{"class":171},"copy.deepcopy(model.state_dict())\n",[155,1860,1862],{"class":157,"line":1861},56,[155,1863,217],{"emptyLinePlaceholder":216},[155,1865,1867],{"class":157,"line":1866},57,[155,1868,217],{"emptyLinePlaceholder":216},[155,1870,1872],{"class":157,"line":1871},58,[155,1873,1874],{"class":161},"    # 初始化参数\n",[155,1876,1878],{"class":157,"line":1877},59,[155,1879,1880],{"class":161},"    # 最高准确度\n",[155,1882,1884,1887,1889],{"class":157,"line":1883},60,[155,1885,1886],{"class":171},"    best_acc",[155,1888,317],{"class":167},[155,1890,1891],{"class":263},"0.0\n",[155,1893,1895],{"class":157,"line":1894},61,[155,1896,1897],{"class":161},"    # 训练集损失列表\n",[155,1899,1901,1904,1906],{"class":157,"line":1900},62,[155,1902,1903],{"class":171},"    train_loss_all",[155,1905,317],{"class":167},[155,1907,1908],{"class":171},"[]\n",[155,1910,1912],{"class":157,"line":1911},63,[155,1913,1914],{"class":161},"    # 验证集函数列表\n",[155,1916,1918,1921,1923],{"class":157,"line":1917},64,[155,1919,1920],{"class":171},"    val_loss_all",[155,1922,317],{"class":167},[155,1924,1908],{"class":171},[155,1926,1928],{"class":157,"line":1927},65,[155,1929,1930],{"class":161},"    # 训练集准确度列表\n",[155,1932,1934,1937,1939],{"class":157,"line":1933},66,[155,1935,1936],{"class":171},"    train_acc_all",[155,1938,317],{"class":167},[155,1940,1908],{"class":171},[155,1942,1944],{"class":157,"line":1943},67,[155,1945,1946],{"class":161},"    # 验证集准确度列表\n",[155,1948,1950,1953,1955],{"class":157,"line":1949},68,[155,1951,1952],{"class":171},"    val_acc_all",[155,1954,317],{"class":167},[155,1956,1908],{"class":171},[155,1958,1960],{"class":157,"line":1959},69,[155,1961,217],{"emptyLinePlaceholder":216},[155,1963,1965],{"class":157,"line":1964},70,[155,1966,1967],{"class":161},"    # 保存当前时间--->方便看每轮训练的时间\n",[155,1969,1971,1974,1976],{"class":157,"line":1970},71,[155,1972,1973],{"class":171},"    since",[155,1975,317],{"class":167},[155,1977,1978],{"class":171},"time.time()\n",[155,1980,1982],{"class":157,"line":1981},72,[155,1983,217],{"emptyLinePlaceholder":216},[155,1985,1987],{"class":157,"line":1986},73,[155,1988,217],{"emptyLinePlaceholder":216},[155,1990,1992],{"class":157,"line":1991},74,[155,1993,1994],{"class":161},"    # 准备工作完成--->开始训练模型\n",[155,1996,1998,2001,2004,2006,2009],{"class":157,"line":1997},75,[155,1999,2000],{"class":167},"    for",[155,2002,2003],{"class":171}," epoch ",[155,2005,1131],{"class":167},[155,2007,2008],{"class":263}," range",[155,2010,2011],{"class":171},"(num_epochs):\n",[155,2013,2015,2018,2020,2023,2026,2029,2031,2034,2037,2040,2042],{"class":157,"line":2014},76,[155,2016,2017],{"class":263},"        print",[155,2019,230],{"class":171},[155,2021,2022],{"class":732},"\"Epoch ",[155,2024,2025],{"class":263},"{}",[155,2027,2028],{"class":732},"\u002F",[155,2030,2025],{"class":263},[155,2032,2033],{"class":732},"\"",[155,2035,2036],{"class":171},".format(epoch,num_epochs",[155,2038,2039],{"class":167},"-",[155,2041,329],{"class":263},[155,2043,1238],{"class":171},[155,2045,2047,2049,2051,2054,2056,2058],{"class":157,"line":2046},77,[155,2048,2017],{"class":263},[155,2050,230],{"class":171},[155,2052,2053],{"class":732},"\"-\"",[155,2055,1563],{"class":167},[155,2057,565],{"class":263},[155,2059,363],{"class":171},[155,2061,2063],{"class":157,"line":2062},78,[155,2064,217],{"emptyLinePlaceholder":216},[155,2066,2068],{"class":157,"line":2067},79,[155,2069,2070],{"class":161},"        # 初始化参数\n",[155,2072,2074],{"class":157,"line":2073},80,[155,2075,2076],{"class":161},"        # 训练集损失函数\n",[155,2078,2080,2083,2085],{"class":157,"line":2079},81,[155,2081,2082],{"class":171},"        train_loss",[155,2084,317],{"class":167},[155,2086,1891],{"class":263},[155,2088,2090],{"class":157,"line":2089},82,[155,2091,2092],{"class":161},"        # 训练集准确度\n",[155,2094,2096,2099,2101],{"class":157,"line":2095},83,[155,2097,2098],{"class":171},"        train_corrects",[155,2100,317],{"class":167},[155,2102,2103],{"class":263},"0\n",[155,2105,2107],{"class":157,"line":2106},84,[155,2108,2109],{"class":161},"        # 验证集损失函数\n",[155,2111,2113,2116,2118],{"class":157,"line":2112},85,[155,2114,2115],{"class":171},"        val_loss",[155,2117,317],{"class":167},[155,2119,1891],{"class":263},[155,2121,2123],{"class":157,"line":2122},86,[155,2124,2125],{"class":161},"        # 验证集准确度\n",[155,2127,2129,2132,2134],{"class":157,"line":2128},87,[155,2130,2131],{"class":171},"        val_corrects",[155,2133,317],{"class":167},[155,2135,2103],{"class":263},[155,2137,2139],{"class":157,"line":2138},88,[155,2140,2141],{"class":161},"        # 训练集样本数量\n",[155,2143,2145,2148,2150],{"class":157,"line":2144},89,[155,2146,2147],{"class":171},"        train_num",[155,2149,317],{"class":167},[155,2151,2103],{"class":263},[155,2153,2155],{"class":157,"line":2154},90,[155,2156,2157],{"class":161},"        # 验证集样本数量\n",[155,2159,2161,2164,2166],{"class":157,"line":2160},91,[155,2162,2163],{"class":171},"        val_num",[155,2165,317],{"class":167},[155,2167,2103],{"class":263},[155,2169,2171],{"class":157,"line":2170},92,[155,2172,2173],{"class":161},"        # 将数据放到设备,并开始训练\n",[155,2175,2177,2180,2182,2184,2186],{"class":157,"line":2176},93,[155,2178,2179],{"class":167},"        for",[155,2181,1128],{"class":171},[155,2183,1131],{"class":167},[155,2185,1134],{"class":263},[155,2187,2188],{"class":171},"(train_dataloader):\n",[155,2190,2192],{"class":157,"line":2191},94,[155,2193,2194],{"class":161},"            # 将特征放入到训练设备\n",[155,2196,2198,2201,2203],{"class":157,"line":2197},95,[155,2199,2200],{"class":171},"            b_x",[155,2202,317],{"class":167},[155,2204,2205],{"class":171},"b_x.to(device)\n",[155,2207,2209],{"class":157,"line":2208},96,[155,2210,2211],{"class":161},"            # 将标签放入到训练设备当中\n",[155,2213,2215,2218,2220],{"class":157,"line":2214},97,[155,2216,2217],{"class":171},"            b_y",[155,2219,317],{"class":167},[155,2221,2222],{"class":171},"b_y.to(device)\n",[155,2224,2226],{"class":157,"line":2225},98,[155,2227,2228],{"class":161},"            # 设置模型为训练模式\n",[155,2230,2232],{"class":157,"line":2231},99,[155,2233,2234],{"class":171},"            model.train()\n",[155,2236,2238],{"class":157,"line":2237},100,[155,2239,2240],{"class":161},"            # 将数据放到模型当中,开始前向传播\n",[155,2242,2244],{"class":157,"line":2243},101,[155,2245,2246],{"class":161},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[155,2248,2250,2253,2255],{"class":157,"line":2249},102,[155,2251,2252],{"class":171},"            output",[155,2254,317],{"class":167},[155,2256,2257],{"class":171},"model(b_x)\n",[155,2259,2261],{"class":157,"line":2260},103,[155,2262,2263],{"class":161},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[155,2265,2267,2270,2272,2275,2278,2280,2282],{"class":157,"line":2266},104,[155,2268,2269],{"class":171},"            pre_lab",[155,2271,317],{"class":167},[155,2273,2274],{"class":171},"torch.argmax(output,",[155,2276,2277],{"class":323},"dim",[155,2279,317],{"class":167},[155,2281,329],{"class":263},[155,2283,363],{"class":171},[155,2285,2287],{"class":157,"line":2286},105,[155,2288,2289],{"class":161},"            # 计算每一个batch的损失函数\n",[155,2291,2293,2296,2298],{"class":157,"line":2292},106,[155,2294,2295],{"class":171},"            loss",[155,2297,317],{"class":167},[155,2299,2300],{"class":171},"criterion(output,b_y)\n",[155,2302,2304],{"class":157,"line":2303},107,[155,2305,2306],{"class":161},"            # 将梯度初始化为0\n",[155,2308,2310],{"class":157,"line":2309},108,[155,2311,2312],{"class":171},"            optimizer.zero_grad()\n",[155,2314,2316],{"class":157,"line":2315},109,[155,2317,2318],{"class":161},"            # 梯度置为0后再进行反向传播\n",[155,2320,2322],{"class":157,"line":2321},110,[155,2323,2324],{"class":171},"            loss.backward()\n",[155,2326,2328],{"class":157,"line":2327},111,[155,2329,2330],{"class":161},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[155,2332,2334],{"class":157,"line":2333},112,[155,2335,2336],{"class":171},"            optimizer.step()\n",[155,2338,2340],{"class":157,"line":2339},113,[155,2341,2342],{"class":161},"            # loss.item()指的是batch的平均损失\n",[155,2344,2346,2349,2352,2355,2357,2360,2362],{"class":157,"line":2345},114,[155,2347,2348],{"class":171},"            train_loss",[155,2350,2351],{"class":167},"+=",[155,2353,2354],{"class":171},"loss.item()",[155,2356,1563],{"class":167},[155,2358,2359],{"class":171},"b_x.size(",[155,2361,1109],{"class":263},[155,2363,363],{"class":171},[155,2365,2367],{"class":157,"line":2366},115,[155,2368,2369],{"class":161},"            # 计算每个批次中正确预测的数量\n",[155,2371,2373,2376,2378,2381,2383],{"class":157,"line":2372},116,[155,2374,2375],{"class":171},"            train_corrects",[155,2377,2351],{"class":167},[155,2379,2380],{"class":171},"torch.sum(pre_lab",[155,2382,729],{"class":167},[155,2384,2385],{"class":171},"b_y.data)\n",[155,2387,2389],{"class":157,"line":2388},117,[155,2390,2391],{"class":161},"            # 计算目前为止一共处理了多少样本\n",[155,2393,2395,2398,2400,2402,2404],{"class":157,"line":2394},118,[155,2396,2397],{"class":171},"            train_num",[155,2399,2351],{"class":167},[155,2401,2359],{"class":171},[155,2403,1109],{"class":263},[155,2405,363],{"class":171},[155,2407,2409],{"class":157,"line":2408},119,[155,2410,2411],{"class":161},"        # 验证数据\n",[155,2413,2415,2417,2420,2422,2424],{"class":157,"line":2414},120,[155,2416,2179],{"class":167},[155,2418,2419],{"class":171}," step ,(b_x,b_y) ",[155,2421,1131],{"class":167},[155,2423,1134],{"class":263},[155,2425,2426],{"class":171},"(val_dataloader):\n",[155,2428,2430],{"class":157,"line":2429},121,[155,2431,2432],{"class":161},"            # 将特征放到验证设备当中\n",[155,2434,2436,2438,2440],{"class":157,"line":2435},122,[155,2437,2200],{"class":171},[155,2439,317],{"class":167},[155,2441,2205],{"class":171},[155,2443,2445],{"class":157,"line":2444},123,[155,2446,2447],{"class":161},"            # 将标签放到放到训练设备当中\n",[155,2449,2451,2453,2455],{"class":157,"line":2450},124,[155,2452,2217],{"class":171},[155,2454,317],{"class":167},[155,2456,2222],{"class":171},[155,2458,2460],{"class":157,"line":2459},125,[155,2461,2462],{"class":161},"            # 开启验证模式，设置模型为评估模式\n",[155,2464,2466],{"class":157,"line":2465},126,[155,2467,2468],{"class":171},"            model.eval()\n",[155,2470,2472,2475],{"class":157,"line":2471},127,[155,2473,2474],{"class":167},"            with",[155,2476,2477],{"class":171}," torch.no_grad():\n",[155,2479,2481],{"class":157,"line":2480},128,[155,2482,2483],{"class":161},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[155,2485,2487,2490,2492],{"class":157,"line":2486},129,[155,2488,2489],{"class":171},"                output ",[155,2491,317],{"class":167},[155,2493,2494],{"class":171}," model(b_x)\n",[155,2496,2498],{"class":157,"line":2497},130,[155,2499,2500],{"class":161},"                # 查找每一行中最大值对应的下标\n",[155,2502,2504,2507,2509,2512,2514,2516,2518],{"class":157,"line":2503},131,[155,2505,2506],{"class":171},"                pre_lab ",[155,2508,317],{"class":167},[155,2510,2511],{"class":171}," torch.argmax(output, ",[155,2513,2277],{"class":323},[155,2515,317],{"class":167},[155,2517,329],{"class":263},[155,2519,363],{"class":171},[155,2521,2523],{"class":157,"line":2522},132,[155,2524,2525],{"class":161},"                # 计算验证集上的当前 batch 损失\n",[155,2527,2529,2532,2534],{"class":157,"line":2528},133,[155,2530,2531],{"class":171},"                val_batch_loss ",[155,2533,317],{"class":167},[155,2535,2536],{"class":171}," criterion(output, b_y)\n",[155,2538,2540],{"class":157,"line":2539},134,[155,2541,2542],{"class":161},"                # 对损失函数进行累加（按样本数加权）\n",[155,2544,2546,2549,2551,2554,2556,2559,2561],{"class":157,"line":2545},135,[155,2547,2548],{"class":171},"                val_loss ",[155,2550,2351],{"class":167},[155,2552,2553],{"class":171}," val_batch_loss.item() ",[155,2555,1563],{"class":167},[155,2557,2558],{"class":171}," b_x.size(",[155,2560,1109],{"class":263},[155,2562,363],{"class":171},[155,2564,2566,2569,2571,2574,2576],{"class":157,"line":2565},136,[155,2567,2568],{"class":171},"                val_corrects ",[155,2570,2351],{"class":167},[155,2572,2573],{"class":171}," torch.sum(pre_lab ",[155,2575,729],{"class":167},[155,2577,2578],{"class":171}," b_y.data)\n",[155,2580,2582],{"class":157,"line":2581},137,[155,2583,2584],{"class":161},"                # 当前用于验证的样本数量\n",[155,2586,2588,2591,2593,2595,2597],{"class":157,"line":2587},138,[155,2589,2590],{"class":171},"            val_num ",[155,2592,2351],{"class":167},[155,2594,2558],{"class":171},[155,2596,1109],{"class":263},[155,2598,363],{"class":171},[155,2600,2602],{"class":157,"line":2601},139,[155,2603,2604],{"class":161},"        # 计算并保存每一次迭代的loss值和准确率\n",[155,2606,2608],{"class":157,"line":2607},140,[155,2609,2610],{"class":161},"        # 计算并保存训练集的loss值\n",[155,2612,2614,2617,2619],{"class":157,"line":2613},141,[155,2615,2616],{"class":171},"        train_loss_all.append(train_loss",[155,2618,2028],{"class":167},[155,2620,2621],{"class":171},"train_num)\n",[155,2623,2625],{"class":157,"line":2624},142,[155,2626,2627],{"class":161},"        # 取双精度\n",[155,2629,2631],{"class":157,"line":2630},143,[155,2632,2633],{"class":161},"        # 计算并保存训练集的准确率\n",[155,2635,2637,2640,2642],{"class":157,"line":2636},144,[155,2638,2639],{"class":171},"        train_acc_all.append(train_corrects.double().item()",[155,2641,2028],{"class":167},[155,2643,2621],{"class":171},[155,2645,2647],{"class":157,"line":2646},145,[155,2648,2649],{"class":161},"        # 计算并保存验证集的loss值\n",[155,2651,2653,2656,2658],{"class":157,"line":2652},146,[155,2654,2655],{"class":171},"        val_loss_all.append(val_loss",[155,2657,2028],{"class":167},[155,2659,2660],{"class":171},"val_num)\n",[155,2662,2664],{"class":157,"line":2663},147,[155,2665,2666],{"class":161},"        # 计算并保存验证集的准确率\n",[155,2668,2670,2673,2675],{"class":157,"line":2669},148,[155,2671,2672],{"class":171},"        val_acc_all.append(val_corrects.double().item()",[155,2674,2028],{"class":167},[155,2676,2660],{"class":171},[155,2678,2680],{"class":157,"line":2679},149,[155,2681,217],{"emptyLinePlaceholder":216},[155,2683,2685],{"class":157,"line":2684},150,[155,2686,2687],{"class":161},"        # 打印训练一轮的loss值和准确率\n",[155,2689,2691,2693,2695,2698,2700,2703,2706,2709,2712,2715,2717,2719,2721,2723,2726,2728,2730,2733,2735,2737],{"class":157,"line":2690},151,[155,2692,2017],{"class":263},[155,2694,230],{"class":171},[155,2696,2697],{"class":732},"'",[155,2699,2025],{"class":263},[155,2701,2702],{"class":732},"train loss:",[155,2704,2705],{"class":263},"{",[155,2707,2708],{"class":167},":.4f",[155,2710,2711],{"class":263},"}",[155,2713,2714],{"class":732}," train acc:",[155,2716,2705],{"class":263},[155,2718,2708],{"class":167},[155,2720,2711],{"class":263},[155,2722,2697],{"class":732},[155,2724,2725],{"class":171},".format(epoch,train_loss_all[",[155,2727,2039],{"class":167},[155,2729,329],{"class":263},[155,2731,2732],{"class":171},"],train_acc_all[",[155,2734,2039],{"class":167},[155,2736,329],{"class":263},[155,2738,2739],{"class":171},"]))\n",[155,2741,2743,2745,2747,2749,2751,2754,2756,2758,2760,2763,2765,2767,2769,2771,2774,2776,2778,2781,2783,2785],{"class":157,"line":2742},152,[155,2744,2017],{"class":263},[155,2746,230],{"class":171},[155,2748,2697],{"class":732},[155,2750,2025],{"class":263},[155,2752,2753],{"class":732},"val loss:",[155,2755,2705],{"class":263},[155,2757,2708],{"class":167},[155,2759,2711],{"class":263},[155,2761,2762],{"class":732}," val acc:",[155,2764,2705],{"class":263},[155,2766,2708],{"class":167},[155,2768,2711],{"class":263},[155,2770,2697],{"class":732},[155,2772,2773],{"class":171},".format(epoch,val_loss_all[",[155,2775,2039],{"class":167},[155,2777,329],{"class":263},[155,2779,2780],{"class":171},"],val_acc_all[",[155,2782,2039],{"class":167},[155,2784,329],{"class":263},[155,2786,2739],{"class":171},[155,2788,2790],{"class":157,"line":2789},153,[155,2791,217],{"emptyLinePlaceholder":216},[155,2793,2795],{"class":157,"line":2794},154,[155,2796,2797],{"class":161},"        # 判断准确度--->保存最优模型\n",[155,2799,2801,2804,2807,2809,2811,2814,2816],{"class":157,"line":2800},155,[155,2802,2803],{"class":167},"        if",[155,2805,2806],{"class":171}," val_acc_all[",[155,2808,2039],{"class":167},[155,2810,329],{"class":263},[155,2812,2813],{"class":171},"]",[155,2815,1148],{"class":167},[155,2817,2818],{"class":171},"best_acc:\n",[155,2820,2822],{"class":157,"line":2821},156,[155,2823,2824],{"class":161},"            # 保存当前模型准确度\n",[155,2826,2828,2831,2834,2836,2839,2841,2843],{"class":157,"line":2827},157,[155,2829,2830],{"class":171},"            best_acc:",[155,2832,2833],{"class":263},"float",[155,2835,317],{"class":167},[155,2837,2838],{"class":171},"val_acc_all[",[155,2840,2039],{"class":167},[155,2842,329],{"class":263},[155,2844,2845],{"class":171},"]\n",[155,2847,2849],{"class":157,"line":2848},158,[155,2850,2851],{"class":161},"            # 保存当前的准确度\n",[155,2853,2855],{"class":157,"line":2854},159,[155,2856,2857],{"class":161},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[155,2859,2861,2864,2866],{"class":157,"line":2860},160,[155,2862,2863],{"class":171},"            best_model_wts",[155,2865,317],{"class":167},[155,2867,1858],{"class":171},[155,2869,2871],{"class":157,"line":2870},161,[155,2872,217],{"emptyLinePlaceholder":216},[155,2874,2876],{"class":157,"line":2875},162,[155,2877,2878],{"class":161},"        # 计算耗时\n",[155,2880,2882,2885,2887,2890,2892],{"class":157,"line":2881},163,[155,2883,2884],{"class":171},"        time_use",[155,2886,317],{"class":167},[155,2888,2889],{"class":171},"time.time()",[155,2891,2039],{"class":167},[155,2893,2894],{"class":171},"since\n",[155,2896,2898,2900,2902,2905,2907,2910,2912,2915,2917,2919,2921,2924,2927,2930,2933,2936,2939,2941],{"class":157,"line":2897},164,[155,2899,2017],{"class":263},[155,2901,230],{"class":171},[155,2903,2904],{"class":732},"'训练和验证耗费的时间",[155,2906,2705],{"class":263},[155,2908,2909],{"class":167},":.0f",[155,2911,2711],{"class":263},[155,2913,2914],{"class":732},"m",[155,2916,2705],{"class":263},[155,2918,2909],{"class":167},[155,2920,2711],{"class":263},[155,2922,2923],{"class":732},"s'",[155,2925,2926],{"class":171},".format(time_use",[155,2928,2929],{"class":167},"\u002F\u002F",[155,2931,2932],{"class":263},"60",[155,2934,2935],{"class":171},",time_use",[155,2937,2938],{"class":167},"%",[155,2940,2932],{"class":263},[155,2942,1238],{"class":171},[155,2944,2946],{"class":157,"line":2945},165,[155,2947,2948],{"class":161},"    # 选择最优参数\n",[155,2950,2952],{"class":157,"line":2951},166,[155,2953,2954],{"class":161},"    # 加载最高准确率下的模型参数\n",[155,2956,2958],{"class":157,"line":2957},167,[155,2959,2960],{"class":161},"    # model.load_state_dict(best_model_wts)\n",[155,2962,2964,2967,2970],{"class":157,"line":2963},168,[155,2965,2966],{"class":171},"    torch.save(model.state_dict(best_model_wts), ",[155,2968,2969],{"class":732},"'.\u002Fbest_model.pth'",[155,2971,363],{"class":171},[155,2973,2975],{"class":157,"line":2974},169,[155,2976,2977],{"class":161},"    # 或者写成\n",[155,2979,2981],{"class":157,"line":2980},170,[155,2982,2983],{"class":161},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[155,2985,2987],{"class":157,"line":2986},171,[155,2988,2989],{"class":161},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[155,2991,2993,2996,2998,3001,3004,3006],{"class":157,"line":2992},172,[155,2994,2995],{"class":171},"    train_process",[155,2997,317],{"class":167},[155,2999,3000],{"class":171},"pd.DataFrame(",[155,3002,3003],{"class":323},"data",[155,3005,317],{"class":167},[155,3007,3008],{"class":171},"{\n",[155,3010,3012,3015,3018,3021],{"class":157,"line":3011},173,[155,3013,3014],{"class":732},"        \"epoch\"",[155,3016,3017],{"class":171},":",[155,3019,3020],{"class":263},"range",[155,3022,3023],{"class":171},"(num_epochs),\n",[155,3025,3027,3030],{"class":157,"line":3026},174,[155,3028,3029],{"class":732},"        \"train_loss_all\"",[155,3031,3032],{"class":171},":train_loss_all,\n",[155,3034,3036,3039],{"class":157,"line":3035},175,[155,3037,3038],{"class":732},"        \"val_loss_all\"",[155,3040,3041],{"class":171},":val_loss_all,\n",[155,3043,3045,3048],{"class":157,"line":3044},176,[155,3046,3047],{"class":732},"        \"train_acc_all\"",[155,3049,3050],{"class":171},":train_acc_all,\n",[155,3052,3054,3057],{"class":157,"line":3053},177,[155,3055,3056],{"class":732},"        \"val_acc_all\"",[155,3058,3059],{"class":171},":val_acc_all\n",[155,3061,3063],{"class":157,"line":3062},178,[155,3064,3065],{"class":171},"    })\n",[155,3067,3069],{"class":157,"line":3068},179,[155,3070,3071],{"class":161},"    # 返回训练保存的过程\n",[155,3073,3075,3077],{"class":157,"line":3074},180,[155,3076,1692],{"class":167},[155,3078,3079],{"class":171}," train_process\n",[155,3081,3083],{"class":157,"line":3082},181,[155,3084,217],{"emptyLinePlaceholder":216},[155,3086,3088],{"class":157,"line":3087},182,[155,3089,3090],{"class":161},"# 将loss值和精度按照图片的形式展示出来\n",[155,3092,3094,3096,3099],{"class":157,"line":3093},183,[155,3095,1484],{"class":167},[155,3097,3098],{"class":226}," matplot_acc_loss",[155,3100,3101],{"class":171},"(train_process):\n",[155,3103,3105],{"class":157,"line":3104},184,[155,3106,3107],{"class":161},"    # 设置图的大小\n",[155,3109,3111,3114,3116,3118,3120,3122,3124,3126],{"class":157,"line":3110},185,[155,3112,3113],{"class":171},"    plt.figure(",[155,3115,1224],{"class":323},[155,3117,317],{"class":167},[155,3119,230],{"class":171},[155,3121,1231],{"class":263},[155,3123,332],{"class":171},[155,3125,1264],{"class":263},[155,3127,1238],{"class":171},[155,3129,3131],{"class":157,"line":3130},186,[155,3132,3133],{"class":161},"    # 设置图中有几张图\n",[155,3135,3137],{"class":157,"line":3136},187,[155,3138,3139],{"class":161},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[155,3141,3143],{"class":157,"line":3142},188,[155,3144,3145],{"class":161},"    # ①loss图\n",[155,3147,3149,3151,3153,3155,3157,3159,3161],{"class":157,"line":3148},189,[155,3150,1261],{"class":171},[155,3152,329],{"class":263},[155,3154,332],{"class":171},[155,3156,360],{"class":263},[155,3158,332],{"class":171},[155,3160,329],{"class":263},[155,3162,363],{"class":171},[155,3164,3166],{"class":157,"line":3165},190,[155,3167,3168],{"class":161},"    # 补充:\n",[155,3170,3172],{"class":157,"line":3171},191,[155,3173,3174],{"class":161},"    # plt.subplot(nrows, ncols, index)\n",[155,3176,3178],{"class":157,"line":3177},192,[155,3179,3180],{"class":161},"    # nrows：行数\n",[155,3182,3184],{"class":157,"line":3183},193,[155,3185,3186],{"class":161},"    # ncols：列数\n",[155,3188,3190],{"class":157,"line":3189},194,[155,3191,3192],{"class":161},"    # index：目前选中第几个子图（从1开始）\n",[155,3194,3196,3199,3202,3205,3208,3210,3213,3215,3218],{"class":157,"line":3195},195,[155,3197,3198],{"class":171},"    plt.plot(train_process[",[155,3200,3201],{"class":732},"\"epoch\"",[155,3203,3204],{"class":171},"],train_process.train_loss_all,",[155,3206,3207],{"class":732},"'ro-'",[155,3209,332],{"class":171},[155,3211,3212],{"class":323},"label",[155,3214,317],{"class":167},[155,3216,3217],{"class":732},"'train loss'",[155,3219,363],{"class":171},[155,3221,3223,3225,3227,3230,3233,3235,3237,3239,3242],{"class":157,"line":3222},196,[155,3224,3198],{"class":171},[155,3226,3201],{"class":732},[155,3228,3229],{"class":171},"],train_process.val_loss_all,",[155,3231,3232],{"class":732},"'bs--'",[155,3234,332],{"class":171},[155,3236,3212],{"class":323},[155,3238,317],{"class":167},[155,3240,3241],{"class":732},"'val loss'",[155,3243,363],{"class":171},[155,3245,3247],{"class":157,"line":3246},197,[155,3248,3249],{"class":161},"    # 添加一个图例\n",[155,3251,3253],{"class":157,"line":3252},198,[155,3254,3255],{"class":171},"    plt.legend()\n",[155,3257,3259],{"class":157,"line":3258},199,[155,3260,3261],{"class":161},"    # 给轴添加标签\n",[155,3263,3265,3268,3271],{"class":157,"line":3264},200,[155,3266,3267],{"class":171},"    plt.xlabel(",[155,3269,3270],{"class":732},"'epoch'",[155,3272,363],{"class":171},[155,3274,3276,3279,3282],{"class":157,"line":3275},201,[155,3277,3278],{"class":171},"    plt.ylabel(",[155,3280,3281],{"class":732},"'loss'",[155,3283,363],{"class":171},[155,3285,3287],{"class":157,"line":3286},202,[155,3288,3289],{"class":161},"    # ②准确度图\n",[155,3291,3293,3295,3297,3299,3301,3303,3305],{"class":157,"line":3292},203,[155,3294,1261],{"class":171},[155,3296,329],{"class":263},[155,3298,332],{"class":171},[155,3300,360],{"class":263},[155,3302,332],{"class":171},[155,3304,360],{"class":263},[155,3306,363],{"class":171},[155,3308,3310,3312,3314,3317,3319,3321,3323,3325,3328],{"class":157,"line":3309},204,[155,3311,3198],{"class":171},[155,3313,3201],{"class":732},[155,3315,3316],{"class":171},"],train_process.train_acc_all,",[155,3318,3207],{"class":732},[155,3320,332],{"class":171},[155,3322,3212],{"class":323},[155,3324,317],{"class":167},[155,3326,3327],{"class":732},"'train acc'",[155,3329,363],{"class":171},[155,3331,3333,3335,3337,3340,3342,3344,3346,3348,3351],{"class":157,"line":3332},205,[155,3334,3198],{"class":171},[155,3336,3201],{"class":732},[155,3338,3339],{"class":171},"],train_process.val_acc_all,",[155,3341,3232],{"class":732},[155,3343,332],{"class":171},[155,3345,3212],{"class":323},[155,3347,317],{"class":167},[155,3349,3350],{"class":732},"'val acc'",[155,3352,363],{"class":171},[155,3354,3356],{"class":157,"line":3355},206,[155,3357,3358],{"class":161},"    # 添加图例\n",[155,3360,3362],{"class":157,"line":3361},207,[155,3363,3255],{"class":171},[155,3365,3367,3369,3371],{"class":157,"line":3366},208,[155,3368,3267],{"class":171},[155,3370,3201],{"class":732},[155,3372,363],{"class":171},[155,3374,3376,3378,3381],{"class":157,"line":3375},209,[155,3377,3278],{"class":171},[155,3379,3380],{"class":732},"\"acc\"",[155,3382,363],{"class":171},[155,3384,3386],{"class":157,"line":3385},210,[155,3387,3388],{"class":171},"    plt.show()\n",[155,3390,3392],{"class":157,"line":3391},211,[155,3393,217],{"emptyLinePlaceholder":216},[155,3395,3397],{"class":157,"line":3396},212,[155,3398,3399],{"class":161},"# 正式开始训练:\n",[155,3401,3403,3405,3407,3409,3411],{"class":157,"line":3402},213,[155,3404,723],{"class":167},[155,3406,726],{"class":263},[155,3408,729],{"class":167},[155,3410,733],{"class":732},[155,3412,736],{"class":171},[155,3414,3416],{"class":157,"line":3415},214,[155,3417,3418],{"class":161},"    # 将模型实例化\n",[155,3420,3422,3425,3427],{"class":157,"line":3421},215,[155,3423,3424],{"class":171},"    LeNet",[155,3426,317],{"class":167},[155,3428,3429],{"class":171},"LeNet()\n",[155,3431,3433,3436,3438],{"class":157,"line":3432},216,[155,3434,3435],{"class":171},"    train_dataloader,val_dataloader",[155,3437,317],{"class":167},[155,3439,3440],{"class":171},"train_val_data_process()\n",[155,3442,3444,3446,3448,3451,3454,3456,3459],{"class":157,"line":3443},217,[155,3445,2995],{"class":171},[155,3447,317],{"class":167},[155,3449,3450],{"class":171},"train_model_process(LeNet,train_dataloader,val_dataloader,",[155,3452,3453],{"class":323},"num_epochs",[155,3455,317],{"class":167},[155,3457,3458],{"class":263},"20",[155,3460,363],{"class":171},[155,3462,3464],{"class":157,"line":3463},218,[155,3465,3466],{"class":171},"    matplot_acc_loss(train_process)\n",[24,3468,3469],{},"画图的补充点学习：",[24,3471,3472],{},[37,3473],{"alt":39,"src":3474},"\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",[28,3476,3477],{"start":121},[31,3478,3479],{},"测试",[146,3481,3483],{"className":148,"code":3482,"language":150,"meta":39,"style":39},"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",[152,3484,3485,3491,3501,3513,3523,3528,3538,3548,3552,3557,3566,3583,3595,3612,3623,3639,3644,3655,3666,3677,3684,3688,3693,3703,3708,3725,3733,3737,3742,3751,3760,3764,3769,3774,3779,3786,3791,3803,3813,3823,3828,3832,3837,3846,3851,3867,3872,3877,3882,3896,3901,3915,3919,3924,3939,3944,3956,3960,3965,3977,3982,3990,3995,4000,4010,4015,4024,4029,4034,4038,4043,4048,4064,4072,4077,4082,4142,4148,4153,4164,4172,4180,4184,4189,4193,4198,4206,4211,4227,4232,4242,4252],{"__ignoreMap":39},[155,3486,3487,3489],{"class":157,"line":158},[155,3488,168],{"class":167},[155,3490,172],{"class":171},[155,3492,3493,3495,3497,3499],{"class":157,"line":46},[155,3494,168],{"class":167},[155,3496,939],{"class":171},[155,3498,907],{"class":167},[155,3500,944],{"class":171},[155,3502,3503,3505,3508,3510],{"class":157,"line":121},[155,3504,183],{"class":167},[155,3506,3507],{"class":171}," jupyter_client.consoleapp ",[155,3509,168],{"class":167},[155,3511,3512],{"class":171}," classes\n",[155,3514,3515,3517,3519,3521],{"class":157,"line":180},[155,3516,183],{"class":167},[155,3518,922],{"class":171},[155,3520,168],{"class":167},[155,3522,927],{"class":171},[155,3524,3525],{"class":157,"line":194},[155,3526,3527],{"class":161},"# 导入数据集\n",[155,3529,3530,3532,3534,3536],{"class":157,"line":200},[155,3531,183],{"class":167},[155,3533,892],{"class":171},[155,3535,168],{"class":167},[155,3537,897],{"class":171},[155,3539,3540,3542,3544,3546],{"class":157,"line":213},[155,3541,183],{"class":167},[155,3543,1451],{"class":171},[155,3545,168],{"class":167},[155,3547,1456],{"class":171},[155,3549,3550],{"class":157,"line":220},[155,3551,217],{"emptyLinePlaceholder":216},[155,3553,3554],{"class":157,"line":245},[155,3555,3556],{"class":161},"# 测试数据处理\n",[155,3558,3559,3561,3564],{"class":157,"line":251},[155,3560,1484],{"class":167},[155,3562,3563],{"class":226}," test_data_process",[155,3565,1490],{"class":171},[155,3567,3568,3571,3573,3575,3577,3579,3581],{"class":157,"line":257},[155,3569,3570],{"class":171},"    test_data",[155,3572,317],{"class":167},[155,3574,979],{"class":171},[155,3576,982],{"class":323},[155,3578,317],{"class":167},[155,3580,987],{"class":732},[155,3582,990],{"class":171},[155,3584,3585,3588,3590,3593],{"class":157,"line":270},[155,3586,3587],{"class":323},"                           train",[155,3589,317],{"class":167},[155,3591,3592],{"class":263},"False",[155,3594,990],{"class":171},[155,3596,3597,3600,3602,3604,3606,3608,3610],{"class":157,"line":276},[155,3598,3599],{"class":323},"                           transform",[155,3601,317],{"class":167},[155,3603,1017],{"class":171},[155,3605,1020],{"class":323},[155,3607,317],{"class":167},[155,3609,832],{"class":263},[155,3611,1028],{"class":171},[155,3613,3614,3617,3619,3621],{"class":157,"line":297},[155,3615,3616],{"class":323},"                           download",[155,3618,317],{"class":167},[155,3620,1000],{"class":263},[155,3622,363],{"class":171},[155,3624,3625,3628,3630,3632,3634,3636],{"class":157,"line":302},[155,3626,3627],{"class":171},"    test_dataloader",[155,3629,317],{"class":167},[155,3631,1058],{"class":171},[155,3633,1061],{"class":323},[155,3635,317],{"class":167},[155,3637,3638],{"class":171},"test_data,\n",[155,3640,3641],{"class":157,"line":308},[155,3642,3643],{"class":161},"                                    # 这里是一张一张进行测试\n",[155,3645,3646,3649,3651,3653],{"class":157,"line":366},[155,3647,3648],{"class":323},"                                    batch_size",[155,3650,317],{"class":167},[155,3652,329],{"class":263},[155,3654,990],{"class":171},[155,3656,3657,3660,3662,3664],{"class":157,"line":379},[155,3658,3659],{"class":323},"                                    shuffle",[155,3661,317],{"class":167},[155,3663,1000],{"class":263},[155,3665,990],{"class":171},[155,3667,3668,3671,3673,3675],{"class":157,"line":385},[155,3669,3670],{"class":323},"                                    num_workers",[155,3672,317],{"class":167},[155,3674,1109],{"class":263},[155,3676,363],{"class":171},[155,3678,3679,3681],{"class":157,"line":415},[155,3680,1692],{"class":167},[155,3682,3683],{"class":171}," test_dataloader\n",[155,3685,3686],{"class":157,"line":452},[155,3687,217],{"emptyLinePlaceholder":216},[155,3689,3690],{"class":157,"line":480},[155,3691,3692],{"class":161},"# 定义模型测试函数\n",[155,3694,3695,3697,3700],{"class":157,"line":486},[155,3696,1484],{"class":167},[155,3698,3699],{"class":226}," test_model_process",[155,3701,3702],{"class":171},"(model,test_dataloader):\n",[155,3704,3705],{"class":157,"line":499},[155,3706,3707],{"class":161},"    # 将模型放到设备当中，先进行判断\n",[155,3709,3710,3712,3714,3716,3718,3720,3722],{"class":157,"line":505},[155,3711,748],{"class":171},[155,3713,317],{"class":167},[155,3715,756],{"class":732},[155,3717,759],{"class":167},[155,3719,762],{"class":171},[155,3721,765],{"class":167},[155,3723,3724],{"class":732}," \"cpu\"\n",[155,3726,3727,3729,3731],{"class":157,"line":528},[155,3728,811],{"class":171},[155,3730,317],{"class":167},[155,3732,1829],{"class":171},[155,3734,3735],{"class":157,"line":549},[155,3736,217],{"emptyLinePlaceholder":216},[155,3738,3739],{"class":157,"line":570},[155,3740,3741],{"class":161},"    # 设置初始化参数\n",[155,3743,3744,3747,3749],{"class":157,"line":575},[155,3745,3746],{"class":171},"    test_corrects",[155,3748,317],{"class":167},[155,3750,1891],{"class":263},[155,3752,3753,3756,3758],{"class":157,"line":581},[155,3754,3755],{"class":171},"    test_num",[155,3757,317],{"class":167},[155,3759,2103],{"class":263},[155,3761,3762],{"class":157,"line":592},[155,3763,217],{"emptyLinePlaceholder":216},[155,3765,3766],{"class":157,"line":610},[155,3767,3768],{"class":161},"    # 进行模型测试\n",[155,3770,3771],{"class":157,"line":622},[155,3772,3773],{"class":161},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[155,3775,3776],{"class":157,"line":638},[155,3777,3778],{"class":161},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[155,3780,3781,3784],{"class":157,"line":650},[155,3782,3783],{"class":167},"    with",[155,3785,2477],{"class":171},[155,3787,3788],{"class":157,"line":662},[155,3789,3790],{"class":161},"        # 从数据中进行\n",[155,3792,3793,3795,3798,3800],{"class":157,"line":678},[155,3794,2179],{"class":167},[155,3796,3797],{"class":171}," test_data_x,test_data_y ",[155,3799,1131],{"class":167},[155,3801,3802],{"class":171}," test_dataloader:\n",[155,3804,3805,3808,3810],{"class":157,"line":694},[155,3806,3807],{"class":171},"            test_data_x",[155,3809,317],{"class":167},[155,3811,3812],{"class":171},"test_data_x.to(device)\n",[155,3814,3815,3818,3820],{"class":157,"line":706},[155,3816,3817],{"class":171},"            test_data_y",[155,3819,317],{"class":167},[155,3821,3822],{"class":171},"test_data_y.to(device)\n",[155,3824,3825],{"class":157,"line":715},[155,3826,3827],{"class":161},"            # 设置为验证模式\n",[155,3829,3830],{"class":157,"line":720},[155,3831,2468],{"class":171},[155,3833,3834],{"class":157,"line":739},[155,3835,3836],{"class":161},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[155,3838,3839,3841,3843],{"class":157,"line":745},[155,3840,2252],{"class":171},[155,3842,317],{"class":167},[155,3844,3845],{"class":171},"model(test_data_x)\n",[155,3847,3848],{"class":157,"line":773},[155,3849,3850],{"class":161},"            # 查找每一行中最大值对应的下标\n",[155,3852,3853,3855,3857,3859,3861,3863,3865],{"class":157,"line":779},[155,3854,2269],{"class":171},[155,3856,317],{"class":167},[155,3858,2274],{"class":171},[155,3860,2277],{"class":323},[155,3862,317],{"class":167},[155,3864,329],{"class":263},[155,3866,363],{"class":171},[155,3868,3869],{"class":157,"line":785},[155,3870,3871],{"class":161},"            # 计算正确率\n",[155,3873,3874],{"class":157,"line":791},[155,3875,3876],{"class":161},"            # .data表示是一个不带梯度信息的tensor\n",[155,3878,3879],{"class":157,"line":796},[155,3880,3881],{"class":161},"            # 如果预测正确，则准确度test_corrects加1\n",[155,3883,3884,3887,3889,3891,3893],{"class":157,"line":802},[155,3885,3886],{"class":171},"            test_corrects",[155,3888,2351],{"class":167},[155,3890,2380],{"class":171},[155,3892,729],{"class":167},[155,3894,3895],{"class":171},"test_data_y.data)\n",[155,3897,3898],{"class":157,"line":808},[155,3899,3900],{"class":161},"            # 将所有的测试样本进行累计\n",[155,3902,3903,3906,3908,3911,3913],{"class":157,"line":819},[155,3904,3905],{"class":171},"            test_num",[155,3907,2351],{"class":167},[155,3909,3910],{"class":171},"test_data_x.size(",[155,3912,1109],{"class":263},[155,3914,363],{"class":171},[155,3916,3917],{"class":157,"line":1832},[155,3918,217],{"emptyLinePlaceholder":216},[155,3920,3921],{"class":157,"line":1838},[155,3922,3923],{"class":161},"        # 计算准确度\n",[155,3925,3926,3929,3931,3934,3936],{"class":157,"line":1844},[155,3927,3928],{"class":171},"        test_acc",[155,3930,317],{"class":167},[155,3932,3933],{"class":171},"test_corrects.double().item()",[155,3935,2028],{"class":167},[155,3937,3938],{"class":171},"test_num\n",[155,3940,3941],{"class":157,"line":1850},[155,3942,3943],{"class":161},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[155,3945,3946,3948,3950,3953],{"class":157,"line":1861},[155,3947,2017],{"class":263},[155,3949,230],{"class":171},[155,3951,3952],{"class":732},"\"测试的准确率：\"",[155,3954,3955],{"class":171},",test_acc)\n",[155,3957,3958],{"class":157,"line":1866},[155,3959,217],{"emptyLinePlaceholder":216},[155,3961,3962],{"class":157,"line":1871},[155,3963,3964],{"class":161},"# 实现模型的测试功能\n",[155,3966,3967,3969,3971,3973,3975],{"class":157,"line":1877},[155,3968,723],{"class":167},[155,3970,726],{"class":263},[155,3972,729],{"class":167},[155,3974,733],{"class":732},[155,3976,736],{"class":171},[155,3978,3979],{"class":157,"line":1883},[155,3980,3981],{"class":161},"    # 加载模型\n",[155,3983,3984,3986,3988],{"class":157,"line":1894},[155,3985,811],{"class":171},[155,3987,317],{"class":167},[155,3989,3429],{"class":171},[155,3991,3992],{"class":157,"line":1900},[155,3993,3994],{"class":161},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[155,3996,3997],{"class":157,"line":1911},[155,3998,3999],{"class":161},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[155,4001,4002,4005,4008],{"class":157,"line":1917},[155,4003,4004],{"class":171},"    model.load_state_dict(torch.load(",[155,4006,4007],{"class":732},"'best_model.pth'",[155,4009,1238],{"class":171},[155,4011,4012],{"class":157,"line":1927},[155,4013,4014],{"class":161},"    # 数据加载\n",[155,4016,4017,4019,4021],{"class":157,"line":1933},[155,4018,3627],{"class":171},[155,4020,317],{"class":167},[155,4022,4023],{"class":171},"test_data_process()\n",[155,4025,4026],{"class":157,"line":1943},[155,4027,4028],{"class":161},"    # 加载模型测试的函数\n",[155,4030,4031],{"class":157,"line":1949},[155,4032,4033],{"class":171},"    test_model_process(model,test_dataloader)\n",[155,4035,4036],{"class":157,"line":1959},[155,4037,217],{"emptyLinePlaceholder":216},[155,4039,4040],{"class":157,"line":1964},[155,4041,4042],{"class":161},"    # 验证集推理实现：\n",[155,4044,4045],{"class":157,"line":1970},[155,4046,4047],{"class":161},"    # 加载数据加载的更详细一些\n",[155,4049,4050,4052,4054,4056,4058,4060,4062],{"class":157,"line":1981},[155,4051,748],{"class":171},[155,4053,317],{"class":167},[155,4055,756],{"class":732},[155,4057,759],{"class":167},[155,4059,762],{"class":171},[155,4061,765],{"class":167},[155,4063,3724],{"class":732},[155,4065,4066,4068,4070],{"class":157,"line":1986},[155,4067,811],{"class":171},[155,4069,317],{"class":167},[155,4071,1829],{"class":171},[155,4073,4074],{"class":157,"line":1991},[155,4075,4076],{"class":161},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[155,4078,4079],{"class":157,"line":1997},[155,4080,4081],{"class":161},"    # 顺序不可改变\n",[155,4083,4084,4087,4089,4092,4095,4097,4100,4102,4105,4107,4110,4112,4115,4117,4120,4122,4125,4127,4130,4132,4135,4137,4140],{"class":157,"line":2014},[155,4085,4086],{"class":171},"    classes",[155,4088,317],{"class":167},[155,4090,4091],{"class":171},"[",[155,4093,4094],{"class":732},"'T-shirt\u002Ftop'",[155,4096,332],{"class":171},[155,4098,4099],{"class":732},"'Trouser'",[155,4101,332],{"class":171},[155,4103,4104],{"class":732},"'Pullover'",[155,4106,332],{"class":171},[155,4108,4109],{"class":732},"'Dress'",[155,4111,332],{"class":171},[155,4113,4114],{"class":732},"'Coat'",[155,4116,332],{"class":171},[155,4118,4119],{"class":732},"'Sandal'",[155,4121,332],{"class":171},[155,4123,4124],{"class":732},"'Shirt'",[155,4126,332],{"class":171},[155,4128,4129],{"class":732},"'Sneaker'",[155,4131,332],{"class":171},[155,4133,4134],{"class":732},"'Bag'",[155,4136,332],{"class":171},[155,4138,4139],{"class":732},"'Ankle boot'",[155,4141,2845],{"class":171},[155,4143,4144,4146],{"class":157,"line":2046},[155,4145,3783],{"class":167},[155,4147,2477],{"class":171},[155,4149,4150],{"class":157,"line":2062},[155,4151,4152],{"class":161},"        # 将数据和标签都放到设备当中\n",[155,4154,4155,4157,4160,4162],{"class":157,"line":2067},[155,4156,2179],{"class":167},[155,4158,4159],{"class":171}," b_x,b_y ",[155,4161,1131],{"class":167},[155,4163,3802],{"class":171},[155,4165,4166,4168,4170],{"class":157,"line":2073},[155,4167,2200],{"class":171},[155,4169,317],{"class":167},[155,4171,2205],{"class":171},[155,4173,4174,4176,4178],{"class":157,"line":2079},[155,4175,2217],{"class":171},[155,4177,317],{"class":167},[155,4179,2222],{"class":171},[155,4181,4182],{"class":157,"line":2089},[155,4183,217],{"emptyLinePlaceholder":216},[155,4185,4186],{"class":157,"line":2095},[155,4187,4188],{"class":161},"            # 设置模型为验证模式\n",[155,4190,4191],{"class":157,"line":2106},[155,4192,2468],{"class":171},[155,4194,4195],{"class":157,"line":2112},[155,4196,4197],{"class":161},"            # 模型推理结果\n",[155,4199,4200,4202,4204],{"class":157,"line":2122},[155,4201,2252],{"class":171},[155,4203,317],{"class":167},[155,4205,2257],{"class":171},[155,4207,4208],{"class":157,"line":2128},[155,4209,4210],{"class":161},"            # 获取最大下标，最大下标就是类别号\n",[155,4212,4213,4215,4217,4219,4221,4223,4225],{"class":157,"line":2138},[155,4214,2269],{"class":171},[155,4216,317],{"class":167},[155,4218,2274],{"class":171},[155,4220,2277],{"class":323},[155,4222,317],{"class":167},[155,4224,329],{"class":263},[155,4226,363],{"class":171},[155,4228,4229],{"class":157,"line":2144},[155,4230,4231],{"class":161},"            # 取出张量中的数值\n",[155,4233,4234,4237,4239],{"class":157,"line":2154},[155,4235,4236],{"class":171},"            result",[155,4238,317],{"class":167},[155,4240,4241],{"class":171},"pre_lab.item()\n",[155,4243,4244,4247,4249],{"class":157,"line":2160},[155,4245,4246],{"class":171},"            label",[155,4248,317],{"class":167},[155,4250,4251],{"class":171},"b_y.item()\n",[155,4253,4254,4257,4259,4262,4265,4268,4270,4273],{"class":157,"line":2170},[155,4255,4256],{"class":263},"            print",[155,4258,230],{"class":171},[155,4260,4261],{"class":732},"\"预测值：\"",[155,4263,4264],{"class":171},",classes[result],",[155,4266,4267],{"class":732},"\"------\"",[155,4269,332],{"class":171},[155,4271,4272],{"class":732},"\"真实值：\"",[155,4274,4275],{"class":171},",classes[label])\n",[24,4277,4278],{},"（2）AlexNet",[28,4280,4281],{},[31,4282,4283],{},"神经网络构建",[146,4285,4287],{"className":148,"code":4286,"language":150,"meta":39,"style":39},"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",[152,4288,4289,4295,4305,4315,4327,4331,4348,4356,4371,4383,4427,4455,4498,4524,4568,4611,4654,4681,4685,4695,4700,4728,4747,4766,4770,4775,4783,4798,4808,4822,4832,4847,4862,4877,4888,4892,4897,4907,4922,4927,4941,4956,4968,4973,4984,4989,4995,5000,5012,5032,5037,5046],{"__ignoreMap":39},[155,4290,4291,4293],{"class":157,"line":158},[155,4292,168],{"class":167},[155,4294,172],{"class":171},[155,4296,4297,4299,4301,4303],{"class":157,"line":46},[155,4298,183],{"class":167},[155,4300,186],{"class":171},[155,4302,168],{"class":167},[155,4304,191],{"class":171},[155,4306,4307,4309,4311,4313],{"class":157,"line":121},[155,4308,183],{"class":167},[155,4310,205],{"class":171},[155,4312,168],{"class":167},[155,4314,210],{"class":171},[155,4316,4317,4319,4322,4324],{"class":157,"line":180},[155,4318,168],{"class":167},[155,4320,4321],{"class":171}," torch.nn.functional ",[155,4323,907],{"class":167},[155,4325,4326],{"class":171}," F\n",[155,4328,4329],{"class":157,"line":194},[155,4330,217],{"emptyLinePlaceholder":216},[155,4332,4333,4335,4338,4340,4342,4344,4346],{"class":157,"line":200},[155,4334,223],{"class":167},[155,4336,4337],{"class":226}," AlexNet",[155,4339,230],{"class":171},[155,4341,233],{"class":226},[155,4343,236],{"class":171},[155,4345,239],{"class":226},[155,4347,242],{"class":171},[155,4349,4350,4352,4354],{"class":157,"line":213},[155,4351,260],{"class":167},[155,4353,264],{"class":263},[155,4355,267],{"class":171},[155,4357,4358,4360,4363,4365,4367,4369],{"class":157,"line":220},[155,4359,279],{"class":263},[155,4361,4362],{"class":171},"(AlexNet,",[155,4364,285],{"class":263},[155,4366,288],{"class":171},[155,4368,291],{"class":263},[155,4370,294],{"class":171},[155,4372,4373,4375,4378,4380],{"class":157,"line":245},[155,4374,311],{"class":263},[155,4376,4377],{"class":171},".ReLu",[155,4379,317],{"class":167},[155,4381,4382],{"class":171},"nn.ReLU()\n",[155,4384,4385,4387,4389,4391,4393,4395,4397,4399,4401,4403,4405,4408,4410,4412,4414,4417,4419,4421,4423,4425],{"class":157,"line":251},[155,4386,311],{"class":263},[155,4388,314],{"class":171},[155,4390,317],{"class":167},[155,4392,320],{"class":171},[155,4394,324],{"class":323},[155,4396,317],{"class":167},[155,4398,329],{"class":263},[155,4400,332],{"class":171},[155,4402,335],{"class":323},[155,4404,317],{"class":167},[155,4406,4407],{"class":263},"96",[155,4409,332],{"class":171},[155,4411,345],{"class":323},[155,4413,317],{"class":167},[155,4415,4416],{"class":263},"11",[155,4418,332],{"class":171},[155,4420,406],{"class":323},[155,4422,317],{"class":167},[155,4424,1264],{"class":263},[155,4426,363],{"class":171},[155,4428,4429,4431,4433,4435,4438,4440,4442,4445,4447,4449,4451,4453],{"class":157,"line":257},[155,4430,311],{"class":263},[155,4432,390],{"class":171},[155,4434,317],{"class":167},[155,4436,4437],{"class":171},"nn.MaxPool2d(",[155,4439,345],{"class":323},[155,4441,317],{"class":167},[155,4443,4444],{"class":263},"3",[155,4446,332],{"class":171},[155,4448,406],{"class":323},[155,4450,317],{"class":167},[155,4452,360],{"class":263},[155,4454,363],{"class":171},[155,4456,4457,4459,4461,4463,4465,4467,4469,4471,4473,4475,4477,4480,4482,4484,4486,4488,4490,4492,4494,4496],{"class":157,"line":270},[155,4458,311],{"class":263},[155,4460,420],{"class":171},[155,4462,317],{"class":167},[155,4464,320],{"class":171},[155,4466,324],{"class":323},[155,4468,317],{"class":167},[155,4470,4407],{"class":263},[155,4472,332],{"class":171},[155,4474,335],{"class":323},[155,4476,317],{"class":167},[155,4478,4479],{"class":263},"256",[155,4481,332],{"class":171},[155,4483,345],{"class":323},[155,4485,317],{"class":167},[155,4487,350],{"class":263},[155,4489,332],{"class":171},[155,4491,355],{"class":323},[155,4493,317],{"class":167},[155,4495,360],{"class":263},[155,4497,363],{"class":171},[155,4499,4500,4502,4504,4506,4508,4510,4512,4514,4516,4518,4520,4522],{"class":157,"line":276},[155,4501,311],{"class":263},[155,4503,457],{"class":171},[155,4505,317],{"class":167},[155,4507,4437],{"class":171},[155,4509,345],{"class":323},[155,4511,317],{"class":167},[155,4513,4444],{"class":263},[155,4515,332],{"class":171},[155,4517,406],{"class":323},[155,4519,317],{"class":167},[155,4521,360],{"class":263},[155,4523,363],{"class":171},[155,4525,4526,4528,4531,4533,4535,4537,4539,4541,4543,4545,4547,4550,4552,4554,4556,4558,4560,4562,4564,4566],{"class":157,"line":297},[155,4527,311],{"class":263},[155,4529,4530],{"class":171},".c5",[155,4532,317],{"class":167},[155,4534,320],{"class":171},[155,4536,324],{"class":323},[155,4538,317],{"class":167},[155,4540,4479],{"class":263},[155,4542,332],{"class":171},[155,4544,335],{"class":323},[155,4546,317],{"class":167},[155,4548,4549],{"class":263},"384",[155,4551,332],{"class":171},[155,4553,345],{"class":323},[155,4555,317],{"class":167},[155,4557,4444],{"class":263},[155,4559,332],{"class":171},[155,4561,355],{"class":323},[155,4563,317],{"class":167},[155,4565,329],{"class":263},[155,4567,363],{"class":171},[155,4569,4570,4572,4575,4577,4579,4581,4583,4585,4587,4589,4591,4593,4595,4597,4599,4601,4603,4605,4607,4609],{"class":157,"line":302},[155,4571,311],{"class":263},[155,4573,4574],{"class":171},".c6",[155,4576,317],{"class":167},[155,4578,320],{"class":171},[155,4580,324],{"class":323},[155,4582,317],{"class":167},[155,4584,4549],{"class":263},[155,4586,332],{"class":171},[155,4588,335],{"class":323},[155,4590,317],{"class":167},[155,4592,4549],{"class":263},[155,4594,332],{"class":171},[155,4596,345],{"class":323},[155,4598,317],{"class":167},[155,4600,4444],{"class":263},[155,4602,332],{"class":171},[155,4604,355],{"class":323},[155,4606,317],{"class":167},[155,4608,329],{"class":263},[155,4610,363],{"class":171},[155,4612,4613,4615,4618,4620,4622,4624,4626,4628,4630,4632,4634,4636,4638,4640,4642,4644,4646,4648,4650,4652],{"class":157,"line":308},[155,4614,311],{"class":263},[155,4616,4617],{"class":171},".c7",[155,4619,317],{"class":167},[155,4621,320],{"class":171},[155,4623,324],{"class":323},[155,4625,317],{"class":167},[155,4627,4549],{"class":263},[155,4629,332],{"class":171},[155,4631,335],{"class":323},[155,4633,317],{"class":167},[155,4635,4479],{"class":263},[155,4637,332],{"class":171},[155,4639,345],{"class":323},[155,4641,317],{"class":167},[155,4643,4444],{"class":263},[155,4645,332],{"class":171},[155,4647,355],{"class":323},[155,4649,317],{"class":167},[155,4651,329],{"class":263},[155,4653,363],{"class":171},[155,4655,4656,4658,4661,4663,4665,4667,4669,4671,4673,4675,4677,4679],{"class":157,"line":366},[155,4657,311],{"class":263},[155,4659,4660],{"class":171},".s8",[155,4662,317],{"class":167},[155,4664,4437],{"class":171},[155,4666,345],{"class":323},[155,4668,317],{"class":167},[155,4670,4444],{"class":263},[155,4672,332],{"class":171},[155,4674,406],{"class":323},[155,4676,317],{"class":167},[155,4678,360],{"class":263},[155,4680,363],{"class":171},[155,4682,4683],{"class":157,"line":379},[155,4684,483],{"class":161},[155,4686,4687,4689,4691,4693],{"class":157,"line":385},[155,4688,311],{"class":263},[155,4690,491],{"class":171},[155,4692,317],{"class":167},[155,4694,496],{"class":171},[155,4696,4697],{"class":157,"line":415},[155,4698,4699],{"class":161},"       # 定义全连接层\n",[155,4701,4702,4704,4707,4709,4711,4713,4715,4717,4719,4721,4723,4726],{"class":157,"line":452},[155,4703,311],{"class":263},[155,4705,4706],{"class":171},".f1",[155,4708,317],{"class":167},[155,4710,515],{"class":171},[155,4712,340],{"class":263},[155,4714,1563],{"class":167},[155,4716,340],{"class":263},[155,4718,1563],{"class":167},[155,4720,4479],{"class":263},[155,4722,332],{"class":171},[155,4724,4725],{"class":263},"4096",[155,4727,363],{"class":171},[155,4729,4730,4732,4735,4737,4739,4741,4743,4745],{"class":157,"line":480},[155,4731,311],{"class":263},[155,4733,4734],{"class":171},".f2",[155,4736,317],{"class":167},[155,4738,515],{"class":171},[155,4740,4725],{"class":263},[155,4742,332],{"class":171},[155,4744,4725],{"class":263},[155,4746,363],{"class":171},[155,4748,4749,4751,4754,4756,4758,4760,4762,4764],{"class":157,"line":486},[155,4750,311],{"class":263},[155,4752,4753],{"class":171},".f3",[155,4755,317],{"class":167},[155,4757,515],{"class":171},[155,4759,4725],{"class":263},[155,4761,332],{"class":171},[155,4763,565],{"class":263},[155,4765,363],{"class":171},[155,4767,4768],{"class":157,"line":499},[155,4769,217],{"emptyLinePlaceholder":216},[155,4771,4772],{"class":157,"line":505},[155,4773,4774],{"class":161},"    # 定义前向传播\n",[155,4776,4777,4779,4781],{"class":157,"line":528},[155,4778,260],{"class":167},[155,4780,586],{"class":226},[155,4782,589],{"class":171},[155,4784,4785,4787,4789,4791,4794,4796],{"class":157,"line":549},[155,4786,595],{"class":171},[155,4788,317],{"class":167},[155,4790,285],{"class":263},[155,4792,4793],{"class":171},".ReLu(",[155,4795,285],{"class":263},[155,4797,607],{"class":171},[155,4799,4800,4802,4804,4806],{"class":157,"line":570},[155,4801,595],{"class":171},[155,4803,317],{"class":167},[155,4805,285],{"class":263},[155,4807,619],{"class":171},[155,4809,4810,4812,4814,4816,4818,4820],{"class":157,"line":575},[155,4811,595],{"class":171},[155,4813,317],{"class":167},[155,4815,285],{"class":263},[155,4817,4793],{"class":171},[155,4819,285],{"class":263},[155,4821,635],{"class":171},[155,4823,4824,4826,4828,4830],{"class":157,"line":581},[155,4825,595],{"class":171},[155,4827,317],{"class":167},[155,4829,285],{"class":263},[155,4831,647],{"class":171},[155,4833,4834,4836,4838,4840,4842,4844],{"class":157,"line":592},[155,4835,595],{"class":171},[155,4837,317],{"class":167},[155,4839,285],{"class":263},[155,4841,4793],{"class":171},[155,4843,285],{"class":263},[155,4845,4846],{"class":171},".c5(x))\n",[155,4848,4849,4851,4853,4855,4857,4859],{"class":157,"line":610},[155,4850,595],{"class":171},[155,4852,317],{"class":167},[155,4854,285],{"class":263},[155,4856,4793],{"class":171},[155,4858,285],{"class":263},[155,4860,4861],{"class":171},".c6(x))\n",[155,4863,4864,4866,4868,4870,4872,4874],{"class":157,"line":622},[155,4865,595],{"class":171},[155,4867,317],{"class":167},[155,4869,285],{"class":263},[155,4871,4793],{"class":171},[155,4873,285],{"class":263},[155,4875,4876],{"class":171},".c7(x))\n",[155,4878,4879,4881,4883,4885],{"class":157,"line":638},[155,4880,595],{"class":171},[155,4882,317],{"class":167},[155,4884,285],{"class":263},[155,4886,4887],{"class":171},".s8(x)\n",[155,4889,4890],{"class":157,"line":650},[155,4891,217],{"emptyLinePlaceholder":216},[155,4893,4894],{"class":157,"line":662},[155,4895,4896],{"class":161},"        # 展平加线性全连接层\n",[155,4898,4899,4901,4903,4905],{"class":157,"line":678},[155,4900,595],{"class":171},[155,4902,317],{"class":167},[155,4904,285],{"class":263},[155,4906,659],{"class":171},[155,4908,4909,4911,4913,4915,4917,4919],{"class":157,"line":694},[155,4910,595],{"class":171},[155,4912,317],{"class":167},[155,4914,285],{"class":263},[155,4916,4793],{"class":171},[155,4918,285],{"class":263},[155,4920,4921],{"class":171},".f1(x))\n",[155,4923,4924],{"class":157,"line":706},[155,4925,4926],{"class":161},"        # 还需要dropout对神经元随机进行失活\n",[155,4928,4929,4931,4933,4936,4939],{"class":157,"line":715},[155,4930,595],{"class":171},[155,4932,317],{"class":167},[155,4934,4935],{"class":171},"F.dropout(x,",[155,4937,4938],{"class":263},"0.5",[155,4940,363],{"class":171},[155,4942,4943,4945,4947,4949,4951,4953],{"class":157,"line":720},[155,4944,595],{"class":171},[155,4946,317],{"class":167},[155,4948,285],{"class":263},[155,4950,4793],{"class":171},[155,4952,285],{"class":263},[155,4954,4955],{"class":171},".f2(x))\n",[155,4957,4958,4960,4962,4964,4966],{"class":157,"line":739},[155,4959,595],{"class":171},[155,4961,317],{"class":167},[155,4963,4935],{"class":171},[155,4965,4938],{"class":263},[155,4967,363],{"class":171},[155,4969,4970],{"class":157,"line":745},[155,4971,4972],{"class":161},"        # 直接输出\n",[155,4974,4975,4977,4979,4981],{"class":157,"line":773},[155,4976,595],{"class":171},[155,4978,317],{"class":167},[155,4980,285],{"class":263},[155,4982,4983],{"class":171},".f3(x)\n",[155,4985,4986],{"class":157,"line":779},[155,4987,4988],{"class":161},"        # 前向传播输出\n",[155,4990,4991,4993],{"class":157,"line":785},[155,4992,709],{"class":167},[155,4994,712],{"class":171},[155,4996,4997],{"class":157,"line":791},[155,4998,4999],{"class":161},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[155,5001,5002,5004,5006,5008,5010],{"class":157,"line":796},[155,5003,723],{"class":167},[155,5005,726],{"class":263},[155,5007,729],{"class":167},[155,5009,733],{"class":732},[155,5011,736],{"class":171},[155,5013,5014,5016,5018,5020,5022,5024,5026,5028,5030],{"class":157,"line":802},[155,5015,748],{"class":171},[155,5017,317],{"class":167},[155,5019,753],{"class":171},[155,5021,756],{"class":732},[155,5023,759],{"class":167},[155,5025,762],{"class":171},[155,5027,765],{"class":167},[155,5029,768],{"class":732},[155,5031,363],{"class":171},[155,5033,5034],{"class":157,"line":808},[155,5035,5036],{"class":161},"    # 模型实例化，然后将实例化的模型放到设备中\n",[155,5038,5039,5041,5043],{"class":157,"line":819},[155,5040,811],{"class":171},[155,5042,317],{"class":167},[155,5044,5045],{"class":171},"AlexNet().to(device)\n",[155,5047,5048,5050,5052,5054,5056,5059,5061,5063],{"class":157,"line":1832},[155,5049,822],{"class":263},[155,5051,825],{"class":171},[155,5053,329],{"class":263},[155,5055,332],{"class":171},[155,5057,5058],{"class":263},"227",[155,5060,332],{"class":171},[155,5062,5058],{"class":263},[155,5064,839],{"class":171},[28,5066,5067],{"start":46},[31,5068,852],{},[146,5070,5072],{"className":148,"code":5071,"language":150,"meta":39,"style":39},"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",[152,5073,5074,5080,5086,5096,5102,5112,5122,5132,5142,5152,5156,5167,5177,5181,5185,5189,5197,5209,5219,5235,5245,5277,5291,5301,5311,5315,5325,5339,5349,5359,5369,5375,5379,5383,5387,5391,5395,5403,5423,5427,5431,5435,5439,5443,5459,5463,5467,5475,5479,5483,5491,5495,5499,5503,5511,5515,5519,5523,5527,5535,5539,5547,5551,5559,5563,5571,5575,5583,5587,5591,5599,5603,5607,5611,5623,5647,5661,5665,5669,5673,5681,5685,5693,5697,5705,5709,5717,5721,5729,5733,5741,5745,5757,5761,5769,5773,5781,5785,5789,5793,5797,5805,5809,5825,5829,5837,5841,5845,5849,5853,5857,5861,5865,5881,5885,5897,5901,5913,5917,5929,5933,5941,5945,5953,5957,5961,5966,5972,5976,5985,5989,6006,6010,6019,6023,6041,6054,6059,6072,6076,6080,6088,6092,6096,6104,6108,6116,6120,6128,6132,6136,6178,6220,6224,6228,6244,6248,6264,6268,6272,6280,6284,6288,6300,6338,6343,6348,6357,6361,6375,6385,6391,6397,6403,6409,6413,6417,6423,6427,6431,6439,6443,6461,6465,6469,6473,6489,6493,6497,6501,6505,6509,6529,6549,6553,6557,6561,6569,6577,6581,6597,6617,6637,6641,6645,6653,6661,6665,6669,6673,6685,6689,6699,6707,6724],{"__ignoreMap":39},[155,5075,5076,5078],{"class":157,"line":158},[155,5077,168],{"class":167},[155,5079,1359],{"class":171},[155,5081,5082,5084],{"class":157,"line":46},[155,5083,168],{"class":167},[155,5085,1366],{"class":171},[155,5087,5088,5090,5092,5094],{"class":157,"line":121},[155,5089,168],{"class":167},[155,5091,1377],{"class":171},[155,5093,907],{"class":167},[155,5095,1382],{"class":171},[155,5097,5098,5100],{"class":157,"line":180},[155,5099,168],{"class":167},[155,5101,172],{"class":171},[155,5103,5104,5106,5108,5110],{"class":157,"line":194},[155,5105,183],{"class":167},[155,5107,939],{"class":171},[155,5109,168],{"class":167},[155,5111,1399],{"class":171},[155,5113,5114,5116,5118,5120],{"class":157,"line":200},[155,5115,183],{"class":167},[155,5117,892],{"class":171},[155,5119,168],{"class":167},[155,5121,897],{"class":171},[155,5123,5124,5126,5128,5130],{"class":157,"line":213},[155,5125,183],{"class":167},[155,5127,922],{"class":171},[155,5129,168],{"class":167},[155,5131,927],{"class":171},[155,5133,5134,5136,5138,5140],{"class":157,"line":220},[155,5135,168],{"class":167},[155,5137,939],{"class":171},[155,5139,907],{"class":167},[155,5141,944],{"class":171},[155,5143,5144,5146,5148,5150],{"class":157,"line":245},[155,5145,168],{"class":167},[155,5147,956],{"class":171},[155,5149,907],{"class":167},[155,5151,961],{"class":171},[155,5153,5154],{"class":157,"line":251},[155,5155,1444],{"class":161},[155,5157,5158,5160,5162,5164],{"class":157,"line":257},[155,5159,183],{"class":167},[155,5161,1451],{"class":171},[155,5163,168],{"class":167},[155,5165,5166],{"class":171}," AlexNet\n",[155,5168,5169,5171,5173,5175],{"class":157,"line":270},[155,5170,183],{"class":167},[155,5172,186],{"class":171},[155,5174,168],{"class":167},[155,5176,191],{"class":171},[155,5178,5179],{"class":157,"line":276},[155,5180,217],{"emptyLinePlaceholder":216},[155,5182,5183],{"class":157,"line":297},[155,5184,217],{"emptyLinePlaceholder":216},[155,5186,5187],{"class":157,"line":302},[155,5188,1479],{"class":161},[155,5190,5191,5193,5195],{"class":157,"line":308},[155,5192,1484],{"class":167},[155,5194,1487],{"class":226},[155,5196,1490],{"class":171},[155,5198,5199,5201,5203,5205,5207],{"class":157,"line":366},[155,5200,1495],{"class":171},[155,5202,317],{"class":167},[155,5204,979],{"class":171},[155,5206,987],{"class":732},[155,5208,990],{"class":171},[155,5210,5211,5213,5215,5217],{"class":157,"line":379},[155,5212,1508],{"class":323},[155,5214,317],{"class":167},[155,5216,1000],{"class":263},[155,5218,990],{"class":171},[155,5220,5221,5223,5225,5227,5229,5231,5233],{"class":157,"line":385},[155,5222,1519],{"class":323},[155,5224,317],{"class":167},[155,5226,1017],{"class":171},[155,5228,1020],{"class":323},[155,5230,317],{"class":167},[155,5232,5058],{"class":263},[155,5234,1028],{"class":171},[155,5236,5237,5239,5241,5243],{"class":157,"line":415},[155,5238,1536],{"class":323},[155,5240,317],{"class":167},[155,5242,1000],{"class":263},[155,5244,363],{"class":171},[155,5246,5247,5249,5251,5253,5255,5257,5259,5261,5263,5265,5267,5269,5271,5273,5275],{"class":157,"line":452},[155,5248,1547],{"class":171},[155,5250,317],{"class":167},[155,5252,1552],{"class":171},[155,5254,1555],{"class":263},[155,5256,230],{"class":171},[155,5258,1560],{"class":263},[155,5260,1563],{"class":167},[155,5262,1253],{"class":263},[155,5264,1568],{"class":171},[155,5266,1555],{"class":263},[155,5268,230],{"class":171},[155,5270,1575],{"class":263},[155,5272,1563],{"class":167},[155,5274,1253],{"class":263},[155,5276,1582],{"class":171},[155,5278,5279,5281,5283,5285,5287,5289],{"class":157,"line":480},[155,5280,1587],{"class":171},[155,5282,317],{"class":167},[155,5284,1592],{"class":171},[155,5286,1061],{"class":323},[155,5288,317],{"class":167},[155,5290,1066],{"class":171},[155,5292,5293,5295,5297,5299],{"class":157,"line":486},[155,5294,1603],{"class":323},[155,5296,317],{"class":167},[155,5298,1608],{"class":263},[155,5300,990],{"class":171},[155,5302,5303,5305,5307,5309],{"class":157,"line":499},[155,5304,1615],{"class":323},[155,5306,317],{"class":167},[155,5308,1000],{"class":263},[155,5310,990],{"class":171},[155,5312,5313],{"class":157,"line":505},[155,5314,1626],{"class":161},[155,5316,5317,5319,5321,5323],{"class":157,"line":528},[155,5318,1631],{"class":323},[155,5320,317],{"class":167},[155,5322,1636],{"class":263},[155,5324,363],{"class":171},[155,5326,5327,5329,5331,5333,5335,5337],{"class":157,"line":549},[155,5328,1643],{"class":171},[155,5330,317],{"class":167},[155,5332,1058],{"class":171},[155,5334,1061],{"class":323},[155,5336,317],{"class":167},[155,5338,1654],{"class":171},[155,5340,5341,5343,5345,5347],{"class":157,"line":570},[155,5342,1659],{"class":323},[155,5344,317],{"class":167},[155,5346,1608],{"class":263},[155,5348,990],{"class":171},[155,5350,5351,5353,5355,5357],{"class":157,"line":575},[155,5352,1670],{"class":323},[155,5354,317],{"class":167},[155,5356,1000],{"class":263},[155,5358,990],{"class":171},[155,5360,5361,5363,5365,5367],{"class":157,"line":581},[155,5362,1681],{"class":323},[155,5364,317],{"class":167},[155,5366,1636],{"class":263},[155,5368,363],{"class":171},[155,5370,5371,5373],{"class":157,"line":592},[155,5372,1692],{"class":167},[155,5374,1695],{"class":171},[155,5376,5377],{"class":157,"line":610},[155,5378,217],{"emptyLinePlaceholder":216},[155,5380,5381],{"class":157,"line":622},[155,5382,1704],{"class":161},[155,5384,5385],{"class":157,"line":638},[155,5386,1709],{"class":161},[155,5388,5389],{"class":157,"line":650},[155,5390,217],{"emptyLinePlaceholder":216},[155,5392,5393],{"class":157,"line":662},[155,5394,1718],{"class":161},[155,5396,5397,5399,5401],{"class":157,"line":678},[155,5398,1484],{"class":167},[155,5400,1725],{"class":226},[155,5402,1728],{"class":171},[155,5404,5405,5407,5409,5411,5413,5415,5417,5419,5421],{"class":157,"line":694},[155,5406,748],{"class":171},[155,5408,317],{"class":167},[155,5410,753],{"class":171},[155,5412,756],{"class":732},[155,5414,759],{"class":167},[155,5416,762],{"class":171},[155,5418,765],{"class":167},[155,5420,1747],{"class":732},[155,5422,363],{"class":171},[155,5424,5425],{"class":157,"line":706},[155,5426,217],{"emptyLinePlaceholder":216},[155,5428,5429],{"class":157,"line":715},[155,5430,217],{"emptyLinePlaceholder":216},[155,5432,5433],{"class":157,"line":720},[155,5434,1762],{"class":161},[155,5436,5437],{"class":157,"line":739},[155,5438,1767],{"class":161},[155,5440,5441],{"class":157,"line":745},[155,5442,1772],{"class":161},[155,5444,5445,5447,5449,5451,5453,5455,5457],{"class":157,"line":773},[155,5446,1777],{"class":171},[155,5448,317],{"class":167},[155,5450,1782],{"class":171},[155,5452,1785],{"class":323},[155,5454,317],{"class":167},[155,5456,1790],{"class":263},[155,5458,363],{"class":171},[155,5460,5461],{"class":157,"line":779},[155,5462,217],{"emptyLinePlaceholder":216},[155,5464,5465],{"class":157,"line":785},[155,5466,1801],{"class":161},[155,5468,5469,5471,5473],{"class":157,"line":791},[155,5470,1806],{"class":171},[155,5472,317],{"class":167},[155,5474,1811],{"class":171},[155,5476,5477],{"class":157,"line":796},[155,5478,217],{"emptyLinePlaceholder":216},[155,5480,5481],{"class":157,"line":802},[155,5482,1820],{"class":161},[155,5484,5485,5487,5489],{"class":157,"line":808},[155,5486,811],{"class":171},[155,5488,317],{"class":167},[155,5490,1829],{"class":171},[155,5492,5493],{"class":157,"line":819},[155,5494,1835],{"class":161},[155,5496,5497],{"class":157,"line":1832},[155,5498,1841],{"class":161},[155,5500,5501],{"class":157,"line":1838},[155,5502,1847],{"class":161},[155,5504,5505,5507,5509],{"class":157,"line":1844},[155,5506,1853],{"class":171},[155,5508,317],{"class":167},[155,5510,1858],{"class":171},[155,5512,5513],{"class":157,"line":1850},[155,5514,217],{"emptyLinePlaceholder":216},[155,5516,5517],{"class":157,"line":1861},[155,5518,217],{"emptyLinePlaceholder":216},[155,5520,5521],{"class":157,"line":1866},[155,5522,1874],{"class":161},[155,5524,5525],{"class":157,"line":1871},[155,5526,1880],{"class":161},[155,5528,5529,5531,5533],{"class":157,"line":1877},[155,5530,1886],{"class":171},[155,5532,317],{"class":167},[155,5534,1891],{"class":263},[155,5536,5537],{"class":157,"line":1883},[155,5538,1897],{"class":161},[155,5540,5541,5543,5545],{"class":157,"line":1894},[155,5542,1903],{"class":171},[155,5544,317],{"class":167},[155,5546,1908],{"class":171},[155,5548,5549],{"class":157,"line":1900},[155,5550,1914],{"class":161},[155,5552,5553,5555,5557],{"class":157,"line":1911},[155,5554,1920],{"class":171},[155,5556,317],{"class":167},[155,5558,1908],{"class":171},[155,5560,5561],{"class":157,"line":1917},[155,5562,1930],{"class":161},[155,5564,5565,5567,5569],{"class":157,"line":1927},[155,5566,1936],{"class":171},[155,5568,317],{"class":167},[155,5570,1908],{"class":171},[155,5572,5573],{"class":157,"line":1933},[155,5574,1946],{"class":161},[155,5576,5577,5579,5581],{"class":157,"line":1943},[155,5578,1952],{"class":171},[155,5580,317],{"class":167},[155,5582,1908],{"class":171},[155,5584,5585],{"class":157,"line":1949},[155,5586,217],{"emptyLinePlaceholder":216},[155,5588,5589],{"class":157,"line":1959},[155,5590,1967],{"class":161},[155,5592,5593,5595,5597],{"class":157,"line":1964},[155,5594,1973],{"class":171},[155,5596,317],{"class":167},[155,5598,1978],{"class":171},[155,5600,5601],{"class":157,"line":1970},[155,5602,217],{"emptyLinePlaceholder":216},[155,5604,5605],{"class":157,"line":1981},[155,5606,217],{"emptyLinePlaceholder":216},[155,5608,5609],{"class":157,"line":1986},[155,5610,1994],{"class":161},[155,5612,5613,5615,5617,5619,5621],{"class":157,"line":1991},[155,5614,2000],{"class":167},[155,5616,2003],{"class":171},[155,5618,1131],{"class":167},[155,5620,2008],{"class":263},[155,5622,2011],{"class":171},[155,5624,5625,5627,5629,5631,5633,5635,5637,5639,5641,5643,5645],{"class":157,"line":1997},[155,5626,2017],{"class":263},[155,5628,230],{"class":171},[155,5630,2022],{"class":732},[155,5632,2025],{"class":263},[155,5634,2028],{"class":732},[155,5636,2025],{"class":263},[155,5638,2033],{"class":732},[155,5640,2036],{"class":171},[155,5642,2039],{"class":167},[155,5644,329],{"class":263},[155,5646,1238],{"class":171},[155,5648,5649,5651,5653,5655,5657,5659],{"class":157,"line":2014},[155,5650,2017],{"class":263},[155,5652,230],{"class":171},[155,5654,2053],{"class":732},[155,5656,1563],{"class":167},[155,5658,565],{"class":263},[155,5660,363],{"class":171},[155,5662,5663],{"class":157,"line":2046},[155,5664,217],{"emptyLinePlaceholder":216},[155,5666,5667],{"class":157,"line":2062},[155,5668,2070],{"class":161},[155,5670,5671],{"class":157,"line":2067},[155,5672,2076],{"class":161},[155,5674,5675,5677,5679],{"class":157,"line":2073},[155,5676,2082],{"class":171},[155,5678,317],{"class":167},[155,5680,1891],{"class":263},[155,5682,5683],{"class":157,"line":2079},[155,5684,2092],{"class":161},[155,5686,5687,5689,5691],{"class":157,"line":2089},[155,5688,2098],{"class":171},[155,5690,317],{"class":167},[155,5692,2103],{"class":263},[155,5694,5695],{"class":157,"line":2095},[155,5696,2109],{"class":161},[155,5698,5699,5701,5703],{"class":157,"line":2106},[155,5700,2115],{"class":171},[155,5702,317],{"class":167},[155,5704,1891],{"class":263},[155,5706,5707],{"class":157,"line":2112},[155,5708,2125],{"class":161},[155,5710,5711,5713,5715],{"class":157,"line":2122},[155,5712,2131],{"class":171},[155,5714,317],{"class":167},[155,5716,2103],{"class":263},[155,5718,5719],{"class":157,"line":2128},[155,5720,2141],{"class":161},[155,5722,5723,5725,5727],{"class":157,"line":2138},[155,5724,2147],{"class":171},[155,5726,317],{"class":167},[155,5728,2103],{"class":263},[155,5730,5731],{"class":157,"line":2144},[155,5732,2157],{"class":161},[155,5734,5735,5737,5739],{"class":157,"line":2154},[155,5736,2163],{"class":171},[155,5738,317],{"class":167},[155,5740,2103],{"class":263},[155,5742,5743],{"class":157,"line":2160},[155,5744,2173],{"class":161},[155,5746,5747,5749,5751,5753,5755],{"class":157,"line":2170},[155,5748,2179],{"class":167},[155,5750,1128],{"class":171},[155,5752,1131],{"class":167},[155,5754,1134],{"class":263},[155,5756,2188],{"class":171},[155,5758,5759],{"class":157,"line":2176},[155,5760,2194],{"class":161},[155,5762,5763,5765,5767],{"class":157,"line":2191},[155,5764,2200],{"class":171},[155,5766,317],{"class":167},[155,5768,2205],{"class":171},[155,5770,5771],{"class":157,"line":2197},[155,5772,2211],{"class":161},[155,5774,5775,5777,5779],{"class":157,"line":2208},[155,5776,2217],{"class":171},[155,5778,317],{"class":167},[155,5780,2222],{"class":171},[155,5782,5783],{"class":157,"line":2214},[155,5784,2228],{"class":161},[155,5786,5787],{"class":157,"line":2225},[155,5788,2234],{"class":171},[155,5790,5791],{"class":157,"line":2231},[155,5792,2240],{"class":161},[155,5794,5795],{"class":157,"line":2237},[155,5796,2246],{"class":161},[155,5798,5799,5801,5803],{"class":157,"line":2243},[155,5800,2252],{"class":171},[155,5802,317],{"class":167},[155,5804,2257],{"class":171},[155,5806,5807],{"class":157,"line":2249},[155,5808,2263],{"class":161},[155,5810,5811,5813,5815,5817,5819,5821,5823],{"class":157,"line":2260},[155,5812,2269],{"class":171},[155,5814,317],{"class":167},[155,5816,2274],{"class":171},[155,5818,2277],{"class":323},[155,5820,317],{"class":167},[155,5822,329],{"class":263},[155,5824,363],{"class":171},[155,5826,5827],{"class":157,"line":2266},[155,5828,2289],{"class":161},[155,5830,5831,5833,5835],{"class":157,"line":2286},[155,5832,2295],{"class":171},[155,5834,317],{"class":167},[155,5836,2300],{"class":171},[155,5838,5839],{"class":157,"line":2292},[155,5840,2306],{"class":161},[155,5842,5843],{"class":157,"line":2303},[155,5844,2312],{"class":171},[155,5846,5847],{"class":157,"line":2309},[155,5848,2318],{"class":161},[155,5850,5851],{"class":157,"line":2315},[155,5852,2324],{"class":171},[155,5854,5855],{"class":157,"line":2321},[155,5856,2330],{"class":161},[155,5858,5859],{"class":157,"line":2327},[155,5860,2336],{"class":171},[155,5862,5863],{"class":157,"line":2333},[155,5864,2342],{"class":161},[155,5866,5867,5869,5871,5873,5875,5877,5879],{"class":157,"line":2339},[155,5868,2348],{"class":171},[155,5870,2351],{"class":167},[155,5872,2354],{"class":171},[155,5874,1563],{"class":167},[155,5876,2359],{"class":171},[155,5878,1109],{"class":263},[155,5880,363],{"class":171},[155,5882,5883],{"class":157,"line":2345},[155,5884,2369],{"class":161},[155,5886,5887,5889,5891,5893,5895],{"class":157,"line":2366},[155,5888,2375],{"class":171},[155,5890,2351],{"class":167},[155,5892,2380],{"class":171},[155,5894,729],{"class":167},[155,5896,2385],{"class":171},[155,5898,5899],{"class":157,"line":2372},[155,5900,2391],{"class":161},[155,5902,5903,5905,5907,5909,5911],{"class":157,"line":2388},[155,5904,2397],{"class":171},[155,5906,2351],{"class":167},[155,5908,2359],{"class":171},[155,5910,1109],{"class":263},[155,5912,363],{"class":171},[155,5914,5915],{"class":157,"line":2394},[155,5916,2411],{"class":161},[155,5918,5919,5921,5923,5925,5927],{"class":157,"line":2408},[155,5920,2179],{"class":167},[155,5922,2419],{"class":171},[155,5924,1131],{"class":167},[155,5926,1134],{"class":263},[155,5928,2426],{"class":171},[155,5930,5931],{"class":157,"line":2414},[155,5932,2432],{"class":161},[155,5934,5935,5937,5939],{"class":157,"line":2429},[155,5936,2200],{"class":171},[155,5938,317],{"class":167},[155,5940,2205],{"class":171},[155,5942,5943],{"class":157,"line":2435},[155,5944,2447],{"class":161},[155,5946,5947,5949,5951],{"class":157,"line":2444},[155,5948,2217],{"class":171},[155,5950,317],{"class":167},[155,5952,2222],{"class":171},[155,5954,5955],{"class":157,"line":2450},[155,5956,2462],{"class":161},[155,5958,5959],{"class":157,"line":2459},[155,5960,2468],{"class":171},[155,5962,5963],{"class":157,"line":2465},[155,5964,5965],{"class":161},"            # 验证时不计算梯度以节省内存\u002F计算\n",[155,5967,5968,5970],{"class":157,"line":2471},[155,5969,2474],{"class":167},[155,5971,2477],{"class":171},[155,5973,5974],{"class":157,"line":2480},[155,5975,2483],{"class":161},[155,5977,5978,5981,5983],{"class":157,"line":2486},[155,5979,5980],{"class":171},"                output",[155,5982,317],{"class":167},[155,5984,2257],{"class":171},[155,5986,5987],{"class":157,"line":2497},[155,5988,2500],{"class":161},[155,5990,5991,5994,5996,5998,6000,6002,6004],{"class":157,"line":2503},[155,5992,5993],{"class":171},"                pre_lab",[155,5995,317],{"class":167},[155,5997,2274],{"class":171},[155,5999,2277],{"class":323},[155,6001,317],{"class":167},[155,6003,329],{"class":263},[155,6005,363],{"class":171},[155,6007,6008],{"class":157,"line":2522},[155,6009,2525],{"class":161},[155,6011,6012,6015,6017],{"class":157,"line":2528},[155,6013,6014],{"class":171},"                val_batch_loss",[155,6016,317],{"class":167},[155,6018,2300],{"class":171},[155,6020,6021],{"class":157,"line":2539},[155,6022,2542],{"class":161},[155,6024,6025,6028,6030,6033,6035,6037,6039],{"class":157,"line":2545},[155,6026,6027],{"class":171},"                val_loss",[155,6029,2351],{"class":167},[155,6031,6032],{"class":171},"val_batch_loss.item()",[155,6034,1563],{"class":167},[155,6036,2359],{"class":171},[155,6038,1109],{"class":263},[155,6040,363],{"class":171},[155,6042,6043,6046,6048,6050,6052],{"class":157,"line":2565},[155,6044,6045],{"class":171},"                val_corrects",[155,6047,2351],{"class":167},[155,6049,2380],{"class":171},[155,6051,729],{"class":167},[155,6053,2385],{"class":171},[155,6055,6056],{"class":157,"line":2581},[155,6057,6058],{"class":161},"            # 当前用于验证的样本数量\n",[155,6060,6061,6064,6066,6068,6070],{"class":157,"line":2587},[155,6062,6063],{"class":171},"            val_num",[155,6065,2351],{"class":167},[155,6067,2359],{"class":171},[155,6069,1109],{"class":263},[155,6071,363],{"class":171},[155,6073,6074],{"class":157,"line":2601},[155,6075,2604],{"class":161},[155,6077,6078],{"class":157,"line":2607},[155,6079,2610],{"class":161},[155,6081,6082,6084,6086],{"class":157,"line":2613},[155,6083,2616],{"class":171},[155,6085,2028],{"class":167},[155,6087,2621],{"class":171},[155,6089,6090],{"class":157,"line":2624},[155,6091,2627],{"class":161},[155,6093,6094],{"class":157,"line":2630},[155,6095,2633],{"class":161},[155,6097,6098,6100,6102],{"class":157,"line":2636},[155,6099,2639],{"class":171},[155,6101,2028],{"class":167},[155,6103,2621],{"class":171},[155,6105,6106],{"class":157,"line":2646},[155,6107,2649],{"class":161},[155,6109,6110,6112,6114],{"class":157,"line":2652},[155,6111,2655],{"class":171},[155,6113,2028],{"class":167},[155,6115,2660],{"class":171},[155,6117,6118],{"class":157,"line":2663},[155,6119,2666],{"class":161},[155,6121,6122,6124,6126],{"class":157,"line":2669},[155,6123,2672],{"class":171},[155,6125,2028],{"class":167},[155,6127,2660],{"class":171},[155,6129,6130],{"class":157,"line":2679},[155,6131,217],{"emptyLinePlaceholder":216},[155,6133,6134],{"class":157,"line":2684},[155,6135,2687],{"class":161},[155,6137,6138,6140,6142,6144,6146,6148,6150,6152,6154,6156,6158,6160,6162,6164,6166,6168,6170,6172,6174,6176],{"class":157,"line":2690},[155,6139,2017],{"class":263},[155,6141,230],{"class":171},[155,6143,2697],{"class":732},[155,6145,2025],{"class":263},[155,6147,2702],{"class":732},[155,6149,2705],{"class":263},[155,6151,2708],{"class":167},[155,6153,2711],{"class":263},[155,6155,2714],{"class":732},[155,6157,2705],{"class":263},[155,6159,2708],{"class":167},[155,6161,2711],{"class":263},[155,6163,2697],{"class":732},[155,6165,2725],{"class":171},[155,6167,2039],{"class":167},[155,6169,329],{"class":263},[155,6171,2732],{"class":171},[155,6173,2039],{"class":167},[155,6175,329],{"class":263},[155,6177,2739],{"class":171},[155,6179,6180,6182,6184,6186,6188,6190,6192,6194,6196,6198,6200,6202,6204,6206,6208,6210,6212,6214,6216,6218],{"class":157,"line":2742},[155,6181,2017],{"class":263},[155,6183,230],{"class":171},[155,6185,2697],{"class":732},[155,6187,2025],{"class":263},[155,6189,2753],{"class":732},[155,6191,2705],{"class":263},[155,6193,2708],{"class":167},[155,6195,2711],{"class":263},[155,6197,2762],{"class":732},[155,6199,2705],{"class":263},[155,6201,2708],{"class":167},[155,6203,2711],{"class":263},[155,6205,2697],{"class":732},[155,6207,2773],{"class":171},[155,6209,2039],{"class":167},[155,6211,329],{"class":263},[155,6213,2780],{"class":171},[155,6215,2039],{"class":167},[155,6217,329],{"class":263},[155,6219,2739],{"class":171},[155,6221,6222],{"class":157,"line":2789},[155,6223,217],{"emptyLinePlaceholder":216},[155,6225,6226],{"class":157,"line":2794},[155,6227,2797],{"class":161},[155,6229,6230,6232,6234,6236,6238,6240,6242],{"class":157,"line":2800},[155,6231,2803],{"class":167},[155,6233,2806],{"class":171},[155,6235,2039],{"class":167},[155,6237,329],{"class":263},[155,6239,2813],{"class":171},[155,6241,1148],{"class":167},[155,6243,2818],{"class":171},[155,6245,6246],{"class":157,"line":2821},[155,6247,2824],{"class":161},[155,6249,6250,6252,6254,6256,6258,6260,6262],{"class":157,"line":2827},[155,6251,2830],{"class":171},[155,6253,2833],{"class":263},[155,6255,317],{"class":167},[155,6257,2838],{"class":171},[155,6259,2039],{"class":167},[155,6261,329],{"class":263},[155,6263,2845],{"class":171},[155,6265,6266],{"class":157,"line":2848},[155,6267,2851],{"class":161},[155,6269,6270],{"class":157,"line":2854},[155,6271,2857],{"class":161},[155,6273,6274,6276,6278],{"class":157,"line":2860},[155,6275,2863],{"class":171},[155,6277,317],{"class":167},[155,6279,1858],{"class":171},[155,6281,6282],{"class":157,"line":2870},[155,6283,217],{"emptyLinePlaceholder":216},[155,6285,6286],{"class":157,"line":2875},[155,6287,2878],{"class":161},[155,6289,6290,6292,6294,6296,6298],{"class":157,"line":2881},[155,6291,2884],{"class":171},[155,6293,317],{"class":167},[155,6295,2889],{"class":171},[155,6297,2039],{"class":167},[155,6299,2894],{"class":171},[155,6301,6302,6304,6306,6308,6310,6312,6314,6316,6318,6320,6322,6324,6326,6328,6330,6332,6334,6336],{"class":157,"line":2897},[155,6303,2017],{"class":263},[155,6305,230],{"class":171},[155,6307,2904],{"class":732},[155,6309,2705],{"class":263},[155,6311,2909],{"class":167},[155,6313,2711],{"class":263},[155,6315,2914],{"class":732},[155,6317,2705],{"class":263},[155,6319,2909],{"class":167},[155,6321,2711],{"class":263},[155,6323,2923],{"class":732},[155,6325,2926],{"class":171},[155,6327,2929],{"class":167},[155,6329,2932],{"class":263},[155,6331,2935],{"class":171},[155,6333,2938],{"class":167},[155,6335,2932],{"class":263},[155,6337,1238],{"class":171},[155,6339,6340],{"class":157,"line":2945},[155,6341,6342],{"class":161},"    # 选择最优参数并保存\n",[155,6344,6345],{"class":157,"line":2951},[155,6346,6347],{"class":161},"    # 保存最佳模型权重字典\n",[155,6349,6350,6353,6355],{"class":157,"line":2957},[155,6351,6352],{"class":171},"    torch.save(best_model_wts,",[155,6354,2969],{"class":732},[155,6356,363],{"class":171},[155,6358,6359],{"class":157,"line":2963},[155,6360,2989],{"class":161},[155,6362,6363,6365,6367,6369,6371,6373],{"class":157,"line":2974},[155,6364,2995],{"class":171},[155,6366,317],{"class":167},[155,6368,3000],{"class":171},[155,6370,3003],{"class":323},[155,6372,317],{"class":167},[155,6374,3008],{"class":171},[155,6376,6377,6379,6381,6383],{"class":157,"line":2980},[155,6378,3014],{"class":732},[155,6380,3017],{"class":171},[155,6382,3020],{"class":263},[155,6384,3023],{"class":171},[155,6386,6387,6389],{"class":157,"line":2986},[155,6388,3029],{"class":732},[155,6390,3032],{"class":171},[155,6392,6393,6395],{"class":157,"line":2992},[155,6394,3038],{"class":732},[155,6396,3041],{"class":171},[155,6398,6399,6401],{"class":157,"line":3011},[155,6400,3047],{"class":732},[155,6402,3050],{"class":171},[155,6404,6405,6407],{"class":157,"line":3026},[155,6406,3056],{"class":732},[155,6408,3059],{"class":171},[155,6410,6411],{"class":157,"line":3035},[155,6412,3065],{"class":171},[155,6414,6415],{"class":157,"line":3044},[155,6416,3071],{"class":161},[155,6418,6419,6421],{"class":157,"line":3053},[155,6420,1692],{"class":167},[155,6422,3079],{"class":171},[155,6424,6425],{"class":157,"line":3062},[155,6426,217],{"emptyLinePlaceholder":216},[155,6428,6429],{"class":157,"line":3068},[155,6430,3090],{"class":161},[155,6432,6433,6435,6437],{"class":157,"line":3074},[155,6434,1484],{"class":167},[155,6436,3098],{"class":226},[155,6438,3101],{"class":171},[155,6440,6441],{"class":157,"line":3082},[155,6442,3107],{"class":161},[155,6444,6445,6447,6449,6451,6453,6455,6457,6459],{"class":157,"line":3087},[155,6446,3113],{"class":171},[155,6448,1224],{"class":323},[155,6450,317],{"class":167},[155,6452,230],{"class":171},[155,6454,1231],{"class":263},[155,6456,332],{"class":171},[155,6458,1264],{"class":263},[155,6460,1238],{"class":171},[155,6462,6463],{"class":157,"line":3093},[155,6464,3133],{"class":161},[155,6466,6467],{"class":157,"line":3104},[155,6468,3139],{"class":161},[155,6470,6471],{"class":157,"line":3110},[155,6472,3145],{"class":161},[155,6474,6475,6477,6479,6481,6483,6485,6487],{"class":157,"line":3130},[155,6476,1261],{"class":171},[155,6478,329],{"class":263},[155,6480,332],{"class":171},[155,6482,360],{"class":263},[155,6484,332],{"class":171},[155,6486,329],{"class":263},[155,6488,363],{"class":171},[155,6490,6491],{"class":157,"line":3136},[155,6492,3168],{"class":161},[155,6494,6495],{"class":157,"line":3142},[155,6496,3174],{"class":161},[155,6498,6499],{"class":157,"line":3148},[155,6500,3180],{"class":161},[155,6502,6503],{"class":157,"line":3165},[155,6504,3186],{"class":161},[155,6506,6507],{"class":157,"line":3171},[155,6508,3192],{"class":161},[155,6510,6511,6513,6515,6517,6519,6521,6523,6525,6527],{"class":157,"line":3177},[155,6512,3198],{"class":171},[155,6514,3201],{"class":732},[155,6516,3204],{"class":171},[155,6518,3207],{"class":732},[155,6520,332],{"class":171},[155,6522,3212],{"class":323},[155,6524,317],{"class":167},[155,6526,3217],{"class":732},[155,6528,363],{"class":171},[155,6530,6531,6533,6535,6537,6539,6541,6543,6545,6547],{"class":157,"line":3183},[155,6532,3198],{"class":171},[155,6534,3201],{"class":732},[155,6536,3229],{"class":171},[155,6538,3232],{"class":732},[155,6540,332],{"class":171},[155,6542,3212],{"class":323},[155,6544,317],{"class":167},[155,6546,3241],{"class":732},[155,6548,363],{"class":171},[155,6550,6551],{"class":157,"line":3189},[155,6552,3249],{"class":161},[155,6554,6555],{"class":157,"line":3195},[155,6556,3255],{"class":171},[155,6558,6559],{"class":157,"line":3222},[155,6560,3261],{"class":161},[155,6562,6563,6565,6567],{"class":157,"line":3246},[155,6564,3267],{"class":171},[155,6566,3270],{"class":732},[155,6568,363],{"class":171},[155,6570,6571,6573,6575],{"class":157,"line":3252},[155,6572,3278],{"class":171},[155,6574,3281],{"class":732},[155,6576,363],{"class":171},[155,6578,6579],{"class":157,"line":3258},[155,6580,3289],{"class":161},[155,6582,6583,6585,6587,6589,6591,6593,6595],{"class":157,"line":3264},[155,6584,1261],{"class":171},[155,6586,329],{"class":263},[155,6588,332],{"class":171},[155,6590,360],{"class":263},[155,6592,332],{"class":171},[155,6594,360],{"class":263},[155,6596,363],{"class":171},[155,6598,6599,6601,6603,6605,6607,6609,6611,6613,6615],{"class":157,"line":3275},[155,6600,3198],{"class":171},[155,6602,3201],{"class":732},[155,6604,3316],{"class":171},[155,6606,3207],{"class":732},[155,6608,332],{"class":171},[155,6610,3212],{"class":323},[155,6612,317],{"class":167},[155,6614,3327],{"class":732},[155,6616,363],{"class":171},[155,6618,6619,6621,6623,6625,6627,6629,6631,6633,6635],{"class":157,"line":3286},[155,6620,3198],{"class":171},[155,6622,3201],{"class":732},[155,6624,3339],{"class":171},[155,6626,3232],{"class":732},[155,6628,332],{"class":171},[155,6630,3212],{"class":323},[155,6632,317],{"class":167},[155,6634,3350],{"class":732},[155,6636,363],{"class":171},[155,6638,6639],{"class":157,"line":3292},[155,6640,3358],{"class":161},[155,6642,6643],{"class":157,"line":3309},[155,6644,3255],{"class":171},[155,6646,6647,6649,6651],{"class":157,"line":3332},[155,6648,3267],{"class":171},[155,6650,3201],{"class":732},[155,6652,363],{"class":171},[155,6654,6655,6657,6659],{"class":157,"line":3355},[155,6656,3278],{"class":171},[155,6658,3380],{"class":732},[155,6660,363],{"class":171},[155,6662,6663],{"class":157,"line":3361},[155,6664,3388],{"class":171},[155,6666,6667],{"class":157,"line":3366},[155,6668,217],{"emptyLinePlaceholder":216},[155,6670,6671],{"class":157,"line":3375},[155,6672,3399],{"class":161},[155,6674,6675,6677,6679,6681,6683],{"class":157,"line":3385},[155,6676,723],{"class":167},[155,6678,726],{"class":263},[155,6680,729],{"class":167},[155,6682,733],{"class":732},[155,6684,736],{"class":171},[155,6686,6687],{"class":157,"line":3391},[155,6688,3418],{"class":161},[155,6690,6691,6694,6696],{"class":157,"line":3396},[155,6692,6693],{"class":171},"    AlexNet",[155,6695,317],{"class":167},[155,6697,6698],{"class":171},"AlexNet()\n",[155,6700,6701,6703,6705],{"class":157,"line":3402},[155,6702,3435],{"class":171},[155,6704,317],{"class":167},[155,6706,3440],{"class":171},[155,6708,6709,6711,6713,6716,6718,6720,6722],{"class":157,"line":3415},[155,6710,2995],{"class":171},[155,6712,317],{"class":167},[155,6714,6715],{"class":171},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[155,6717,3453],{"class":323},[155,6719,317],{"class":167},[155,6721,3458],{"class":263},[155,6723,363],{"class":171},[155,6725,6726],{"class":157,"line":3421},[155,6727,3466],{"class":171},[28,6729,6730],{"start":121},[31,6731,3479],{},[146,6733,6735],{"className":148,"code":6734,"language":150,"meta":39,"style":39},"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",[152,6736,6737,6743,6753,6763,6773,6777,6787,6797,6808,6812,6816,6820,6828,6844,6854,6870,6880,6894,6898,6908,6918,6928,6934,6938,6942,6950,6954,6970,6978,6982,6986,6994,7002,7006,7010,7014,7018,7024,7028,7038,7046,7054,7058,7062,7066,7074,7078,7094,7098,7102,7106,7118,7122,7134,7138,7142,7154,7158,7168,7172,7176,7188,7192,7200,7204,7208,7216,7220,7228,7232,7236,7240,7244,7248,7264,7272,7276,7280,7328,7334,7338,7348,7356,7364,7368,7372,7376,7380,7388,7392,7408,7412,7420,7428],{"__ignoreMap":39},[155,6738,6739,6741],{"class":157,"line":158},[155,6740,168],{"class":167},[155,6742,172],{"class":171},[155,6744,6745,6747,6749,6751],{"class":157,"line":46},[155,6746,168],{"class":167},[155,6748,939],{"class":171},[155,6750,907],{"class":167},[155,6752,944],{"class":171},[155,6754,6755,6757,6759,6761],{"class":157,"line":121},[155,6756,183],{"class":167},[155,6758,3507],{"class":171},[155,6760,168],{"class":167},[155,6762,3512],{"class":171},[155,6764,6765,6767,6769,6771],{"class":157,"line":180},[155,6766,183],{"class":167},[155,6768,922],{"class":171},[155,6770,168],{"class":167},[155,6772,927],{"class":171},[155,6774,6775],{"class":157,"line":194},[155,6776,3527],{"class":161},[155,6778,6779,6781,6783,6785],{"class":157,"line":200},[155,6780,183],{"class":167},[155,6782,892],{"class":171},[155,6784,168],{"class":167},[155,6786,897],{"class":171},[155,6788,6789,6791,6793,6795],{"class":157,"line":213},[155,6790,183],{"class":167},[155,6792,1451],{"class":171},[155,6794,168],{"class":167},[155,6796,5166],{"class":171},[155,6798,6799,6801,6804,6806],{"class":157,"line":220},[155,6800,183],{"class":167},[155,6802,6803],{"class":171}," 练习.AlexNet.model ",[155,6805,168],{"class":167},[155,6807,5166],{"class":171},[155,6809,6810],{"class":157,"line":245},[155,6811,217],{"emptyLinePlaceholder":216},[155,6813,6814],{"class":157,"line":251},[155,6815,217],{"emptyLinePlaceholder":216},[155,6817,6818],{"class":157,"line":257},[155,6819,3556],{"class":161},[155,6821,6822,6824,6826],{"class":157,"line":270},[155,6823,1484],{"class":167},[155,6825,3563],{"class":226},[155,6827,1490],{"class":171},[155,6829,6830,6832,6834,6836,6838,6840,6842],{"class":157,"line":276},[155,6831,3570],{"class":171},[155,6833,317],{"class":167},[155,6835,979],{"class":171},[155,6837,982],{"class":323},[155,6839,317],{"class":167},[155,6841,987],{"class":732},[155,6843,990],{"class":171},[155,6845,6846,6848,6850,6852],{"class":157,"line":297},[155,6847,3587],{"class":323},[155,6849,317],{"class":167},[155,6851,3592],{"class":263},[155,6853,990],{"class":171},[155,6855,6856,6858,6860,6862,6864,6866,6868],{"class":157,"line":302},[155,6857,3599],{"class":323},[155,6859,317],{"class":167},[155,6861,1017],{"class":171},[155,6863,1020],{"class":323},[155,6865,317],{"class":167},[155,6867,5058],{"class":263},[155,6869,1028],{"class":171},[155,6871,6872,6874,6876,6878],{"class":157,"line":308},[155,6873,3616],{"class":323},[155,6875,317],{"class":167},[155,6877,1000],{"class":263},[155,6879,363],{"class":171},[155,6881,6882,6884,6886,6888,6890,6892],{"class":157,"line":366},[155,6883,3627],{"class":171},[155,6885,317],{"class":167},[155,6887,1058],{"class":171},[155,6889,1061],{"class":323},[155,6891,317],{"class":167},[155,6893,3638],{"class":171},[155,6895,6896],{"class":157,"line":379},[155,6897,3643],{"class":161},[155,6899,6900,6902,6904,6906],{"class":157,"line":385},[155,6901,3648],{"class":323},[155,6903,317],{"class":167},[155,6905,329],{"class":263},[155,6907,990],{"class":171},[155,6909,6910,6912,6914,6916],{"class":157,"line":415},[155,6911,3659],{"class":323},[155,6913,317],{"class":167},[155,6915,1000],{"class":263},[155,6917,990],{"class":171},[155,6919,6920,6922,6924,6926],{"class":157,"line":452},[155,6921,3670],{"class":323},[155,6923,317],{"class":167},[155,6925,1109],{"class":263},[155,6927,363],{"class":171},[155,6929,6930,6932],{"class":157,"line":480},[155,6931,1692],{"class":167},[155,6933,3683],{"class":171},[155,6935,6936],{"class":157,"line":486},[155,6937,217],{"emptyLinePlaceholder":216},[155,6939,6940],{"class":157,"line":499},[155,6941,3692],{"class":161},[155,6943,6944,6946,6948],{"class":157,"line":505},[155,6945,1484],{"class":167},[155,6947,3699],{"class":226},[155,6949,3702],{"class":171},[155,6951,6952],{"class":157,"line":528},[155,6953,3707],{"class":161},[155,6955,6956,6958,6960,6962,6964,6966,6968],{"class":157,"line":549},[155,6957,748],{"class":171},[155,6959,317],{"class":167},[155,6961,756],{"class":732},[155,6963,759],{"class":167},[155,6965,762],{"class":171},[155,6967,765],{"class":167},[155,6969,3724],{"class":732},[155,6971,6972,6974,6976],{"class":157,"line":570},[155,6973,811],{"class":171},[155,6975,317],{"class":167},[155,6977,1829],{"class":171},[155,6979,6980],{"class":157,"line":575},[155,6981,217],{"emptyLinePlaceholder":216},[155,6983,6984],{"class":157,"line":581},[155,6985,3741],{"class":161},[155,6987,6988,6990,6992],{"class":157,"line":592},[155,6989,3746],{"class":171},[155,6991,317],{"class":167},[155,6993,1891],{"class":263},[155,6995,6996,6998,7000],{"class":157,"line":610},[155,6997,3755],{"class":171},[155,6999,317],{"class":167},[155,7001,2103],{"class":263},[155,7003,7004],{"class":157,"line":622},[155,7005,217],{"emptyLinePlaceholder":216},[155,7007,7008],{"class":157,"line":638},[155,7009,3768],{"class":161},[155,7011,7012],{"class":157,"line":650},[155,7013,3773],{"class":161},[155,7015,7016],{"class":157,"line":662},[155,7017,3778],{"class":161},[155,7019,7020,7022],{"class":157,"line":678},[155,7021,3783],{"class":167},[155,7023,2477],{"class":171},[155,7025,7026],{"class":157,"line":694},[155,7027,3790],{"class":161},[155,7029,7030,7032,7034,7036],{"class":157,"line":706},[155,7031,2179],{"class":167},[155,7033,3797],{"class":171},[155,7035,1131],{"class":167},[155,7037,3802],{"class":171},[155,7039,7040,7042,7044],{"class":157,"line":715},[155,7041,3807],{"class":171},[155,7043,317],{"class":167},[155,7045,3812],{"class":171},[155,7047,7048,7050,7052],{"class":157,"line":720},[155,7049,3817],{"class":171},[155,7051,317],{"class":167},[155,7053,3822],{"class":171},[155,7055,7056],{"class":157,"line":739},[155,7057,3827],{"class":161},[155,7059,7060],{"class":157,"line":745},[155,7061,2468],{"class":171},[155,7063,7064],{"class":157,"line":773},[155,7065,3836],{"class":161},[155,7067,7068,7070,7072],{"class":157,"line":779},[155,7069,2252],{"class":171},[155,7071,317],{"class":167},[155,7073,3845],{"class":171},[155,7075,7076],{"class":157,"line":785},[155,7077,3850],{"class":161},[155,7079,7080,7082,7084,7086,7088,7090,7092],{"class":157,"line":791},[155,7081,2269],{"class":171},[155,7083,317],{"class":167},[155,7085,2274],{"class":171},[155,7087,2277],{"class":323},[155,7089,317],{"class":167},[155,7091,329],{"class":263},[155,7093,363],{"class":171},[155,7095,7096],{"class":157,"line":796},[155,7097,3871],{"class":161},[155,7099,7100],{"class":157,"line":802},[155,7101,3876],{"class":161},[155,7103,7104],{"class":157,"line":808},[155,7105,3881],{"class":161},[155,7107,7108,7110,7112,7114,7116],{"class":157,"line":819},[155,7109,3886],{"class":171},[155,7111,2351],{"class":167},[155,7113,2380],{"class":171},[155,7115,729],{"class":167},[155,7117,3895],{"class":171},[155,7119,7120],{"class":157,"line":1832},[155,7121,3900],{"class":161},[155,7123,7124,7126,7128,7130,7132],{"class":157,"line":1838},[155,7125,3905],{"class":171},[155,7127,2351],{"class":167},[155,7129,3910],{"class":171},[155,7131,1109],{"class":263},[155,7133,363],{"class":171},[155,7135,7136],{"class":157,"line":1844},[155,7137,217],{"emptyLinePlaceholder":216},[155,7139,7140],{"class":157,"line":1850},[155,7141,3923],{"class":161},[155,7143,7144,7146,7148,7150,7152],{"class":157,"line":1861},[155,7145,3928],{"class":171},[155,7147,317],{"class":167},[155,7149,3933],{"class":171},[155,7151,2028],{"class":167},[155,7153,3938],{"class":171},[155,7155,7156],{"class":157,"line":1866},[155,7157,3943],{"class":161},[155,7159,7160,7162,7164,7166],{"class":157,"line":1871},[155,7161,2017],{"class":263},[155,7163,230],{"class":171},[155,7165,3952],{"class":732},[155,7167,3955],{"class":171},[155,7169,7170],{"class":157,"line":1877},[155,7171,217],{"emptyLinePlaceholder":216},[155,7173,7174],{"class":157,"line":1883},[155,7175,3964],{"class":161},[155,7177,7178,7180,7182,7184,7186],{"class":157,"line":1894},[155,7179,723],{"class":167},[155,7181,726],{"class":263},[155,7183,729],{"class":167},[155,7185,733],{"class":732},[155,7187,736],{"class":171},[155,7189,7190],{"class":157,"line":1900},[155,7191,3981],{"class":161},[155,7193,7194,7196,7198],{"class":157,"line":1911},[155,7195,811],{"class":171},[155,7197,317],{"class":167},[155,7199,6698],{"class":171},[155,7201,7202],{"class":157,"line":1917},[155,7203,3994],{"class":161},[155,7205,7206],{"class":157,"line":1927},[155,7207,3999],{"class":161},[155,7209,7210,7212,7214],{"class":157,"line":1933},[155,7211,4004],{"class":171},[155,7213,4007],{"class":732},[155,7215,1238],{"class":171},[155,7217,7218],{"class":157,"line":1943},[155,7219,4014],{"class":161},[155,7221,7222,7224,7226],{"class":157,"line":1949},[155,7223,3627],{"class":171},[155,7225,317],{"class":167},[155,7227,4023],{"class":171},[155,7229,7230],{"class":157,"line":1959},[155,7231,4028],{"class":161},[155,7233,7234],{"class":157,"line":1964},[155,7235,4033],{"class":171},[155,7237,7238],{"class":157,"line":1970},[155,7239,217],{"emptyLinePlaceholder":216},[155,7241,7242],{"class":157,"line":1981},[155,7243,4042],{"class":161},[155,7245,7246],{"class":157,"line":1986},[155,7247,4047],{"class":161},[155,7249,7250,7252,7254,7256,7258,7260,7262],{"class":157,"line":1991},[155,7251,748],{"class":171},[155,7253,317],{"class":167},[155,7255,756],{"class":732},[155,7257,759],{"class":167},[155,7259,762],{"class":171},[155,7261,765],{"class":167},[155,7263,3724],{"class":732},[155,7265,7266,7268,7270],{"class":157,"line":1997},[155,7267,811],{"class":171},[155,7269,317],{"class":167},[155,7271,1829],{"class":171},[155,7273,7274],{"class":157,"line":2014},[155,7275,4076],{"class":161},[155,7277,7278],{"class":157,"line":2046},[155,7279,4081],{"class":161},[155,7281,7282,7284,7286,7288,7290,7292,7294,7296,7298,7300,7302,7304,7306,7308,7310,7312,7314,7316,7318,7320,7322,7324,7326],{"class":157,"line":2062},[155,7283,4086],{"class":171},[155,7285,317],{"class":167},[155,7287,4091],{"class":171},[155,7289,4094],{"class":732},[155,7291,332],{"class":171},[155,7293,4099],{"class":732},[155,7295,332],{"class":171},[155,7297,4104],{"class":732},[155,7299,332],{"class":171},[155,7301,4109],{"class":732},[155,7303,332],{"class":171},[155,7305,4114],{"class":732},[155,7307,332],{"class":171},[155,7309,4119],{"class":732},[155,7311,332],{"class":171},[155,7313,4124],{"class":732},[155,7315,332],{"class":171},[155,7317,4129],{"class":732},[155,7319,332],{"class":171},[155,7321,4134],{"class":732},[155,7323,332],{"class":171},[155,7325,4139],{"class":732},[155,7327,2845],{"class":171},[155,7329,7330,7332],{"class":157,"line":2067},[155,7331,3783],{"class":167},[155,7333,2477],{"class":171},[155,7335,7336],{"class":157,"line":2073},[155,7337,4152],{"class":161},[155,7339,7340,7342,7344,7346],{"class":157,"line":2079},[155,7341,2179],{"class":167},[155,7343,4159],{"class":171},[155,7345,1131],{"class":167},[155,7347,3802],{"class":171},[155,7349,7350,7352,7354],{"class":157,"line":2089},[155,7351,2200],{"class":171},[155,7353,317],{"class":167},[155,7355,2205],{"class":171},[155,7357,7358,7360,7362],{"class":157,"line":2095},[155,7359,2217],{"class":171},[155,7361,317],{"class":167},[155,7363,2222],{"class":171},[155,7365,7366],{"class":157,"line":2106},[155,7367,217],{"emptyLinePlaceholder":216},[155,7369,7370],{"class":157,"line":2112},[155,7371,4188],{"class":161},[155,7373,7374],{"class":157,"line":2122},[155,7375,2468],{"class":171},[155,7377,7378],{"class":157,"line":2128},[155,7379,4197],{"class":161},[155,7381,7382,7384,7386],{"class":157,"line":2138},[155,7383,2252],{"class":171},[155,7385,317],{"class":167},[155,7387,2257],{"class":171},[155,7389,7390],{"class":157,"line":2144},[155,7391,4210],{"class":161},[155,7393,7394,7396,7398,7400,7402,7404,7406],{"class":157,"line":2154},[155,7395,2269],{"class":171},[155,7397,317],{"class":167},[155,7399,2274],{"class":171},[155,7401,2277],{"class":323},[155,7403,317],{"class":167},[155,7405,329],{"class":263},[155,7407,363],{"class":171},[155,7409,7410],{"class":157,"line":2160},[155,7411,4231],{"class":161},[155,7413,7414,7416,7418],{"class":157,"line":2170},[155,7415,4236],{"class":171},[155,7417,317],{"class":167},[155,7419,4241],{"class":171},[155,7421,7422,7424,7426],{"class":157,"line":2176},[155,7423,4246],{"class":171},[155,7425,317],{"class":167},[155,7427,4251],{"class":171},[155,7429,7430,7432,7434,7436,7438,7440,7442,7444],{"class":157,"line":2191},[155,7431,4256],{"class":263},[155,7433,230],{"class":171},[155,7435,4261],{"class":732},[155,7437,4264],{"class":171},[155,7439,4267],{"class":732},[155,7441,332],{"class":171},[155,7443,4272],{"class":732},[155,7445,4275],{"class":171},[14,7447,7449],{"id":7448},"_22vgg","2.2.VGG",[19,7451,7453],{"id":7452},"_221原理","2.2.1.原理",[24,7455,7456],{},[37,7457],{"alt":39,"src":7458},"\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",[24,7460,7461],{},[37,7462],{"alt":39,"src":7463},"\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",[24,7465,7466],{},[37,7467],{"alt":39,"src":7468},"\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",[24,7470,7471],{},"参数详细描述：",[24,7473,7474],{},[37,7475],{"alt":39,"src":7476},"\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",[24,7478,7479],{},[37,7480],{"alt":39,"src":7481},"\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",[24,7483,7484],{},[37,7485],{"alt":39,"src":7486},"\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",[24,7488,7489],{},[37,7490],{"alt":39,"src":7491},"\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",[24,7493,7494],{},[37,7495],{"alt":39,"src":7496},"\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",[19,7498,7500],{"id":7499},"_222代码实现","2.2.2.代码实现",[28,7502,7503],{},[31,7504,7505],{},"网络搭建",[146,7507,7509],{"className":148,"code":7508,"language":150,"meta":39,"style":39},"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",[152,7510,7511,7517,7529,7539,7549,7553,7570,7578,7598,7603,7608,7620,7658,7663,7699,7703,7732,7737,7742,7753,7789,7793,7829,7833,7861,7865,7870,7881,7917,7921,7957,7961,7997,8001,8029,8033,8038,8049,8086,8090,8126,8130,8166,8170,8198,8202,8207,8218,8254,8258,8294,8298,8334,8338,8366,8370,8375,8386,8391,8396,8401,8423,8427,8439,8443,8455,8459,8463,8468,8473,8488,8493,8504,8509,8524,8529,8548,8553,8562,8567,8577,8582,8587,8601,8606,8620,8628,8632,8636,8644,8655,8666,8677,8688,8699,8710,8716,8720,8725,8738,8758,8765,8774],{"__ignoreMap":39},[155,7512,7513,7515],{"class":157,"line":158},[155,7514,168],{"class":167},[155,7516,172],{"class":171},[155,7518,7519,7521,7524,7526],{"class":157,"line":46},[155,7520,183],{"class":167},[155,7522,7523],{"class":171}," sympy.core.sympify ",[155,7525,168],{"class":167},[155,7527,7528],{"class":171}," kernS\n",[155,7530,7531,7533,7535,7537],{"class":157,"line":121},[155,7532,183],{"class":167},[155,7534,186],{"class":171},[155,7536,168],{"class":167},[155,7538,191],{"class":171},[155,7540,7541,7543,7545,7547],{"class":157,"line":180},[155,7542,183],{"class":167},[155,7544,205],{"class":171},[155,7546,168],{"class":167},[155,7548,210],{"class":171},[155,7550,7551],{"class":157,"line":194},[155,7552,217],{"emptyLinePlaceholder":216},[155,7554,7555,7557,7560,7562,7564,7566,7568],{"class":157,"line":200},[155,7556,223],{"class":167},[155,7558,7559],{"class":226}," VGG16",[155,7561,230],{"class":171},[155,7563,233],{"class":226},[155,7565,236],{"class":171},[155,7567,239],{"class":226},[155,7569,242],{"class":171},[155,7571,7572,7574,7576],{"class":157,"line":213},[155,7573,260],{"class":167},[155,7575,264],{"class":263},[155,7577,267],{"class":171},[155,7579,7580,7582,7584,7587,7590,7592,7594,7596],{"class":157,"line":220},[155,7581,279],{"class":263},[155,7583,230],{"class":171},[155,7585,7586],{"class":263},"VGG16",[155,7588,7589],{"class":171},", ",[155,7591,285],{"class":263},[155,7593,288],{"class":171},[155,7595,291],{"class":263},[155,7597,294],{"class":171},[155,7599,7600],{"class":157,"line":245},[155,7601,7602],{"class":161},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[155,7604,7605],{"class":157,"line":251},[155,7606,7607],{"class":161},"        # 这里用的是灰度图\n",[155,7609,7610,7612,7615,7617],{"class":157,"line":257},[155,7611,311],{"class":263},[155,7613,7614],{"class":171},".block1",[155,7616,317],{"class":167},[155,7618,7619],{"class":171},"nn.Sequential(\n",[155,7621,7622,7625,7627,7629,7631,7633,7635,7637,7639,7641,7643,7645,7647,7649,7651,7653,7655],{"class":157,"line":270},[155,7623,7624],{"class":171},"            nn.Conv2d(",[155,7626,324],{"class":323},[155,7628,317],{"class":167},[155,7630,329],{"class":263},[155,7632,332],{"class":171},[155,7634,335],{"class":323},[155,7636,317],{"class":167},[155,7638,1076],{"class":263},[155,7640,332],{"class":171},[155,7642,345],{"class":323},[155,7644,317],{"class":167},[155,7646,4444],{"class":263},[155,7648,332],{"class":171},[155,7650,355],{"class":323},[155,7652,317],{"class":167},[155,7654,329],{"class":263},[155,7656,7657],{"class":171},"),\n",[155,7659,7660],{"class":157,"line":276},[155,7661,7662],{"class":171},"            nn.ReLU(),\n",[155,7664,7665,7667,7669,7671,7673,7675,7677,7679,7681,7683,7685,7687,7689,7691,7693,7695,7697],{"class":157,"line":297},[155,7666,7624],{"class":171},[155,7668,324],{"class":323},[155,7670,317],{"class":167},[155,7672,1076],{"class":263},[155,7674,332],{"class":171},[155,7676,335],{"class":323},[155,7678,317],{"class":167},[155,7680,1076],{"class":263},[155,7682,332],{"class":171},[155,7684,345],{"class":323},[155,7686,317],{"class":167},[155,7688,4444],{"class":263},[155,7690,332],{"class":171},[155,7692,355],{"class":323},[155,7694,317],{"class":167},[155,7696,329],{"class":263},[155,7698,7657],{"class":171},[155,7700,7701],{"class":157,"line":302},[155,7702,7662],{"class":171},[155,7704,7705,7708,7710,7712,7714,7716,7718,7720,7722,7724,7726,7728,7730],{"class":157,"line":308},[155,7706,7707],{"class":171},"            nn.MaxPool2d(",[155,7709,345],{"class":323},[155,7711,317],{"class":167},[155,7713,360],{"class":263},[155,7715,332],{"class":171},[155,7717,406],{"class":323},[155,7719,317],{"class":167},[155,7721,360],{"class":263},[155,7723,332],{"class":171},[155,7725,355],{"class":323},[155,7727,317],{"class":167},[155,7729,1109],{"class":263},[155,7731,363],{"class":171},[155,7733,7734],{"class":157,"line":366},[155,7735,7736],{"class":171},"        )\n",[155,7738,7739],{"class":157,"line":379},[155,7740,7741],{"class":161},"        # 第二层\n",[155,7743,7744,7746,7749,7751],{"class":157,"line":385},[155,7745,311],{"class":263},[155,7747,7748],{"class":171},".block2",[155,7750,317],{"class":167},[155,7752,7619],{"class":171},[155,7754,7755,7757,7759,7761,7763,7765,7767,7769,7771,7773,7775,7777,7779,7781,7783,7785,7787],{"class":157,"line":415},[155,7756,7624],{"class":171},[155,7758,324],{"class":323},[155,7760,317],{"class":167},[155,7762,1076],{"class":263},[155,7764,332],{"class":171},[155,7766,335],{"class":323},[155,7768,317],{"class":167},[155,7770,1608],{"class":263},[155,7772,332],{"class":171},[155,7774,345],{"class":323},[155,7776,317],{"class":167},[155,7778,4444],{"class":263},[155,7780,332],{"class":171},[155,7782,355],{"class":323},[155,7784,317],{"class":167},[155,7786,329],{"class":263},[155,7788,7657],{"class":171},[155,7790,7791],{"class":157,"line":452},[155,7792,7662],{"class":171},[155,7794,7795,7797,7799,7801,7803,7805,7807,7809,7811,7813,7815,7817,7819,7821,7823,7825,7827],{"class":157,"line":480},[155,7796,7624],{"class":171},[155,7798,324],{"class":323},[155,7800,317],{"class":167},[155,7802,1608],{"class":263},[155,7804,332],{"class":171},[155,7806,335],{"class":323},[155,7808,317],{"class":167},[155,7810,1608],{"class":263},[155,7812,332],{"class":171},[155,7814,345],{"class":323},[155,7816,317],{"class":167},[155,7818,4444],{"class":263},[155,7820,332],{"class":171},[155,7822,355],{"class":323},[155,7824,317],{"class":167},[155,7826,329],{"class":263},[155,7828,7657],{"class":171},[155,7830,7831],{"class":157,"line":486},[155,7832,7662],{"class":171},[155,7834,7835,7837,7839,7841,7843,7845,7847,7849,7851,7853,7855,7857,7859],{"class":157,"line":499},[155,7836,7707],{"class":171},[155,7838,345],{"class":323},[155,7840,317],{"class":167},[155,7842,360],{"class":263},[155,7844,332],{"class":171},[155,7846,406],{"class":323},[155,7848,317],{"class":167},[155,7850,360],{"class":263},[155,7852,332],{"class":171},[155,7854,355],{"class":323},[155,7856,317],{"class":167},[155,7858,1109],{"class":263},[155,7860,363],{"class":171},[155,7862,7863],{"class":157,"line":505},[155,7864,7736],{"class":171},[155,7866,7867],{"class":157,"line":528},[155,7868,7869],{"class":161},"        # 第三层\n",[155,7871,7872,7874,7877,7879],{"class":157,"line":549},[155,7873,311],{"class":263},[155,7875,7876],{"class":171},".block3",[155,7878,317],{"class":167},[155,7880,7619],{"class":171},[155,7882,7883,7885,7887,7889,7891,7893,7895,7897,7899,7901,7903,7905,7907,7909,7911,7913,7915],{"class":157,"line":570},[155,7884,7624],{"class":171},[155,7886,324],{"class":323},[155,7888,317],{"class":167},[155,7890,1608],{"class":263},[155,7892,332],{"class":171},[155,7894,335],{"class":323},[155,7896,317],{"class":167},[155,7898,4479],{"class":263},[155,7900,332],{"class":171},[155,7902,345],{"class":323},[155,7904,317],{"class":167},[155,7906,4444],{"class":263},[155,7908,332],{"class":171},[155,7910,355],{"class":323},[155,7912,317],{"class":167},[155,7914,329],{"class":263},[155,7916,7657],{"class":171},[155,7918,7919],{"class":157,"line":575},[155,7920,7662],{"class":171},[155,7922,7923,7925,7927,7929,7931,7933,7935,7937,7939,7941,7943,7945,7947,7949,7951,7953,7955],{"class":157,"line":581},[155,7924,7624],{"class":171},[155,7926,324],{"class":323},[155,7928,317],{"class":167},[155,7930,4479],{"class":263},[155,7932,332],{"class":171},[155,7934,335],{"class":323},[155,7936,317],{"class":167},[155,7938,4479],{"class":263},[155,7940,332],{"class":171},[155,7942,345],{"class":323},[155,7944,317],{"class":167},[155,7946,4444],{"class":263},[155,7948,332],{"class":171},[155,7950,355],{"class":323},[155,7952,317],{"class":167},[155,7954,329],{"class":263},[155,7956,7657],{"class":171},[155,7958,7959],{"class":157,"line":592},[155,7960,7662],{"class":171},[155,7962,7963,7965,7967,7969,7971,7973,7975,7977,7979,7981,7983,7985,7987,7989,7991,7993,7995],{"class":157,"line":610},[155,7964,7624],{"class":171},[155,7966,324],{"class":323},[155,7968,317],{"class":167},[155,7970,4479],{"class":263},[155,7972,332],{"class":171},[155,7974,335],{"class":323},[155,7976,317],{"class":167},[155,7978,4479],{"class":263},[155,7980,332],{"class":171},[155,7982,345],{"class":323},[155,7984,317],{"class":167},[155,7986,4444],{"class":263},[155,7988,332],{"class":171},[155,7990,355],{"class":323},[155,7992,317],{"class":167},[155,7994,329],{"class":263},[155,7996,7657],{"class":171},[155,7998,7999],{"class":157,"line":622},[155,8000,7662],{"class":171},[155,8002,8003,8005,8007,8009,8011,8013,8015,8017,8019,8021,8023,8025,8027],{"class":157,"line":638},[155,8004,7707],{"class":171},[155,8006,345],{"class":323},[155,8008,317],{"class":167},[155,8010,360],{"class":263},[155,8012,332],{"class":171},[155,8014,406],{"class":323},[155,8016,317],{"class":167},[155,8018,360],{"class":263},[155,8020,332],{"class":171},[155,8022,355],{"class":323},[155,8024,317],{"class":167},[155,8026,1109],{"class":263},[155,8028,363],{"class":171},[155,8030,8031],{"class":157,"line":650},[155,8032,7736],{"class":171},[155,8034,8035],{"class":157,"line":662},[155,8036,8037],{"class":161},"        # 第四层\n",[155,8039,8040,8042,8045,8047],{"class":157,"line":678},[155,8041,311],{"class":263},[155,8043,8044],{"class":171},".block4",[155,8046,317],{"class":167},[155,8048,7619],{"class":171},[155,8050,8051,8053,8055,8057,8059,8061,8063,8065,8068,8070,8072,8074,8076,8078,8080,8082,8084],{"class":157,"line":694},[155,8052,7624],{"class":171},[155,8054,324],{"class":323},[155,8056,317],{"class":167},[155,8058,4479],{"class":263},[155,8060,332],{"class":171},[155,8062,335],{"class":323},[155,8064,317],{"class":167},[155,8066,8067],{"class":263},"512",[155,8069,332],{"class":171},[155,8071,345],{"class":323},[155,8073,317],{"class":167},[155,8075,4444],{"class":263},[155,8077,332],{"class":171},[155,8079,355],{"class":323},[155,8081,317],{"class":167},[155,8083,329],{"class":263},[155,8085,7657],{"class":171},[155,8087,8088],{"class":157,"line":706},[155,8089,7662],{"class":171},[155,8091,8092,8094,8096,8098,8100,8102,8104,8106,8108,8110,8112,8114,8116,8118,8120,8122,8124],{"class":157,"line":715},[155,8093,7624],{"class":171},[155,8095,324],{"class":323},[155,8097,317],{"class":167},[155,8099,8067],{"class":263},[155,8101,332],{"class":171},[155,8103,335],{"class":323},[155,8105,317],{"class":167},[155,8107,8067],{"class":263},[155,8109,332],{"class":171},[155,8111,345],{"class":323},[155,8113,317],{"class":167},[155,8115,4444],{"class":263},[155,8117,332],{"class":171},[155,8119,355],{"class":323},[155,8121,317],{"class":167},[155,8123,329],{"class":263},[155,8125,7657],{"class":171},[155,8127,8128],{"class":157,"line":720},[155,8129,7662],{"class":171},[155,8131,8132,8134,8136,8138,8140,8142,8144,8146,8148,8150,8152,8154,8156,8158,8160,8162,8164],{"class":157,"line":739},[155,8133,7624],{"class":171},[155,8135,324],{"class":323},[155,8137,317],{"class":167},[155,8139,8067],{"class":263},[155,8141,332],{"class":171},[155,8143,335],{"class":323},[155,8145,317],{"class":167},[155,8147,8067],{"class":263},[155,8149,332],{"class":171},[155,8151,345],{"class":323},[155,8153,317],{"class":167},[155,8155,4444],{"class":263},[155,8157,332],{"class":171},[155,8159,355],{"class":323},[155,8161,317],{"class":167},[155,8163,329],{"class":263},[155,8165,7657],{"class":171},[155,8167,8168],{"class":157,"line":745},[155,8169,7662],{"class":171},[155,8171,8172,8174,8176,8178,8180,8182,8184,8186,8188,8190,8192,8194,8196],{"class":157,"line":773},[155,8173,7707],{"class":171},[155,8175,345],{"class":323},[155,8177,317],{"class":167},[155,8179,360],{"class":263},[155,8181,332],{"class":171},[155,8183,406],{"class":323},[155,8185,317],{"class":167},[155,8187,360],{"class":263},[155,8189,332],{"class":171},[155,8191,355],{"class":323},[155,8193,317],{"class":167},[155,8195,1109],{"class":263},[155,8197,363],{"class":171},[155,8199,8200],{"class":157,"line":779},[155,8201,7736],{"class":171},[155,8203,8204],{"class":157,"line":785},[155,8205,8206],{"class":161},"        # 第五层\n",[155,8208,8209,8211,8214,8216],{"class":157,"line":791},[155,8210,311],{"class":263},[155,8212,8213],{"class":171},".block5",[155,8215,317],{"class":167},[155,8217,7619],{"class":171},[155,8219,8220,8222,8224,8226,8228,8230,8232,8234,8236,8238,8240,8242,8244,8246,8248,8250,8252],{"class":157,"line":796},[155,8221,7624],{"class":171},[155,8223,324],{"class":323},[155,8225,317],{"class":167},[155,8227,8067],{"class":263},[155,8229,332],{"class":171},[155,8231,335],{"class":323},[155,8233,317],{"class":167},[155,8235,8067],{"class":263},[155,8237,332],{"class":171},[155,8239,345],{"class":323},[155,8241,317],{"class":167},[155,8243,4444],{"class":263},[155,8245,332],{"class":171},[155,8247,355],{"class":323},[155,8249,317],{"class":167},[155,8251,329],{"class":263},[155,8253,7657],{"class":171},[155,8255,8256],{"class":157,"line":802},[155,8257,7662],{"class":171},[155,8259,8260,8262,8264,8266,8268,8270,8272,8274,8276,8278,8280,8282,8284,8286,8288,8290,8292],{"class":157,"line":808},[155,8261,7624],{"class":171},[155,8263,324],{"class":323},[155,8265,317],{"class":167},[155,8267,8067],{"class":263},[155,8269,332],{"class":171},[155,8271,335],{"class":323},[155,8273,317],{"class":167},[155,8275,8067],{"class":263},[155,8277,332],{"class":171},[155,8279,345],{"class":323},[155,8281,317],{"class":167},[155,8283,4444],{"class":263},[155,8285,332],{"class":171},[155,8287,355],{"class":323},[155,8289,317],{"class":167},[155,8291,329],{"class":263},[155,8293,7657],{"class":171},[155,8295,8296],{"class":157,"line":819},[155,8297,7662],{"class":171},[155,8299,8300,8302,8304,8306,8308,8310,8312,8314,8316,8318,8320,8322,8324,8326,8328,8330,8332],{"class":157,"line":1832},[155,8301,7624],{"class":171},[155,8303,324],{"class":323},[155,8305,317],{"class":167},[155,8307,8067],{"class":263},[155,8309,332],{"class":171},[155,8311,335],{"class":323},[155,8313,317],{"class":167},[155,8315,8067],{"class":263},[155,8317,332],{"class":171},[155,8319,345],{"class":323},[155,8321,317],{"class":167},[155,8323,4444],{"class":263},[155,8325,332],{"class":171},[155,8327,355],{"class":323},[155,8329,317],{"class":167},[155,8331,329],{"class":263},[155,8333,7657],{"class":171},[155,8335,8336],{"class":157,"line":1838},[155,8337,7662],{"class":171},[155,8339,8340,8342,8344,8346,8348,8350,8352,8354,8356,8358,8360,8362,8364],{"class":157,"line":1844},[155,8341,7707],{"class":171},[155,8343,345],{"class":323},[155,8345,317],{"class":167},[155,8347,360],{"class":263},[155,8349,332],{"class":171},[155,8351,406],{"class":323},[155,8353,317],{"class":167},[155,8355,360],{"class":263},[155,8357,332],{"class":171},[155,8359,355],{"class":323},[155,8361,317],{"class":167},[155,8363,1109],{"class":263},[155,8365,363],{"class":171},[155,8367,8368],{"class":157,"line":1850},[155,8369,7736],{"class":171},[155,8371,8372],{"class":157,"line":1861},[155,8373,8374],{"class":161},"        # 全连接层\n",[155,8376,8377,8379,8382,8384],{"class":157,"line":1866},[155,8378,311],{"class":263},[155,8380,8381],{"class":171},".block6",[155,8383,317],{"class":167},[155,8385,7619],{"class":171},[155,8387,8388],{"class":157,"line":1871},[155,8389,8390],{"class":161},"            # 平展操作\n",[155,8392,8393],{"class":157,"line":1877},[155,8394,8395],{"class":161},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[155,8397,8398],{"class":157,"line":1883},[155,8399,8400],{"class":171},"            nn.Flatten(),\n",[155,8402,8403,8406,8409,8411,8413,8415,8417,8419,8421],{"class":157,"line":1894},[155,8404,8405],{"class":171},"            nn.Linear(",[155,8407,8408],{"class":263},"7",[155,8410,1563],{"class":167},[155,8412,8408],{"class":263},[155,8414,1563],{"class":167},[155,8416,8067],{"class":263},[155,8418,332],{"class":171},[155,8420,4479],{"class":263},[155,8422,7657],{"class":171},[155,8424,8425],{"class":157,"line":1900},[155,8426,7662],{"class":171},[155,8428,8429,8431,8433,8435,8437],{"class":157,"line":1911},[155,8430,8405],{"class":171},[155,8432,4479],{"class":263},[155,8434,332],{"class":171},[155,8436,1608],{"class":263},[155,8438,7657],{"class":171},[155,8440,8441],{"class":157,"line":1917},[155,8442,7662],{"class":171},[155,8444,8445,8447,8449,8451,8453],{"class":157,"line":1927},[155,8446,8405],{"class":171},[155,8448,1608],{"class":263},[155,8450,332],{"class":171},[155,8452,565],{"class":263},[155,8454,363],{"class":171},[155,8456,8457],{"class":157,"line":1933},[155,8458,7736],{"class":171},[155,8460,8461],{"class":157,"line":1943},[155,8462,217],{"emptyLinePlaceholder":216},[155,8464,8465],{"class":157,"line":1949},[155,8466,8467],{"class":161},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[155,8469,8470],{"class":157,"line":1959},[155,8471,8472],{"class":161},"        # 循环遍历模型\n",[155,8474,8475,8477,8480,8482,8485],{"class":157,"line":1964},[155,8476,2179],{"class":167},[155,8478,8479],{"class":171}," m ",[155,8481,1131],{"class":167},[155,8483,8484],{"class":263}," self",[155,8486,8487],{"class":171},".modules():\n",[155,8489,8490],{"class":157,"line":1970},[155,8491,8492],{"class":161},"            # print(m)\n",[155,8494,8495,8498,8501],{"class":157,"line":1981},[155,8496,8497],{"class":167},"            if",[155,8499,8500],{"class":263}," isinstance",[155,8502,8503],{"class":171},"(m,nn.Conv2d):\n",[155,8505,8506],{"class":157,"line":1986},[155,8507,8508],{"class":161},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[155,8510,8511,8514,8517,8519,8522],{"class":157,"line":1991},[155,8512,8513],{"class":171},"                nn.init.kaiming_normal_(m.weight,",[155,8515,8516],{"class":323},"nonlinearity",[155,8518,317],{"class":167},[155,8520,8521],{"class":732},"'relu'",[155,8523,363],{"class":171},[155,8525,8526],{"class":157,"line":1997},[155,8527,8528],{"class":161},"                # 判断b参数是否存在\n",[155,8530,8531,8534,8537,8540,8543,8546],{"class":157,"line":2014},[155,8532,8533],{"class":167},"                if",[155,8535,8536],{"class":171}," m.bias ",[155,8538,8539],{"class":167},"is",[155,8541,8542],{"class":167}," not",[155,8544,8545],{"class":263}," None",[155,8547,736],{"class":171},[155,8549,8550],{"class":157,"line":2046},[155,8551,8552],{"class":161},"                    # 如果参数不存在的化初始化b=0\n",[155,8554,8555,8558,8560],{"class":157,"line":2062},[155,8556,8557],{"class":171},"                    nn.init.constant_(m.bias,",[155,8559,1109],{"class":263},[155,8561,363],{"class":171},[155,8563,8564],{"class":157,"line":2067},[155,8565,8566],{"class":161},"            # 全连接层初始化\n",[155,8568,8569,8572,8574],{"class":157,"line":2073},[155,8570,8571],{"class":167},"            elif",[155,8573,8500],{"class":263},[155,8575,8576],{"class":171},"(m,nn.Linear):\n",[155,8578,8579],{"class":157,"line":2079},[155,8580,8581],{"class":161},"                # 这个初始化方法是利用的是正太分布的方式\n",[155,8583,8584],{"class":157,"line":2089},[155,8585,8586],{"class":161},"                # 均值为0，方差为0.01\n",[155,8588,8589,8592,8594,8596,8599],{"class":157,"line":2095},[155,8590,8591],{"class":171},"                nn.init.normal_(m.weight,",[155,8593,1109],{"class":263},[155,8595,332],{"class":171},[155,8597,8598],{"class":263},"0.01",[155,8600,363],{"class":171},[155,8602,8603],{"class":157,"line":2106},[155,8604,8605],{"class":161},"                # 初始化b参数\n",[155,8607,8608,8610,8612,8614,8616,8618],{"class":157,"line":2112},[155,8609,8533],{"class":167},[155,8611,8536],{"class":171},[155,8613,8539],{"class":167},[155,8615,8542],{"class":167},[155,8617,8545],{"class":263},[155,8619,736],{"class":171},[155,8621,8622,8624,8626],{"class":157,"line":2122},[155,8623,8557],{"class":171},[155,8625,1109],{"class":263},[155,8627,363],{"class":171},[155,8629,8630],{"class":157,"line":2128},[155,8631,217],{"emptyLinePlaceholder":216},[155,8633,8634],{"class":157,"line":2138},[155,8635,4774],{"class":161},[155,8637,8638,8640,8642],{"class":157,"line":2144},[155,8639,260],{"class":167},[155,8641,586],{"class":226},[155,8643,589],{"class":171},[155,8645,8646,8648,8650,8652],{"class":157,"line":2154},[155,8647,595],{"class":171},[155,8649,317],{"class":167},[155,8651,285],{"class":263},[155,8653,8654],{"class":171},".block1(x)\n",[155,8656,8657,8659,8661,8663],{"class":157,"line":2160},[155,8658,595],{"class":171},[155,8660,317],{"class":167},[155,8662,285],{"class":263},[155,8664,8665],{"class":171},".block2(x)\n",[155,8667,8668,8670,8672,8674],{"class":157,"line":2170},[155,8669,595],{"class":171},[155,8671,317],{"class":167},[155,8673,285],{"class":263},[155,8675,8676],{"class":171},".block3(x)\n",[155,8678,8679,8681,8683,8685],{"class":157,"line":2176},[155,8680,595],{"class":171},[155,8682,317],{"class":167},[155,8684,285],{"class":263},[155,8686,8687],{"class":171},".block4(x)\n",[155,8689,8690,8692,8694,8696],{"class":157,"line":2191},[155,8691,595],{"class":171},[155,8693,317],{"class":167},[155,8695,285],{"class":263},[155,8697,8698],{"class":171},".block5(x)\n",[155,8700,8701,8703,8705,8707],{"class":157,"line":2197},[155,8702,595],{"class":171},[155,8704,317],{"class":167},[155,8706,285],{"class":263},[155,8708,8709],{"class":171},".block6(x)\n",[155,8711,8712,8714],{"class":157,"line":2208},[155,8713,709],{"class":167},[155,8715,712],{"class":171},[155,8717,8718],{"class":157,"line":2214},[155,8719,217],{"emptyLinePlaceholder":216},[155,8721,8722],{"class":157,"line":2225},[155,8723,8724],{"class":161},"# 验证模型\n",[155,8726,8727,8729,8731,8733,8736],{"class":157,"line":2231},[155,8728,723],{"class":167},[155,8730,726],{"class":263},[155,8732,729],{"class":167},[155,8734,8735],{"class":732},"'__main__'",[155,8737,736],{"class":171},[155,8739,8740,8742,8744,8746,8748,8750,8752,8754,8756],{"class":157,"line":2237},[155,8741,748],{"class":171},[155,8743,317],{"class":167},[155,8745,753],{"class":171},[155,8747,756],{"class":732},[155,8749,759],{"class":167},[155,8751,762],{"class":171},[155,8753,765],{"class":167},[155,8755,768],{"class":732},[155,8757,363],{"class":171},[155,8759,8760,8762],{"class":157,"line":2243},[155,8761,822],{"class":263},[155,8763,8764],{"class":171},"(device)\n",[155,8766,8767,8769,8771],{"class":157,"line":2249},[155,8768,811],{"class":171},[155,8770,317],{"class":167},[155,8772,8773],{"class":171},"VGG16().to(device)\n",[155,8775,8776,8778,8780,8782,8784,8786,8788,8790],{"class":157,"line":2260},[155,8777,822],{"class":263},[155,8779,825],{"class":171},[155,8781,329],{"class":263},[155,8783,332],{"class":171},[155,8785,1025],{"class":263},[155,8787,332],{"class":171},[155,8789,1025],{"class":263},[155,8791,839],{"class":171},[28,8793,8794],{"start":46},[31,8795,8796],{},"训练代码",[24,8798,8799],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[24,8801,8802],{},"解决方式:",[24,8804,8805],{},"①权重初始化",[146,8807,8809],{"className":148,"code":8808,"language":150,"meta":39,"style":39},"# 权重初始化,保证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",[152,8810,8811,8816,8821,8833,8838,8846,8851,8864,8869,8883,8888,8897,8902,8911,8916,8921,8934,8939,8953],{"__ignoreMap":39},[155,8812,8813],{"class":157,"line":158},[155,8814,8815],{"class":161},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[155,8817,8818],{"class":157,"line":46},[155,8819,8820],{"class":161},"# 循环遍历模型\n",[155,8822,8823,8825,8827,8829,8831],{"class":157,"line":121},[155,8824,1125],{"class":167},[155,8826,8479],{"class":171},[155,8828,1131],{"class":167},[155,8830,8484],{"class":263},[155,8832,8487],{"class":171},[155,8834,8835],{"class":157,"line":180},[155,8836,8837],{"class":161},"    # print(m)\n",[155,8839,8840,8842,8844],{"class":157,"line":194},[155,8841,1142],{"class":167},[155,8843,8500],{"class":263},[155,8845,8503],{"class":171},[155,8847,8848],{"class":157,"line":200},[155,8849,8850],{"class":161},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[155,8852,8853,8856,8858,8860,8862],{"class":157,"line":213},[155,8854,8855],{"class":171},"        nn.init.kaiming_normal_(m.weight,",[155,8857,8516],{"class":323},[155,8859,317],{"class":167},[155,8861,8521],{"class":732},[155,8863,363],{"class":171},[155,8865,8866],{"class":157,"line":220},[155,8867,8868],{"class":161},"        # 判断b参数是否存在\n",[155,8870,8871,8873,8875,8877,8879,8881],{"class":157,"line":245},[155,8872,2803],{"class":167},[155,8874,8536],{"class":171},[155,8876,8539],{"class":167},[155,8878,8542],{"class":167},[155,8880,8545],{"class":263},[155,8882,736],{"class":171},[155,8884,8885],{"class":157,"line":251},[155,8886,8887],{"class":161},"            # 如果参数不存在的化初始化b=0\n",[155,8889,8890,8893,8895],{"class":157,"line":257},[155,8891,8892],{"class":171},"            nn.init.constant_(m.bias,",[155,8894,1109],{"class":263},[155,8896,363],{"class":171},[155,8898,8899],{"class":157,"line":270},[155,8900,8901],{"class":161},"    # 全连接层初始化\n",[155,8903,8904,8907,8909],{"class":157,"line":276},[155,8905,8906],{"class":167},"    elif",[155,8908,8500],{"class":263},[155,8910,8576],{"class":171},[155,8912,8913],{"class":157,"line":297},[155,8914,8915],{"class":161},"        # 这个初始化方法是利用的是正太分布的方式\n",[155,8917,8918],{"class":157,"line":302},[155,8919,8920],{"class":161},"        # 均值为0，方差为0.01\n",[155,8922,8923,8926,8928,8930,8932],{"class":157,"line":308},[155,8924,8925],{"class":171},"        nn.init.normal_(m.weight,",[155,8927,1109],{"class":263},[155,8929,332],{"class":171},[155,8931,8598],{"class":263},[155,8933,363],{"class":171},[155,8935,8936],{"class":157,"line":366},[155,8937,8938],{"class":161},"        # 初始化b参数\n",[155,8940,8941,8943,8945,8947,8949,8951],{"class":157,"line":379},[155,8942,2803],{"class":167},[155,8944,8536],{"class":171},[155,8946,8539],{"class":167},[155,8948,8542],{"class":167},[155,8950,8545],{"class":263},[155,8952,736],{"class":171},[155,8954,8955,8957,8959],{"class":157,"line":385},[155,8956,8892],{"class":171},[155,8958,1109],{"class":263},[155,8960,363],{"class":171},[24,8962,8963],{},"②尽可能地增加批次",[24,8965,8966],{},"训练完整代码：",[146,8968,8969],{"className":148,"code":7508,"language":150,"meta":39,"style":39},[152,8970,8971,8977,8987,8997,9007,9011,9027,9035,9053,9057,9061,9071,9107,9111,9147,9151,9179,9183,9187,9197,9233,9237,9273,9277,9305,9309,9313,9323,9359,9363,9399,9403,9439,9443,9471,9475,9479,9489,9525,9529,9565,9569,9605,9609,9637,9641,9645,9655,9691,9695,9731,9735,9771,9775,9803,9807,9811,9821,9825,9829,9833,9853,9857,9869,9873,9885,9889,9893,9897,9901,9913,9917,9925,9929,9941,9945,9959,9963,9971,9975,9983,9987,9991,10003,10007,10021,10029,10033,10037,10045,10055,10065,10075,10085,10095,10105,10111,10115,10119,10131,10151,10157,10165],{"__ignoreMap":39},[155,8972,8973,8975],{"class":157,"line":158},[155,8974,168],{"class":167},[155,8976,172],{"class":171},[155,8978,8979,8981,8983,8985],{"class":157,"line":46},[155,8980,183],{"class":167},[155,8982,7523],{"class":171},[155,8984,168],{"class":167},[155,8986,7528],{"class":171},[155,8988,8989,8991,8993,8995],{"class":157,"line":121},[155,8990,183],{"class":167},[155,8992,186],{"class":171},[155,8994,168],{"class":167},[155,8996,191],{"class":171},[155,8998,8999,9001,9003,9005],{"class":157,"line":180},[155,9000,183],{"class":167},[155,9002,205],{"class":171},[155,9004,168],{"class":167},[155,9006,210],{"class":171},[155,9008,9009],{"class":157,"line":194},[155,9010,217],{"emptyLinePlaceholder":216},[155,9012,9013,9015,9017,9019,9021,9023,9025],{"class":157,"line":200},[155,9014,223],{"class":167},[155,9016,7559],{"class":226},[155,9018,230],{"class":171},[155,9020,233],{"class":226},[155,9022,236],{"class":171},[155,9024,239],{"class":226},[155,9026,242],{"class":171},[155,9028,9029,9031,9033],{"class":157,"line":213},[155,9030,260],{"class":167},[155,9032,264],{"class":263},[155,9034,267],{"class":171},[155,9036,9037,9039,9041,9043,9045,9047,9049,9051],{"class":157,"line":220},[155,9038,279],{"class":263},[155,9040,230],{"class":171},[155,9042,7586],{"class":263},[155,9044,7589],{"class":171},[155,9046,285],{"class":263},[155,9048,288],{"class":171},[155,9050,291],{"class":263},[155,9052,294],{"class":171},[155,9054,9055],{"class":157,"line":245},[155,9056,7602],{"class":161},[155,9058,9059],{"class":157,"line":251},[155,9060,7607],{"class":161},[155,9062,9063,9065,9067,9069],{"class":157,"line":257},[155,9064,311],{"class":263},[155,9066,7614],{"class":171},[155,9068,317],{"class":167},[155,9070,7619],{"class":171},[155,9072,9073,9075,9077,9079,9081,9083,9085,9087,9089,9091,9093,9095,9097,9099,9101,9103,9105],{"class":157,"line":270},[155,9074,7624],{"class":171},[155,9076,324],{"class":323},[155,9078,317],{"class":167},[155,9080,329],{"class":263},[155,9082,332],{"class":171},[155,9084,335],{"class":323},[155,9086,317],{"class":167},[155,9088,1076],{"class":263},[155,9090,332],{"class":171},[155,9092,345],{"class":323},[155,9094,317],{"class":167},[155,9096,4444],{"class":263},[155,9098,332],{"class":171},[155,9100,355],{"class":323},[155,9102,317],{"class":167},[155,9104,329],{"class":263},[155,9106,7657],{"class":171},[155,9108,9109],{"class":157,"line":276},[155,9110,7662],{"class":171},[155,9112,9113,9115,9117,9119,9121,9123,9125,9127,9129,9131,9133,9135,9137,9139,9141,9143,9145],{"class":157,"line":297},[155,9114,7624],{"class":171},[155,9116,324],{"class":323},[155,9118,317],{"class":167},[155,9120,1076],{"class":263},[155,9122,332],{"class":171},[155,9124,335],{"class":323},[155,9126,317],{"class":167},[155,9128,1076],{"class":263},[155,9130,332],{"class":171},[155,9132,345],{"class":323},[155,9134,317],{"class":167},[155,9136,4444],{"class":263},[155,9138,332],{"class":171},[155,9140,355],{"class":323},[155,9142,317],{"class":167},[155,9144,329],{"class":263},[155,9146,7657],{"class":171},[155,9148,9149],{"class":157,"line":302},[155,9150,7662],{"class":171},[155,9152,9153,9155,9157,9159,9161,9163,9165,9167,9169,9171,9173,9175,9177],{"class":157,"line":308},[155,9154,7707],{"class":171},[155,9156,345],{"class":323},[155,9158,317],{"class":167},[155,9160,360],{"class":263},[155,9162,332],{"class":171},[155,9164,406],{"class":323},[155,9166,317],{"class":167},[155,9168,360],{"class":263},[155,9170,332],{"class":171},[155,9172,355],{"class":323},[155,9174,317],{"class":167},[155,9176,1109],{"class":263},[155,9178,363],{"class":171},[155,9180,9181],{"class":157,"line":366},[155,9182,7736],{"class":171},[155,9184,9185],{"class":157,"line":379},[155,9186,7741],{"class":161},[155,9188,9189,9191,9193,9195],{"class":157,"line":385},[155,9190,311],{"class":263},[155,9192,7748],{"class":171},[155,9194,317],{"class":167},[155,9196,7619],{"class":171},[155,9198,9199,9201,9203,9205,9207,9209,9211,9213,9215,9217,9219,9221,9223,9225,9227,9229,9231],{"class":157,"line":415},[155,9200,7624],{"class":171},[155,9202,324],{"class":323},[155,9204,317],{"class":167},[155,9206,1076],{"class":263},[155,9208,332],{"class":171},[155,9210,335],{"class":323},[155,9212,317],{"class":167},[155,9214,1608],{"class":263},[155,9216,332],{"class":171},[155,9218,345],{"class":323},[155,9220,317],{"class":167},[155,9222,4444],{"class":263},[155,9224,332],{"class":171},[155,9226,355],{"class":323},[155,9228,317],{"class":167},[155,9230,329],{"class":263},[155,9232,7657],{"class":171},[155,9234,9235],{"class":157,"line":452},[155,9236,7662],{"class":171},[155,9238,9239,9241,9243,9245,9247,9249,9251,9253,9255,9257,9259,9261,9263,9265,9267,9269,9271],{"class":157,"line":480},[155,9240,7624],{"class":171},[155,9242,324],{"class":323},[155,9244,317],{"class":167},[155,9246,1608],{"class":263},[155,9248,332],{"class":171},[155,9250,335],{"class":323},[155,9252,317],{"class":167},[155,9254,1608],{"class":263},[155,9256,332],{"class":171},[155,9258,345],{"class":323},[155,9260,317],{"class":167},[155,9262,4444],{"class":263},[155,9264,332],{"class":171},[155,9266,355],{"class":323},[155,9268,317],{"class":167},[155,9270,329],{"class":263},[155,9272,7657],{"class":171},[155,9274,9275],{"class":157,"line":486},[155,9276,7662],{"class":171},[155,9278,9279,9281,9283,9285,9287,9289,9291,9293,9295,9297,9299,9301,9303],{"class":157,"line":499},[155,9280,7707],{"class":171},[155,9282,345],{"class":323},[155,9284,317],{"class":167},[155,9286,360],{"class":263},[155,9288,332],{"class":171},[155,9290,406],{"class":323},[155,9292,317],{"class":167},[155,9294,360],{"class":263},[155,9296,332],{"class":171},[155,9298,355],{"class":323},[155,9300,317],{"class":167},[155,9302,1109],{"class":263},[155,9304,363],{"class":171},[155,9306,9307],{"class":157,"line":505},[155,9308,7736],{"class":171},[155,9310,9311],{"class":157,"line":528},[155,9312,7869],{"class":161},[155,9314,9315,9317,9319,9321],{"class":157,"line":549},[155,9316,311],{"class":263},[155,9318,7876],{"class":171},[155,9320,317],{"class":167},[155,9322,7619],{"class":171},[155,9324,9325,9327,9329,9331,9333,9335,9337,9339,9341,9343,9345,9347,9349,9351,9353,9355,9357],{"class":157,"line":570},[155,9326,7624],{"class":171},[155,9328,324],{"class":323},[155,9330,317],{"class":167},[155,9332,1608],{"class":263},[155,9334,332],{"class":171},[155,9336,335],{"class":323},[155,9338,317],{"class":167},[155,9340,4479],{"class":263},[155,9342,332],{"class":171},[155,9344,345],{"class":323},[155,9346,317],{"class":167},[155,9348,4444],{"class":263},[155,9350,332],{"class":171},[155,9352,355],{"class":323},[155,9354,317],{"class":167},[155,9356,329],{"class":263},[155,9358,7657],{"class":171},[155,9360,9361],{"class":157,"line":575},[155,9362,7662],{"class":171},[155,9364,9365,9367,9369,9371,9373,9375,9377,9379,9381,9383,9385,9387,9389,9391,9393,9395,9397],{"class":157,"line":581},[155,9366,7624],{"class":171},[155,9368,324],{"class":323},[155,9370,317],{"class":167},[155,9372,4479],{"class":263},[155,9374,332],{"class":171},[155,9376,335],{"class":323},[155,9378,317],{"class":167},[155,9380,4479],{"class":263},[155,9382,332],{"class":171},[155,9384,345],{"class":323},[155,9386,317],{"class":167},[155,9388,4444],{"class":263},[155,9390,332],{"class":171},[155,9392,355],{"class":323},[155,9394,317],{"class":167},[155,9396,329],{"class":263},[155,9398,7657],{"class":171},[155,9400,9401],{"class":157,"line":592},[155,9402,7662],{"class":171},[155,9404,9405,9407,9409,9411,9413,9415,9417,9419,9421,9423,9425,9427,9429,9431,9433,9435,9437],{"class":157,"line":610},[155,9406,7624],{"class":171},[155,9408,324],{"class":323},[155,9410,317],{"class":167},[155,9412,4479],{"class":263},[155,9414,332],{"class":171},[155,9416,335],{"class":323},[155,9418,317],{"class":167},[155,9420,4479],{"class":263},[155,9422,332],{"class":171},[155,9424,345],{"class":323},[155,9426,317],{"class":167},[155,9428,4444],{"class":263},[155,9430,332],{"class":171},[155,9432,355],{"class":323},[155,9434,317],{"class":167},[155,9436,329],{"class":263},[155,9438,7657],{"class":171},[155,9440,9441],{"class":157,"line":622},[155,9442,7662],{"class":171},[155,9444,9445,9447,9449,9451,9453,9455,9457,9459,9461,9463,9465,9467,9469],{"class":157,"line":638},[155,9446,7707],{"class":171},[155,9448,345],{"class":323},[155,9450,317],{"class":167},[155,9452,360],{"class":263},[155,9454,332],{"class":171},[155,9456,406],{"class":323},[155,9458,317],{"class":167},[155,9460,360],{"class":263},[155,9462,332],{"class":171},[155,9464,355],{"class":323},[155,9466,317],{"class":167},[155,9468,1109],{"class":263},[155,9470,363],{"class":171},[155,9472,9473],{"class":157,"line":650},[155,9474,7736],{"class":171},[155,9476,9477],{"class":157,"line":662},[155,9478,8037],{"class":161},[155,9480,9481,9483,9485,9487],{"class":157,"line":678},[155,9482,311],{"class":263},[155,9484,8044],{"class":171},[155,9486,317],{"class":167},[155,9488,7619],{"class":171},[155,9490,9491,9493,9495,9497,9499,9501,9503,9505,9507,9509,9511,9513,9515,9517,9519,9521,9523],{"class":157,"line":694},[155,9492,7624],{"class":171},[155,9494,324],{"class":323},[155,9496,317],{"class":167},[155,9498,4479],{"class":263},[155,9500,332],{"class":171},[155,9502,335],{"class":323},[155,9504,317],{"class":167},[155,9506,8067],{"class":263},[155,9508,332],{"class":171},[155,9510,345],{"class":323},[155,9512,317],{"class":167},[155,9514,4444],{"class":263},[155,9516,332],{"class":171},[155,9518,355],{"class":323},[155,9520,317],{"class":167},[155,9522,329],{"class":263},[155,9524,7657],{"class":171},[155,9526,9527],{"class":157,"line":706},[155,9528,7662],{"class":171},[155,9530,9531,9533,9535,9537,9539,9541,9543,9545,9547,9549,9551,9553,9555,9557,9559,9561,9563],{"class":157,"line":715},[155,9532,7624],{"class":171},[155,9534,324],{"class":323},[155,9536,317],{"class":167},[155,9538,8067],{"class":263},[155,9540,332],{"class":171},[155,9542,335],{"class":323},[155,9544,317],{"class":167},[155,9546,8067],{"class":263},[155,9548,332],{"class":171},[155,9550,345],{"class":323},[155,9552,317],{"class":167},[155,9554,4444],{"class":263},[155,9556,332],{"class":171},[155,9558,355],{"class":323},[155,9560,317],{"class":167},[155,9562,329],{"class":263},[155,9564,7657],{"class":171},[155,9566,9567],{"class":157,"line":720},[155,9568,7662],{"class":171},[155,9570,9571,9573,9575,9577,9579,9581,9583,9585,9587,9589,9591,9593,9595,9597,9599,9601,9603],{"class":157,"line":739},[155,9572,7624],{"class":171},[155,9574,324],{"class":323},[155,9576,317],{"class":167},[155,9578,8067],{"class":263},[155,9580,332],{"class":171},[155,9582,335],{"class":323},[155,9584,317],{"class":167},[155,9586,8067],{"class":263},[155,9588,332],{"class":171},[155,9590,345],{"class":323},[155,9592,317],{"class":167},[155,9594,4444],{"class":263},[155,9596,332],{"class":171},[155,9598,355],{"class":323},[155,9600,317],{"class":167},[155,9602,329],{"class":263},[155,9604,7657],{"class":171},[155,9606,9607],{"class":157,"line":745},[155,9608,7662],{"class":171},[155,9610,9611,9613,9615,9617,9619,9621,9623,9625,9627,9629,9631,9633,9635],{"class":157,"line":773},[155,9612,7707],{"class":171},[155,9614,345],{"class":323},[155,9616,317],{"class":167},[155,9618,360],{"class":263},[155,9620,332],{"class":171},[155,9622,406],{"class":323},[155,9624,317],{"class":167},[155,9626,360],{"class":263},[155,9628,332],{"class":171},[155,9630,355],{"class":323},[155,9632,317],{"class":167},[155,9634,1109],{"class":263},[155,9636,363],{"class":171},[155,9638,9639],{"class":157,"line":779},[155,9640,7736],{"class":171},[155,9642,9643],{"class":157,"line":785},[155,9644,8206],{"class":161},[155,9646,9647,9649,9651,9653],{"class":157,"line":791},[155,9648,311],{"class":263},[155,9650,8213],{"class":171},[155,9652,317],{"class":167},[155,9654,7619],{"class":171},[155,9656,9657,9659,9661,9663,9665,9667,9669,9671,9673,9675,9677,9679,9681,9683,9685,9687,9689],{"class":157,"line":796},[155,9658,7624],{"class":171},[155,9660,324],{"class":323},[155,9662,317],{"class":167},[155,9664,8067],{"class":263},[155,9666,332],{"class":171},[155,9668,335],{"class":323},[155,9670,317],{"class":167},[155,9672,8067],{"class":263},[155,9674,332],{"class":171},[155,9676,345],{"class":323},[155,9678,317],{"class":167},[155,9680,4444],{"class":263},[155,9682,332],{"class":171},[155,9684,355],{"class":323},[155,9686,317],{"class":167},[155,9688,329],{"class":263},[155,9690,7657],{"class":171},[155,9692,9693],{"class":157,"line":802},[155,9694,7662],{"class":171},[155,9696,9697,9699,9701,9703,9705,9707,9709,9711,9713,9715,9717,9719,9721,9723,9725,9727,9729],{"class":157,"line":808},[155,9698,7624],{"class":171},[155,9700,324],{"class":323},[155,9702,317],{"class":167},[155,9704,8067],{"class":263},[155,9706,332],{"class":171},[155,9708,335],{"class":323},[155,9710,317],{"class":167},[155,9712,8067],{"class":263},[155,9714,332],{"class":171},[155,9716,345],{"class":323},[155,9718,317],{"class":167},[155,9720,4444],{"class":263},[155,9722,332],{"class":171},[155,9724,355],{"class":323},[155,9726,317],{"class":167},[155,9728,329],{"class":263},[155,9730,7657],{"class":171},[155,9732,9733],{"class":157,"line":819},[155,9734,7662],{"class":171},[155,9736,9737,9739,9741,9743,9745,9747,9749,9751,9753,9755,9757,9759,9761,9763,9765,9767,9769],{"class":157,"line":1832},[155,9738,7624],{"class":171},[155,9740,324],{"class":323},[155,9742,317],{"class":167},[155,9744,8067],{"class":263},[155,9746,332],{"class":171},[155,9748,335],{"class":323},[155,9750,317],{"class":167},[155,9752,8067],{"class":263},[155,9754,332],{"class":171},[155,9756,345],{"class":323},[155,9758,317],{"class":167},[155,9760,4444],{"class":263},[155,9762,332],{"class":171},[155,9764,355],{"class":323},[155,9766,317],{"class":167},[155,9768,329],{"class":263},[155,9770,7657],{"class":171},[155,9772,9773],{"class":157,"line":1838},[155,9774,7662],{"class":171},[155,9776,9777,9779,9781,9783,9785,9787,9789,9791,9793,9795,9797,9799,9801],{"class":157,"line":1844},[155,9778,7707],{"class":171},[155,9780,345],{"class":323},[155,9782,317],{"class":167},[155,9784,360],{"class":263},[155,9786,332],{"class":171},[155,9788,406],{"class":323},[155,9790,317],{"class":167},[155,9792,360],{"class":263},[155,9794,332],{"class":171},[155,9796,355],{"class":323},[155,9798,317],{"class":167},[155,9800,1109],{"class":263},[155,9802,363],{"class":171},[155,9804,9805],{"class":157,"line":1850},[155,9806,7736],{"class":171},[155,9808,9809],{"class":157,"line":1861},[155,9810,8374],{"class":161},[155,9812,9813,9815,9817,9819],{"class":157,"line":1866},[155,9814,311],{"class":263},[155,9816,8381],{"class":171},[155,9818,317],{"class":167},[155,9820,7619],{"class":171},[155,9822,9823],{"class":157,"line":1871},[155,9824,8390],{"class":161},[155,9826,9827],{"class":157,"line":1877},[155,9828,8395],{"class":161},[155,9830,9831],{"class":157,"line":1883},[155,9832,8400],{"class":171},[155,9834,9835,9837,9839,9841,9843,9845,9847,9849,9851],{"class":157,"line":1894},[155,9836,8405],{"class":171},[155,9838,8408],{"class":263},[155,9840,1563],{"class":167},[155,9842,8408],{"class":263},[155,9844,1563],{"class":167},[155,9846,8067],{"class":263},[155,9848,332],{"class":171},[155,9850,4479],{"class":263},[155,9852,7657],{"class":171},[155,9854,9855],{"class":157,"line":1900},[155,9856,7662],{"class":171},[155,9858,9859,9861,9863,9865,9867],{"class":157,"line":1911},[155,9860,8405],{"class":171},[155,9862,4479],{"class":263},[155,9864,332],{"class":171},[155,9866,1608],{"class":263},[155,9868,7657],{"class":171},[155,9870,9871],{"class":157,"line":1917},[155,9872,7662],{"class":171},[155,9874,9875,9877,9879,9881,9883],{"class":157,"line":1927},[155,9876,8405],{"class":171},[155,9878,1608],{"class":263},[155,9880,332],{"class":171},[155,9882,565],{"class":263},[155,9884,363],{"class":171},[155,9886,9887],{"class":157,"line":1933},[155,9888,7736],{"class":171},[155,9890,9891],{"class":157,"line":1943},[155,9892,217],{"emptyLinePlaceholder":216},[155,9894,9895],{"class":157,"line":1949},[155,9896,8467],{"class":161},[155,9898,9899],{"class":157,"line":1959},[155,9900,8472],{"class":161},[155,9902,9903,9905,9907,9909,9911],{"class":157,"line":1964},[155,9904,2179],{"class":167},[155,9906,8479],{"class":171},[155,9908,1131],{"class":167},[155,9910,8484],{"class":263},[155,9912,8487],{"class":171},[155,9914,9915],{"class":157,"line":1970},[155,9916,8492],{"class":161},[155,9918,9919,9921,9923],{"class":157,"line":1981},[155,9920,8497],{"class":167},[155,9922,8500],{"class":263},[155,9924,8503],{"class":171},[155,9926,9927],{"class":157,"line":1986},[155,9928,8508],{"class":161},[155,9930,9931,9933,9935,9937,9939],{"class":157,"line":1991},[155,9932,8513],{"class":171},[155,9934,8516],{"class":323},[155,9936,317],{"class":167},[155,9938,8521],{"class":732},[155,9940,363],{"class":171},[155,9942,9943],{"class":157,"line":1997},[155,9944,8528],{"class":161},[155,9946,9947,9949,9951,9953,9955,9957],{"class":157,"line":2014},[155,9948,8533],{"class":167},[155,9950,8536],{"class":171},[155,9952,8539],{"class":167},[155,9954,8542],{"class":167},[155,9956,8545],{"class":263},[155,9958,736],{"class":171},[155,9960,9961],{"class":157,"line":2046},[155,9962,8552],{"class":161},[155,9964,9965,9967,9969],{"class":157,"line":2062},[155,9966,8557],{"class":171},[155,9968,1109],{"class":263},[155,9970,363],{"class":171},[155,9972,9973],{"class":157,"line":2067},[155,9974,8566],{"class":161},[155,9976,9977,9979,9981],{"class":157,"line":2073},[155,9978,8571],{"class":167},[155,9980,8500],{"class":263},[155,9982,8576],{"class":171},[155,9984,9985],{"class":157,"line":2079},[155,9986,8581],{"class":161},[155,9988,9989],{"class":157,"line":2089},[155,9990,8586],{"class":161},[155,9992,9993,9995,9997,9999,10001],{"class":157,"line":2095},[155,9994,8591],{"class":171},[155,9996,1109],{"class":263},[155,9998,332],{"class":171},[155,10000,8598],{"class":263},[155,10002,363],{"class":171},[155,10004,10005],{"class":157,"line":2106},[155,10006,8605],{"class":161},[155,10008,10009,10011,10013,10015,10017,10019],{"class":157,"line":2112},[155,10010,8533],{"class":167},[155,10012,8536],{"class":171},[155,10014,8539],{"class":167},[155,10016,8542],{"class":167},[155,10018,8545],{"class":263},[155,10020,736],{"class":171},[155,10022,10023,10025,10027],{"class":157,"line":2122},[155,10024,8557],{"class":171},[155,10026,1109],{"class":263},[155,10028,363],{"class":171},[155,10030,10031],{"class":157,"line":2128},[155,10032,217],{"emptyLinePlaceholder":216},[155,10034,10035],{"class":157,"line":2138},[155,10036,4774],{"class":161},[155,10038,10039,10041,10043],{"class":157,"line":2144},[155,10040,260],{"class":167},[155,10042,586],{"class":226},[155,10044,589],{"class":171},[155,10046,10047,10049,10051,10053],{"class":157,"line":2154},[155,10048,595],{"class":171},[155,10050,317],{"class":167},[155,10052,285],{"class":263},[155,10054,8654],{"class":171},[155,10056,10057,10059,10061,10063],{"class":157,"line":2160},[155,10058,595],{"class":171},[155,10060,317],{"class":167},[155,10062,285],{"class":263},[155,10064,8665],{"class":171},[155,10066,10067,10069,10071,10073],{"class":157,"line":2170},[155,10068,595],{"class":171},[155,10070,317],{"class":167},[155,10072,285],{"class":263},[155,10074,8676],{"class":171},[155,10076,10077,10079,10081,10083],{"class":157,"line":2176},[155,10078,595],{"class":171},[155,10080,317],{"class":167},[155,10082,285],{"class":263},[155,10084,8687],{"class":171},[155,10086,10087,10089,10091,10093],{"class":157,"line":2191},[155,10088,595],{"class":171},[155,10090,317],{"class":167},[155,10092,285],{"class":263},[155,10094,8698],{"class":171},[155,10096,10097,10099,10101,10103],{"class":157,"line":2197},[155,10098,595],{"class":171},[155,10100,317],{"class":167},[155,10102,285],{"class":263},[155,10104,8709],{"class":171},[155,10106,10107,10109],{"class":157,"line":2208},[155,10108,709],{"class":167},[155,10110,712],{"class":171},[155,10112,10113],{"class":157,"line":2214},[155,10114,217],{"emptyLinePlaceholder":216},[155,10116,10117],{"class":157,"line":2225},[155,10118,8724],{"class":161},[155,10120,10121,10123,10125,10127,10129],{"class":157,"line":2231},[155,10122,723],{"class":167},[155,10124,726],{"class":263},[155,10126,729],{"class":167},[155,10128,8735],{"class":732},[155,10130,736],{"class":171},[155,10132,10133,10135,10137,10139,10141,10143,10145,10147,10149],{"class":157,"line":2237},[155,10134,748],{"class":171},[155,10136,317],{"class":167},[155,10138,753],{"class":171},[155,10140,756],{"class":732},[155,10142,759],{"class":167},[155,10144,762],{"class":171},[155,10146,765],{"class":167},[155,10148,768],{"class":732},[155,10150,363],{"class":171},[155,10152,10153,10155],{"class":157,"line":2243},[155,10154,822],{"class":263},[155,10156,8764],{"class":171},[155,10158,10159,10161,10163],{"class":157,"line":2249},[155,10160,811],{"class":171},[155,10162,317],{"class":167},[155,10164,8773],{"class":171},[155,10166,10167,10169,10171,10173,10175,10177,10179,10181],{"class":157,"line":2260},[155,10168,822],{"class":263},[155,10170,825],{"class":171},[155,10172,329],{"class":263},[155,10174,332],{"class":171},[155,10176,1025],{"class":263},[155,10178,332],{"class":171},[155,10180,1025],{"class":263},[155,10182,839],{"class":171},[28,10184,10185],{"start":121},[31,10186,10187],{},"测试代码",[146,10189,10191],{"className":148,"code":10190,"language":150,"meta":39,"style":39},"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",[152,10192,10193,10199,10209,10219,10223,10233,10244,10248,10252,10256,10264,10280,10290,10306,10316,10330,10334,10344,10354,10364,10370,10374,10378,10386,10390,10406,10414,10418,10422,10430,10438,10442,10446,10450,10454,10460,10464,10474,10482,10490,10494,10498,10502,10510,10514,10530,10534,10538,10542,10554,10558,10570,10574,10578,10590,10594,10604,10608,10612,10624,10628,10637,10641,10645,10653,10657,10665,10669,10673,10677,10681,10685,10701,10709,10713,10717,10765,10771,10775,10785,10793,10801,10805,10809,10813,10817,10825,10829,10845,10849,10857,10865],{"__ignoreMap":39},[155,10194,10195,10197],{"class":157,"line":158},[155,10196,168],{"class":167},[155,10198,172],{"class":171},[155,10200,10201,10203,10205,10207],{"class":157,"line":46},[155,10202,168],{"class":167},[155,10204,939],{"class":171},[155,10206,907],{"class":167},[155,10208,944],{"class":171},[155,10210,10211,10213,10215,10217],{"class":157,"line":121},[155,10212,183],{"class":167},[155,10214,922],{"class":171},[155,10216,168],{"class":167},[155,10218,927],{"class":171},[155,10220,10221],{"class":157,"line":180},[155,10222,3527],{"class":161},[155,10224,10225,10227,10229,10231],{"class":157,"line":194},[155,10226,183],{"class":167},[155,10228,892],{"class":171},[155,10230,168],{"class":167},[155,10232,897],{"class":171},[155,10234,10235,10237,10239,10241],{"class":157,"line":200},[155,10236,183],{"class":167},[155,10238,1451],{"class":171},[155,10240,168],{"class":167},[155,10242,10243],{"class":263}," VGG16\n",[155,10245,10246],{"class":157,"line":213},[155,10247,217],{"emptyLinePlaceholder":216},[155,10249,10250],{"class":157,"line":220},[155,10251,217],{"emptyLinePlaceholder":216},[155,10253,10254],{"class":157,"line":245},[155,10255,3556],{"class":161},[155,10257,10258,10260,10262],{"class":157,"line":251},[155,10259,1484],{"class":167},[155,10261,3563],{"class":226},[155,10263,1490],{"class":171},[155,10265,10266,10268,10270,10272,10274,10276,10278],{"class":157,"line":257},[155,10267,3570],{"class":171},[155,10269,317],{"class":167},[155,10271,979],{"class":171},[155,10273,982],{"class":323},[155,10275,317],{"class":167},[155,10277,987],{"class":732},[155,10279,990],{"class":171},[155,10281,10282,10284,10286,10288],{"class":157,"line":270},[155,10283,3587],{"class":323},[155,10285,317],{"class":167},[155,10287,3592],{"class":263},[155,10289,990],{"class":171},[155,10291,10292,10294,10296,10298,10300,10302,10304],{"class":157,"line":276},[155,10293,3599],{"class":323},[155,10295,317],{"class":167},[155,10297,1017],{"class":171},[155,10299,1020],{"class":323},[155,10301,317],{"class":167},[155,10303,1025],{"class":263},[155,10305,1028],{"class":171},[155,10307,10308,10310,10312,10314],{"class":157,"line":297},[155,10309,3616],{"class":323},[155,10311,317],{"class":167},[155,10313,1000],{"class":263},[155,10315,363],{"class":171},[155,10317,10318,10320,10322,10324,10326,10328],{"class":157,"line":302},[155,10319,3627],{"class":171},[155,10321,317],{"class":167},[155,10323,1058],{"class":171},[155,10325,1061],{"class":323},[155,10327,317],{"class":167},[155,10329,3638],{"class":171},[155,10331,10332],{"class":157,"line":308},[155,10333,3643],{"class":161},[155,10335,10336,10338,10340,10342],{"class":157,"line":366},[155,10337,3648],{"class":323},[155,10339,317],{"class":167},[155,10341,329],{"class":263},[155,10343,990],{"class":171},[155,10345,10346,10348,10350,10352],{"class":157,"line":379},[155,10347,3659],{"class":323},[155,10349,317],{"class":167},[155,10351,1000],{"class":263},[155,10353,990],{"class":171},[155,10355,10356,10358,10360,10362],{"class":157,"line":385},[155,10357,3670],{"class":323},[155,10359,317],{"class":167},[155,10361,1109],{"class":263},[155,10363,363],{"class":171},[155,10365,10366,10368],{"class":157,"line":415},[155,10367,1692],{"class":167},[155,10369,3683],{"class":171},[155,10371,10372],{"class":157,"line":452},[155,10373,217],{"emptyLinePlaceholder":216},[155,10375,10376],{"class":157,"line":480},[155,10377,3692],{"class":161},[155,10379,10380,10382,10384],{"class":157,"line":486},[155,10381,1484],{"class":167},[155,10383,3699],{"class":226},[155,10385,3702],{"class":171},[155,10387,10388],{"class":157,"line":499},[155,10389,3707],{"class":161},[155,10391,10392,10394,10396,10398,10400,10402,10404],{"class":157,"line":505},[155,10393,748],{"class":171},[155,10395,317],{"class":167},[155,10397,756],{"class":732},[155,10399,759],{"class":167},[155,10401,762],{"class":171},[155,10403,765],{"class":167},[155,10405,3724],{"class":732},[155,10407,10408,10410,10412],{"class":157,"line":528},[155,10409,811],{"class":171},[155,10411,317],{"class":167},[155,10413,1829],{"class":171},[155,10415,10416],{"class":157,"line":549},[155,10417,217],{"emptyLinePlaceholder":216},[155,10419,10420],{"class":157,"line":570},[155,10421,3741],{"class":161},[155,10423,10424,10426,10428],{"class":157,"line":575},[155,10425,3746],{"class":171},[155,10427,317],{"class":167},[155,10429,1891],{"class":263},[155,10431,10432,10434,10436],{"class":157,"line":581},[155,10433,3755],{"class":171},[155,10435,317],{"class":167},[155,10437,2103],{"class":263},[155,10439,10440],{"class":157,"line":592},[155,10441,217],{"emptyLinePlaceholder":216},[155,10443,10444],{"class":157,"line":610},[155,10445,3768],{"class":161},[155,10447,10448],{"class":157,"line":622},[155,10449,3773],{"class":161},[155,10451,10452],{"class":157,"line":638},[155,10453,3778],{"class":161},[155,10455,10456,10458],{"class":157,"line":650},[155,10457,3783],{"class":167},[155,10459,2477],{"class":171},[155,10461,10462],{"class":157,"line":662},[155,10463,3790],{"class":161},[155,10465,10466,10468,10470,10472],{"class":157,"line":678},[155,10467,2179],{"class":167},[155,10469,3797],{"class":171},[155,10471,1131],{"class":167},[155,10473,3802],{"class":171},[155,10475,10476,10478,10480],{"class":157,"line":694},[155,10477,3807],{"class":171},[155,10479,317],{"class":167},[155,10481,3812],{"class":171},[155,10483,10484,10486,10488],{"class":157,"line":706},[155,10485,3817],{"class":171},[155,10487,317],{"class":167},[155,10489,3822],{"class":171},[155,10491,10492],{"class":157,"line":715},[155,10493,3827],{"class":161},[155,10495,10496],{"class":157,"line":720},[155,10497,2468],{"class":171},[155,10499,10500],{"class":157,"line":739},[155,10501,3836],{"class":161},[155,10503,10504,10506,10508],{"class":157,"line":745},[155,10505,2252],{"class":171},[155,10507,317],{"class":167},[155,10509,3845],{"class":171},[155,10511,10512],{"class":157,"line":773},[155,10513,3850],{"class":161},[155,10515,10516,10518,10520,10522,10524,10526,10528],{"class":157,"line":779},[155,10517,2269],{"class":171},[155,10519,317],{"class":167},[155,10521,2274],{"class":171},[155,10523,2277],{"class":323},[155,10525,317],{"class":167},[155,10527,329],{"class":263},[155,10529,363],{"class":171},[155,10531,10532],{"class":157,"line":785},[155,10533,3871],{"class":161},[155,10535,10536],{"class":157,"line":791},[155,10537,3876],{"class":161},[155,10539,10540],{"class":157,"line":796},[155,10541,3881],{"class":161},[155,10543,10544,10546,10548,10550,10552],{"class":157,"line":802},[155,10545,3886],{"class":171},[155,10547,2351],{"class":167},[155,10549,2380],{"class":171},[155,10551,729],{"class":167},[155,10553,3895],{"class":171},[155,10555,10556],{"class":157,"line":808},[155,10557,3900],{"class":161},[155,10559,10560,10562,10564,10566,10568],{"class":157,"line":819},[155,10561,3905],{"class":171},[155,10563,2351],{"class":167},[155,10565,3910],{"class":171},[155,10567,1109],{"class":263},[155,10569,363],{"class":171},[155,10571,10572],{"class":157,"line":1832},[155,10573,217],{"emptyLinePlaceholder":216},[155,10575,10576],{"class":157,"line":1838},[155,10577,3923],{"class":161},[155,10579,10580,10582,10584,10586,10588],{"class":157,"line":1844},[155,10581,3928],{"class":171},[155,10583,317],{"class":167},[155,10585,3933],{"class":171},[155,10587,2028],{"class":167},[155,10589,3938],{"class":171},[155,10591,10592],{"class":157,"line":1850},[155,10593,3943],{"class":161},[155,10595,10596,10598,10600,10602],{"class":157,"line":1861},[155,10597,2017],{"class":263},[155,10599,230],{"class":171},[155,10601,3952],{"class":732},[155,10603,3955],{"class":171},[155,10605,10606],{"class":157,"line":1866},[155,10607,217],{"emptyLinePlaceholder":216},[155,10609,10610],{"class":157,"line":1871},[155,10611,3964],{"class":161},[155,10613,10614,10616,10618,10620,10622],{"class":157,"line":1877},[155,10615,723],{"class":167},[155,10617,726],{"class":263},[155,10619,729],{"class":167},[155,10621,733],{"class":732},[155,10623,736],{"class":171},[155,10625,10626],{"class":157,"line":1883},[155,10627,3981],{"class":161},[155,10629,10630,10632,10634],{"class":157,"line":1894},[155,10631,811],{"class":171},[155,10633,317],{"class":167},[155,10635,10636],{"class":171},"VGG16()\n",[155,10638,10639],{"class":157,"line":1900},[155,10640,3994],{"class":161},[155,10642,10643],{"class":157,"line":1911},[155,10644,3999],{"class":161},[155,10646,10647,10649,10651],{"class":157,"line":1917},[155,10648,4004],{"class":171},[155,10650,4007],{"class":732},[155,10652,1238],{"class":171},[155,10654,10655],{"class":157,"line":1927},[155,10656,4014],{"class":161},[155,10658,10659,10661,10663],{"class":157,"line":1933},[155,10660,3627],{"class":171},[155,10662,317],{"class":167},[155,10664,4023],{"class":171},[155,10666,10667],{"class":157,"line":1943},[155,10668,4028],{"class":161},[155,10670,10671],{"class":157,"line":1949},[155,10672,4033],{"class":171},[155,10674,10675],{"class":157,"line":1959},[155,10676,217],{"emptyLinePlaceholder":216},[155,10678,10679],{"class":157,"line":1964},[155,10680,4042],{"class":161},[155,10682,10683],{"class":157,"line":1970},[155,10684,4047],{"class":161},[155,10686,10687,10689,10691,10693,10695,10697,10699],{"class":157,"line":1981},[155,10688,748],{"class":171},[155,10690,317],{"class":167},[155,10692,756],{"class":732},[155,10694,759],{"class":167},[155,10696,762],{"class":171},[155,10698,765],{"class":167},[155,10700,3724],{"class":732},[155,10702,10703,10705,10707],{"class":157,"line":1986},[155,10704,811],{"class":171},[155,10706,317],{"class":167},[155,10708,1829],{"class":171},[155,10710,10711],{"class":157,"line":1991},[155,10712,4076],{"class":161},[155,10714,10715],{"class":157,"line":1997},[155,10716,4081],{"class":161},[155,10718,10719,10721,10723,10725,10727,10729,10731,10733,10735,10737,10739,10741,10743,10745,10747,10749,10751,10753,10755,10757,10759,10761,10763],{"class":157,"line":2014},[155,10720,4086],{"class":171},[155,10722,317],{"class":167},[155,10724,4091],{"class":171},[155,10726,4094],{"class":732},[155,10728,332],{"class":171},[155,10730,4099],{"class":732},[155,10732,332],{"class":171},[155,10734,4104],{"class":732},[155,10736,332],{"class":171},[155,10738,4109],{"class":732},[155,10740,332],{"class":171},[155,10742,4114],{"class":732},[155,10744,332],{"class":171},[155,10746,4119],{"class":732},[155,10748,332],{"class":171},[155,10750,4124],{"class":732},[155,10752,332],{"class":171},[155,10754,4129],{"class":732},[155,10756,332],{"class":171},[155,10758,4134],{"class":732},[155,10760,332],{"class":171},[155,10762,4139],{"class":732},[155,10764,2845],{"class":171},[155,10766,10767,10769],{"class":157,"line":2046},[155,10768,3783],{"class":167},[155,10770,2477],{"class":171},[155,10772,10773],{"class":157,"line":2062},[155,10774,4152],{"class":161},[155,10776,10777,10779,10781,10783],{"class":157,"line":2067},[155,10778,2179],{"class":167},[155,10780,4159],{"class":171},[155,10782,1131],{"class":167},[155,10784,3802],{"class":171},[155,10786,10787,10789,10791],{"class":157,"line":2073},[155,10788,2200],{"class":171},[155,10790,317],{"class":167},[155,10792,2205],{"class":171},[155,10794,10795,10797,10799],{"class":157,"line":2079},[155,10796,2217],{"class":171},[155,10798,317],{"class":167},[155,10800,2222],{"class":171},[155,10802,10803],{"class":157,"line":2089},[155,10804,217],{"emptyLinePlaceholder":216},[155,10806,10807],{"class":157,"line":2095},[155,10808,4188],{"class":161},[155,10810,10811],{"class":157,"line":2106},[155,10812,2468],{"class":171},[155,10814,10815],{"class":157,"line":2112},[155,10816,4197],{"class":161},[155,10818,10819,10821,10823],{"class":157,"line":2122},[155,10820,2252],{"class":171},[155,10822,317],{"class":167},[155,10824,2257],{"class":171},[155,10826,10827],{"class":157,"line":2128},[155,10828,4210],{"class":161},[155,10830,10831,10833,10835,10837,10839,10841,10843],{"class":157,"line":2138},[155,10832,2269],{"class":171},[155,10834,317],{"class":167},[155,10836,2274],{"class":171},[155,10838,2277],{"class":323},[155,10840,317],{"class":167},[155,10842,329],{"class":263},[155,10844,363],{"class":171},[155,10846,10847],{"class":157,"line":2144},[155,10848,4231],{"class":161},[155,10850,10851,10853,10855],{"class":157,"line":2154},[155,10852,4236],{"class":171},[155,10854,317],{"class":167},[155,10856,4241],{"class":171},[155,10858,10859,10861,10863],{"class":157,"line":2160},[155,10860,4246],{"class":171},[155,10862,317],{"class":167},[155,10864,4251],{"class":171},[155,10866,10867,10869,10871,10873,10875,10877,10879,10881],{"class":157,"line":2170},[155,10868,4256],{"class":263},[155,10870,230],{"class":171},[155,10872,4261],{"class":732},[155,10874,4264],{"class":171},[155,10876,4267],{"class":732},[155,10878,332],{"class":171},[155,10880,4272],{"class":732},[155,10882,4275],{"class":171},[14,10884,10886],{"id":10885},"_23googlenet","2.3.GoogLeNet",[19,10888,10890],{"id":10889},"_231原理","2.3.1.原理",[28,10892,10893],{},[31,10894,10895],{},"网络结构",[24,10897,10898],{},[37,10899],{"alt":39,"src":10900},"\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",[24,10902,10903],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[24,10905,10906],{},[37,10907],{"alt":39,"src":10908},"\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",[24,10910,10911],{},[37,10912],{"alt":39,"src":10913},"\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",[24,10915,10916],{},[37,10917],{"alt":39,"src":10918},"\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",[28,10920,10921],{"start":46},[31,10922,10923],{},"1x1卷积的优点",[24,10925,10926],{},[37,10927],{"alt":39,"src":10928},"\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",[28,10930,10931],{"start":121},[31,10932,10933],{},"全局平均池化层优点",[24,10935,10936],{},[37,10937],{"alt":39,"src":10938},"\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",[24,10940,10941],{},[37,10942],{"alt":39,"src":10943},"\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",[28,10945,10946],{"start":180},[31,10947,10948],{},"参数详细描述",[24,10950,10951],{},[37,10952],{"alt":39,"src":10953},"\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",[24,10955,10956],{},[37,10957],{"alt":39,"src":10958},"\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",[24,10960,10961],{},[37,10962],{"alt":39,"src":10963},"\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",[24,10965,10966],{},[37,10967],{"alt":39,"src":10968},"\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",[24,10970,10971],{},[37,10972],{"alt":39,"src":10973},"\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",[24,10975,10976],{},[37,10977],{"alt":39,"src":10978},"\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",[24,10980,10981],{},[37,10982],{"alt":39,"src":10983},"\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",[24,10985,10986],{},[37,10987],{"alt":39,"src":10988},"\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",[24,10990,10991],{},[37,10992],{"alt":39,"src":10993},"\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",[24,10995,10996],{},[37,10997],{"alt":39,"src":10998},"\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",[24,11000,11001],{},[37,11002],{"alt":39,"src":11003},"\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",[24,11005,11006],{},[37,11007],{"alt":39,"src":11008},"\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",[24,11010,11011],{},[37,11012],{"alt":39,"src":11013},"\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",[24,11015,11016],{},[37,11017],{"alt":39,"src":11018},"\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",[24,11020,11021],{},[37,11022],{"alt":39,"src":11023},"\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",[24,11025,11026],{},[37,11027],{"alt":39,"src":11028},"\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",[24,11030,11031],{},[37,11032],{"alt":39,"src":11033},"\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",[24,11035,11036],{},[37,11037],{"alt":39,"src":11038},"\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",[24,11040,11041],{},[37,11042],{"alt":39,"src":11043},"\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",[24,11045,11046],{},[37,11047],{"alt":39,"src":11048},"\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",[24,11050,11051],{},[37,11052],{"alt":39,"src":11053},"\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",[19,11055,11057],{"id":11056},"_232代码实现","2.3.2.代码实现",[28,11059,11060],{},[31,11061,144],{},[24,11063,11064],{},"根据原理一步一步搭建即可",[146,11066,11068],{"className":148,"code":11067,"language":150,"meta":39,"style":39},"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",[152,11069,11070,11076,11086,11096,11100,11117,11126,11141,11151,11156,11189,11194,11231,11278,11283,11319,11366,11371,11376,11411,11443,11447,11455,11471,11496,11521,11542,11547,11562,11566,11570,11575,11592,11597,11606,11621,11632,11676,11680,11708,11712,11723,11751,11755,11792,11796,11824,11828,11839,11876,11908,11936,11940,11951,11986,12021,12053,12086,12120,12148,12152,12163,12196,12228,12242,12246,12259,12263,12268,12280,12288,12310,12315,12320,12325,12330,12335,12340,12354,12362,12371,12384,12399,12408,12412,12420,12431,12442,12453,12464,12475,12481,12485,12490,12502,12522,12531],{"__ignoreMap":39},[155,11071,11072,11074],{"class":157,"line":158},[155,11073,168],{"class":167},[155,11075,172],{"class":171},[155,11077,11078,11080,11082,11084],{"class":157,"line":46},[155,11079,183],{"class":167},[155,11081,186],{"class":171},[155,11083,168],{"class":167},[155,11085,191],{"class":171},[155,11087,11088,11090,11092,11094],{"class":157,"line":121},[155,11089,183],{"class":167},[155,11091,205],{"class":171},[155,11093,168],{"class":167},[155,11095,210],{"class":171},[155,11097,11098],{"class":157,"line":180},[155,11099,217],{"emptyLinePlaceholder":216},[155,11101,11102,11104,11107,11109,11111,11113,11115],{"class":157,"line":194},[155,11103,223],{"class":167},[155,11105,11106],{"class":226}," Inception",[155,11108,230],{"class":171},[155,11110,233],{"class":226},[155,11112,236],{"class":171},[155,11114,239],{"class":226},[155,11116,242],{"class":171},[155,11118,11119,11121,11123],{"class":157,"line":200},[155,11120,260],{"class":167},[155,11122,264],{"class":263},[155,11124,11125],{"class":171},"(self,in_channels,c1,c2,c3,c4):\n",[155,11127,11128,11130,11133,11135,11137,11139],{"class":157,"line":213},[155,11129,279],{"class":263},[155,11131,11132],{"class":171},"(Inception,",[155,11134,285],{"class":263},[155,11136,288],{"class":171},[155,11138,291],{"class":263},[155,11140,294],{"class":171},[155,11142,11143,11145,11147,11149],{"class":157,"line":220},[155,11144,311],{"class":263},[155,11146,4377],{"class":171},[155,11148,317],{"class":167},[155,11150,4382],{"class":171},[155,11152,11153],{"class":157,"line":245},[155,11154,11155],{"class":161},"        # 路线1：定义1*1卷积\n",[155,11157,11158,11160,11163,11165,11167,11169,11171,11174,11176,11178,11181,11183,11185,11187],{"class":157,"line":251},[155,11159,311],{"class":263},[155,11161,11162],{"class":171},".p1_1",[155,11164,317],{"class":167},[155,11166,320],{"class":171},[155,11168,324],{"class":323},[155,11170,317],{"class":167},[155,11172,11173],{"class":171},"in_channels,",[155,11175,335],{"class":323},[155,11177,317],{"class":167},[155,11179,11180],{"class":171},"c1,",[155,11182,345],{"class":323},[155,11184,317],{"class":167},[155,11186,329],{"class":263},[155,11188,363],{"class":171},[155,11190,11191],{"class":157,"line":257},[155,11192,11193],{"class":161},"        # 路线2：定义1*1卷积和3*3\n",[155,11195,11196,11198,11201,11203,11205,11207,11209,11211,11213,11215,11218,11220,11223,11225,11227,11229],{"class":157,"line":270},[155,11197,311],{"class":263},[155,11199,11200],{"class":171},".p2_1",[155,11202,317],{"class":167},[155,11204,320],{"class":171},[155,11206,324],{"class":323},[155,11208,317],{"class":167},[155,11210,11173],{"class":171},[155,11212,335],{"class":323},[155,11214,317],{"class":167},[155,11216,11217],{"class":171},"c2[",[155,11219,1109],{"class":263},[155,11221,11222],{"class":171},"],",[155,11224,345],{"class":323},[155,11226,317],{"class":167},[155,11228,329],{"class":263},[155,11230,363],{"class":171},[155,11232,11233,11235,11238,11240,11242,11244,11246,11248,11250,11252,11254,11256,11258,11260,11262,11264,11266,11268,11270,11272,11274,11276],{"class":157,"line":276},[155,11234,311],{"class":263},[155,11236,11237],{"class":171},".p2_2",[155,11239,317],{"class":167},[155,11241,320],{"class":171},[155,11243,324],{"class":323},[155,11245,317],{"class":167},[155,11247,11217],{"class":171},[155,11249,1109],{"class":263},[155,11251,11222],{"class":171},[155,11253,335],{"class":323},[155,11255,317],{"class":167},[155,11257,11217],{"class":171},[155,11259,329],{"class":263},[155,11261,11222],{"class":171},[155,11263,345],{"class":323},[155,11265,317],{"class":167},[155,11267,4444],{"class":263},[155,11269,332],{"class":171},[155,11271,355],{"class":323},[155,11273,317],{"class":167},[155,11275,329],{"class":263},[155,11277,363],{"class":171},[155,11279,11280],{"class":157,"line":297},[155,11281,11282],{"class":161},"        # 路线3：定义1*1卷积和5*5\n",[155,11284,11285,11287,11290,11292,11294,11296,11298,11300,11302,11304,11307,11309,11311,11313,11315,11317],{"class":157,"line":302},[155,11286,311],{"class":263},[155,11288,11289],{"class":171},".p3_1",[155,11291,317],{"class":167},[155,11293,320],{"class":171},[155,11295,324],{"class":323},[155,11297,317],{"class":167},[155,11299,11173],{"class":171},[155,11301,335],{"class":323},[155,11303,317],{"class":167},[155,11305,11306],{"class":171},"c3[",[155,11308,1109],{"class":263},[155,11310,11222],{"class":171},[155,11312,345],{"class":323},[155,11314,317],{"class":167},[155,11316,329],{"class":263},[155,11318,363],{"class":171},[155,11320,11321,11323,11326,11328,11330,11332,11334,11336,11338,11340,11342,11344,11346,11348,11350,11352,11354,11356,11358,11360,11362,11364],{"class":157,"line":308},[155,11322,311],{"class":263},[155,11324,11325],{"class":171},".p3_2",[155,11327,317],{"class":167},[155,11329,320],{"class":171},[155,11331,324],{"class":323},[155,11333,317],{"class":167},[155,11335,11306],{"class":171},[155,11337,1109],{"class":263},[155,11339,11222],{"class":171},[155,11341,335],{"class":323},[155,11343,317],{"class":167},[155,11345,11306],{"class":171},[155,11347,329],{"class":263},[155,11349,11222],{"class":171},[155,11351,345],{"class":323},[155,11353,317],{"class":167},[155,11355,350],{"class":263},[155,11357,332],{"class":171},[155,11359,355],{"class":323},[155,11361,317],{"class":167},[155,11363,360],{"class":263},[155,11365,363],{"class":171},[155,11367,11368],{"class":157,"line":366},[155,11369,11370],{"class":161},"        # 路线4：定义3*3最大池化和1*1卷积\n",[155,11372,11373],{"class":157,"line":379},[155,11374,11375],{"class":161},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[155,11377,11378,11380,11383,11385,11387,11389,11391,11393,11395,11397,11399,11401,11403,11405,11407,11409],{"class":157,"line":385},[155,11379,311],{"class":263},[155,11381,11382],{"class":171},".p4_1",[155,11384,317],{"class":167},[155,11386,4437],{"class":171},[155,11388,345],{"class":323},[155,11390,317],{"class":167},[155,11392,4444],{"class":263},[155,11394,332],{"class":171},[155,11396,406],{"class":323},[155,11398,317],{"class":167},[155,11400,329],{"class":263},[155,11402,332],{"class":171},[155,11404,355],{"class":323},[155,11406,317],{"class":167},[155,11408,329],{"class":263},[155,11410,363],{"class":171},[155,11412,11413,11415,11418,11420,11422,11424,11426,11428,11430,11432,11435,11437,11439,11441],{"class":157,"line":415},[155,11414,311],{"class":263},[155,11416,11417],{"class":171},".p4_2",[155,11419,317],{"class":167},[155,11421,320],{"class":171},[155,11423,324],{"class":323},[155,11425,317],{"class":167},[155,11427,11173],{"class":171},[155,11429,335],{"class":323},[155,11431,317],{"class":167},[155,11433,11434],{"class":171},"c4,",[155,11436,345],{"class":323},[155,11438,317],{"class":167},[155,11440,329],{"class":263},[155,11442,363],{"class":171},[155,11444,11445],{"class":157,"line":452},[155,11446,217],{"emptyLinePlaceholder":216},[155,11448,11449,11451,11453],{"class":157,"line":480},[155,11450,260],{"class":167},[155,11452,586],{"class":226},[155,11454,589],{"class":171},[155,11456,11457,11460,11462,11464,11466,11468],{"class":157,"line":486},[155,11458,11459],{"class":171},"        p1",[155,11461,317],{"class":167},[155,11463,285],{"class":263},[155,11465,4793],{"class":171},[155,11467,285],{"class":263},[155,11469,11470],{"class":171},".p1_1(x))\n",[155,11472,11473,11476,11478,11480,11482,11484,11487,11489,11491,11493],{"class":157,"line":499},[155,11474,11475],{"class":171},"        p2",[155,11477,317],{"class":167},[155,11479,285],{"class":263},[155,11481,4793],{"class":171},[155,11483,285],{"class":263},[155,11485,11486],{"class":171},".p2_2(",[155,11488,285],{"class":263},[155,11490,4793],{"class":171},[155,11492,285],{"class":263},[155,11494,11495],{"class":171},".p2_1(x))))\n",[155,11497,11498,11501,11503,11505,11507,11509,11512,11514,11516,11518],{"class":157,"line":505},[155,11499,11500],{"class":171},"        p3",[155,11502,317],{"class":167},[155,11504,285],{"class":263},[155,11506,4793],{"class":171},[155,11508,285],{"class":263},[155,11510,11511],{"class":171},".p3_2(",[155,11513,285],{"class":263},[155,11515,4793],{"class":171},[155,11517,285],{"class":263},[155,11519,11520],{"class":171},".p3_1(x))))\n",[155,11522,11523,11526,11528,11530,11532,11534,11537,11539],{"class":157,"line":528},[155,11524,11525],{"class":171},"        p4",[155,11527,317],{"class":167},[155,11529,285],{"class":263},[155,11531,4793],{"class":171},[155,11533,285],{"class":263},[155,11535,11536],{"class":171},".p4_2(",[155,11538,285],{"class":263},[155,11540,11541],{"class":171},".p4_1(x)))\n",[155,11543,11544],{"class":157,"line":549},[155,11545,11546],{"class":161},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[155,11548,11549,11551,11554,11556,11558,11560],{"class":157,"line":570},[155,11550,709],{"class":167},[155,11552,11553],{"class":171}," torch.cat((p1,p2,p3,p4),",[155,11555,2277],{"class":323},[155,11557,317],{"class":167},[155,11559,329],{"class":263},[155,11561,363],{"class":171},[155,11563,11564],{"class":157,"line":575},[155,11565,217],{"emptyLinePlaceholder":216},[155,11567,11568],{"class":157,"line":581},[155,11569,217],{"emptyLinePlaceholder":216},[155,11571,11572],{"class":157,"line":592},[155,11573,11574],{"class":161},"# 搭建GoogLeNet网络\n",[155,11576,11577,11579,11582,11584,11586,11588,11590],{"class":157,"line":610},[155,11578,223],{"class":167},[155,11580,11581],{"class":226}," GoogLeNet",[155,11583,230],{"class":171},[155,11585,233],{"class":226},[155,11587,236],{"class":171},[155,11589,239],{"class":226},[155,11591,242],{"class":171},[155,11593,11594],{"class":157,"line":622},[155,11595,11596],{"class":161},"    # 必须把Inception导入到里边\n",[155,11598,11599,11601,11603],{"class":157,"line":638},[155,11600,260],{"class":167},[155,11602,264],{"class":263},[155,11604,11605],{"class":171},"(self,Inception):\n",[155,11607,11608,11610,11613,11615,11617,11619],{"class":157,"line":650},[155,11609,279],{"class":263},[155,11611,11612],{"class":171},"(GoogLeNet,",[155,11614,285],{"class":263},[155,11616,288],{"class":171},[155,11618,291],{"class":263},[155,11620,294],{"class":171},[155,11622,11623,11625,11628,11630],{"class":157,"line":662},[155,11624,311],{"class":263},[155,11626,11627],{"class":171},".b1",[155,11629,317],{"class":167},[155,11631,7619],{"class":171},[155,11633,11634,11636,11638,11640,11642,11644,11646,11648,11650,11652,11654,11656,11658,11660,11662,11664,11666,11668,11670,11672,11674],{"class":157,"line":678},[155,11635,7624],{"class":171},[155,11637,324],{"class":323},[155,11639,317],{"class":167},[155,11641,329],{"class":263},[155,11643,332],{"class":171},[155,11645,335],{"class":323},[155,11647,317],{"class":167},[155,11649,1076],{"class":263},[155,11651,332],{"class":171},[155,11653,345],{"class":323},[155,11655,317],{"class":167},[155,11657,8408],{"class":263},[155,11659,332],{"class":171},[155,11661,406],{"class":323},[155,11663,317],{"class":167},[155,11665,360],{"class":263},[155,11667,332],{"class":171},[155,11669,355],{"class":323},[155,11671,317],{"class":167},[155,11673,4444],{"class":263},[155,11675,7657],{"class":171},[155,11677,11678],{"class":157,"line":694},[155,11679,7662],{"class":171},[155,11681,11682,11684,11686,11688,11690,11692,11694,11696,11698,11700,11702,11704,11706],{"class":157,"line":706},[155,11683,7707],{"class":171},[155,11685,345],{"class":323},[155,11687,317],{"class":167},[155,11689,4444],{"class":263},[155,11691,332],{"class":171},[155,11693,406],{"class":323},[155,11695,317],{"class":167},[155,11697,360],{"class":263},[155,11699,332],{"class":171},[155,11701,355],{"class":323},[155,11703,317],{"class":167},[155,11705,329],{"class":263},[155,11707,363],{"class":171},[155,11709,11710],{"class":157,"line":715},[155,11711,7736],{"class":171},[155,11713,11714,11716,11719,11721],{"class":157,"line":720},[155,11715,311],{"class":263},[155,11717,11718],{"class":171},".b2",[155,11720,317],{"class":167},[155,11722,7619],{"class":171},[155,11724,11725,11727,11729,11731,11733,11735,11737,11739,11741,11743,11745,11747,11749],{"class":157,"line":739},[155,11726,7624],{"class":171},[155,11728,324],{"class":323},[155,11730,317],{"class":167},[155,11732,1076],{"class":263},[155,11734,332],{"class":171},[155,11736,335],{"class":323},[155,11738,317],{"class":167},[155,11740,1076],{"class":263},[155,11742,332],{"class":171},[155,11744,345],{"class":323},[155,11746,317],{"class":167},[155,11748,329],{"class":263},[155,11750,7657],{"class":171},[155,11752,11753],{"class":157,"line":745},[155,11754,7662],{"class":171},[155,11756,11757,11759,11761,11763,11765,11767,11769,11771,11774,11776,11778,11780,11782,11784,11786,11788,11790],{"class":157,"line":773},[155,11758,7624],{"class":171},[155,11760,324],{"class":323},[155,11762,317],{"class":167},[155,11764,1076],{"class":263},[155,11766,332],{"class":171},[155,11768,335],{"class":323},[155,11770,317],{"class":167},[155,11772,11773],{"class":263},"192",[155,11775,332],{"class":171},[155,11777,345],{"class":323},[155,11779,317],{"class":167},[155,11781,4444],{"class":263},[155,11783,332],{"class":171},[155,11785,355],{"class":323},[155,11787,317],{"class":167},[155,11789,329],{"class":263},[155,11791,7657],{"class":171},[155,11793,11794],{"class":157,"line":779},[155,11795,7662],{"class":171},[155,11797,11798,11800,11802,11804,11806,11808,11810,11812,11814,11816,11818,11820,11822],{"class":157,"line":785},[155,11799,7707],{"class":171},[155,11801,345],{"class":323},[155,11803,317],{"class":167},[155,11805,4444],{"class":263},[155,11807,332],{"class":171},[155,11809,406],{"class":323},[155,11811,317],{"class":167},[155,11813,360],{"class":263},[155,11815,332],{"class":171},[155,11817,355],{"class":323},[155,11819,317],{"class":167},[155,11821,329],{"class":263},[155,11823,363],{"class":171},[155,11825,11826],{"class":157,"line":791},[155,11827,7736],{"class":171},[155,11829,11830,11832,11835,11837],{"class":157,"line":796},[155,11831,311],{"class":263},[155,11833,11834],{"class":171},".b3",[155,11836,317],{"class":167},[155,11838,7619],{"class":171},[155,11840,11841,11844,11846,11848,11850,11853,11855,11857,11859,11862,11864,11866,11869,11872,11874],{"class":157,"line":802},[155,11842,11843],{"class":171},"            Inception(",[155,11845,11773],{"class":263},[155,11847,332],{"class":171},[155,11849,1076],{"class":263},[155,11851,11852],{"class":171},",(",[155,11854,4407],{"class":263},[155,11856,332],{"class":171},[155,11858,1608],{"class":263},[155,11860,11861],{"class":171},"),(",[155,11863,439],{"class":263},[155,11865,332],{"class":171},[155,11867,11868],{"class":263},"32",[155,11870,11871],{"class":171},"),",[155,11873,11868],{"class":263},[155,11875,7657],{"class":171},[155,11877,11878,11880,11882,11884,11886,11888,11890,11892,11894,11896,11898,11900,11902,11904,11906],{"class":157,"line":808},[155,11879,11843],{"class":171},[155,11881,4479],{"class":263},[155,11883,332],{"class":171},[155,11885,1608],{"class":263},[155,11887,11852],{"class":171},[155,11889,1608],{"class":263},[155,11891,332],{"class":171},[155,11893,11773],{"class":263},[155,11895,11861],{"class":171},[155,11897,11868],{"class":263},[155,11899,332],{"class":171},[155,11901,4407],{"class":263},[155,11903,11871],{"class":171},[155,11905,1076],{"class":263},[155,11907,7657],{"class":171},[155,11909,11910,11912,11914,11916,11918,11920,11922,11924,11926,11928,11930,11932,11934],{"class":157,"line":819},[155,11911,7707],{"class":171},[155,11913,345],{"class":323},[155,11915,317],{"class":167},[155,11917,4444],{"class":263},[155,11919,332],{"class":171},[155,11921,406],{"class":323},[155,11923,317],{"class":167},[155,11925,360],{"class":263},[155,11927,332],{"class":171},[155,11929,355],{"class":323},[155,11931,317],{"class":167},[155,11933,329],{"class":263},[155,11935,363],{"class":171},[155,11937,11938],{"class":157,"line":1832},[155,11939,7736],{"class":171},[155,11941,11942,11944,11947,11949],{"class":157,"line":1838},[155,11943,311],{"class":263},[155,11945,11946],{"class":171},".b4",[155,11948,317],{"class":167},[155,11950,7619],{"class":171},[155,11952,11953,11955,11958,11960,11962,11964,11966,11968,11971,11973,11975,11977,11980,11982,11984],{"class":157,"line":1844},[155,11954,11843],{"class":171},[155,11956,11957],{"class":263},"480",[155,11959,332],{"class":171},[155,11961,11773],{"class":263},[155,11963,11852],{"class":171},[155,11965,4407],{"class":263},[155,11967,332],{"class":171},[155,11969,11970],{"class":263},"208",[155,11972,11861],{"class":171},[155,11974,439],{"class":263},[155,11976,332],{"class":171},[155,11978,11979],{"class":263},"48",[155,11981,11871],{"class":171},[155,11983,1076],{"class":263},[155,11985,7657],{"class":171},[155,11987,11988,11990,11992,11994,11997,11999,12002,12004,12006,12008,12011,12013,12015,12017,12019],{"class":157,"line":1850},[155,11989,11843],{"class":171},[155,11991,8067],{"class":263},[155,11993,332],{"class":171},[155,11995,11996],{"class":263},"160",[155,11998,11852],{"class":171},[155,12000,12001],{"class":263},"112",[155,12003,332],{"class":171},[155,12005,1025],{"class":263},[155,12007,11861],{"class":171},[155,12009,12010],{"class":263},"24",[155,12012,332],{"class":171},[155,12014,1076],{"class":263},[155,12016,11871],{"class":171},[155,12018,1076],{"class":263},[155,12020,7657],{"class":171},[155,12022,12023,12025,12027,12029,12031,12033,12035,12037,12039,12041,12043,12045,12047,12049,12051],{"class":157,"line":1861},[155,12024,11843],{"class":171},[155,12026,8067],{"class":263},[155,12028,332],{"class":171},[155,12030,1608],{"class":263},[155,12032,11852],{"class":171},[155,12034,1608],{"class":263},[155,12036,332],{"class":171},[155,12038,4479],{"class":263},[155,12040,11861],{"class":171},[155,12042,12010],{"class":263},[155,12044,332],{"class":171},[155,12046,1076],{"class":263},[155,12048,11871],{"class":171},[155,12050,1076],{"class":263},[155,12052,7657],{"class":171},[155,12054,12055,12057,12059,12061,12063,12065,12067,12069,12072,12074,12076,12078,12080,12082,12084],{"class":157,"line":1866},[155,12056,11843],{"class":171},[155,12058,8067],{"class":263},[155,12060,332],{"class":171},[155,12062,12001],{"class":263},[155,12064,11852],{"class":171},[155,12066,1608],{"class":263},[155,12068,332],{"class":171},[155,12070,12071],{"class":263},"288",[155,12073,11861],{"class":171},[155,12075,11868],{"class":263},[155,12077,332],{"class":171},[155,12079,1076],{"class":263},[155,12081,11871],{"class":171},[155,12083,1076],{"class":263},[155,12085,7657],{"class":171},[155,12087,12088,12090,12093,12095,12097,12099,12101,12103,12106,12108,12110,12112,12114,12116,12118],{"class":157,"line":1871},[155,12089,11843],{"class":171},[155,12091,12092],{"class":263},"528",[155,12094,332],{"class":171},[155,12096,4479],{"class":263},[155,12098,11852],{"class":171},[155,12100,11996],{"class":263},[155,12102,332],{"class":171},[155,12104,12105],{"class":263},"320",[155,12107,11861],{"class":171},[155,12109,11868],{"class":263},[155,12111,332],{"class":171},[155,12113,1608],{"class":263},[155,12115,11871],{"class":171},[155,12117,1608],{"class":263},[155,12119,7657],{"class":171},[155,12121,12122,12124,12126,12128,12130,12132,12134,12136,12138,12140,12142,12144,12146],{"class":157,"line":1877},[155,12123,7707],{"class":171},[155,12125,345],{"class":323},[155,12127,317],{"class":167},[155,12129,4444],{"class":263},[155,12131,332],{"class":171},[155,12133,406],{"class":323},[155,12135,317],{"class":167},[155,12137,360],{"class":263},[155,12139,332],{"class":171},[155,12141,355],{"class":323},[155,12143,317],{"class":167},[155,12145,329],{"class":263},[155,12147,363],{"class":171},[155,12149,12150],{"class":157,"line":1883},[155,12151,7736],{"class":171},[155,12153,12154,12156,12159,12161],{"class":157,"line":1894},[155,12155,311],{"class":263},[155,12157,12158],{"class":171},".b5",[155,12160,317],{"class":167},[155,12162,7619],{"class":171},[155,12164,12165,12167,12170,12172,12174,12176,12178,12180,12182,12184,12186,12188,12190,12192,12194],{"class":157,"line":1900},[155,12166,11843],{"class":171},[155,12168,12169],{"class":263},"832",[155,12171,332],{"class":171},[155,12173,4479],{"class":263},[155,12175,11852],{"class":171},[155,12177,11996],{"class":263},[155,12179,332],{"class":171},[155,12181,12105],{"class":263},[155,12183,11861],{"class":171},[155,12185,11868],{"class":263},[155,12187,332],{"class":171},[155,12189,1608],{"class":263},[155,12191,11871],{"class":171},[155,12193,1608],{"class":263},[155,12195,7657],{"class":171},[155,12197,12198,12200,12202,12204,12206,12208,12210,12212,12214,12216,12218,12220,12222,12224,12226],{"class":157,"line":1911},[155,12199,11843],{"class":171},[155,12201,12169],{"class":263},[155,12203,332],{"class":171},[155,12205,4549],{"class":263},[155,12207,11852],{"class":171},[155,12209,11773],{"class":263},[155,12211,332],{"class":171},[155,12213,4549],{"class":263},[155,12215,11861],{"class":171},[155,12217,11979],{"class":263},[155,12219,332],{"class":171},[155,12221,1608],{"class":263},[155,12223,11871],{"class":171},[155,12225,1608],{"class":263},[155,12227,7657],{"class":171},[155,12229,12230,12233,12235,12237,12239],{"class":157,"line":1917},[155,12231,12232],{"class":171},"            nn.AdaptiveAvgPool2d((",[155,12234,329],{"class":263},[155,12236,332],{"class":171},[155,12238,329],{"class":263},[155,12240,12241],{"class":171},")),\n",[155,12243,12244],{"class":157,"line":1927},[155,12245,8400],{"class":171},[155,12247,12248,12250,12253,12255,12257],{"class":157,"line":1933},[155,12249,8405],{"class":171},[155,12251,12252],{"class":263},"1024",[155,12254,332],{"class":171},[155,12256,565],{"class":263},[155,12258,363],{"class":171},[155,12260,12261],{"class":157,"line":1943},[155,12262,7736],{"class":171},[155,12264,12265],{"class":157,"line":1949},[155,12266,12267],{"class":161},"        # 对模型参数初始化\n",[155,12269,12270,12272,12274,12276,12278],{"class":157,"line":1959},[155,12271,2179],{"class":167},[155,12273,8479],{"class":171},[155,12275,1131],{"class":167},[155,12277,8484],{"class":263},[155,12279,8487],{"class":171},[155,12281,12282,12284,12286],{"class":157,"line":1964},[155,12283,8497],{"class":167},[155,12285,8500],{"class":263},[155,12287,8503],{"class":171},[155,12289,12290,12292,12295,12297,12300,12302,12304,12306,12308],{"class":157,"line":1970},[155,12291,8513],{"class":171},[155,12293,12294],{"class":323},"mode",[155,12296,317],{"class":167},[155,12298,12299],{"class":732},"'fan_out'",[155,12301,332],{"class":171},[155,12303,8516],{"class":323},[155,12305,317],{"class":167},[155,12307,8521],{"class":732},[155,12309,363],{"class":171},[155,12311,12312],{"class":157,"line":1981},[155,12313,12314],{"class":161},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[155,12316,12317],{"class":157,"line":1986},[155,12318,12319],{"class":161},"                # ② mode = 'fan_out'决定使用的fan值：\n",[155,12321,12322],{"class":157,"line":1991},[155,12323,12324],{"class":161},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[155,12326,12327],{"class":157,"line":1997},[155,12328,12329],{"class":161},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[155,12331,12332],{"class":157,"line":2014},[155,12333,12334],{"class":161},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[155,12336,12337],{"class":157,"line":2046},[155,12338,12339],{"class":161},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[155,12341,12342,12344,12346,12348,12350,12352],{"class":157,"line":2062},[155,12343,8533],{"class":167},[155,12345,8536],{"class":171},[155,12347,8539],{"class":167},[155,12349,8542],{"class":167},[155,12351,8545],{"class":263},[155,12353,736],{"class":171},[155,12355,12356,12358,12360],{"class":157,"line":2067},[155,12357,8557],{"class":171},[155,12359,1109],{"class":263},[155,12361,363],{"class":171},[155,12363,12364,12367,12369],{"class":157,"line":2073},[155,12365,12366],{"class":167},"                elif",[155,12368,8500],{"class":263},[155,12370,8576],{"class":171},[155,12372,12373,12376,12378,12380,12382],{"class":157,"line":2079},[155,12374,12375],{"class":171},"                    nn.init.normal_(m.weight,",[155,12377,1109],{"class":263},[155,12379,332],{"class":171},[155,12381,8598],{"class":263},[155,12383,363],{"class":171},[155,12385,12386,12389,12391,12393,12395,12397],{"class":157,"line":2089},[155,12387,12388],{"class":167},"                    if",[155,12390,8536],{"class":171},[155,12392,8539],{"class":167},[155,12394,8542],{"class":167},[155,12396,8545],{"class":263},[155,12398,736],{"class":171},[155,12400,12401,12404,12406],{"class":157,"line":2095},[155,12402,12403],{"class":171},"                        nn.init.constant_(m.bias,",[155,12405,1109],{"class":263},[155,12407,363],{"class":171},[155,12409,12410],{"class":157,"line":2106},[155,12411,4774],{"class":161},[155,12413,12414,12416,12418],{"class":157,"line":2112},[155,12415,260],{"class":167},[155,12417,586],{"class":226},[155,12419,589],{"class":171},[155,12421,12422,12424,12426,12428],{"class":157,"line":2122},[155,12423,595],{"class":171},[155,12425,317],{"class":167},[155,12427,285],{"class":263},[155,12429,12430],{"class":171},".b1(x)\n",[155,12432,12433,12435,12437,12439],{"class":157,"line":2128},[155,12434,595],{"class":171},[155,12436,317],{"class":167},[155,12438,285],{"class":263},[155,12440,12441],{"class":171},".b2(x)\n",[155,12443,12444,12446,12448,12450],{"class":157,"line":2138},[155,12445,595],{"class":171},[155,12447,317],{"class":167},[155,12449,285],{"class":263},[155,12451,12452],{"class":171},".b3(x)\n",[155,12454,12455,12457,12459,12461],{"class":157,"line":2144},[155,12456,595],{"class":171},[155,12458,317],{"class":167},[155,12460,285],{"class":263},[155,12462,12463],{"class":171},".b4(x)\n",[155,12465,12466,12468,12470,12472],{"class":157,"line":2154},[155,12467,595],{"class":171},[155,12469,317],{"class":167},[155,12471,285],{"class":263},[155,12473,12474],{"class":171},".b5(x)\n",[155,12476,12477,12479],{"class":157,"line":2160},[155,12478,709],{"class":167},[155,12480,712],{"class":171},[155,12482,12483],{"class":157,"line":2170},[155,12484,217],{"emptyLinePlaceholder":216},[155,12486,12487],{"class":157,"line":2176},[155,12488,12489],{"class":161},"# 模型展示\n",[155,12491,12492,12494,12496,12498,12500],{"class":157,"line":2191},[155,12493,723],{"class":167},[155,12495,726],{"class":263},[155,12497,729],{"class":167},[155,12499,733],{"class":732},[155,12501,736],{"class":171},[155,12503,12504,12506,12508,12510,12512,12514,12516,12518,12520],{"class":157,"line":2197},[155,12505,748],{"class":171},[155,12507,317],{"class":167},[155,12509,753],{"class":171},[155,12511,756],{"class":732},[155,12513,759],{"class":167},[155,12515,762],{"class":171},[155,12517,765],{"class":167},[155,12519,768],{"class":732},[155,12521,363],{"class":171},[155,12523,12524,12526,12528],{"class":157,"line":2208},[155,12525,811],{"class":171},[155,12527,317],{"class":167},[155,12529,12530],{"class":171},"GoogLeNet(Inception).to(device)\n",[155,12532,12533,12535,12537,12539,12541,12543,12545,12547],{"class":157,"line":2214},[155,12534,822],{"class":263},[155,12536,825],{"class":171},[155,12538,329],{"class":263},[155,12540,332],{"class":171},[155,12542,1025],{"class":263},[155,12544,332],{"class":171},[155,12546,1025],{"class":263},[155,12548,839],{"class":171},[28,12550,12551],{"start":46},[31,12552,8796],{},[146,12554,12556],{"className":148,"code":12555,"language":150,"meta":39,"style":39},"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",[152,12557,12558,12564,12570,12580,12586,12596,12606,12616,12626,12636,12640,12651,12661,12665,12669,12673,12681,12693,12703,12719,12729,12761,12775,12785,12795,12799,12809,12823,12833,12843,12853,12859,12863,12867,12871,12875,12879,12887,12907,12911,12915,12919,12923,12927,12943,12947,12951,12959,12963,12967,12975,12979,12983,12987,12995,12999,13003,13007,13011,13019,13023,13031,13035,13043,13047,13055,13059,13067,13071,13075,13083,13087,13091,13095,13107,13131,13145,13149,13153,13157,13165,13169,13177,13181,13189,13193,13201,13205,13213,13217,13225,13229,13241,13245,13253,13257,13265,13269,13273,13277,13281,13289,13293,13309,13313,13321,13325,13329,13333,13337,13341,13345,13349,13365,13369,13381,13385,13397,13401,13413,13417,13425,13429,13437,13441,13445,13449,13455,13459,13467,13471,13487,13491,13499,13503,13519,13531,13535,13547,13551,13555,13563,13567,13571,13579,13583,13591,13595,13603,13607,13611,13653,13695,13699,13703,13719,13723,13739,13743,13747,13755,13759,13763,13775,13813,13817,13821,13829,13833,13847,13857,13863,13869,13875,13881,13885,13889,13895,13899,13903,13911,13915,13933,13937,13941,13945,13961,13965,13969,13973,13977,13981,14001,14021,14025,14029,14033,14041,14049,14053,14069,14089,14109,14113,14117,14125,14133,14137,14141,14145,14157,14161,14171,14179,14197],{"__ignoreMap":39},[155,12559,12560,12562],{"class":157,"line":158},[155,12561,168],{"class":167},[155,12563,1359],{"class":171},[155,12565,12566,12568],{"class":157,"line":46},[155,12567,168],{"class":167},[155,12569,1366],{"class":171},[155,12571,12572,12574,12576,12578],{"class":157,"line":121},[155,12573,168],{"class":167},[155,12575,1377],{"class":171},[155,12577,907],{"class":167},[155,12579,1382],{"class":171},[155,12581,12582,12584],{"class":157,"line":180},[155,12583,168],{"class":167},[155,12585,172],{"class":171},[155,12587,12588,12590,12592,12594],{"class":157,"line":194},[155,12589,183],{"class":167},[155,12591,939],{"class":171},[155,12593,168],{"class":167},[155,12595,1399],{"class":171},[155,12597,12598,12600,12602,12604],{"class":157,"line":200},[155,12599,183],{"class":167},[155,12601,892],{"class":171},[155,12603,168],{"class":167},[155,12605,897],{"class":171},[155,12607,12608,12610,12612,12614],{"class":157,"line":213},[155,12609,183],{"class":167},[155,12611,922],{"class":171},[155,12613,168],{"class":167},[155,12615,927],{"class":171},[155,12617,12618,12620,12622,12624],{"class":157,"line":220},[155,12619,168],{"class":167},[155,12621,939],{"class":171},[155,12623,907],{"class":167},[155,12625,944],{"class":171},[155,12627,12628,12630,12632,12634],{"class":157,"line":245},[155,12629,168],{"class":167},[155,12631,956],{"class":171},[155,12633,907],{"class":167},[155,12635,961],{"class":171},[155,12637,12638],{"class":157,"line":251},[155,12639,1444],{"class":161},[155,12641,12642,12644,12646,12648],{"class":157,"line":257},[155,12643,183],{"class":167},[155,12645,1451],{"class":171},[155,12647,168],{"class":167},[155,12649,12650],{"class":171}," GoogLeNet, Inception\n",[155,12652,12653,12655,12657,12659],{"class":157,"line":270},[155,12654,183],{"class":167},[155,12656,186],{"class":171},[155,12658,168],{"class":167},[155,12660,191],{"class":171},[155,12662,12663],{"class":157,"line":276},[155,12664,217],{"emptyLinePlaceholder":216},[155,12666,12667],{"class":157,"line":297},[155,12668,217],{"emptyLinePlaceholder":216},[155,12670,12671],{"class":157,"line":302},[155,12672,1479],{"class":161},[155,12674,12675,12677,12679],{"class":157,"line":308},[155,12676,1484],{"class":167},[155,12678,1487],{"class":226},[155,12680,1490],{"class":171},[155,12682,12683,12685,12687,12689,12691],{"class":157,"line":366},[155,12684,1495],{"class":171},[155,12686,317],{"class":167},[155,12688,979],{"class":171},[155,12690,987],{"class":732},[155,12692,990],{"class":171},[155,12694,12695,12697,12699,12701],{"class":157,"line":379},[155,12696,1508],{"class":323},[155,12698,317],{"class":167},[155,12700,1000],{"class":263},[155,12702,990],{"class":171},[155,12704,12705,12707,12709,12711,12713,12715,12717],{"class":157,"line":385},[155,12706,1519],{"class":323},[155,12708,317],{"class":167},[155,12710,1017],{"class":171},[155,12712,1020],{"class":323},[155,12714,317],{"class":167},[155,12716,5058],{"class":263},[155,12718,1028],{"class":171},[155,12720,12721,12723,12725,12727],{"class":157,"line":415},[155,12722,1536],{"class":323},[155,12724,317],{"class":167},[155,12726,1000],{"class":263},[155,12728,363],{"class":171},[155,12730,12731,12733,12735,12737,12739,12741,12743,12745,12747,12749,12751,12753,12755,12757,12759],{"class":157,"line":452},[155,12732,1547],{"class":171},[155,12734,317],{"class":167},[155,12736,1552],{"class":171},[155,12738,1555],{"class":263},[155,12740,230],{"class":171},[155,12742,1560],{"class":263},[155,12744,1563],{"class":167},[155,12746,1253],{"class":263},[155,12748,1568],{"class":171},[155,12750,1555],{"class":263},[155,12752,230],{"class":171},[155,12754,1575],{"class":263},[155,12756,1563],{"class":167},[155,12758,1253],{"class":263},[155,12760,1582],{"class":171},[155,12762,12763,12765,12767,12769,12771,12773],{"class":157,"line":480},[155,12764,1587],{"class":171},[155,12766,317],{"class":167},[155,12768,1592],{"class":171},[155,12770,1061],{"class":323},[155,12772,317],{"class":167},[155,12774,1066],{"class":171},[155,12776,12777,12779,12781,12783],{"class":157,"line":486},[155,12778,1603],{"class":323},[155,12780,317],{"class":167},[155,12782,11868],{"class":263},[155,12784,990],{"class":171},[155,12786,12787,12789,12791,12793],{"class":157,"line":499},[155,12788,1615],{"class":323},[155,12790,317],{"class":167},[155,12792,1000],{"class":263},[155,12794,990],{"class":171},[155,12796,12797],{"class":157,"line":505},[155,12798,1626],{"class":161},[155,12800,12801,12803,12805,12807],{"class":157,"line":528},[155,12802,1631],{"class":323},[155,12804,317],{"class":167},[155,12806,1636],{"class":263},[155,12808,363],{"class":171},[155,12810,12811,12813,12815,12817,12819,12821],{"class":157,"line":549},[155,12812,1643],{"class":171},[155,12814,317],{"class":167},[155,12816,1058],{"class":171},[155,12818,1061],{"class":323},[155,12820,317],{"class":167},[155,12822,1654],{"class":171},[155,12824,12825,12827,12829,12831],{"class":157,"line":570},[155,12826,1659],{"class":323},[155,12828,317],{"class":167},[155,12830,11868],{"class":263},[155,12832,990],{"class":171},[155,12834,12835,12837,12839,12841],{"class":157,"line":575},[155,12836,1670],{"class":323},[155,12838,317],{"class":167},[155,12840,1000],{"class":263},[155,12842,990],{"class":171},[155,12844,12845,12847,12849,12851],{"class":157,"line":581},[155,12846,1681],{"class":323},[155,12848,317],{"class":167},[155,12850,1636],{"class":263},[155,12852,363],{"class":171},[155,12854,12855,12857],{"class":157,"line":592},[155,12856,1692],{"class":167},[155,12858,1695],{"class":171},[155,12860,12861],{"class":157,"line":610},[155,12862,217],{"emptyLinePlaceholder":216},[155,12864,12865],{"class":157,"line":622},[155,12866,1704],{"class":161},[155,12868,12869],{"class":157,"line":638},[155,12870,1709],{"class":161},[155,12872,12873],{"class":157,"line":650},[155,12874,217],{"emptyLinePlaceholder":216},[155,12876,12877],{"class":157,"line":662},[155,12878,1718],{"class":161},[155,12880,12881,12883,12885],{"class":157,"line":678},[155,12882,1484],{"class":167},[155,12884,1725],{"class":226},[155,12886,1728],{"class":171},[155,12888,12889,12891,12893,12895,12897,12899,12901,12903,12905],{"class":157,"line":694},[155,12890,748],{"class":171},[155,12892,317],{"class":167},[155,12894,753],{"class":171},[155,12896,756],{"class":732},[155,12898,759],{"class":167},[155,12900,762],{"class":171},[155,12902,765],{"class":167},[155,12904,1747],{"class":732},[155,12906,363],{"class":171},[155,12908,12909],{"class":157,"line":706},[155,12910,217],{"emptyLinePlaceholder":216},[155,12912,12913],{"class":157,"line":715},[155,12914,217],{"emptyLinePlaceholder":216},[155,12916,12917],{"class":157,"line":720},[155,12918,1762],{"class":161},[155,12920,12921],{"class":157,"line":739},[155,12922,1767],{"class":161},[155,12924,12925],{"class":157,"line":745},[155,12926,1772],{"class":161},[155,12928,12929,12931,12933,12935,12937,12939,12941],{"class":157,"line":773},[155,12930,1777],{"class":171},[155,12932,317],{"class":167},[155,12934,1782],{"class":171},[155,12936,1785],{"class":323},[155,12938,317],{"class":167},[155,12940,1790],{"class":263},[155,12942,363],{"class":171},[155,12944,12945],{"class":157,"line":779},[155,12946,217],{"emptyLinePlaceholder":216},[155,12948,12949],{"class":157,"line":785},[155,12950,1801],{"class":161},[155,12952,12953,12955,12957],{"class":157,"line":791},[155,12954,1806],{"class":171},[155,12956,317],{"class":167},[155,12958,1811],{"class":171},[155,12960,12961],{"class":157,"line":796},[155,12962,217],{"emptyLinePlaceholder":216},[155,12964,12965],{"class":157,"line":802},[155,12966,1820],{"class":161},[155,12968,12969,12971,12973],{"class":157,"line":808},[155,12970,811],{"class":171},[155,12972,317],{"class":167},[155,12974,1829],{"class":171},[155,12976,12977],{"class":157,"line":819},[155,12978,1835],{"class":161},[155,12980,12981],{"class":157,"line":1832},[155,12982,1841],{"class":161},[155,12984,12985],{"class":157,"line":1838},[155,12986,1847],{"class":161},[155,12988,12989,12991,12993],{"class":157,"line":1844},[155,12990,1853],{"class":171},[155,12992,317],{"class":167},[155,12994,1858],{"class":171},[155,12996,12997],{"class":157,"line":1850},[155,12998,217],{"emptyLinePlaceholder":216},[155,13000,13001],{"class":157,"line":1861},[155,13002,217],{"emptyLinePlaceholder":216},[155,13004,13005],{"class":157,"line":1866},[155,13006,1874],{"class":161},[155,13008,13009],{"class":157,"line":1871},[155,13010,1880],{"class":161},[155,13012,13013,13015,13017],{"class":157,"line":1877},[155,13014,1886],{"class":171},[155,13016,317],{"class":167},[155,13018,1891],{"class":263},[155,13020,13021],{"class":157,"line":1883},[155,13022,1897],{"class":161},[155,13024,13025,13027,13029],{"class":157,"line":1894},[155,13026,1903],{"class":171},[155,13028,317],{"class":167},[155,13030,1908],{"class":171},[155,13032,13033],{"class":157,"line":1900},[155,13034,1914],{"class":161},[155,13036,13037,13039,13041],{"class":157,"line":1911},[155,13038,1920],{"class":171},[155,13040,317],{"class":167},[155,13042,1908],{"class":171},[155,13044,13045],{"class":157,"line":1917},[155,13046,1930],{"class":161},[155,13048,13049,13051,13053],{"class":157,"line":1927},[155,13050,1936],{"class":171},[155,13052,317],{"class":167},[155,13054,1908],{"class":171},[155,13056,13057],{"class":157,"line":1933},[155,13058,1946],{"class":161},[155,13060,13061,13063,13065],{"class":157,"line":1943},[155,13062,1952],{"class":171},[155,13064,317],{"class":167},[155,13066,1908],{"class":171},[155,13068,13069],{"class":157,"line":1949},[155,13070,217],{"emptyLinePlaceholder":216},[155,13072,13073],{"class":157,"line":1959},[155,13074,1967],{"class":161},[155,13076,13077,13079,13081],{"class":157,"line":1964},[155,13078,1973],{"class":171},[155,13080,317],{"class":167},[155,13082,1978],{"class":171},[155,13084,13085],{"class":157,"line":1970},[155,13086,217],{"emptyLinePlaceholder":216},[155,13088,13089],{"class":157,"line":1981},[155,13090,217],{"emptyLinePlaceholder":216},[155,13092,13093],{"class":157,"line":1986},[155,13094,1994],{"class":161},[155,13096,13097,13099,13101,13103,13105],{"class":157,"line":1991},[155,13098,2000],{"class":167},[155,13100,2003],{"class":171},[155,13102,1131],{"class":167},[155,13104,2008],{"class":263},[155,13106,2011],{"class":171},[155,13108,13109,13111,13113,13115,13117,13119,13121,13123,13125,13127,13129],{"class":157,"line":1997},[155,13110,2017],{"class":263},[155,13112,230],{"class":171},[155,13114,2022],{"class":732},[155,13116,2025],{"class":263},[155,13118,2028],{"class":732},[155,13120,2025],{"class":263},[155,13122,2033],{"class":732},[155,13124,2036],{"class":171},[155,13126,2039],{"class":167},[155,13128,329],{"class":263},[155,13130,1238],{"class":171},[155,13132,13133,13135,13137,13139,13141,13143],{"class":157,"line":2014},[155,13134,2017],{"class":263},[155,13136,230],{"class":171},[155,13138,2053],{"class":732},[155,13140,1563],{"class":167},[155,13142,565],{"class":263},[155,13144,363],{"class":171},[155,13146,13147],{"class":157,"line":2046},[155,13148,217],{"emptyLinePlaceholder":216},[155,13150,13151],{"class":157,"line":2062},[155,13152,2070],{"class":161},[155,13154,13155],{"class":157,"line":2067},[155,13156,2076],{"class":161},[155,13158,13159,13161,13163],{"class":157,"line":2073},[155,13160,2082],{"class":171},[155,13162,317],{"class":167},[155,13164,1891],{"class":263},[155,13166,13167],{"class":157,"line":2079},[155,13168,2092],{"class":161},[155,13170,13171,13173,13175],{"class":157,"line":2089},[155,13172,2098],{"class":171},[155,13174,317],{"class":167},[155,13176,2103],{"class":263},[155,13178,13179],{"class":157,"line":2095},[155,13180,2109],{"class":161},[155,13182,13183,13185,13187],{"class":157,"line":2106},[155,13184,2115],{"class":171},[155,13186,317],{"class":167},[155,13188,1891],{"class":263},[155,13190,13191],{"class":157,"line":2112},[155,13192,2125],{"class":161},[155,13194,13195,13197,13199],{"class":157,"line":2122},[155,13196,2131],{"class":171},[155,13198,317],{"class":167},[155,13200,2103],{"class":263},[155,13202,13203],{"class":157,"line":2128},[155,13204,2141],{"class":161},[155,13206,13207,13209,13211],{"class":157,"line":2138},[155,13208,2147],{"class":171},[155,13210,317],{"class":167},[155,13212,2103],{"class":263},[155,13214,13215],{"class":157,"line":2144},[155,13216,2157],{"class":161},[155,13218,13219,13221,13223],{"class":157,"line":2154},[155,13220,2163],{"class":171},[155,13222,317],{"class":167},[155,13224,2103],{"class":263},[155,13226,13227],{"class":157,"line":2160},[155,13228,2173],{"class":161},[155,13230,13231,13233,13235,13237,13239],{"class":157,"line":2170},[155,13232,2179],{"class":167},[155,13234,1128],{"class":171},[155,13236,1131],{"class":167},[155,13238,1134],{"class":263},[155,13240,2188],{"class":171},[155,13242,13243],{"class":157,"line":2176},[155,13244,2194],{"class":161},[155,13246,13247,13249,13251],{"class":157,"line":2191},[155,13248,2200],{"class":171},[155,13250,317],{"class":167},[155,13252,2205],{"class":171},[155,13254,13255],{"class":157,"line":2197},[155,13256,2211],{"class":161},[155,13258,13259,13261,13263],{"class":157,"line":2208},[155,13260,2217],{"class":171},[155,13262,317],{"class":167},[155,13264,2222],{"class":171},[155,13266,13267],{"class":157,"line":2214},[155,13268,2228],{"class":161},[155,13270,13271],{"class":157,"line":2225},[155,13272,2234],{"class":171},[155,13274,13275],{"class":157,"line":2231},[155,13276,2240],{"class":161},[155,13278,13279],{"class":157,"line":2237},[155,13280,2246],{"class":161},[155,13282,13283,13285,13287],{"class":157,"line":2243},[155,13284,2252],{"class":171},[155,13286,317],{"class":167},[155,13288,2257],{"class":171},[155,13290,13291],{"class":157,"line":2249},[155,13292,2263],{"class":161},[155,13294,13295,13297,13299,13301,13303,13305,13307],{"class":157,"line":2260},[155,13296,2269],{"class":171},[155,13298,317],{"class":167},[155,13300,2274],{"class":171},[155,13302,2277],{"class":323},[155,13304,317],{"class":167},[155,13306,329],{"class":263},[155,13308,363],{"class":171},[155,13310,13311],{"class":157,"line":2266},[155,13312,2289],{"class":161},[155,13314,13315,13317,13319],{"class":157,"line":2286},[155,13316,2295],{"class":171},[155,13318,317],{"class":167},[155,13320,2300],{"class":171},[155,13322,13323],{"class":157,"line":2292},[155,13324,2306],{"class":161},[155,13326,13327],{"class":157,"line":2303},[155,13328,2312],{"class":171},[155,13330,13331],{"class":157,"line":2309},[155,13332,2318],{"class":161},[155,13334,13335],{"class":157,"line":2315},[155,13336,2324],{"class":171},[155,13338,13339],{"class":157,"line":2321},[155,13340,2330],{"class":161},[155,13342,13343],{"class":157,"line":2327},[155,13344,2336],{"class":171},[155,13346,13347],{"class":157,"line":2333},[155,13348,2342],{"class":161},[155,13350,13351,13353,13355,13357,13359,13361,13363],{"class":157,"line":2339},[155,13352,2348],{"class":171},[155,13354,2351],{"class":167},[155,13356,2354],{"class":171},[155,13358,1563],{"class":167},[155,13360,2359],{"class":171},[155,13362,1109],{"class":263},[155,13364,363],{"class":171},[155,13366,13367],{"class":157,"line":2345},[155,13368,2369],{"class":161},[155,13370,13371,13373,13375,13377,13379],{"class":157,"line":2366},[155,13372,2375],{"class":171},[155,13374,2351],{"class":167},[155,13376,2380],{"class":171},[155,13378,729],{"class":167},[155,13380,2385],{"class":171},[155,13382,13383],{"class":157,"line":2372},[155,13384,2391],{"class":161},[155,13386,13387,13389,13391,13393,13395],{"class":157,"line":2388},[155,13388,2397],{"class":171},[155,13390,2351],{"class":167},[155,13392,2359],{"class":171},[155,13394,1109],{"class":263},[155,13396,363],{"class":171},[155,13398,13399],{"class":157,"line":2394},[155,13400,2411],{"class":161},[155,13402,13403,13405,13407,13409,13411],{"class":157,"line":2408},[155,13404,2179],{"class":167},[155,13406,2419],{"class":171},[155,13408,1131],{"class":167},[155,13410,1134],{"class":263},[155,13412,2426],{"class":171},[155,13414,13415],{"class":157,"line":2414},[155,13416,2432],{"class":161},[155,13418,13419,13421,13423],{"class":157,"line":2429},[155,13420,2200],{"class":171},[155,13422,317],{"class":167},[155,13424,2205],{"class":171},[155,13426,13427],{"class":157,"line":2435},[155,13428,2447],{"class":161},[155,13430,13431,13433,13435],{"class":157,"line":2444},[155,13432,2217],{"class":171},[155,13434,317],{"class":167},[155,13436,2222],{"class":171},[155,13438,13439],{"class":157,"line":2450},[155,13440,2462],{"class":161},[155,13442,13443],{"class":157,"line":2459},[155,13444,2468],{"class":171},[155,13446,13447],{"class":157,"line":2465},[155,13448,5965],{"class":161},[155,13450,13451,13453],{"class":157,"line":2471},[155,13452,2474],{"class":167},[155,13454,2477],{"class":171},[155,13456,13457],{"class":157,"line":2480},[155,13458,2483],{"class":161},[155,13460,13461,13463,13465],{"class":157,"line":2486},[155,13462,5980],{"class":171},[155,13464,317],{"class":167},[155,13466,2257],{"class":171},[155,13468,13469],{"class":157,"line":2497},[155,13470,2500],{"class":161},[155,13472,13473,13475,13477,13479,13481,13483,13485],{"class":157,"line":2503},[155,13474,5993],{"class":171},[155,13476,317],{"class":167},[155,13478,2274],{"class":171},[155,13480,2277],{"class":323},[155,13482,317],{"class":167},[155,13484,329],{"class":263},[155,13486,363],{"class":171},[155,13488,13489],{"class":157,"line":2522},[155,13490,2525],{"class":161},[155,13492,13493,13495,13497],{"class":157,"line":2528},[155,13494,6014],{"class":171},[155,13496,317],{"class":167},[155,13498,2300],{"class":171},[155,13500,13501],{"class":157,"line":2539},[155,13502,2542],{"class":161},[155,13504,13505,13507,13509,13511,13513,13515,13517],{"class":157,"line":2545},[155,13506,6027],{"class":171},[155,13508,2351],{"class":167},[155,13510,6032],{"class":171},[155,13512,1563],{"class":167},[155,13514,2359],{"class":171},[155,13516,1109],{"class":263},[155,13518,363],{"class":171},[155,13520,13521,13523,13525,13527,13529],{"class":157,"line":2565},[155,13522,6045],{"class":171},[155,13524,2351],{"class":167},[155,13526,2380],{"class":171},[155,13528,729],{"class":167},[155,13530,2385],{"class":171},[155,13532,13533],{"class":157,"line":2581},[155,13534,6058],{"class":161},[155,13536,13537,13539,13541,13543,13545],{"class":157,"line":2587},[155,13538,6063],{"class":171},[155,13540,2351],{"class":167},[155,13542,2359],{"class":171},[155,13544,1109],{"class":263},[155,13546,363],{"class":171},[155,13548,13549],{"class":157,"line":2601},[155,13550,2604],{"class":161},[155,13552,13553],{"class":157,"line":2607},[155,13554,2610],{"class":161},[155,13556,13557,13559,13561],{"class":157,"line":2613},[155,13558,2616],{"class":171},[155,13560,2028],{"class":167},[155,13562,2621],{"class":171},[155,13564,13565],{"class":157,"line":2624},[155,13566,2627],{"class":161},[155,13568,13569],{"class":157,"line":2630},[155,13570,2633],{"class":161},[155,13572,13573,13575,13577],{"class":157,"line":2636},[155,13574,2639],{"class":171},[155,13576,2028],{"class":167},[155,13578,2621],{"class":171},[155,13580,13581],{"class":157,"line":2646},[155,13582,2649],{"class":161},[155,13584,13585,13587,13589],{"class":157,"line":2652},[155,13586,2655],{"class":171},[155,13588,2028],{"class":167},[155,13590,2660],{"class":171},[155,13592,13593],{"class":157,"line":2663},[155,13594,2666],{"class":161},[155,13596,13597,13599,13601],{"class":157,"line":2669},[155,13598,2672],{"class":171},[155,13600,2028],{"class":167},[155,13602,2660],{"class":171},[155,13604,13605],{"class":157,"line":2679},[155,13606,217],{"emptyLinePlaceholder":216},[155,13608,13609],{"class":157,"line":2684},[155,13610,2687],{"class":161},[155,13612,13613,13615,13617,13619,13621,13623,13625,13627,13629,13631,13633,13635,13637,13639,13641,13643,13645,13647,13649,13651],{"class":157,"line":2690},[155,13614,2017],{"class":263},[155,13616,230],{"class":171},[155,13618,2697],{"class":732},[155,13620,2025],{"class":263},[155,13622,2702],{"class":732},[155,13624,2705],{"class":263},[155,13626,2708],{"class":167},[155,13628,2711],{"class":263},[155,13630,2714],{"class":732},[155,13632,2705],{"class":263},[155,13634,2708],{"class":167},[155,13636,2711],{"class":263},[155,13638,2697],{"class":732},[155,13640,2725],{"class":171},[155,13642,2039],{"class":167},[155,13644,329],{"class":263},[155,13646,2732],{"class":171},[155,13648,2039],{"class":167},[155,13650,329],{"class":263},[155,13652,2739],{"class":171},[155,13654,13655,13657,13659,13661,13663,13665,13667,13669,13671,13673,13675,13677,13679,13681,13683,13685,13687,13689,13691,13693],{"class":157,"line":2742},[155,13656,2017],{"class":263},[155,13658,230],{"class":171},[155,13660,2697],{"class":732},[155,13662,2025],{"class":263},[155,13664,2753],{"class":732},[155,13666,2705],{"class":263},[155,13668,2708],{"class":167},[155,13670,2711],{"class":263},[155,13672,2762],{"class":732},[155,13674,2705],{"class":263},[155,13676,2708],{"class":167},[155,13678,2711],{"class":263},[155,13680,2697],{"class":732},[155,13682,2773],{"class":171},[155,13684,2039],{"class":167},[155,13686,329],{"class":263},[155,13688,2780],{"class":171},[155,13690,2039],{"class":167},[155,13692,329],{"class":263},[155,13694,2739],{"class":171},[155,13696,13697],{"class":157,"line":2789},[155,13698,217],{"emptyLinePlaceholder":216},[155,13700,13701],{"class":157,"line":2794},[155,13702,2797],{"class":161},[155,13704,13705,13707,13709,13711,13713,13715,13717],{"class":157,"line":2800},[155,13706,2803],{"class":167},[155,13708,2806],{"class":171},[155,13710,2039],{"class":167},[155,13712,329],{"class":263},[155,13714,2813],{"class":171},[155,13716,1148],{"class":167},[155,13718,2818],{"class":171},[155,13720,13721],{"class":157,"line":2821},[155,13722,2824],{"class":161},[155,13724,13725,13727,13729,13731,13733,13735,13737],{"class":157,"line":2827},[155,13726,2830],{"class":171},[155,13728,2833],{"class":263},[155,13730,317],{"class":167},[155,13732,2838],{"class":171},[155,13734,2039],{"class":167},[155,13736,329],{"class":263},[155,13738,2845],{"class":171},[155,13740,13741],{"class":157,"line":2848},[155,13742,2851],{"class":161},[155,13744,13745],{"class":157,"line":2854},[155,13746,2857],{"class":161},[155,13748,13749,13751,13753],{"class":157,"line":2860},[155,13750,2863],{"class":171},[155,13752,317],{"class":167},[155,13754,1858],{"class":171},[155,13756,13757],{"class":157,"line":2870},[155,13758,217],{"emptyLinePlaceholder":216},[155,13760,13761],{"class":157,"line":2875},[155,13762,2878],{"class":161},[155,13764,13765,13767,13769,13771,13773],{"class":157,"line":2881},[155,13766,2884],{"class":171},[155,13768,317],{"class":167},[155,13770,2889],{"class":171},[155,13772,2039],{"class":167},[155,13774,2894],{"class":171},[155,13776,13777,13779,13781,13783,13785,13787,13789,13791,13793,13795,13797,13799,13801,13803,13805,13807,13809,13811],{"class":157,"line":2897},[155,13778,2017],{"class":263},[155,13780,230],{"class":171},[155,13782,2904],{"class":732},[155,13784,2705],{"class":263},[155,13786,2909],{"class":167},[155,13788,2711],{"class":263},[155,13790,2914],{"class":732},[155,13792,2705],{"class":263},[155,13794,2909],{"class":167},[155,13796,2711],{"class":263},[155,13798,2923],{"class":732},[155,13800,2926],{"class":171},[155,13802,2929],{"class":167},[155,13804,2932],{"class":263},[155,13806,2935],{"class":171},[155,13808,2938],{"class":167},[155,13810,2932],{"class":263},[155,13812,1238],{"class":171},[155,13814,13815],{"class":157,"line":2945},[155,13816,6342],{"class":161},[155,13818,13819],{"class":157,"line":2951},[155,13820,6347],{"class":161},[155,13822,13823,13825,13827],{"class":157,"line":2957},[155,13824,6352],{"class":171},[155,13826,2969],{"class":732},[155,13828,363],{"class":171},[155,13830,13831],{"class":157,"line":2963},[155,13832,2989],{"class":161},[155,13834,13835,13837,13839,13841,13843,13845],{"class":157,"line":2974},[155,13836,2995],{"class":171},[155,13838,317],{"class":167},[155,13840,3000],{"class":171},[155,13842,3003],{"class":323},[155,13844,317],{"class":167},[155,13846,3008],{"class":171},[155,13848,13849,13851,13853,13855],{"class":157,"line":2980},[155,13850,3014],{"class":732},[155,13852,3017],{"class":171},[155,13854,3020],{"class":263},[155,13856,3023],{"class":171},[155,13858,13859,13861],{"class":157,"line":2986},[155,13860,3029],{"class":732},[155,13862,3032],{"class":171},[155,13864,13865,13867],{"class":157,"line":2992},[155,13866,3038],{"class":732},[155,13868,3041],{"class":171},[155,13870,13871,13873],{"class":157,"line":3011},[155,13872,3047],{"class":732},[155,13874,3050],{"class":171},[155,13876,13877,13879],{"class":157,"line":3026},[155,13878,3056],{"class":732},[155,13880,3059],{"class":171},[155,13882,13883],{"class":157,"line":3035},[155,13884,3065],{"class":171},[155,13886,13887],{"class":157,"line":3044},[155,13888,3071],{"class":161},[155,13890,13891,13893],{"class":157,"line":3053},[155,13892,1692],{"class":167},[155,13894,3079],{"class":171},[155,13896,13897],{"class":157,"line":3062},[155,13898,217],{"emptyLinePlaceholder":216},[155,13900,13901],{"class":157,"line":3068},[155,13902,3090],{"class":161},[155,13904,13905,13907,13909],{"class":157,"line":3074},[155,13906,1484],{"class":167},[155,13908,3098],{"class":226},[155,13910,3101],{"class":171},[155,13912,13913],{"class":157,"line":3082},[155,13914,3107],{"class":161},[155,13916,13917,13919,13921,13923,13925,13927,13929,13931],{"class":157,"line":3087},[155,13918,3113],{"class":171},[155,13920,1224],{"class":323},[155,13922,317],{"class":167},[155,13924,230],{"class":171},[155,13926,1231],{"class":263},[155,13928,332],{"class":171},[155,13930,1264],{"class":263},[155,13932,1238],{"class":171},[155,13934,13935],{"class":157,"line":3093},[155,13936,3133],{"class":161},[155,13938,13939],{"class":157,"line":3104},[155,13940,3139],{"class":161},[155,13942,13943],{"class":157,"line":3110},[155,13944,3145],{"class":161},[155,13946,13947,13949,13951,13953,13955,13957,13959],{"class":157,"line":3130},[155,13948,1261],{"class":171},[155,13950,329],{"class":263},[155,13952,332],{"class":171},[155,13954,360],{"class":263},[155,13956,332],{"class":171},[155,13958,329],{"class":263},[155,13960,363],{"class":171},[155,13962,13963],{"class":157,"line":3136},[155,13964,3168],{"class":161},[155,13966,13967],{"class":157,"line":3142},[155,13968,3174],{"class":161},[155,13970,13971],{"class":157,"line":3148},[155,13972,3180],{"class":161},[155,13974,13975],{"class":157,"line":3165},[155,13976,3186],{"class":161},[155,13978,13979],{"class":157,"line":3171},[155,13980,3192],{"class":161},[155,13982,13983,13985,13987,13989,13991,13993,13995,13997,13999],{"class":157,"line":3177},[155,13984,3198],{"class":171},[155,13986,3201],{"class":732},[155,13988,3204],{"class":171},[155,13990,3207],{"class":732},[155,13992,332],{"class":171},[155,13994,3212],{"class":323},[155,13996,317],{"class":167},[155,13998,3217],{"class":732},[155,14000,363],{"class":171},[155,14002,14003,14005,14007,14009,14011,14013,14015,14017,14019],{"class":157,"line":3183},[155,14004,3198],{"class":171},[155,14006,3201],{"class":732},[155,14008,3229],{"class":171},[155,14010,3232],{"class":732},[155,14012,332],{"class":171},[155,14014,3212],{"class":323},[155,14016,317],{"class":167},[155,14018,3241],{"class":732},[155,14020,363],{"class":171},[155,14022,14023],{"class":157,"line":3189},[155,14024,3249],{"class":161},[155,14026,14027],{"class":157,"line":3195},[155,14028,3255],{"class":171},[155,14030,14031],{"class":157,"line":3222},[155,14032,3261],{"class":161},[155,14034,14035,14037,14039],{"class":157,"line":3246},[155,14036,3267],{"class":171},[155,14038,3270],{"class":732},[155,14040,363],{"class":171},[155,14042,14043,14045,14047],{"class":157,"line":3252},[155,14044,3278],{"class":171},[155,14046,3281],{"class":732},[155,14048,363],{"class":171},[155,14050,14051],{"class":157,"line":3258},[155,14052,3289],{"class":161},[155,14054,14055,14057,14059,14061,14063,14065,14067],{"class":157,"line":3264},[155,14056,1261],{"class":171},[155,14058,329],{"class":263},[155,14060,332],{"class":171},[155,14062,360],{"class":263},[155,14064,332],{"class":171},[155,14066,360],{"class":263},[155,14068,363],{"class":171},[155,14070,14071,14073,14075,14077,14079,14081,14083,14085,14087],{"class":157,"line":3275},[155,14072,3198],{"class":171},[155,14074,3201],{"class":732},[155,14076,3316],{"class":171},[155,14078,3207],{"class":732},[155,14080,332],{"class":171},[155,14082,3212],{"class":323},[155,14084,317],{"class":167},[155,14086,3327],{"class":732},[155,14088,363],{"class":171},[155,14090,14091,14093,14095,14097,14099,14101,14103,14105,14107],{"class":157,"line":3286},[155,14092,3198],{"class":171},[155,14094,3201],{"class":732},[155,14096,3339],{"class":171},[155,14098,3232],{"class":732},[155,14100,332],{"class":171},[155,14102,3212],{"class":323},[155,14104,317],{"class":167},[155,14106,3350],{"class":732},[155,14108,363],{"class":171},[155,14110,14111],{"class":157,"line":3292},[155,14112,3358],{"class":161},[155,14114,14115],{"class":157,"line":3309},[155,14116,3255],{"class":171},[155,14118,14119,14121,14123],{"class":157,"line":3332},[155,14120,3267],{"class":171},[155,14122,3201],{"class":732},[155,14124,363],{"class":171},[155,14126,14127,14129,14131],{"class":157,"line":3355},[155,14128,3278],{"class":171},[155,14130,3380],{"class":732},[155,14132,363],{"class":171},[155,14134,14135],{"class":157,"line":3361},[155,14136,3388],{"class":171},[155,14138,14139],{"class":157,"line":3366},[155,14140,217],{"emptyLinePlaceholder":216},[155,14142,14143],{"class":157,"line":3375},[155,14144,3399],{"class":161},[155,14146,14147,14149,14151,14153,14155],{"class":157,"line":3385},[155,14148,723],{"class":167},[155,14150,726],{"class":263},[155,14152,729],{"class":167},[155,14154,733],{"class":732},[155,14156,736],{"class":171},[155,14158,14159],{"class":157,"line":3391},[155,14160,3418],{"class":161},[155,14162,14163,14166,14168],{"class":157,"line":3396},[155,14164,14165],{"class":171},"    GoogLeNet",[155,14167,317],{"class":167},[155,14169,14170],{"class":171},"GoogLeNet(Inception)\n",[155,14172,14173,14175,14177],{"class":157,"line":3402},[155,14174,3435],{"class":171},[155,14176,317],{"class":167},[155,14178,3440],{"class":171},[155,14180,14181,14183,14185,14188,14190,14192,14195],{"class":157,"line":3415},[155,14182,2995],{"class":171},[155,14184,317],{"class":167},[155,14186,14187],{"class":171},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[155,14189,3453],{"class":323},[155,14191,317],{"class":167},[155,14193,14194],{"class":263},"30",[155,14196,363],{"class":171},[155,14198,14199],{"class":157,"line":3421},[155,14200,3466],{"class":171},[28,14202,14203],{"start":121},[31,14204,10187],{},[146,14206,14208],{"className":148,"code":14207,"language":150,"meta":39,"style":39},"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",[152,14209,14210,14216,14226,14236,14240,14250,14261,14265,14269,14273,14281,14297,14307,14323,14333,14347,14351,14361,14371,14381,14387,14391,14395,14403,14407,14423,14431,14435,14439,14447,14455,14459,14463,14467,14471,14477,14481,14491,14499,14507,14511,14515,14519,14527,14531,14547,14551,14555,14559,14571,14575,14587,14591,14595,14607,14611,14621,14625,14629,14641,14645,14653,14657,14661,14669,14673,14681,14685,14689,14693,14697,14701,14717,14725,14729,14733,14781,14787,14791,14801,14809,14817,14821,14825,14829,14833,14841,14845,14861,14865,14873,14881],{"__ignoreMap":39},[155,14211,14212,14214],{"class":157,"line":158},[155,14213,168],{"class":167},[155,14215,172],{"class":171},[155,14217,14218,14220,14222,14224],{"class":157,"line":46},[155,14219,168],{"class":167},[155,14221,939],{"class":171},[155,14223,907],{"class":167},[155,14225,944],{"class":171},[155,14227,14228,14230,14232,14234],{"class":157,"line":121},[155,14229,183],{"class":167},[155,14231,922],{"class":171},[155,14233,168],{"class":167},[155,14235,927],{"class":171},[155,14237,14238],{"class":157,"line":180},[155,14239,3527],{"class":161},[155,14241,14242,14244,14246,14248],{"class":157,"line":194},[155,14243,183],{"class":167},[155,14245,892],{"class":171},[155,14247,168],{"class":167},[155,14249,897],{"class":171},[155,14251,14252,14254,14256,14258],{"class":157,"line":200},[155,14253,183],{"class":167},[155,14255,1451],{"class":171},[155,14257,168],{"class":167},[155,14259,14260],{"class":171}," GoogLeNet,Inception\n",[155,14262,14263],{"class":157,"line":213},[155,14264,217],{"emptyLinePlaceholder":216},[155,14266,14267],{"class":157,"line":220},[155,14268,217],{"emptyLinePlaceholder":216},[155,14270,14271],{"class":157,"line":245},[155,14272,3556],{"class":161},[155,14274,14275,14277,14279],{"class":157,"line":251},[155,14276,1484],{"class":167},[155,14278,3563],{"class":226},[155,14280,1490],{"class":171},[155,14282,14283,14285,14287,14289,14291,14293,14295],{"class":157,"line":257},[155,14284,3570],{"class":171},[155,14286,317],{"class":167},[155,14288,979],{"class":171},[155,14290,982],{"class":323},[155,14292,317],{"class":167},[155,14294,987],{"class":732},[155,14296,990],{"class":171},[155,14298,14299,14301,14303,14305],{"class":157,"line":270},[155,14300,3587],{"class":323},[155,14302,317],{"class":167},[155,14304,3592],{"class":263},[155,14306,990],{"class":171},[155,14308,14309,14311,14313,14315,14317,14319,14321],{"class":157,"line":276},[155,14310,3599],{"class":323},[155,14312,317],{"class":167},[155,14314,1017],{"class":171},[155,14316,1020],{"class":323},[155,14318,317],{"class":167},[155,14320,5058],{"class":263},[155,14322,1028],{"class":171},[155,14324,14325,14327,14329,14331],{"class":157,"line":297},[155,14326,3616],{"class":323},[155,14328,317],{"class":167},[155,14330,1000],{"class":263},[155,14332,363],{"class":171},[155,14334,14335,14337,14339,14341,14343,14345],{"class":157,"line":302},[155,14336,3627],{"class":171},[155,14338,317],{"class":167},[155,14340,1058],{"class":171},[155,14342,1061],{"class":323},[155,14344,317],{"class":167},[155,14346,3638],{"class":171},[155,14348,14349],{"class":157,"line":308},[155,14350,3643],{"class":161},[155,14352,14353,14355,14357,14359],{"class":157,"line":366},[155,14354,3648],{"class":323},[155,14356,317],{"class":167},[155,14358,329],{"class":263},[155,14360,990],{"class":171},[155,14362,14363,14365,14367,14369],{"class":157,"line":379},[155,14364,3659],{"class":323},[155,14366,317],{"class":167},[155,14368,1000],{"class":263},[155,14370,990],{"class":171},[155,14372,14373,14375,14377,14379],{"class":157,"line":385},[155,14374,3670],{"class":323},[155,14376,317],{"class":167},[155,14378,1109],{"class":263},[155,14380,363],{"class":171},[155,14382,14383,14385],{"class":157,"line":415},[155,14384,1692],{"class":167},[155,14386,3683],{"class":171},[155,14388,14389],{"class":157,"line":452},[155,14390,217],{"emptyLinePlaceholder":216},[155,14392,14393],{"class":157,"line":480},[155,14394,3692],{"class":161},[155,14396,14397,14399,14401],{"class":157,"line":486},[155,14398,1484],{"class":167},[155,14400,3699],{"class":226},[155,14402,3702],{"class":171},[155,14404,14405],{"class":157,"line":499},[155,14406,3707],{"class":161},[155,14408,14409,14411,14413,14415,14417,14419,14421],{"class":157,"line":505},[155,14410,748],{"class":171},[155,14412,317],{"class":167},[155,14414,756],{"class":732},[155,14416,759],{"class":167},[155,14418,762],{"class":171},[155,14420,765],{"class":167},[155,14422,3724],{"class":732},[155,14424,14425,14427,14429],{"class":157,"line":528},[155,14426,811],{"class":171},[155,14428,317],{"class":167},[155,14430,1829],{"class":171},[155,14432,14433],{"class":157,"line":549},[155,14434,217],{"emptyLinePlaceholder":216},[155,14436,14437],{"class":157,"line":570},[155,14438,3741],{"class":161},[155,14440,14441,14443,14445],{"class":157,"line":575},[155,14442,3746],{"class":171},[155,14444,317],{"class":167},[155,14446,1891],{"class":263},[155,14448,14449,14451,14453],{"class":157,"line":581},[155,14450,3755],{"class":171},[155,14452,317],{"class":167},[155,14454,2103],{"class":263},[155,14456,14457],{"class":157,"line":592},[155,14458,217],{"emptyLinePlaceholder":216},[155,14460,14461],{"class":157,"line":610},[155,14462,3768],{"class":161},[155,14464,14465],{"class":157,"line":622},[155,14466,3773],{"class":161},[155,14468,14469],{"class":157,"line":638},[155,14470,3778],{"class":161},[155,14472,14473,14475],{"class":157,"line":650},[155,14474,3783],{"class":167},[155,14476,2477],{"class":171},[155,14478,14479],{"class":157,"line":662},[155,14480,3790],{"class":161},[155,14482,14483,14485,14487,14489],{"class":157,"line":678},[155,14484,2179],{"class":167},[155,14486,3797],{"class":171},[155,14488,1131],{"class":167},[155,14490,3802],{"class":171},[155,14492,14493,14495,14497],{"class":157,"line":694},[155,14494,3807],{"class":171},[155,14496,317],{"class":167},[155,14498,3812],{"class":171},[155,14500,14501,14503,14505],{"class":157,"line":706},[155,14502,3817],{"class":171},[155,14504,317],{"class":167},[155,14506,3822],{"class":171},[155,14508,14509],{"class":157,"line":715},[155,14510,3827],{"class":161},[155,14512,14513],{"class":157,"line":720},[155,14514,2468],{"class":171},[155,14516,14517],{"class":157,"line":739},[155,14518,3836],{"class":161},[155,14520,14521,14523,14525],{"class":157,"line":745},[155,14522,2252],{"class":171},[155,14524,317],{"class":167},[155,14526,3845],{"class":171},[155,14528,14529],{"class":157,"line":773},[155,14530,3850],{"class":161},[155,14532,14533,14535,14537,14539,14541,14543,14545],{"class":157,"line":779},[155,14534,2269],{"class":171},[155,14536,317],{"class":167},[155,14538,2274],{"class":171},[155,14540,2277],{"class":323},[155,14542,317],{"class":167},[155,14544,329],{"class":263},[155,14546,363],{"class":171},[155,14548,14549],{"class":157,"line":785},[155,14550,3871],{"class":161},[155,14552,14553],{"class":157,"line":791},[155,14554,3876],{"class":161},[155,14556,14557],{"class":157,"line":796},[155,14558,3881],{"class":161},[155,14560,14561,14563,14565,14567,14569],{"class":157,"line":802},[155,14562,3886],{"class":171},[155,14564,2351],{"class":167},[155,14566,2380],{"class":171},[155,14568,729],{"class":167},[155,14570,3895],{"class":171},[155,14572,14573],{"class":157,"line":808},[155,14574,3900],{"class":161},[155,14576,14577,14579,14581,14583,14585],{"class":157,"line":819},[155,14578,3905],{"class":171},[155,14580,2351],{"class":167},[155,14582,3910],{"class":171},[155,14584,1109],{"class":263},[155,14586,363],{"class":171},[155,14588,14589],{"class":157,"line":1832},[155,14590,217],{"emptyLinePlaceholder":216},[155,14592,14593],{"class":157,"line":1838},[155,14594,3923],{"class":161},[155,14596,14597,14599,14601,14603,14605],{"class":157,"line":1844},[155,14598,3928],{"class":171},[155,14600,317],{"class":167},[155,14602,3933],{"class":171},[155,14604,2028],{"class":167},[155,14606,3938],{"class":171},[155,14608,14609],{"class":157,"line":1850},[155,14610,3943],{"class":161},[155,14612,14613,14615,14617,14619],{"class":157,"line":1861},[155,14614,2017],{"class":263},[155,14616,230],{"class":171},[155,14618,3952],{"class":732},[155,14620,3955],{"class":171},[155,14622,14623],{"class":157,"line":1866},[155,14624,217],{"emptyLinePlaceholder":216},[155,14626,14627],{"class":157,"line":1871},[155,14628,3964],{"class":161},[155,14630,14631,14633,14635,14637,14639],{"class":157,"line":1877},[155,14632,723],{"class":167},[155,14634,726],{"class":263},[155,14636,729],{"class":167},[155,14638,733],{"class":732},[155,14640,736],{"class":171},[155,14642,14643],{"class":157,"line":1883},[155,14644,3981],{"class":161},[155,14646,14647,14649,14651],{"class":157,"line":1894},[155,14648,811],{"class":171},[155,14650,317],{"class":167},[155,14652,14170],{"class":171},[155,14654,14655],{"class":157,"line":1900},[155,14656,3994],{"class":161},[155,14658,14659],{"class":157,"line":1911},[155,14660,3999],{"class":161},[155,14662,14663,14665,14667],{"class":157,"line":1917},[155,14664,4004],{"class":171},[155,14666,4007],{"class":732},[155,14668,1238],{"class":171},[155,14670,14671],{"class":157,"line":1927},[155,14672,4014],{"class":161},[155,14674,14675,14677,14679],{"class":157,"line":1933},[155,14676,3627],{"class":171},[155,14678,317],{"class":167},[155,14680,4023],{"class":171},[155,14682,14683],{"class":157,"line":1943},[155,14684,4028],{"class":161},[155,14686,14687],{"class":157,"line":1949},[155,14688,4033],{"class":171},[155,14690,14691],{"class":157,"line":1959},[155,14692,217],{"emptyLinePlaceholder":216},[155,14694,14695],{"class":157,"line":1964},[155,14696,4042],{"class":161},[155,14698,14699],{"class":157,"line":1970},[155,14700,4047],{"class":161},[155,14702,14703,14705,14707,14709,14711,14713,14715],{"class":157,"line":1981},[155,14704,748],{"class":171},[155,14706,317],{"class":167},[155,14708,756],{"class":732},[155,14710,759],{"class":167},[155,14712,762],{"class":171},[155,14714,765],{"class":167},[155,14716,3724],{"class":732},[155,14718,14719,14721,14723],{"class":157,"line":1986},[155,14720,811],{"class":171},[155,14722,317],{"class":167},[155,14724,1829],{"class":171},[155,14726,14727],{"class":157,"line":1991},[155,14728,4076],{"class":161},[155,14730,14731],{"class":157,"line":1997},[155,14732,4081],{"class":161},[155,14734,14735,14737,14739,14741,14743,14745,14747,14749,14751,14753,14755,14757,14759,14761,14763,14765,14767,14769,14771,14773,14775,14777,14779],{"class":157,"line":2014},[155,14736,4086],{"class":171},[155,14738,317],{"class":167},[155,14740,4091],{"class":171},[155,14742,4094],{"class":732},[155,14744,332],{"class":171},[155,14746,4099],{"class":732},[155,14748,332],{"class":171},[155,14750,4104],{"class":732},[155,14752,332],{"class":171},[155,14754,4109],{"class":732},[155,14756,332],{"class":171},[155,14758,4114],{"class":732},[155,14760,332],{"class":171},[155,14762,4119],{"class":732},[155,14764,332],{"class":171},[155,14766,4124],{"class":732},[155,14768,332],{"class":171},[155,14770,4129],{"class":732},[155,14772,332],{"class":171},[155,14774,4134],{"class":732},[155,14776,332],{"class":171},[155,14778,4139],{"class":732},[155,14780,2845],{"class":171},[155,14782,14783,14785],{"class":157,"line":2046},[155,14784,3783],{"class":167},[155,14786,2477],{"class":171},[155,14788,14789],{"class":157,"line":2062},[155,14790,4152],{"class":161},[155,14792,14793,14795,14797,14799],{"class":157,"line":2067},[155,14794,2179],{"class":167},[155,14796,4159],{"class":171},[155,14798,1131],{"class":167},[155,14800,3802],{"class":171},[155,14802,14803,14805,14807],{"class":157,"line":2073},[155,14804,2200],{"class":171},[155,14806,317],{"class":167},[155,14808,2205],{"class":171},[155,14810,14811,14813,14815],{"class":157,"line":2079},[155,14812,2217],{"class":171},[155,14814,317],{"class":167},[155,14816,2222],{"class":171},[155,14818,14819],{"class":157,"line":2089},[155,14820,217],{"emptyLinePlaceholder":216},[155,14822,14823],{"class":157,"line":2095},[155,14824,4188],{"class":161},[155,14826,14827],{"class":157,"line":2106},[155,14828,2468],{"class":171},[155,14830,14831],{"class":157,"line":2112},[155,14832,4197],{"class":161},[155,14834,14835,14837,14839],{"class":157,"line":2122},[155,14836,2252],{"class":171},[155,14838,317],{"class":167},[155,14840,2257],{"class":171},[155,14842,14843],{"class":157,"line":2128},[155,14844,4210],{"class":161},[155,14846,14847,14849,14851,14853,14855,14857,14859],{"class":157,"line":2138},[155,14848,2269],{"class":171},[155,14850,317],{"class":167},[155,14852,2274],{"class":171},[155,14854,2277],{"class":323},[155,14856,317],{"class":167},[155,14858,329],{"class":263},[155,14860,363],{"class":171},[155,14862,14863],{"class":157,"line":2144},[155,14864,4231],{"class":161},[155,14866,14867,14869,14871],{"class":157,"line":2154},[155,14868,4236],{"class":171},[155,14870,317],{"class":167},[155,14872,4241],{"class":171},[155,14874,14875,14877,14879],{"class":157,"line":2160},[155,14876,4246],{"class":171},[155,14878,317],{"class":167},[155,14880,4251],{"class":171},[155,14882,14883,14885,14887,14889,14891,14893,14895,14897],{"class":157,"line":2170},[155,14884,4256],{"class":263},[155,14886,230],{"class":171},[155,14888,4261],{"class":732},[155,14890,4264],{"class":171},[155,14892,4267],{"class":732},[155,14894,332],{"class":171},[155,14896,4272],{"class":732},[155,14898,4275],{"class":171},[14,14900,14902],{"id":14901},"_24训练自己的数据集","2.4.训练自己的数据集",[24,14904,14905],{},"猫狗分类任务",[24,14907,14908],{},"划分数据集和验证集",[146,14910,14912],{"className":148,"code":14911,"language":150,"meta":39,"style":39},"# 创建脚本，用于划分数据集和验证集\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",[152,14913,14914,14919,14926,14931,14942,14949,14953,14963,14977,14986,14990,14995,15005,15025,15029,15034,15044,15055,15068,15072,15077,15086,15096,15107,15111,15116,15126,15130,15135,15140,15145,15150,15155,15159,15169,15196,15209,15222,15251,15256,15261,15275,15280,15292,15307,15322,15330,15334,15339,15346,15358,15371,15376,15381,15386,15437,15443,15447],{"__ignoreMap":39},[155,14915,14916],{"class":157,"line":158},[155,14917,14918],{"class":161},"# 创建脚本，用于划分数据集和验证集\n",[155,14920,14921,14923],{"class":157,"line":46},[155,14922,168],{"class":167},[155,14924,14925],{"class":171}," os\n",[155,14927,14928],{"class":157,"line":121},[155,14929,14930],{"class":161},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[155,14932,14933,14935,14938,14940],{"class":157,"line":180},[155,14934,183],{"class":167},[155,14936,14937],{"class":171}," shutil ",[155,14939,168],{"class":167},[155,14941,1359],{"class":171},[155,14943,14944,14946],{"class":157,"line":194},[155,14945,168],{"class":167},[155,14947,14948],{"class":171}," random\n",[155,14950,14951],{"class":157,"line":200},[155,14952,217],{"emptyLinePlaceholder":216},[155,14954,14955,14957,14960],{"class":157,"line":213},[155,14956,1484],{"class":167},[155,14958,14959],{"class":226}," mkfile",[155,14961,14962],{"class":171},"(file):\n",[155,14964,14965,14967,14969,14972,14975],{"class":157,"line":220},[155,14966,1142],{"class":167},[155,14968,8542],{"class":167},[155,14970,14971],{"class":171}," os.path.exists(",[155,14973,14974],{"class":323},"file",[155,14976,242],{"class":171},[155,14978,14979,14982,14984],{"class":157,"line":245},[155,14980,14981],{"class":171},"        os.makedirs(",[155,14983,14974],{"class":323},[155,14985,363],{"class":171},[155,14987,14988],{"class":157,"line":251},[155,14989,217],{"emptyLinePlaceholder":216},[155,14991,14992],{"class":157,"line":257},[155,14993,14994],{"class":161},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[155,14996,14997,15000,15002],{"class":157,"line":270},[155,14998,14999],{"class":171},"file_path",[155,15001,317],{"class":167},[155,15003,15004],{"class":732},"'data_cat_dog'\n",[155,15006,15007,15010,15012,15015,15017,15020,15022],{"class":157,"line":276},[155,15008,15009],{"class":171},"flower_class",[155,15011,317],{"class":167},[155,15013,15014],{"class":171},"[cla ",[155,15016,1125],{"class":167},[155,15018,15019],{"class":171}," cla ",[155,15021,1131],{"class":167},[155,15023,15024],{"class":171}," os.listdir(file_path)]\n",[155,15026,15027],{"class":157,"line":297},[155,15028,217],{"emptyLinePlaceholder":216},[155,15030,15031],{"class":157,"line":302},[155,15032,15033],{"class":161},"# 创建训练集train文件夹\n",[155,15035,15036,15039,15042],{"class":157,"line":308},[155,15037,15038],{"class":171},"mkfile(",[155,15040,15041],{"class":732},"'data\u002Ftrain'",[155,15043,363],{"class":171},[155,15045,15046,15048,15050,15052],{"class":157,"line":366},[155,15047,1125],{"class":167},[155,15049,15019],{"class":171},[155,15051,1131],{"class":167},[155,15053,15054],{"class":171}," flower_class:\n",[155,15056,15057,15060,15063,15065],{"class":157,"line":379},[155,15058,15059],{"class":171},"    mkfile(",[155,15061,15062],{"class":732},"'data\u002Ftrain\u002F'",[155,15064,1274],{"class":167},[155,15066,15067],{"class":171},"cla)\n",[155,15069,15070],{"class":157,"line":385},[155,15071,217],{"emptyLinePlaceholder":216},[155,15073,15074],{"class":157,"line":415},[155,15075,15076],{"class":161},"# 创建验证集val文件夹\n",[155,15078,15079,15081,15084],{"class":157,"line":452},[155,15080,15038],{"class":171},[155,15082,15083],{"class":732},"'data\u002Ftest'",[155,15085,363],{"class":171},[155,15087,15088,15090,15092,15094],{"class":157,"line":480},[155,15089,1125],{"class":167},[155,15091,15019],{"class":171},[155,15093,1131],{"class":167},[155,15095,15054],{"class":171},[155,15097,15098,15100,15103,15105],{"class":157,"line":486},[155,15099,15059],{"class":171},[155,15101,15102],{"class":732},"'data\u002Ftest\u002F'",[155,15104,1274],{"class":167},[155,15106,15067],{"class":171},[155,15108,15109],{"class":157,"line":499},[155,15110,217],{"emptyLinePlaceholder":216},[155,15112,15113],{"class":157,"line":505},[155,15114,15115],{"class":161},"# 划分比例，训练集：测试集=9：1\n",[155,15117,15118,15121,15123],{"class":157,"line":528},[155,15119,15120],{"class":171},"split_rate",[155,15122,317],{"class":167},[155,15124,15125],{"class":263},"0.1\n",[155,15127,15128],{"class":157,"line":549},[155,15129,217],{"emptyLinePlaceholder":216},[155,15131,15132],{"class":157,"line":570},[155,15133,15134],{"class":161},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[155,15136,15137],{"class":157,"line":575},[155,15138,15139],{"class":161},"# cla_path：当前类别的原始图片路径\n",[155,15141,15142],{"class":157,"line":581},[155,15143,15144],{"class":161},"# images：当前类别下所有图片的文件名列表\n",[155,15146,15147],{"class":157,"line":592},[155,15148,15149],{"class":161},"# num：该类别图片总数\n",[155,15151,15152],{"class":157,"line":610},[155,15153,15154],{"class":161},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[155,15156,15157],{"class":157,"line":622},[155,15158,217],{"emptyLinePlaceholder":216},[155,15160,15161,15163,15165,15167],{"class":157,"line":638},[155,15162,1125],{"class":167},[155,15164,15019],{"class":171},[155,15166,1131],{"class":167},[155,15168,15054],{"class":171},[155,15170,15171,15174,15176,15179,15181,15184,15187,15189,15191,15193],{"class":157,"line":650},[155,15172,15173],{"class":171},"    cla_path ",[155,15175,317],{"class":167},[155,15177,15178],{"class":171}," file_path ",[155,15180,1274],{"class":167},[155,15182,15183],{"class":732}," '\u002F'",[155,15185,15186],{"class":167}," +",[155,15188,15019],{"class":171},[155,15190,1274],{"class":167},[155,15192,15183],{"class":732},[155,15194,15195],{"class":161},"  # 某一类别的子目录\n",[155,15197,15198,15201,15203,15206],{"class":157,"line":662},[155,15199,15200],{"class":171},"    images ",[155,15202,317],{"class":167},[155,15204,15205],{"class":171}," os.listdir(cla_path)  ",[155,15207,15208],{"class":161},"# iamges 列表存储了该目录下所有图像的名称\n",[155,15210,15211,15214,15216,15219],{"class":157,"line":678},[155,15212,15213],{"class":171},"    num ",[155,15215,317],{"class":167},[155,15217,15218],{"class":263}," len",[155,15220,15221],{"class":171},"(images)\n",[155,15223,15224,15227,15229,15232,15235,15237,15240,15243,15245,15248],{"class":157,"line":694},[155,15225,15226],{"class":171},"    eval_index ",[155,15228,317],{"class":167},[155,15230,15231],{"class":171}," random.sample(images, ",[155,15233,15234],{"class":323},"k",[155,15236,317],{"class":167},[155,15238,15239],{"class":263},"int",[155,15241,15242],{"class":171},"(num ",[155,15244,1563],{"class":167},[155,15246,15247],{"class":171}," split_rate))  ",[155,15249,15250],{"class":161},"# 从images列表中随机抽取 k 个图像名称\n",[155,15252,15253],{"class":157,"line":706},[155,15254,15255],{"class":161},"    # 遍历该类别下的所有图片\n",[155,15257,15258],{"class":157,"line":715},[155,15259,15260],{"class":161},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[155,15262,15263,15265,15268,15270,15272],{"class":157,"line":720},[155,15264,2000],{"class":167},[155,15266,15267],{"class":171}," index, image ",[155,15269,1131],{"class":167},[155,15271,1134],{"class":263},[155,15273,15274],{"class":171},"(images):\n",[155,15276,15277],{"class":157,"line":739},[155,15278,15279],{"class":161},"        # eval_index 中保存验证集val的图像名称\n",[155,15281,15282,15284,15287,15289],{"class":157,"line":745},[155,15283,2803],{"class":167},[155,15285,15286],{"class":171}," image ",[155,15288,1131],{"class":167},[155,15290,15291],{"class":171}," eval_index:\n",[155,15293,15294,15297,15299,15302,15304],{"class":157,"line":773},[155,15295,15296],{"class":171},"            image_path ",[155,15298,317],{"class":167},[155,15300,15301],{"class":171}," cla_path ",[155,15303,1274],{"class":167},[155,15305,15306],{"class":171}," image\n",[155,15308,15309,15312,15314,15317,15319],{"class":157,"line":779},[155,15310,15311],{"class":171},"            new_path ",[155,15313,317],{"class":167},[155,15315,15316],{"class":732}," 'data\u002Ftest\u002F'",[155,15318,15186],{"class":167},[155,15320,15321],{"class":171}," cla\n",[155,15323,15324,15327],{"class":157,"line":785},[155,15325,15326],{"class":171},"            copy(image_path, new_path)  ",[155,15328,15329],{"class":161},"# 将选中的图像复制到新路径\n",[155,15331,15332],{"class":157,"line":791},[155,15333,217],{"emptyLinePlaceholder":216},[155,15335,15336],{"class":157,"line":796},[155,15337,15338],{"class":161},"        # 其余的图像保存在训练集train中\n",[155,15340,15341,15344],{"class":157,"line":802},[155,15342,15343],{"class":167},"        else",[155,15345,736],{"class":171},[155,15347,15348,15350,15352,15354,15356],{"class":157,"line":808},[155,15349,15296],{"class":171},[155,15351,317],{"class":167},[155,15353,15301],{"class":171},[155,15355,1274],{"class":167},[155,15357,15306],{"class":171},[155,15359,15360,15362,15364,15367,15369],{"class":157,"line":819},[155,15361,15311],{"class":171},[155,15363,317],{"class":167},[155,15365,15366],{"class":732}," 'data\u002Ftrain\u002F'",[155,15368,15186],{"class":167},[155,15370,15321],{"class":171},[155,15372,15373],{"class":157,"line":1832},[155,15374,15375],{"class":171},"            copy(image_path, new_path)\n",[155,15377,15378],{"class":157,"line":1838},[155,15379,15380],{"class":161},"            # 打印进度条信息\n",[155,15382,15383],{"class":157,"line":1844},[155,15384,15385],{"class":161},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[155,15387,15388,15390,15392,15394,15397,15399,15401,15404,15406,15408,15410,15413,15416,15418,15420,15423,15426,15428,15431,15434],{"class":157,"line":1850},[155,15389,2017],{"class":263},[155,15391,230],{"class":171},[155,15393,2033],{"class":732},[155,15395,15396],{"class":263},"\\r",[155,15398,4091],{"class":732},[155,15400,2025],{"class":263},[155,15402,15403],{"class":732},"] processing [",[155,15405,2025],{"class":263},[155,15407,2028],{"class":732},[155,15409,2025],{"class":263},[155,15411,15412],{"class":732},"]\"",[155,15414,15415],{"class":171},".format(cla, index ",[155,15417,1274],{"class":167},[155,15419,1277],{"class":263},[155,15421,15422],{"class":171},", num), ",[155,15424,15425],{"class":323},"end",[155,15427,317],{"class":167},[155,15429,15430],{"class":732},"\"\"",[155,15432,15433],{"class":171},")  ",[155,15435,15436],{"class":161},"# processing bar\n",[155,15438,15439,15441],{"class":157,"line":1861},[155,15440,822],{"class":263},[155,15442,294],{"class":171},[155,15444,15445],{"class":157,"line":1866},[155,15446,217],{"emptyLinePlaceholder":216},[155,15448,15449,15452,15454,15457],{"class":157,"line":1871},[155,15450,15451],{"class":263},"print",[155,15453,230],{"class":171},[155,15455,15456],{"class":732},"\"processing done!\"",[155,15458,363],{"class":171},[24,15460,15461],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[19,15463,15465],{"id":15464},"_242模型代码","2.4.2.模型代码",[24,15467,15468],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[146,15470,15472],{"className":148,"code":15471,"language":150,"meta":39,"style":39},"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",[152,15473,15474,15480,15490,15500,15504,15520,15528,15542,15552,15556,15586,15590,15624,15670,15674,15708,15754,15758,15762,15796,15826,15830,15838,15852,15874,15896,15914,15918,15932,15936,15940,15956,15960,15968,15982,15992,16036,16040,16068,16072,16082,16110,16114,16150,16154,16182,16186,16196,16228,16260,16288,16292,16302,16334,16366,16398,16430,16462,16490,16494,16504,16536,16568,16580,16584,16596,16600,16604,16616,16624,16644,16648,16652,16656,16660,16664,16668,16682,16690,16698,16710,16724,16732,16736,16744,16754,16764,16774,16784,16794,16800,16804,16808,16820,16840,16848],{"__ignoreMap":39},[155,15475,15476,15478],{"class":157,"line":158},[155,15477,168],{"class":167},[155,15479,172],{"class":171},[155,15481,15482,15484,15486,15488],{"class":157,"line":46},[155,15483,183],{"class":167},[155,15485,186],{"class":171},[155,15487,168],{"class":167},[155,15489,191],{"class":171},[155,15491,15492,15494,15496,15498],{"class":157,"line":121},[155,15493,183],{"class":167},[155,15495,205],{"class":171},[155,15497,168],{"class":167},[155,15499,210],{"class":171},[155,15501,15502],{"class":157,"line":180},[155,15503,217],{"emptyLinePlaceholder":216},[155,15505,15506,15508,15510,15512,15514,15516,15518],{"class":157,"line":194},[155,15507,223],{"class":167},[155,15509,11106],{"class":226},[155,15511,230],{"class":171},[155,15513,233],{"class":226},[155,15515,236],{"class":171},[155,15517,239],{"class":226},[155,15519,242],{"class":171},[155,15521,15522,15524,15526],{"class":157,"line":200},[155,15523,260],{"class":167},[155,15525,264],{"class":263},[155,15527,11125],{"class":171},[155,15529,15530,15532,15534,15536,15538,15540],{"class":157,"line":213},[155,15531,279],{"class":263},[155,15533,11132],{"class":171},[155,15535,285],{"class":263},[155,15537,288],{"class":171},[155,15539,291],{"class":263},[155,15541,294],{"class":171},[155,15543,15544,15546,15548,15550],{"class":157,"line":220},[155,15545,311],{"class":263},[155,15547,4377],{"class":171},[155,15549,317],{"class":167},[155,15551,4382],{"class":171},[155,15553,15554],{"class":157,"line":245},[155,15555,11155],{"class":161},[155,15557,15558,15560,15562,15564,15566,15568,15570,15572,15574,15576,15578,15580,15582,15584],{"class":157,"line":251},[155,15559,311],{"class":263},[155,15561,11162],{"class":171},[155,15563,317],{"class":167},[155,15565,320],{"class":171},[155,15567,324],{"class":323},[155,15569,317],{"class":167},[155,15571,11173],{"class":171},[155,15573,335],{"class":323},[155,15575,317],{"class":167},[155,15577,11180],{"class":171},[155,15579,345],{"class":323},[155,15581,317],{"class":167},[155,15583,329],{"class":263},[155,15585,363],{"class":171},[155,15587,15588],{"class":157,"line":257},[155,15589,11193],{"class":161},[155,15591,15592,15594,15596,15598,15600,15602,15604,15606,15608,15610,15612,15614,15616,15618,15620,15622],{"class":157,"line":270},[155,15593,311],{"class":263},[155,15595,11200],{"class":171},[155,15597,317],{"class":167},[155,15599,320],{"class":171},[155,15601,324],{"class":323},[155,15603,317],{"class":167},[155,15605,11173],{"class":171},[155,15607,335],{"class":323},[155,15609,317],{"class":167},[155,15611,11217],{"class":171},[155,15613,1109],{"class":263},[155,15615,11222],{"class":171},[155,15617,345],{"class":323},[155,15619,317],{"class":167},[155,15621,329],{"class":263},[155,15623,363],{"class":171},[155,15625,15626,15628,15630,15632,15634,15636,15638,15640,15642,15644,15646,15648,15650,15652,15654,15656,15658,15660,15662,15664,15666,15668],{"class":157,"line":276},[155,15627,311],{"class":263},[155,15629,11237],{"class":171},[155,15631,317],{"class":167},[155,15633,320],{"class":171},[155,15635,324],{"class":323},[155,15637,317],{"class":167},[155,15639,11217],{"class":171},[155,15641,1109],{"class":263},[155,15643,11222],{"class":171},[155,15645,335],{"class":323},[155,15647,317],{"class":167},[155,15649,11217],{"class":171},[155,15651,329],{"class":263},[155,15653,11222],{"class":171},[155,15655,345],{"class":323},[155,15657,317],{"class":167},[155,15659,4444],{"class":263},[155,15661,332],{"class":171},[155,15663,355],{"class":323},[155,15665,317],{"class":167},[155,15667,329],{"class":263},[155,15669,363],{"class":171},[155,15671,15672],{"class":157,"line":297},[155,15673,11282],{"class":161},[155,15675,15676,15678,15680,15682,15684,15686,15688,15690,15692,15694,15696,15698,15700,15702,15704,15706],{"class":157,"line":302},[155,15677,311],{"class":263},[155,15679,11289],{"class":171},[155,15681,317],{"class":167},[155,15683,320],{"class":171},[155,15685,324],{"class":323},[155,15687,317],{"class":167},[155,15689,11173],{"class":171},[155,15691,335],{"class":323},[155,15693,317],{"class":167},[155,15695,11306],{"class":171},[155,15697,1109],{"class":263},[155,15699,11222],{"class":171},[155,15701,345],{"class":323},[155,15703,317],{"class":167},[155,15705,329],{"class":263},[155,15707,363],{"class":171},[155,15709,15710,15712,15714,15716,15718,15720,15722,15724,15726,15728,15730,15732,15734,15736,15738,15740,15742,15744,15746,15748,15750,15752],{"class":157,"line":308},[155,15711,311],{"class":263},[155,15713,11325],{"class":171},[155,15715,317],{"class":167},[155,15717,320],{"class":171},[155,15719,324],{"class":323},[155,15721,317],{"class":167},[155,15723,11306],{"class":171},[155,15725,1109],{"class":263},[155,15727,11222],{"class":171},[155,15729,335],{"class":323},[155,15731,317],{"class":167},[155,15733,11306],{"class":171},[155,15735,329],{"class":263},[155,15737,11222],{"class":171},[155,15739,345],{"class":323},[155,15741,317],{"class":167},[155,15743,350],{"class":263},[155,15745,332],{"class":171},[155,15747,355],{"class":323},[155,15749,317],{"class":167},[155,15751,360],{"class":263},[155,15753,363],{"class":171},[155,15755,15756],{"class":157,"line":366},[155,15757,11370],{"class":161},[155,15759,15760],{"class":157,"line":379},[155,15761,11375],{"class":161},[155,15763,15764,15766,15768,15770,15772,15774,15776,15778,15780,15782,15784,15786,15788,15790,15792,15794],{"class":157,"line":385},[155,15765,311],{"class":263},[155,15767,11382],{"class":171},[155,15769,317],{"class":167},[155,15771,4437],{"class":171},[155,15773,345],{"class":323},[155,15775,317],{"class":167},[155,15777,4444],{"class":263},[155,15779,332],{"class":171},[155,15781,406],{"class":323},[155,15783,317],{"class":167},[155,15785,329],{"class":263},[155,15787,332],{"class":171},[155,15789,355],{"class":323},[155,15791,317],{"class":167},[155,15793,329],{"class":263},[155,15795,363],{"class":171},[155,15797,15798,15800,15802,15804,15806,15808,15810,15812,15814,15816,15818,15820,15822,15824],{"class":157,"line":415},[155,15799,311],{"class":263},[155,15801,11417],{"class":171},[155,15803,317],{"class":167},[155,15805,320],{"class":171},[155,15807,324],{"class":323},[155,15809,317],{"class":167},[155,15811,11173],{"class":171},[155,15813,335],{"class":323},[155,15815,317],{"class":167},[155,15817,11434],{"class":171},[155,15819,345],{"class":323},[155,15821,317],{"class":167},[155,15823,329],{"class":263},[155,15825,363],{"class":171},[155,15827,15828],{"class":157,"line":452},[155,15829,217],{"emptyLinePlaceholder":216},[155,15831,15832,15834,15836],{"class":157,"line":480},[155,15833,260],{"class":167},[155,15835,586],{"class":226},[155,15837,589],{"class":171},[155,15839,15840,15842,15844,15846,15848,15850],{"class":157,"line":486},[155,15841,11459],{"class":171},[155,15843,317],{"class":167},[155,15845,285],{"class":263},[155,15847,4793],{"class":171},[155,15849,285],{"class":263},[155,15851,11470],{"class":171},[155,15853,15854,15856,15858,15860,15862,15864,15866,15868,15870,15872],{"class":157,"line":499},[155,15855,11475],{"class":171},[155,15857,317],{"class":167},[155,15859,285],{"class":263},[155,15861,4793],{"class":171},[155,15863,285],{"class":263},[155,15865,11486],{"class":171},[155,15867,285],{"class":263},[155,15869,4793],{"class":171},[155,15871,285],{"class":263},[155,15873,11495],{"class":171},[155,15875,15876,15878,15880,15882,15884,15886,15888,15890,15892,15894],{"class":157,"line":505},[155,15877,11500],{"class":171},[155,15879,317],{"class":167},[155,15881,285],{"class":263},[155,15883,4793],{"class":171},[155,15885,285],{"class":263},[155,15887,11511],{"class":171},[155,15889,285],{"class":263},[155,15891,4793],{"class":171},[155,15893,285],{"class":263},[155,15895,11520],{"class":171},[155,15897,15898,15900,15902,15904,15906,15908,15910,15912],{"class":157,"line":528},[155,15899,11525],{"class":171},[155,15901,317],{"class":167},[155,15903,285],{"class":263},[155,15905,4793],{"class":171},[155,15907,285],{"class":263},[155,15909,11536],{"class":171},[155,15911,285],{"class":263},[155,15913,11541],{"class":171},[155,15915,15916],{"class":157,"line":549},[155,15917,11546],{"class":161},[155,15919,15920,15922,15924,15926,15928,15930],{"class":157,"line":570},[155,15921,709],{"class":167},[155,15923,11553],{"class":171},[155,15925,2277],{"class":323},[155,15927,317],{"class":167},[155,15929,329],{"class":263},[155,15931,363],{"class":171},[155,15933,15934],{"class":157,"line":575},[155,15935,217],{"emptyLinePlaceholder":216},[155,15937,15938],{"class":157,"line":581},[155,15939,11574],{"class":161},[155,15941,15942,15944,15946,15948,15950,15952,15954],{"class":157,"line":592},[155,15943,223],{"class":167},[155,15945,11581],{"class":226},[155,15947,230],{"class":171},[155,15949,233],{"class":226},[155,15951,236],{"class":171},[155,15953,239],{"class":226},[155,15955,242],{"class":171},[155,15957,15958],{"class":157,"line":610},[155,15959,11596],{"class":161},[155,15961,15962,15964,15966],{"class":157,"line":622},[155,15963,260],{"class":167},[155,15965,264],{"class":263},[155,15967,11605],{"class":171},[155,15969,15970,15972,15974,15976,15978,15980],{"class":157,"line":638},[155,15971,279],{"class":263},[155,15973,11612],{"class":171},[155,15975,285],{"class":263},[155,15977,288],{"class":171},[155,15979,291],{"class":263},[155,15981,294],{"class":171},[155,15983,15984,15986,15988,15990],{"class":157,"line":650},[155,15985,311],{"class":263},[155,15987,11627],{"class":171},[155,15989,317],{"class":167},[155,15991,7619],{"class":171},[155,15993,15994,15996,15998,16000,16002,16004,16006,16008,16010,16012,16014,16016,16018,16020,16022,16024,16026,16028,16030,16032,16034],{"class":157,"line":662},[155,15995,7624],{"class":171},[155,15997,324],{"class":323},[155,15999,317],{"class":167},[155,16001,4444],{"class":263},[155,16003,332],{"class":171},[155,16005,335],{"class":323},[155,16007,317],{"class":167},[155,16009,1076],{"class":263},[155,16011,332],{"class":171},[155,16013,345],{"class":323},[155,16015,317],{"class":167},[155,16017,8408],{"class":263},[155,16019,332],{"class":171},[155,16021,406],{"class":323},[155,16023,317],{"class":167},[155,16025,360],{"class":263},[155,16027,332],{"class":171},[155,16029,355],{"class":323},[155,16031,317],{"class":167},[155,16033,4444],{"class":263},[155,16035,7657],{"class":171},[155,16037,16038],{"class":157,"line":678},[155,16039,7662],{"class":171},[155,16041,16042,16044,16046,16048,16050,16052,16054,16056,16058,16060,16062,16064,16066],{"class":157,"line":694},[155,16043,7707],{"class":171},[155,16045,345],{"class":323},[155,16047,317],{"class":167},[155,16049,4444],{"class":263},[155,16051,332],{"class":171},[155,16053,406],{"class":323},[155,16055,317],{"class":167},[155,16057,360],{"class":263},[155,16059,332],{"class":171},[155,16061,355],{"class":323},[155,16063,317],{"class":167},[155,16065,329],{"class":263},[155,16067,363],{"class":171},[155,16069,16070],{"class":157,"line":706},[155,16071,7736],{"class":171},[155,16073,16074,16076,16078,16080],{"class":157,"line":715},[155,16075,311],{"class":263},[155,16077,11718],{"class":171},[155,16079,317],{"class":167},[155,16081,7619],{"class":171},[155,16083,16084,16086,16088,16090,16092,16094,16096,16098,16100,16102,16104,16106,16108],{"class":157,"line":720},[155,16085,7624],{"class":171},[155,16087,324],{"class":323},[155,16089,317],{"class":167},[155,16091,1076],{"class":263},[155,16093,332],{"class":171},[155,16095,335],{"class":323},[155,16097,317],{"class":167},[155,16099,1076],{"class":263},[155,16101,332],{"class":171},[155,16103,345],{"class":323},[155,16105,317],{"class":167},[155,16107,329],{"class":263},[155,16109,7657],{"class":171},[155,16111,16112],{"class":157,"line":739},[155,16113,7662],{"class":171},[155,16115,16116,16118,16120,16122,16124,16126,16128,16130,16132,16134,16136,16138,16140,16142,16144,16146,16148],{"class":157,"line":745},[155,16117,7624],{"class":171},[155,16119,324],{"class":323},[155,16121,317],{"class":167},[155,16123,1076],{"class":263},[155,16125,332],{"class":171},[155,16127,335],{"class":323},[155,16129,317],{"class":167},[155,16131,11773],{"class":263},[155,16133,332],{"class":171},[155,16135,345],{"class":323},[155,16137,317],{"class":167},[155,16139,4444],{"class":263},[155,16141,332],{"class":171},[155,16143,355],{"class":323},[155,16145,317],{"class":167},[155,16147,329],{"class":263},[155,16149,7657],{"class":171},[155,16151,16152],{"class":157,"line":773},[155,16153,7662],{"class":171},[155,16155,16156,16158,16160,16162,16164,16166,16168,16170,16172,16174,16176,16178,16180],{"class":157,"line":779},[155,16157,7707],{"class":171},[155,16159,345],{"class":323},[155,16161,317],{"class":167},[155,16163,4444],{"class":263},[155,16165,332],{"class":171},[155,16167,406],{"class":323},[155,16169,317],{"class":167},[155,16171,360],{"class":263},[155,16173,332],{"class":171},[155,16175,355],{"class":323},[155,16177,317],{"class":167},[155,16179,329],{"class":263},[155,16181,363],{"class":171},[155,16183,16184],{"class":157,"line":785},[155,16185,7736],{"class":171},[155,16187,16188,16190,16192,16194],{"class":157,"line":791},[155,16189,311],{"class":263},[155,16191,11834],{"class":171},[155,16193,317],{"class":167},[155,16195,7619],{"class":171},[155,16197,16198,16200,16202,16204,16206,16208,16210,16212,16214,16216,16218,16220,16222,16224,16226],{"class":157,"line":796},[155,16199,11843],{"class":171},[155,16201,11773],{"class":263},[155,16203,332],{"class":171},[155,16205,1076],{"class":263},[155,16207,11852],{"class":171},[155,16209,4407],{"class":263},[155,16211,332],{"class":171},[155,16213,1608],{"class":263},[155,16215,11861],{"class":171},[155,16217,439],{"class":263},[155,16219,332],{"class":171},[155,16221,11868],{"class":263},[155,16223,11871],{"class":171},[155,16225,11868],{"class":263},[155,16227,7657],{"class":171},[155,16229,16230,16232,16234,16236,16238,16240,16242,16244,16246,16248,16250,16252,16254,16256,16258],{"class":157,"line":802},[155,16231,11843],{"class":171},[155,16233,4479],{"class":263},[155,16235,332],{"class":171},[155,16237,1608],{"class":263},[155,16239,11852],{"class":171},[155,16241,1608],{"class":263},[155,16243,332],{"class":171},[155,16245,11773],{"class":263},[155,16247,11861],{"class":171},[155,16249,11868],{"class":263},[155,16251,332],{"class":171},[155,16253,4407],{"class":263},[155,16255,11871],{"class":171},[155,16257,1076],{"class":263},[155,16259,7657],{"class":171},[155,16261,16262,16264,16266,16268,16270,16272,16274,16276,16278,16280,16282,16284,16286],{"class":157,"line":808},[155,16263,7707],{"class":171},[155,16265,345],{"class":323},[155,16267,317],{"class":167},[155,16269,4444],{"class":263},[155,16271,332],{"class":171},[155,16273,406],{"class":323},[155,16275,317],{"class":167},[155,16277,360],{"class":263},[155,16279,332],{"class":171},[155,16281,355],{"class":323},[155,16283,317],{"class":167},[155,16285,329],{"class":263},[155,16287,363],{"class":171},[155,16289,16290],{"class":157,"line":819},[155,16291,7736],{"class":171},[155,16293,16294,16296,16298,16300],{"class":157,"line":1832},[155,16295,311],{"class":263},[155,16297,11946],{"class":171},[155,16299,317],{"class":167},[155,16301,7619],{"class":171},[155,16303,16304,16306,16308,16310,16312,16314,16316,16318,16320,16322,16324,16326,16328,16330,16332],{"class":157,"line":1838},[155,16305,11843],{"class":171},[155,16307,11957],{"class":263},[155,16309,332],{"class":171},[155,16311,11773],{"class":263},[155,16313,11852],{"class":171},[155,16315,4407],{"class":263},[155,16317,332],{"class":171},[155,16319,11970],{"class":263},[155,16321,11861],{"class":171},[155,16323,439],{"class":263},[155,16325,332],{"class":171},[155,16327,11979],{"class":263},[155,16329,11871],{"class":171},[155,16331,1076],{"class":263},[155,16333,7657],{"class":171},[155,16335,16336,16338,16340,16342,16344,16346,16348,16350,16352,16354,16356,16358,16360,16362,16364],{"class":157,"line":1844},[155,16337,11843],{"class":171},[155,16339,8067],{"class":263},[155,16341,332],{"class":171},[155,16343,11996],{"class":263},[155,16345,11852],{"class":171},[155,16347,12001],{"class":263},[155,16349,332],{"class":171},[155,16351,1025],{"class":263},[155,16353,11861],{"class":171},[155,16355,12010],{"class":263},[155,16357,332],{"class":171},[155,16359,1076],{"class":263},[155,16361,11871],{"class":171},[155,16363,1076],{"class":263},[155,16365,7657],{"class":171},[155,16367,16368,16370,16372,16374,16376,16378,16380,16382,16384,16386,16388,16390,16392,16394,16396],{"class":157,"line":1850},[155,16369,11843],{"class":171},[155,16371,8067],{"class":263},[155,16373,332],{"class":171},[155,16375,1608],{"class":263},[155,16377,11852],{"class":171},[155,16379,1608],{"class":263},[155,16381,332],{"class":171},[155,16383,4479],{"class":263},[155,16385,11861],{"class":171},[155,16387,12010],{"class":263},[155,16389,332],{"class":171},[155,16391,1076],{"class":263},[155,16393,11871],{"class":171},[155,16395,1076],{"class":263},[155,16397,7657],{"class":171},[155,16399,16400,16402,16404,16406,16408,16410,16412,16414,16416,16418,16420,16422,16424,16426,16428],{"class":157,"line":1861},[155,16401,11843],{"class":171},[155,16403,8067],{"class":263},[155,16405,332],{"class":171},[155,16407,12001],{"class":263},[155,16409,11852],{"class":171},[155,16411,1608],{"class":263},[155,16413,332],{"class":171},[155,16415,12071],{"class":263},[155,16417,11861],{"class":171},[155,16419,11868],{"class":263},[155,16421,332],{"class":171},[155,16423,1076],{"class":263},[155,16425,11871],{"class":171},[155,16427,1076],{"class":263},[155,16429,7657],{"class":171},[155,16431,16432,16434,16436,16438,16440,16442,16444,16446,16448,16450,16452,16454,16456,16458,16460],{"class":157,"line":1866},[155,16433,11843],{"class":171},[155,16435,12092],{"class":263},[155,16437,332],{"class":171},[155,16439,4479],{"class":263},[155,16441,11852],{"class":171},[155,16443,11996],{"class":263},[155,16445,332],{"class":171},[155,16447,12105],{"class":263},[155,16449,11861],{"class":171},[155,16451,11868],{"class":263},[155,16453,332],{"class":171},[155,16455,1608],{"class":263},[155,16457,11871],{"class":171},[155,16459,1608],{"class":263},[155,16461,7657],{"class":171},[155,16463,16464,16466,16468,16470,16472,16474,16476,16478,16480,16482,16484,16486,16488],{"class":157,"line":1871},[155,16465,7707],{"class":171},[155,16467,345],{"class":323},[155,16469,317],{"class":167},[155,16471,4444],{"class":263},[155,16473,332],{"class":171},[155,16475,406],{"class":323},[155,16477,317],{"class":167},[155,16479,360],{"class":263},[155,16481,332],{"class":171},[155,16483,355],{"class":323},[155,16485,317],{"class":167},[155,16487,329],{"class":263},[155,16489,363],{"class":171},[155,16491,16492],{"class":157,"line":1877},[155,16493,7736],{"class":171},[155,16495,16496,16498,16500,16502],{"class":157,"line":1883},[155,16497,311],{"class":263},[155,16499,12158],{"class":171},[155,16501,317],{"class":167},[155,16503,7619],{"class":171},[155,16505,16506,16508,16510,16512,16514,16516,16518,16520,16522,16524,16526,16528,16530,16532,16534],{"class":157,"line":1894},[155,16507,11843],{"class":171},[155,16509,12169],{"class":263},[155,16511,332],{"class":171},[155,16513,4479],{"class":263},[155,16515,11852],{"class":171},[155,16517,11996],{"class":263},[155,16519,332],{"class":171},[155,16521,12105],{"class":263},[155,16523,11861],{"class":171},[155,16525,11868],{"class":263},[155,16527,332],{"class":171},[155,16529,1608],{"class":263},[155,16531,11871],{"class":171},[155,16533,1608],{"class":263},[155,16535,7657],{"class":171},[155,16537,16538,16540,16542,16544,16546,16548,16550,16552,16554,16556,16558,16560,16562,16564,16566],{"class":157,"line":1900},[155,16539,11843],{"class":171},[155,16541,12169],{"class":263},[155,16543,332],{"class":171},[155,16545,4549],{"class":263},[155,16547,11852],{"class":171},[155,16549,11773],{"class":263},[155,16551,332],{"class":171},[155,16553,4549],{"class":263},[155,16555,11861],{"class":171},[155,16557,11979],{"class":263},[155,16559,332],{"class":171},[155,16561,1608],{"class":263},[155,16563,11871],{"class":171},[155,16565,1608],{"class":263},[155,16567,7657],{"class":171},[155,16569,16570,16572,16574,16576,16578],{"class":157,"line":1911},[155,16571,12232],{"class":171},[155,16573,329],{"class":263},[155,16575,332],{"class":171},[155,16577,329],{"class":263},[155,16579,12241],{"class":171},[155,16581,16582],{"class":157,"line":1917},[155,16583,8400],{"class":171},[155,16585,16586,16588,16590,16592,16594],{"class":157,"line":1927},[155,16587,8405],{"class":171},[155,16589,12252],{"class":263},[155,16591,332],{"class":171},[155,16593,360],{"class":263},[155,16595,363],{"class":171},[155,16597,16598],{"class":157,"line":1933},[155,16599,7736],{"class":171},[155,16601,16602],{"class":157,"line":1943},[155,16603,12267],{"class":161},[155,16605,16606,16608,16610,16612,16614],{"class":157,"line":1949},[155,16607,2179],{"class":167},[155,16609,8479],{"class":171},[155,16611,1131],{"class":167},[155,16613,8484],{"class":263},[155,16615,8487],{"class":171},[155,16617,16618,16620,16622],{"class":157,"line":1959},[155,16619,8497],{"class":167},[155,16621,8500],{"class":263},[155,16623,8503],{"class":171},[155,16625,16626,16628,16630,16632,16634,16636,16638,16640,16642],{"class":157,"line":1964},[155,16627,8513],{"class":171},[155,16629,12294],{"class":323},[155,16631,317],{"class":167},[155,16633,12299],{"class":732},[155,16635,332],{"class":171},[155,16637,8516],{"class":323},[155,16639,317],{"class":167},[155,16641,8521],{"class":732},[155,16643,363],{"class":171},[155,16645,16646],{"class":157,"line":1970},[155,16647,12314],{"class":161},[155,16649,16650],{"class":157,"line":1981},[155,16651,12319],{"class":161},[155,16653,16654],{"class":157,"line":1986},[155,16655,12324],{"class":161},[155,16657,16658],{"class":157,"line":1991},[155,16659,12329],{"class":161},[155,16661,16662],{"class":157,"line":1997},[155,16663,12334],{"class":161},[155,16665,16666],{"class":157,"line":2014},[155,16667,12339],{"class":161},[155,16669,16670,16672,16674,16676,16678,16680],{"class":157,"line":2046},[155,16671,8533],{"class":167},[155,16673,8536],{"class":171},[155,16675,8539],{"class":167},[155,16677,8542],{"class":167},[155,16679,8545],{"class":263},[155,16681,736],{"class":171},[155,16683,16684,16686,16688],{"class":157,"line":2062},[155,16685,8557],{"class":171},[155,16687,1109],{"class":263},[155,16689,363],{"class":171},[155,16691,16692,16694,16696],{"class":157,"line":2067},[155,16693,12366],{"class":167},[155,16695,8500],{"class":263},[155,16697,8576],{"class":171},[155,16699,16700,16702,16704,16706,16708],{"class":157,"line":2073},[155,16701,12375],{"class":171},[155,16703,1109],{"class":263},[155,16705,332],{"class":171},[155,16707,8598],{"class":263},[155,16709,363],{"class":171},[155,16711,16712,16714,16716,16718,16720,16722],{"class":157,"line":2079},[155,16713,12388],{"class":167},[155,16715,8536],{"class":171},[155,16717,8539],{"class":167},[155,16719,8542],{"class":167},[155,16721,8545],{"class":263},[155,16723,736],{"class":171},[155,16725,16726,16728,16730],{"class":157,"line":2089},[155,16727,12403],{"class":171},[155,16729,1109],{"class":263},[155,16731,363],{"class":171},[155,16733,16734],{"class":157,"line":2095},[155,16735,4774],{"class":161},[155,16737,16738,16740,16742],{"class":157,"line":2106},[155,16739,260],{"class":167},[155,16741,586],{"class":226},[155,16743,589],{"class":171},[155,16745,16746,16748,16750,16752],{"class":157,"line":2112},[155,16747,595],{"class":171},[155,16749,317],{"class":167},[155,16751,285],{"class":263},[155,16753,12430],{"class":171},[155,16755,16756,16758,16760,16762],{"class":157,"line":2122},[155,16757,595],{"class":171},[155,16759,317],{"class":167},[155,16761,285],{"class":263},[155,16763,12441],{"class":171},[155,16765,16766,16768,16770,16772],{"class":157,"line":2128},[155,16767,595],{"class":171},[155,16769,317],{"class":167},[155,16771,285],{"class":263},[155,16773,12452],{"class":171},[155,16775,16776,16778,16780,16782],{"class":157,"line":2138},[155,16777,595],{"class":171},[155,16779,317],{"class":167},[155,16781,285],{"class":263},[155,16783,12463],{"class":171},[155,16785,16786,16788,16790,16792],{"class":157,"line":2144},[155,16787,595],{"class":171},[155,16789,317],{"class":167},[155,16791,285],{"class":263},[155,16793,12474],{"class":171},[155,16795,16796,16798],{"class":157,"line":2154},[155,16797,709],{"class":167},[155,16799,712],{"class":171},[155,16801,16802],{"class":157,"line":2160},[155,16803,217],{"emptyLinePlaceholder":216},[155,16805,16806],{"class":157,"line":2170},[155,16807,12489],{"class":161},[155,16809,16810,16812,16814,16816,16818],{"class":157,"line":2176},[155,16811,723],{"class":167},[155,16813,726],{"class":263},[155,16815,729],{"class":167},[155,16817,733],{"class":732},[155,16819,736],{"class":171},[155,16821,16822,16824,16826,16828,16830,16832,16834,16836,16838],{"class":157,"line":2191},[155,16823,748],{"class":171},[155,16825,317],{"class":167},[155,16827,753],{"class":171},[155,16829,756],{"class":732},[155,16831,759],{"class":167},[155,16833,762],{"class":171},[155,16835,765],{"class":167},[155,16837,768],{"class":732},[155,16839,363],{"class":171},[155,16841,16842,16844,16846],{"class":157,"line":2197},[155,16843,811],{"class":171},[155,16845,317],{"class":167},[155,16847,12530],{"class":171},[155,16849,16850,16852,16854,16856,16858,16860,16862,16864],{"class":157,"line":2208},[155,16851,822],{"class":263},[155,16853,825],{"class":171},[155,16855,329],{"class":263},[155,16857,332],{"class":171},[155,16859,1025],{"class":263},[155,16861,332],{"class":171},[155,16863,1025],{"class":263},[155,16865,839],{"class":171},[19,16867,16869],{"id":16868},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[24,16871,16872],{},"计算图片的均值与方差，用于训练中归一化处理操作",[146,16874,16876],{"className":148,"code":16875,"language":150,"meta":39,"style":39},"# 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",[152,16877,16878,16883,16896,16901,16907,16912,16922,16926,16931,16941,16945,16950,16960,16977,16981,16986,16998,17010,17041,17050,17060,17070,17074,17079,17094,17098,17103,17108,17113,17123,17128,17153,17157,17162,17177,17181,17194,17198,17203,17208,17213,17218,17223,17233,17243,17266,17274,17282,17290,17294,17306,17310,17315,17319,17323,17330,17351,17375,17382,17397,17402,17407,17411,17425,17429,17441],{"__ignoreMap":39},[155,16879,16880],{"class":157,"line":158},[155,16881,16882],{"class":161},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[155,16884,16885,16887,16890,16893],{"class":157,"line":46},[155,16886,183],{"class":167},[155,16888,16889],{"class":263}," PIL",[155,16891,16892],{"class":167}," import",[155,16894,16895],{"class":171}," Image\n",[155,16897,16898],{"class":157,"line":121},[155,16899,16900],{"class":161},"# os 用来处理文件夹和文件路径\n",[155,16902,16903,16905],{"class":157,"line":180},[155,16904,168],{"class":167},[155,16906,14925],{"class":171},[155,16908,16909],{"class":157,"line":194},[155,16910,16911],{"class":161},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[155,16913,16914,16916,16918,16920],{"class":157,"line":200},[155,16915,168],{"class":167},[155,16917,904],{"class":171},[155,16919,907],{"class":167},[155,16921,910],{"class":171},[155,16923,16924],{"class":157,"line":213},[155,16925,217],{"emptyLinePlaceholder":216},[155,16927,16928],{"class":157,"line":220},[155,16929,16930],{"class":161},"# 文件夹路径，包含所有图片文件\n",[155,16932,16933,16936,16938],{"class":157,"line":245},[155,16934,16935],{"class":171},"folder_path ",[155,16937,317],{"class":167},[155,16939,16940],{"class":732}," 'data_cat_dog'\n",[155,16942,16943],{"class":157,"line":251},[155,16944,217],{"emptyLinePlaceholder":216},[155,16946,16947],{"class":157,"line":257},[155,16948,16949],{"class":161},"# 初始化累积变量\n",[155,16951,16952,16955,16957],{"class":157,"line":270},[155,16953,16954],{"class":171},"total_pixels ",[155,16956,317],{"class":167},[155,16958,16959],{"class":263}," 0\n",[155,16961,16962,16965,16967,16970,16972,16974],{"class":157,"line":276},[155,16963,16964],{"class":171},"sum_normalized_pixel_values ",[155,16966,317],{"class":167},[155,16968,16969],{"class":171}," np.zeros(",[155,16971,4444],{"class":263},[155,16973,15433],{"class":171},[155,16975,16976],{"class":161},"# 如果是RGB图像，需要三个通道的均值和方差\n",[155,16978,16979],{"class":157,"line":297},[155,16980,217],{"emptyLinePlaceholder":216},[155,16982,16983],{"class":157,"line":302},[155,16984,16985],{"class":161},"# 遍历文件夹中的图片文件\n",[155,16987,16988,16990,16993,16995],{"class":157,"line":308},[155,16989,1125],{"class":167},[155,16991,16992],{"class":171}," root, dirs, files ",[155,16994,1131],{"class":167},[155,16996,16997],{"class":171}," os.walk(folder_path):\n",[155,16999,17000,17002,17005,17007],{"class":157,"line":366},[155,17001,2000],{"class":167},[155,17003,17004],{"class":171}," filename ",[155,17006,1131],{"class":167},[155,17008,17009],{"class":171}," files:\n",[155,17011,17012,17014,17017,17020,17022,17025,17027,17030,17032,17035,17038],{"class":157,"line":379},[155,17013,2803],{"class":167},[155,17015,17016],{"class":171}," filename.endswith((",[155,17018,17019],{"class":732},"'.jpg'",[155,17021,7589],{"class":171},[155,17023,17024],{"class":732},"'.jpeg'",[155,17026,7589],{"class":171},[155,17028,17029],{"class":732},"'.png'",[155,17031,7589],{"class":171},[155,17033,17034],{"class":732},"'.bmp'",[155,17036,17037],{"class":171},")):  ",[155,17039,17040],{"class":161},"# 可根据实际情况添加其他格式\n",[155,17042,17043,17045,17047],{"class":157,"line":385},[155,17044,15296],{"class":171},[155,17046,317],{"class":167},[155,17048,17049],{"class":171}," os.path.join(root, filename)\n",[155,17051,17052,17055,17057],{"class":157,"line":415},[155,17053,17054],{"class":171},"            image ",[155,17056,317],{"class":167},[155,17058,17059],{"class":171}," Image.open(image_path)\n",[155,17061,17062,17065,17067],{"class":157,"line":452},[155,17063,17064],{"class":171},"            image_array ",[155,17066,317],{"class":167},[155,17068,17069],{"class":171}," np.array(image)\n",[155,17071,17072],{"class":157,"line":480},[155,17073,217],{"emptyLinePlaceholder":216},[155,17075,17076],{"class":157,"line":486},[155,17077,17078],{"class":161},"            # 归一化像素值到0-1之间\n",[155,17080,17081,17084,17086,17089,17091],{"class":157,"line":499},[155,17082,17083],{"class":171},"            normalized_image_array ",[155,17085,317],{"class":167},[155,17087,17088],{"class":171}," image_array ",[155,17090,2028],{"class":167},[155,17092,17093],{"class":263}," 255.0\n",[155,17095,17096],{"class":157,"line":505},[155,17097,217],{"emptyLinePlaceholder":216},[155,17099,17100],{"class":157,"line":528},[155,17101,17102],{"class":161},"            # print(image_path)\n",[155,17104,17105],{"class":157,"line":549},[155,17106,17107],{"class":161},"            # print(normalized_image_array.shape)\n",[155,17109,17110],{"class":157,"line":570},[155,17111,17112],{"class":161},"            # 累积归一化后的像素值和像素数量\n",[155,17114,17115,17118,17120],{"class":157,"line":575},[155,17116,17117],{"class":171},"            total_pixels ",[155,17119,2351],{"class":167},[155,17121,17122],{"class":171}," normalized_image_array.size\n",[155,17124,17125],{"class":157,"line":581},[155,17126,17127],{"class":161},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[155,17129,17130,17133,17135,17138,17141,17143,17145,17147,17149,17151],{"class":157,"line":592},[155,17131,17132],{"class":171},"            sum_normalized_pixel_values ",[155,17134,2351],{"class":167},[155,17136,17137],{"class":171}," np.sum(normalized_image_array, ",[155,17139,17140],{"class":323},"axis",[155,17142,317],{"class":167},[155,17144,230],{"class":171},[155,17146,1109],{"class":263},[155,17148,7589],{"class":171},[155,17150,329],{"class":263},[155,17152,1238],{"class":171},[155,17154,17155],{"class":157,"line":610},[155,17156,217],{"emptyLinePlaceholder":216},[155,17158,17159],{"class":157,"line":622},[155,17160,17161],{"class":161},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[155,17163,17164,17167,17169,17172,17174],{"class":157,"line":638},[155,17165,17166],{"class":171},"mean ",[155,17168,317],{"class":167},[155,17170,17171],{"class":171}," sum_normalized_pixel_values ",[155,17173,2028],{"class":167},[155,17175,17176],{"class":171}," total_pixels\n",[155,17178,17179],{"class":157,"line":650},[155,17180,217],{"emptyLinePlaceholder":216},[155,17182,17183,17186,17188,17190,17192],{"class":157,"line":662},[155,17184,17185],{"class":171},"sum_squared_diff ",[155,17187,317],{"class":167},[155,17189,16969],{"class":171},[155,17191,4444],{"class":263},[155,17193,363],{"class":171},[155,17195,17196],{"class":157,"line":678},[155,17197,217],{"emptyLinePlaceholder":216},[155,17199,17200],{"class":157,"line":694},[155,17201,17202],{"class":161},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[155,17204,17205],{"class":157,"line":706},[155,17206,17207],{"class":161},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[155,17209,17210],{"class":157,"line":715},[155,17211,17212],{"class":161},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[155,17214,17215],{"class":157,"line":720},[155,17216,17217],{"class":161},"# Image.open(image_path)：打开图片\n",[155,17219,17220],{"class":157,"line":739},[155,17221,17222],{"class":161},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[155,17224,17225,17227,17229,17231],{"class":157,"line":745},[155,17226,1125],{"class":167},[155,17228,16992],{"class":171},[155,17230,1131],{"class":167},[155,17232,16997],{"class":171},[155,17234,17235,17237,17239,17241],{"class":157,"line":773},[155,17236,2000],{"class":167},[155,17238,17004],{"class":171},[155,17240,1131],{"class":167},[155,17242,17009],{"class":171},[155,17244,17245,17247,17249,17251,17253,17255,17257,17259,17261,17263],{"class":157,"line":779},[155,17246,2803],{"class":167},[155,17248,17016],{"class":171},[155,17250,17019],{"class":732},[155,17252,7589],{"class":171},[155,17254,17024],{"class":732},[155,17256,7589],{"class":171},[155,17258,17029],{"class":732},[155,17260,7589],{"class":171},[155,17262,17034],{"class":732},[155,17264,17265],{"class":171},")):\n",[155,17267,17268,17270,17272],{"class":157,"line":785},[155,17269,15296],{"class":171},[155,17271,317],{"class":167},[155,17273,17049],{"class":171},[155,17275,17276,17278,17280],{"class":157,"line":791},[155,17277,17054],{"class":171},[155,17279,317],{"class":167},[155,17281,17059],{"class":171},[155,17283,17284,17286,17288],{"class":157,"line":796},[155,17285,17064],{"class":171},[155,17287,317],{"class":167},[155,17289,17069],{"class":171},[155,17291,17292],{"class":157,"line":802},[155,17293,17078],{"class":161},[155,17295,17296,17298,17300,17302,17304],{"class":157,"line":808},[155,17297,17083],{"class":171},[155,17299,317],{"class":167},[155,17301,17088],{"class":171},[155,17303,2028],{"class":167},[155,17305,17093],{"class":263},[155,17307,17308],{"class":157,"line":819},[155,17309,17107],{"class":161},[155,17311,17312],{"class":157,"line":1832},[155,17313,17314],{"class":161},"            # print(mean.shape)\n",[155,17316,17317],{"class":157,"line":1838},[155,17318,17102],{"class":161},[155,17320,17321],{"class":157,"line":1844},[155,17322,217],{"emptyLinePlaceholder":216},[155,17324,17325,17328],{"class":157,"line":1850},[155,17326,17327],{"class":167},"            try",[155,17329,736],{"class":171},[155,17331,17332,17335,17337,17340,17342,17345,17348],{"class":157,"line":1861},[155,17333,17334],{"class":171},"                diff ",[155,17336,317],{"class":167},[155,17338,17339],{"class":171}," (normalized_image_array ",[155,17341,2039],{"class":167},[155,17343,17344],{"class":171}," mean) ",[155,17346,17347],{"class":167},"**",[155,17349,17350],{"class":263}," 2\n",[155,17352,17353,17356,17358,17361,17363,17365,17367,17369,17371,17373],{"class":157,"line":1866},[155,17354,17355],{"class":171},"                sum_squared_diff ",[155,17357,2351],{"class":167},[155,17359,17360],{"class":171}," np.sum(diff, ",[155,17362,17140],{"class":323},[155,17364,317],{"class":167},[155,17366,230],{"class":171},[155,17368,1109],{"class":263},[155,17370,7589],{"class":171},[155,17372,329],{"class":263},[155,17374,1238],{"class":171},[155,17376,17377,17380],{"class":157,"line":1871},[155,17378,17379],{"class":167},"            except",[155,17381,736],{"class":171},[155,17383,17384,17387,17389,17392,17395],{"class":157,"line":1877},[155,17385,17386],{"class":263},"                print",[155,17388,230],{"class":171},[155,17390,17391],{"class":167},"f",[155,17393,17394],{"class":732},"\"捕获到自定义异常\"",[155,17396,363],{"class":171},[155,17398,17399],{"class":157,"line":1883},[155,17400,17401],{"class":161},"            # diff = (normalized_image_array - mean) ** 2\n",[155,17403,17404],{"class":157,"line":1894},[155,17405,17406],{"class":161},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[155,17408,17409],{"class":157,"line":1900},[155,17410,217],{"emptyLinePlaceholder":216},[155,17412,17413,17416,17418,17421,17423],{"class":157,"line":1911},[155,17414,17415],{"class":171},"variance ",[155,17417,317],{"class":167},[155,17419,17420],{"class":171}," sum_squared_diff ",[155,17422,2028],{"class":167},[155,17424,17176],{"class":171},[155,17426,17427],{"class":157,"line":1917},[155,17428,217],{"emptyLinePlaceholder":216},[155,17430,17431,17433,17435,17438],{"class":157,"line":1927},[155,17432,15451],{"class":263},[155,17434,230],{"class":171},[155,17436,17437],{"class":732},"\"Mean:\"",[155,17439,17440],{"class":171},", mean)\n",[155,17442,17443,17445,17447,17450],{"class":157,"line":1933},[155,17444,15451],{"class":263},[155,17446,230],{"class":171},[155,17448,17449],{"class":732},"\"Variance:\"",[155,17451,17452],{"class":171},", variance)\n",[146,17454,17456],{"className":148,"code":17455,"language":150,"meta":39,"style":39},"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",[152,17457,17458,17464,17470,17480,17486,17496,17510,17520,17530,17540,17544,17554,17564,17568,17572,17580,17585,17590,17611,17615,17620,17625,17630,17635,17677,17682,17692,17697,17710,17715,17720,17725,17730,17735,17739,17744,17749,17771,17775,17807,17821,17831,17841,17845,17855,17869,17879,17889,17899,17905,17909,17913,17917,17921,17925,17933,17953,17957,17961,17965,17969,17985,17989,17993,18001,18005,18009,18017,18021,18025,18029,18037,18041,18045,18049,18057,18061,18069,18073,18081,18085,18093,18097,18105,18109,18113,18121,18125,18129,18141,18165,18179,18183,18187,18191,18199,18203,18211,18215,18223,18227,18235,18239,18247,18251,18259,18263,18275,18279,18287,18291,18299,18303,18307,18311,18315,18323,18327,18343,18347,18355,18359,18363,18367,18371,18375,18379,18383,18399,18403,18415,18419,18431,18435,18447,18451,18459,18463,18471,18475,18479,18483,18489,18493,18501,18505,18521,18525,18533,18537,18553,18565,18569,18581,18585,18589,18597,18601,18605,18613,18617,18625,18629,18637,18641,18645,18687,18729,18733,18737,18753,18757,18773,18777,18781,18789,18793,18797,18809,18847,18851,18855,18863,18867,18881,18891,18897,18903,18909,18915,18919,18923,18929,18933,18937,18945,18949,18967,18971,18975,18979,18995,18999,19003,19007,19011,19015,19035,19055,19059,19063,19067,19075,19083,19087,19103,19123,19143,19147,19152,19161,19170,19175,19180,19185,19198,19203,19212,19221,19238],{"__ignoreMap":39},[155,17459,17460,17462],{"class":157,"line":158},[155,17461,168],{"class":167},[155,17463,1359],{"class":171},[155,17465,17466,17468],{"class":157,"line":46},[155,17467,168],{"class":167},[155,17469,1366],{"class":171},[155,17471,17472,17474,17476,17478],{"class":157,"line":121},[155,17473,168],{"class":167},[155,17475,1377],{"class":171},[155,17477,907],{"class":167},[155,17479,1382],{"class":171},[155,17481,17482,17484],{"class":157,"line":180},[155,17483,168],{"class":167},[155,17485,172],{"class":171},[155,17487,17488,17490,17492,17494],{"class":157,"line":194},[155,17489,183],{"class":167},[155,17491,939],{"class":171},[155,17493,168],{"class":167},[155,17495,1399],{"class":171},[155,17497,17498,17500,17502,17504,17507],{"class":157,"line":200},[155,17499,183],{"class":167},[155,17501,892],{"class":171},[155,17503,168],{"class":167},[155,17505,17506],{"class":171}," ImageFolder ",[155,17508,17509],{"class":161},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[155,17511,17512,17514,17516,17518],{"class":157,"line":213},[155,17513,183],{"class":167},[155,17515,922],{"class":171},[155,17517,168],{"class":167},[155,17519,927],{"class":171},[155,17521,17522,17524,17526,17528],{"class":157,"line":220},[155,17523,168],{"class":167},[155,17525,939],{"class":171},[155,17527,907],{"class":167},[155,17529,944],{"class":171},[155,17531,17532,17534,17536,17538],{"class":157,"line":245},[155,17533,168],{"class":167},[155,17535,956],{"class":171},[155,17537,907],{"class":167},[155,17539,961],{"class":171},[155,17541,17542],{"class":157,"line":251},[155,17543,1444],{"class":161},[155,17545,17546,17548,17550,17552],{"class":157,"line":257},[155,17547,183],{"class":167},[155,17549,1451],{"class":171},[155,17551,168],{"class":167},[155,17553,12650],{"class":171},[155,17555,17556,17558,17560,17562],{"class":157,"line":270},[155,17557,183],{"class":167},[155,17559,186],{"class":171},[155,17561,168],{"class":167},[155,17563,191],{"class":171},[155,17565,17566],{"class":157,"line":276},[155,17567,217],{"emptyLinePlaceholder":216},[155,17569,17570],{"class":157,"line":297},[155,17571,1479],{"class":161},[155,17573,17574,17576,17578],{"class":157,"line":302},[155,17575,1484],{"class":167},[155,17577,1487],{"class":226},[155,17579,1490],{"class":171},[155,17581,17582],{"class":157,"line":308},[155,17583,17584],{"class":161},"    # 导入自己的数据集，并进行数据处理\n",[155,17586,17587],{"class":157,"line":366},[155,17588,17589],{"class":161},"    # 定义数据集的路径\n",[155,17591,17592,17595,17597,17600,17602,17604,17608],{"class":157,"line":379},[155,17593,17594],{"class":263},"    ROOT_PATH",[155,17596,317],{"class":167},[155,17598,17599],{"class":167},"r",[155,17601,2033],{"class":732},[155,17603,236],{"class":263},[155,17605,17607],{"class":17606},"sA_wV","\u002Fdata\u002Ftrain",[155,17609,17610],{"class":732},"\"\n",[155,17612,17613],{"class":157,"line":385},[155,17614,217],{"emptyLinePlaceholder":216},[155,17616,17617],{"class":157,"line":415},[155,17618,17619],{"class":161},"    # 定义归一化方法\n",[155,17621,17622],{"class":157,"line":452},[155,17623,17624],{"class":161},"    # 这里需要先计算一下数据集的均值和方差\n",[155,17626,17627],{"class":157,"line":480},[155,17628,17629],{"class":161},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[155,17631,17632],{"class":157,"line":486},[155,17633,17634],{"class":161},"    # 第一个参数是均值，第二个参数是方差\n",[155,17636,17637,17640,17642,17645,17648,17650,17653,17655,17658,17661,17664,17666,17669,17671,17674],{"class":157,"line":499},[155,17638,17639],{"class":171},"    normalize",[155,17641,317],{"class":167},[155,17643,17644],{"class":171},"transforms.Normalize([",[155,17646,17647],{"class":263},"0.162",[155,17649,332],{"class":171},[155,17651,17652],{"class":263},"0.151",[155,17654,332],{"class":171},[155,17656,17657],{"class":263},"0.138",[155,17659,17660],{"class":171},"],[",[155,17662,17663],{"class":263},"0.058",[155,17665,332],{"class":171},[155,17667,17668],{"class":263},"0.052",[155,17670,332],{"class":171},[155,17672,17673],{"class":263},"0.048",[155,17675,17676],{"class":171},"])\n",[155,17678,17679],{"class":157,"line":505},[155,17680,17681],{"class":161},"    # 定义数据集处理方法变量\n",[155,17683,17684,17687,17689],{"class":157,"line":528},[155,17685,17686],{"class":171},"    train_transform",[155,17688,317],{"class":167},[155,17690,17691],{"class":171},"transforms.Compose([\n",[155,17693,17694],{"class":157,"line":549},[155,17695,17696],{"class":161},"        # 调整图像大小为224*224\n",[155,17698,17699,17702,17704,17706,17708],{"class":157,"line":570},[155,17700,17701],{"class":171},"        transforms.Resize((",[155,17703,1025],{"class":263},[155,17705,332],{"class":171},[155,17707,1025],{"class":263},[155,17709,12241],{"class":171},[155,17711,17712],{"class":157,"line":575},[155,17713,17714],{"class":161},"        # 将图像转换为张量\n",[155,17716,17717],{"class":157,"line":581},[155,17718,17719],{"class":171},"        transforms.ToTensor(),\n",[155,17721,17722],{"class":157,"line":592},[155,17723,17724],{"class":171},"        normalize])\n",[155,17726,17727],{"class":157,"line":610},[155,17728,17729],{"class":161},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[155,17731,17732],{"class":157,"line":622},[155,17733,17734],{"class":161},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[155,17736,17737],{"class":157,"line":638},[155,17738,217],{"emptyLinePlaceholder":216},[155,17740,17741],{"class":157,"line":650},[155,17742,17743],{"class":161},"    # 加载数据集\n",[155,17745,17746],{"class":157,"line":662},[155,17747,17748],{"class":161},"    # 传入数据集路径与处理方法\n",[155,17750,17751,17753,17755,17758,17761,17763,17766,17768],{"class":157,"line":678},[155,17752,1495],{"class":171},[155,17754,317],{"class":167},[155,17756,17757],{"class":171},"ImageFolder(",[155,17759,17760],{"class":263},"ROOT_PATH",[155,17762,332],{"class":171},[155,17764,17765],{"class":323},"transform",[155,17767,317],{"class":167},[155,17769,17770],{"class":171},"train_transform)\n",[155,17772,17773],{"class":157,"line":694},[155,17774,217],{"emptyLinePlaceholder":216},[155,17776,17777,17779,17781,17783,17785,17787,17789,17791,17793,17795,17797,17799,17801,17803,17805],{"class":157,"line":706},[155,17778,1547],{"class":171},[155,17780,317],{"class":167},[155,17782,1552],{"class":171},[155,17784,1555],{"class":263},[155,17786,230],{"class":171},[155,17788,1560],{"class":263},[155,17790,1563],{"class":167},[155,17792,1253],{"class":263},[155,17794,1568],{"class":171},[155,17796,1555],{"class":263},[155,17798,230],{"class":171},[155,17800,1575],{"class":263},[155,17802,1563],{"class":167},[155,17804,1253],{"class":263},[155,17806,1582],{"class":171},[155,17808,17809,17811,17813,17815,17817,17819],{"class":157,"line":715},[155,17810,1587],{"class":171},[155,17812,317],{"class":167},[155,17814,1592],{"class":171},[155,17816,1061],{"class":323},[155,17818,317],{"class":167},[155,17820,1066],{"class":171},[155,17822,17823,17825,17827,17829],{"class":157,"line":720},[155,17824,1603],{"class":323},[155,17826,317],{"class":167},[155,17828,11868],{"class":263},[155,17830,990],{"class":171},[155,17832,17833,17835,17837,17839],{"class":157,"line":739},[155,17834,1615],{"class":323},[155,17836,317],{"class":167},[155,17838,1000],{"class":263},[155,17840,990],{"class":171},[155,17842,17843],{"class":157,"line":745},[155,17844,1626],{"class":161},[155,17846,17847,17849,17851,17853],{"class":157,"line":773},[155,17848,1631],{"class":323},[155,17850,317],{"class":167},[155,17852,1636],{"class":263},[155,17854,363],{"class":171},[155,17856,17857,17859,17861,17863,17865,17867],{"class":157,"line":779},[155,17858,1643],{"class":171},[155,17860,317],{"class":167},[155,17862,1058],{"class":171},[155,17864,1061],{"class":323},[155,17866,317],{"class":167},[155,17868,1654],{"class":171},[155,17870,17871,17873,17875,17877],{"class":157,"line":785},[155,17872,1659],{"class":323},[155,17874,317],{"class":167},[155,17876,11868],{"class":263},[155,17878,990],{"class":171},[155,17880,17881,17883,17885,17887],{"class":157,"line":791},[155,17882,1670],{"class":323},[155,17884,317],{"class":167},[155,17886,1000],{"class":263},[155,17888,990],{"class":171},[155,17890,17891,17893,17895,17897],{"class":157,"line":796},[155,17892,1681],{"class":323},[155,17894,317],{"class":167},[155,17896,1636],{"class":263},[155,17898,363],{"class":171},[155,17900,17901,17903],{"class":157,"line":802},[155,17902,1692],{"class":167},[155,17904,1695],{"class":171},[155,17906,17907],{"class":157,"line":808},[155,17908,217],{"emptyLinePlaceholder":216},[155,17910,17911],{"class":157,"line":819},[155,17912,1704],{"class":161},[155,17914,17915],{"class":157,"line":1832},[155,17916,1709],{"class":161},[155,17918,17919],{"class":157,"line":1838},[155,17920,217],{"emptyLinePlaceholder":216},[155,17922,17923],{"class":157,"line":1844},[155,17924,1718],{"class":161},[155,17926,17927,17929,17931],{"class":157,"line":1850},[155,17928,1484],{"class":167},[155,17930,1725],{"class":226},[155,17932,1728],{"class":171},[155,17934,17935,17937,17939,17941,17943,17945,17947,17949,17951],{"class":157,"line":1861},[155,17936,748],{"class":171},[155,17938,317],{"class":167},[155,17940,753],{"class":171},[155,17942,756],{"class":732},[155,17944,759],{"class":167},[155,17946,762],{"class":171},[155,17948,765],{"class":167},[155,17950,1747],{"class":732},[155,17952,363],{"class":171},[155,17954,17955],{"class":157,"line":1866},[155,17956,217],{"emptyLinePlaceholder":216},[155,17958,17959],{"class":157,"line":1871},[155,17960,1762],{"class":161},[155,17962,17963],{"class":157,"line":1877},[155,17964,1767],{"class":161},[155,17966,17967],{"class":157,"line":1883},[155,17968,1772],{"class":161},[155,17970,17971,17973,17975,17977,17979,17981,17983],{"class":157,"line":1894},[155,17972,1777],{"class":171},[155,17974,317],{"class":167},[155,17976,1782],{"class":171},[155,17978,1785],{"class":323},[155,17980,317],{"class":167},[155,17982,1790],{"class":263},[155,17984,363],{"class":171},[155,17986,17987],{"class":157,"line":1900},[155,17988,217],{"emptyLinePlaceholder":216},[155,17990,17991],{"class":157,"line":1911},[155,17992,1801],{"class":161},[155,17994,17995,17997,17999],{"class":157,"line":1917},[155,17996,1806],{"class":171},[155,17998,317],{"class":167},[155,18000,1811],{"class":171},[155,18002,18003],{"class":157,"line":1927},[155,18004,217],{"emptyLinePlaceholder":216},[155,18006,18007],{"class":157,"line":1933},[155,18008,1820],{"class":161},[155,18010,18011,18013,18015],{"class":157,"line":1943},[155,18012,811],{"class":171},[155,18014,317],{"class":167},[155,18016,1829],{"class":171},[155,18018,18019],{"class":157,"line":1949},[155,18020,1835],{"class":161},[155,18022,18023],{"class":157,"line":1959},[155,18024,1841],{"class":161},[155,18026,18027],{"class":157,"line":1964},[155,18028,1847],{"class":161},[155,18030,18031,18033,18035],{"class":157,"line":1970},[155,18032,1853],{"class":171},[155,18034,317],{"class":167},[155,18036,1858],{"class":171},[155,18038,18039],{"class":157,"line":1981},[155,18040,217],{"emptyLinePlaceholder":216},[155,18042,18043],{"class":157,"line":1986},[155,18044,1874],{"class":161},[155,18046,18047],{"class":157,"line":1991},[155,18048,1880],{"class":161},[155,18050,18051,18053,18055],{"class":157,"line":1997},[155,18052,1886],{"class":171},[155,18054,317],{"class":167},[155,18056,1891],{"class":263},[155,18058,18059],{"class":157,"line":2014},[155,18060,1897],{"class":161},[155,18062,18063,18065,18067],{"class":157,"line":2046},[155,18064,1903],{"class":171},[155,18066,317],{"class":167},[155,18068,1908],{"class":171},[155,18070,18071],{"class":157,"line":2062},[155,18072,1914],{"class":161},[155,18074,18075,18077,18079],{"class":157,"line":2067},[155,18076,1920],{"class":171},[155,18078,317],{"class":167},[155,18080,1908],{"class":171},[155,18082,18083],{"class":157,"line":2073},[155,18084,1930],{"class":161},[155,18086,18087,18089,18091],{"class":157,"line":2079},[155,18088,1936],{"class":171},[155,18090,317],{"class":167},[155,18092,1908],{"class":171},[155,18094,18095],{"class":157,"line":2089},[155,18096,1946],{"class":161},[155,18098,18099,18101,18103],{"class":157,"line":2095},[155,18100,1952],{"class":171},[155,18102,317],{"class":167},[155,18104,1908],{"class":171},[155,18106,18107],{"class":157,"line":2106},[155,18108,217],{"emptyLinePlaceholder":216},[155,18110,18111],{"class":157,"line":2112},[155,18112,1967],{"class":161},[155,18114,18115,18117,18119],{"class":157,"line":2122},[155,18116,1973],{"class":171},[155,18118,317],{"class":167},[155,18120,1978],{"class":171},[155,18122,18123],{"class":157,"line":2128},[155,18124,217],{"emptyLinePlaceholder":216},[155,18126,18127],{"class":157,"line":2138},[155,18128,1994],{"class":161},[155,18130,18131,18133,18135,18137,18139],{"class":157,"line":2144},[155,18132,2000],{"class":167},[155,18134,2003],{"class":171},[155,18136,1131],{"class":167},[155,18138,2008],{"class":263},[155,18140,2011],{"class":171},[155,18142,18143,18145,18147,18149,18151,18153,18155,18157,18159,18161,18163],{"class":157,"line":2154},[155,18144,2017],{"class":263},[155,18146,230],{"class":171},[155,18148,2022],{"class":732},[155,18150,2025],{"class":263},[155,18152,2028],{"class":732},[155,18154,2025],{"class":263},[155,18156,2033],{"class":732},[155,18158,2036],{"class":171},[155,18160,2039],{"class":167},[155,18162,329],{"class":263},[155,18164,1238],{"class":171},[155,18166,18167,18169,18171,18173,18175,18177],{"class":157,"line":2160},[155,18168,2017],{"class":263},[155,18170,230],{"class":171},[155,18172,2053],{"class":732},[155,18174,1563],{"class":167},[155,18176,565],{"class":263},[155,18178,363],{"class":171},[155,18180,18181],{"class":157,"line":2170},[155,18182,217],{"emptyLinePlaceholder":216},[155,18184,18185],{"class":157,"line":2176},[155,18186,2070],{"class":161},[155,18188,18189],{"class":157,"line":2191},[155,18190,2076],{"class":161},[155,18192,18193,18195,18197],{"class":157,"line":2197},[155,18194,2082],{"class":171},[155,18196,317],{"class":167},[155,18198,1891],{"class":263},[155,18200,18201],{"class":157,"line":2208},[155,18202,2092],{"class":161},[155,18204,18205,18207,18209],{"class":157,"line":2214},[155,18206,2098],{"class":171},[155,18208,317],{"class":167},[155,18210,2103],{"class":263},[155,18212,18213],{"class":157,"line":2225},[155,18214,2109],{"class":161},[155,18216,18217,18219,18221],{"class":157,"line":2231},[155,18218,2115],{"class":171},[155,18220,317],{"class":167},[155,18222,1891],{"class":263},[155,18224,18225],{"class":157,"line":2237},[155,18226,2125],{"class":161},[155,18228,18229,18231,18233],{"class":157,"line":2243},[155,18230,2131],{"class":171},[155,18232,317],{"class":167},[155,18234,2103],{"class":263},[155,18236,18237],{"class":157,"line":2249},[155,18238,2141],{"class":161},[155,18240,18241,18243,18245],{"class":157,"line":2260},[155,18242,2147],{"class":171},[155,18244,317],{"class":167},[155,18246,2103],{"class":263},[155,18248,18249],{"class":157,"line":2266},[155,18250,2157],{"class":161},[155,18252,18253,18255,18257],{"class":157,"line":2286},[155,18254,2163],{"class":171},[155,18256,317],{"class":167},[155,18258,2103],{"class":263},[155,18260,18261],{"class":157,"line":2292},[155,18262,2173],{"class":161},[155,18264,18265,18267,18269,18271,18273],{"class":157,"line":2303},[155,18266,2179],{"class":167},[155,18268,1128],{"class":171},[155,18270,1131],{"class":167},[155,18272,1134],{"class":263},[155,18274,2188],{"class":171},[155,18276,18277],{"class":157,"line":2309},[155,18278,2194],{"class":161},[155,18280,18281,18283,18285],{"class":157,"line":2315},[155,18282,2200],{"class":171},[155,18284,317],{"class":167},[155,18286,2205],{"class":171},[155,18288,18289],{"class":157,"line":2321},[155,18290,2211],{"class":161},[155,18292,18293,18295,18297],{"class":157,"line":2327},[155,18294,2217],{"class":171},[155,18296,317],{"class":167},[155,18298,2222],{"class":171},[155,18300,18301],{"class":157,"line":2333},[155,18302,2228],{"class":161},[155,18304,18305],{"class":157,"line":2339},[155,18306,2234],{"class":171},[155,18308,18309],{"class":157,"line":2345},[155,18310,2240],{"class":161},[155,18312,18313],{"class":157,"line":2366},[155,18314,2246],{"class":161},[155,18316,18317,18319,18321],{"class":157,"line":2372},[155,18318,2252],{"class":171},[155,18320,317],{"class":167},[155,18322,2257],{"class":171},[155,18324,18325],{"class":157,"line":2388},[155,18326,2263],{"class":161},[155,18328,18329,18331,18333,18335,18337,18339,18341],{"class":157,"line":2394},[155,18330,2269],{"class":171},[155,18332,317],{"class":167},[155,18334,2274],{"class":171},[155,18336,2277],{"class":323},[155,18338,317],{"class":167},[155,18340,329],{"class":263},[155,18342,363],{"class":171},[155,18344,18345],{"class":157,"line":2408},[155,18346,2289],{"class":161},[155,18348,18349,18351,18353],{"class":157,"line":2414},[155,18350,2295],{"class":171},[155,18352,317],{"class":167},[155,18354,2300],{"class":171},[155,18356,18357],{"class":157,"line":2429},[155,18358,2306],{"class":161},[155,18360,18361],{"class":157,"line":2435},[155,18362,2312],{"class":171},[155,18364,18365],{"class":157,"line":2444},[155,18366,2318],{"class":161},[155,18368,18369],{"class":157,"line":2450},[155,18370,2324],{"class":171},[155,18372,18373],{"class":157,"line":2459},[155,18374,2330],{"class":161},[155,18376,18377],{"class":157,"line":2465},[155,18378,2336],{"class":171},[155,18380,18381],{"class":157,"line":2471},[155,18382,2342],{"class":161},[155,18384,18385,18387,18389,18391,18393,18395,18397],{"class":157,"line":2480},[155,18386,2348],{"class":171},[155,18388,2351],{"class":167},[155,18390,2354],{"class":171},[155,18392,1563],{"class":167},[155,18394,2359],{"class":171},[155,18396,1109],{"class":263},[155,18398,363],{"class":171},[155,18400,18401],{"class":157,"line":2486},[155,18402,2369],{"class":161},[155,18404,18405,18407,18409,18411,18413],{"class":157,"line":2497},[155,18406,2375],{"class":171},[155,18408,2351],{"class":167},[155,18410,2380],{"class":171},[155,18412,729],{"class":167},[155,18414,2385],{"class":171},[155,18416,18417],{"class":157,"line":2503},[155,18418,2391],{"class":161},[155,18420,18421,18423,18425,18427,18429],{"class":157,"line":2522},[155,18422,2397],{"class":171},[155,18424,2351],{"class":167},[155,18426,2359],{"class":171},[155,18428,1109],{"class":263},[155,18430,363],{"class":171},[155,18432,18433],{"class":157,"line":2528},[155,18434,2411],{"class":161},[155,18436,18437,18439,18441,18443,18445],{"class":157,"line":2539},[155,18438,2179],{"class":167},[155,18440,2419],{"class":171},[155,18442,1131],{"class":167},[155,18444,1134],{"class":263},[155,18446,2426],{"class":171},[155,18448,18449],{"class":157,"line":2545},[155,18450,2432],{"class":161},[155,18452,18453,18455,18457],{"class":157,"line":2565},[155,18454,2200],{"class":171},[155,18456,317],{"class":167},[155,18458,2205],{"class":171},[155,18460,18461],{"class":157,"line":2581},[155,18462,2447],{"class":161},[155,18464,18465,18467,18469],{"class":157,"line":2587},[155,18466,2217],{"class":171},[155,18468,317],{"class":167},[155,18470,2222],{"class":171},[155,18472,18473],{"class":157,"line":2601},[155,18474,2462],{"class":161},[155,18476,18477],{"class":157,"line":2607},[155,18478,2468],{"class":171},[155,18480,18481],{"class":157,"line":2613},[155,18482,5965],{"class":161},[155,18484,18485,18487],{"class":157,"line":2624},[155,18486,2474],{"class":167},[155,18488,2477],{"class":171},[155,18490,18491],{"class":157,"line":2630},[155,18492,2483],{"class":161},[155,18494,18495,18497,18499],{"class":157,"line":2636},[155,18496,5980],{"class":171},[155,18498,317],{"class":167},[155,18500,2257],{"class":171},[155,18502,18503],{"class":157,"line":2646},[155,18504,2500],{"class":161},[155,18506,18507,18509,18511,18513,18515,18517,18519],{"class":157,"line":2652},[155,18508,5993],{"class":171},[155,18510,317],{"class":167},[155,18512,2274],{"class":171},[155,18514,2277],{"class":323},[155,18516,317],{"class":167},[155,18518,329],{"class":263},[155,18520,363],{"class":171},[155,18522,18523],{"class":157,"line":2663},[155,18524,2525],{"class":161},[155,18526,18527,18529,18531],{"class":157,"line":2669},[155,18528,6014],{"class":171},[155,18530,317],{"class":167},[155,18532,2300],{"class":171},[155,18534,18535],{"class":157,"line":2679},[155,18536,2542],{"class":161},[155,18538,18539,18541,18543,18545,18547,18549,18551],{"class":157,"line":2684},[155,18540,6027],{"class":171},[155,18542,2351],{"class":167},[155,18544,6032],{"class":171},[155,18546,1563],{"class":167},[155,18548,2359],{"class":171},[155,18550,1109],{"class":263},[155,18552,363],{"class":171},[155,18554,18555,18557,18559,18561,18563],{"class":157,"line":2690},[155,18556,6045],{"class":171},[155,18558,2351],{"class":167},[155,18560,2380],{"class":171},[155,18562,729],{"class":167},[155,18564,2385],{"class":171},[155,18566,18567],{"class":157,"line":2742},[155,18568,6058],{"class":161},[155,18570,18571,18573,18575,18577,18579],{"class":157,"line":2789},[155,18572,6063],{"class":171},[155,18574,2351],{"class":167},[155,18576,2359],{"class":171},[155,18578,1109],{"class":263},[155,18580,363],{"class":171},[155,18582,18583],{"class":157,"line":2794},[155,18584,2604],{"class":161},[155,18586,18587],{"class":157,"line":2800},[155,18588,2610],{"class":161},[155,18590,18591,18593,18595],{"class":157,"line":2821},[155,18592,2616],{"class":171},[155,18594,2028],{"class":167},[155,18596,2621],{"class":171},[155,18598,18599],{"class":157,"line":2827},[155,18600,2627],{"class":161},[155,18602,18603],{"class":157,"line":2848},[155,18604,2633],{"class":161},[155,18606,18607,18609,18611],{"class":157,"line":2854},[155,18608,2639],{"class":171},[155,18610,2028],{"class":167},[155,18612,2621],{"class":171},[155,18614,18615],{"class":157,"line":2860},[155,18616,2649],{"class":161},[155,18618,18619,18621,18623],{"class":157,"line":2870},[155,18620,2655],{"class":171},[155,18622,2028],{"class":167},[155,18624,2660],{"class":171},[155,18626,18627],{"class":157,"line":2875},[155,18628,2666],{"class":161},[155,18630,18631,18633,18635],{"class":157,"line":2881},[155,18632,2672],{"class":171},[155,18634,2028],{"class":167},[155,18636,2660],{"class":171},[155,18638,18639],{"class":157,"line":2897},[155,18640,217],{"emptyLinePlaceholder":216},[155,18642,18643],{"class":157,"line":2945},[155,18644,2687],{"class":161},[155,18646,18647,18649,18651,18653,18655,18657,18659,18661,18663,18665,18667,18669,18671,18673,18675,18677,18679,18681,18683,18685],{"class":157,"line":2951},[155,18648,2017],{"class":263},[155,18650,230],{"class":171},[155,18652,2697],{"class":732},[155,18654,2025],{"class":263},[155,18656,2702],{"class":732},[155,18658,2705],{"class":263},[155,18660,2708],{"class":167},[155,18662,2711],{"class":263},[155,18664,2714],{"class":732},[155,18666,2705],{"class":263},[155,18668,2708],{"class":167},[155,18670,2711],{"class":263},[155,18672,2697],{"class":732},[155,18674,2725],{"class":171},[155,18676,2039],{"class":167},[155,18678,329],{"class":263},[155,18680,2732],{"class":171},[155,18682,2039],{"class":167},[155,18684,329],{"class":263},[155,18686,2739],{"class":171},[155,18688,18689,18691,18693,18695,18697,18699,18701,18703,18705,18707,18709,18711,18713,18715,18717,18719,18721,18723,18725,18727],{"class":157,"line":2957},[155,18690,2017],{"class":263},[155,18692,230],{"class":171},[155,18694,2697],{"class":732},[155,18696,2025],{"class":263},[155,18698,2753],{"class":732},[155,18700,2705],{"class":263},[155,18702,2708],{"class":167},[155,18704,2711],{"class":263},[155,18706,2762],{"class":732},[155,18708,2705],{"class":263},[155,18710,2708],{"class":167},[155,18712,2711],{"class":263},[155,18714,2697],{"class":732},[155,18716,2773],{"class":171},[155,18718,2039],{"class":167},[155,18720,329],{"class":263},[155,18722,2780],{"class":171},[155,18724,2039],{"class":167},[155,18726,329],{"class":263},[155,18728,2739],{"class":171},[155,18730,18731],{"class":157,"line":2963},[155,18732,217],{"emptyLinePlaceholder":216},[155,18734,18735],{"class":157,"line":2974},[155,18736,2797],{"class":161},[155,18738,18739,18741,18743,18745,18747,18749,18751],{"class":157,"line":2980},[155,18740,2803],{"class":167},[155,18742,2806],{"class":171},[155,18744,2039],{"class":167},[155,18746,329],{"class":263},[155,18748,2813],{"class":171},[155,18750,1148],{"class":167},[155,18752,2818],{"class":171},[155,18754,18755],{"class":157,"line":2986},[155,18756,2824],{"class":161},[155,18758,18759,18761,18763,18765,18767,18769,18771],{"class":157,"line":2992},[155,18760,2830],{"class":171},[155,18762,2833],{"class":263},[155,18764,317],{"class":167},[155,18766,2838],{"class":171},[155,18768,2039],{"class":167},[155,18770,329],{"class":263},[155,18772,2845],{"class":171},[155,18774,18775],{"class":157,"line":3011},[155,18776,2851],{"class":161},[155,18778,18779],{"class":157,"line":3026},[155,18780,2857],{"class":161},[155,18782,18783,18785,18787],{"class":157,"line":3035},[155,18784,2863],{"class":171},[155,18786,317],{"class":167},[155,18788,1858],{"class":171},[155,18790,18791],{"class":157,"line":3044},[155,18792,217],{"emptyLinePlaceholder":216},[155,18794,18795],{"class":157,"line":3053},[155,18796,2878],{"class":161},[155,18798,18799,18801,18803,18805,18807],{"class":157,"line":3062},[155,18800,2884],{"class":171},[155,18802,317],{"class":167},[155,18804,2889],{"class":171},[155,18806,2039],{"class":167},[155,18808,2894],{"class":171},[155,18810,18811,18813,18815,18817,18819,18821,18823,18825,18827,18829,18831,18833,18835,18837,18839,18841,18843,18845],{"class":157,"line":3068},[155,18812,2017],{"class":263},[155,18814,230],{"class":171},[155,18816,2904],{"class":732},[155,18818,2705],{"class":263},[155,18820,2909],{"class":167},[155,18822,2711],{"class":263},[155,18824,2914],{"class":732},[155,18826,2705],{"class":263},[155,18828,2909],{"class":167},[155,18830,2711],{"class":263},[155,18832,2923],{"class":732},[155,18834,2926],{"class":171},[155,18836,2929],{"class":167},[155,18838,2932],{"class":263},[155,18840,2935],{"class":171},[155,18842,2938],{"class":167},[155,18844,2932],{"class":263},[155,18846,1238],{"class":171},[155,18848,18849],{"class":157,"line":3074},[155,18850,6342],{"class":161},[155,18852,18853],{"class":157,"line":3082},[155,18854,6347],{"class":161},[155,18856,18857,18859,18861],{"class":157,"line":3087},[155,18858,6352],{"class":171},[155,18860,2969],{"class":732},[155,18862,363],{"class":171},[155,18864,18865],{"class":157,"line":3093},[155,18866,2989],{"class":161},[155,18868,18869,18871,18873,18875,18877,18879],{"class":157,"line":3104},[155,18870,2995],{"class":171},[155,18872,317],{"class":167},[155,18874,3000],{"class":171},[155,18876,3003],{"class":323},[155,18878,317],{"class":167},[155,18880,3008],{"class":171},[155,18882,18883,18885,18887,18889],{"class":157,"line":3110},[155,18884,3014],{"class":732},[155,18886,3017],{"class":171},[155,18888,3020],{"class":263},[155,18890,3023],{"class":171},[155,18892,18893,18895],{"class":157,"line":3130},[155,18894,3029],{"class":732},[155,18896,3032],{"class":171},[155,18898,18899,18901],{"class":157,"line":3136},[155,18900,3038],{"class":732},[155,18902,3041],{"class":171},[155,18904,18905,18907],{"class":157,"line":3142},[155,18906,3047],{"class":732},[155,18908,3050],{"class":171},[155,18910,18911,18913],{"class":157,"line":3148},[155,18912,3056],{"class":732},[155,18914,3059],{"class":171},[155,18916,18917],{"class":157,"line":3165},[155,18918,3065],{"class":171},[155,18920,18921],{"class":157,"line":3171},[155,18922,3071],{"class":161},[155,18924,18925,18927],{"class":157,"line":3177},[155,18926,1692],{"class":167},[155,18928,3079],{"class":171},[155,18930,18931],{"class":157,"line":3183},[155,18932,217],{"emptyLinePlaceholder":216},[155,18934,18935],{"class":157,"line":3189},[155,18936,3090],{"class":161},[155,18938,18939,18941,18943],{"class":157,"line":3195},[155,18940,1484],{"class":167},[155,18942,3098],{"class":226},[155,18944,3101],{"class":171},[155,18946,18947],{"class":157,"line":3222},[155,18948,3107],{"class":161},[155,18950,18951,18953,18955,18957,18959,18961,18963,18965],{"class":157,"line":3246},[155,18952,3113],{"class":171},[155,18954,1224],{"class":323},[155,18956,317],{"class":167},[155,18958,230],{"class":171},[155,18960,1231],{"class":263},[155,18962,332],{"class":171},[155,18964,1264],{"class":263},[155,18966,1238],{"class":171},[155,18968,18969],{"class":157,"line":3252},[155,18970,3133],{"class":161},[155,18972,18973],{"class":157,"line":3258},[155,18974,3139],{"class":161},[155,18976,18977],{"class":157,"line":3264},[155,18978,3145],{"class":161},[155,18980,18981,18983,18985,18987,18989,18991,18993],{"class":157,"line":3275},[155,18982,1261],{"class":171},[155,18984,329],{"class":263},[155,18986,332],{"class":171},[155,18988,360],{"class":263},[155,18990,332],{"class":171},[155,18992,329],{"class":263},[155,18994,363],{"class":171},[155,18996,18997],{"class":157,"line":3286},[155,18998,3168],{"class":161},[155,19000,19001],{"class":157,"line":3292},[155,19002,3174],{"class":161},[155,19004,19005],{"class":157,"line":3309},[155,19006,3180],{"class":161},[155,19008,19009],{"class":157,"line":3332},[155,19010,3186],{"class":161},[155,19012,19013],{"class":157,"line":3355},[155,19014,3192],{"class":161},[155,19016,19017,19019,19021,19023,19025,19027,19029,19031,19033],{"class":157,"line":3361},[155,19018,3198],{"class":171},[155,19020,3201],{"class":732},[155,19022,3204],{"class":171},[155,19024,3207],{"class":732},[155,19026,332],{"class":171},[155,19028,3212],{"class":323},[155,19030,317],{"class":167},[155,19032,3217],{"class":732},[155,19034,363],{"class":171},[155,19036,19037,19039,19041,19043,19045,19047,19049,19051,19053],{"class":157,"line":3366},[155,19038,3198],{"class":171},[155,19040,3201],{"class":732},[155,19042,3229],{"class":171},[155,19044,3232],{"class":732},[155,19046,332],{"class":171},[155,19048,3212],{"class":323},[155,19050,317],{"class":167},[155,19052,3241],{"class":732},[155,19054,363],{"class":171},[155,19056,19057],{"class":157,"line":3375},[155,19058,3249],{"class":161},[155,19060,19061],{"class":157,"line":3385},[155,19062,3255],{"class":171},[155,19064,19065],{"class":157,"line":3391},[155,19066,3261],{"class":161},[155,19068,19069,19071,19073],{"class":157,"line":3396},[155,19070,3267],{"class":171},[155,19072,3270],{"class":732},[155,19074,363],{"class":171},[155,19076,19077,19079,19081],{"class":157,"line":3402},[155,19078,3278],{"class":171},[155,19080,3281],{"class":732},[155,19082,363],{"class":171},[155,19084,19085],{"class":157,"line":3415},[155,19086,3289],{"class":161},[155,19088,19089,19091,19093,19095,19097,19099,19101],{"class":157,"line":3421},[155,19090,1261],{"class":171},[155,19092,329],{"class":263},[155,19094,332],{"class":171},[155,19096,360],{"class":263},[155,19098,332],{"class":171},[155,19100,360],{"class":263},[155,19102,363],{"class":171},[155,19104,19105,19107,19109,19111,19113,19115,19117,19119,19121],{"class":157,"line":3432},[155,19106,3198],{"class":171},[155,19108,3201],{"class":732},[155,19110,3316],{"class":171},[155,19112,3207],{"class":732},[155,19114,332],{"class":171},[155,19116,3212],{"class":323},[155,19118,317],{"class":167},[155,19120,3327],{"class":732},[155,19122,363],{"class":171},[155,19124,19125,19127,19129,19131,19133,19135,19137,19139,19141],{"class":157,"line":3443},[155,19126,3198],{"class":171},[155,19128,3201],{"class":732},[155,19130,3339],{"class":171},[155,19132,3232],{"class":732},[155,19134,332],{"class":171},[155,19136,3212],{"class":323},[155,19138,317],{"class":167},[155,19140,3350],{"class":732},[155,19142,363],{"class":171},[155,19144,19145],{"class":157,"line":3463},[155,19146,3358],{"class":161},[155,19148,19150],{"class":157,"line":19149},219,[155,19151,3255],{"class":171},[155,19153,19155,19157,19159],{"class":157,"line":19154},220,[155,19156,3267],{"class":171},[155,19158,3201],{"class":732},[155,19160,363],{"class":171},[155,19162,19164,19166,19168],{"class":157,"line":19163},221,[155,19165,3278],{"class":171},[155,19167,3380],{"class":732},[155,19169,363],{"class":171},[155,19171,19173],{"class":157,"line":19172},222,[155,19174,3388],{"class":171},[155,19176,19178],{"class":157,"line":19177},223,[155,19179,217],{"emptyLinePlaceholder":216},[155,19181,19183],{"class":157,"line":19182},224,[155,19184,3399],{"class":161},[155,19186,19188,19190,19192,19194,19196],{"class":157,"line":19187},225,[155,19189,723],{"class":167},[155,19191,726],{"class":263},[155,19193,729],{"class":167},[155,19195,733],{"class":732},[155,19197,736],{"class":171},[155,19199,19201],{"class":157,"line":19200},226,[155,19202,3418],{"class":161},[155,19204,19206,19208,19210],{"class":157,"line":19205},227,[155,19207,14165],{"class":171},[155,19209,317],{"class":167},[155,19211,14170],{"class":171},[155,19213,19215,19217,19219],{"class":157,"line":19214},228,[155,19216,3435],{"class":171},[155,19218,317],{"class":167},[155,19220,3440],{"class":171},[155,19222,19224,19226,19228,19230,19232,19234,19236],{"class":157,"line":19223},229,[155,19225,2995],{"class":171},[155,19227,317],{"class":167},[155,19229,14187],{"class":171},[155,19231,3453],{"class":323},[155,19233,317],{"class":167},[155,19235,2932],{"class":263},[155,19237,363],{"class":171},[155,19239,19241],{"class":157,"line":19240},230,[155,19242,3466],{"class":171},[19,19244,19246],{"id":19245},"_242测试代码","2.4.2.测试代码",[24,19248,19249],{},"使用测试集进行测试与推理",[146,19251,19253],{"className":148,"code":19252,"language":150,"meta":39,"style":39},"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",[152,19254,19255,19261,19271,19281,19292,19302,19306,19310,19318,19323,19327,19344,19348,19352,19356,19360,19364,19396,19400,19408,19412,19424,19428,19432,19436,19440,19444,19448,19452,19456,19474,19488,19492,19502,19512,19522,19528,19532,19536,19544,19548,19564,19572,19576,19580,19588,19596,19600,19604,19608,19612,19618,19622,19632,19640,19648,19652,19656,19660,19668,19672,19688,19692,19696,19700,19712,19716,19728,19732,19736,19748,19752,19762,19766,19770,19782,19786,19794,19798,19802,19810,19814,19822,19826,19830,19834,19838,19842,19858,19866,19870,19874,19892,19898,19902,19912,19920,19928,19932,19936,19940,19944,19952,19956,19972,19976,19984,19992],{"__ignoreMap":39},[155,19256,19257,19259],{"class":157,"line":158},[155,19258,168],{"class":167},[155,19260,172],{"class":171},[155,19262,19263,19265,19267,19269],{"class":157,"line":46},[155,19264,168],{"class":167},[155,19266,939],{"class":171},[155,19268,907],{"class":167},[155,19270,944],{"class":171},[155,19272,19273,19275,19277,19279],{"class":157,"line":121},[155,19274,183],{"class":167},[155,19276,922],{"class":171},[155,19278,168],{"class":167},[155,19280,927],{"class":171},[155,19282,19283,19285,19287,19289],{"class":157,"line":180},[155,19284,183],{"class":167},[155,19286,892],{"class":171},[155,19288,168],{"class":167},[155,19290,19291],{"class":171}," ImageFolder\n",[155,19293,19294,19296,19298,19300],{"class":157,"line":194},[155,19295,183],{"class":167},[155,19297,1451],{"class":171},[155,19299,168],{"class":167},[155,19301,14260],{"class":171},[155,19303,19304],{"class":157,"line":200},[155,19305,217],{"emptyLinePlaceholder":216},[155,19307,19308],{"class":157,"line":213},[155,19309,3556],{"class":161},[155,19311,19312,19314,19316],{"class":157,"line":220},[155,19313,1484],{"class":167},[155,19315,3563],{"class":226},[155,19317,1490],{"class":171},[155,19319,19320],{"class":157,"line":245},[155,19321,19322],{"class":161},"   # 导入自己的数据集，并进行数据处理\n",[155,19324,19325],{"class":157,"line":251},[155,19326,17589],{"class":161},[155,19328,19329,19331,19333,19335,19337,19339,19342],{"class":157,"line":257},[155,19330,17594],{"class":263},[155,19332,317],{"class":167},[155,19334,17599],{"class":167},[155,19336,2033],{"class":732},[155,19338,236],{"class":263},[155,19340,19341],{"class":17606},"\u002Fdata\u002Ftest",[155,19343,17610],{"class":732},[155,19345,19346],{"class":157,"line":270},[155,19347,217],{"emptyLinePlaceholder":216},[155,19349,19350],{"class":157,"line":276},[155,19351,17619],{"class":161},[155,19353,19354],{"class":157,"line":297},[155,19355,17624],{"class":161},[155,19357,19358],{"class":157,"line":302},[155,19359,17629],{"class":161},[155,19361,19362],{"class":157,"line":308},[155,19363,17634],{"class":161},[155,19365,19366,19368,19370,19372,19374,19376,19378,19380,19382,19384,19386,19388,19390,19392,19394],{"class":157,"line":366},[155,19367,17639],{"class":171},[155,19369,317],{"class":167},[155,19371,17644],{"class":171},[155,19373,17647],{"class":263},[155,19375,332],{"class":171},[155,19377,17652],{"class":263},[155,19379,332],{"class":171},[155,19381,17657],{"class":263},[155,19383,17660],{"class":171},[155,19385,17663],{"class":263},[155,19387,332],{"class":171},[155,19389,17668],{"class":263},[155,19391,332],{"class":171},[155,19393,17673],{"class":263},[155,19395,17676],{"class":171},[155,19397,19398],{"class":157,"line":379},[155,19399,17681],{"class":161},[155,19401,19402,19404,19406],{"class":157,"line":385},[155,19403,17686],{"class":171},[155,19405,317],{"class":167},[155,19407,17691],{"class":171},[155,19409,19410],{"class":157,"line":415},[155,19411,17696],{"class":161},[155,19413,19414,19416,19418,19420,19422],{"class":157,"line":452},[155,19415,17701],{"class":171},[155,19417,1025],{"class":263},[155,19419,332],{"class":171},[155,19421,1025],{"class":263},[155,19423,12241],{"class":171},[155,19425,19426],{"class":157,"line":480},[155,19427,17714],{"class":161},[155,19429,19430],{"class":157,"line":486},[155,19431,17719],{"class":171},[155,19433,19434],{"class":157,"line":499},[155,19435,17724],{"class":171},[155,19437,19438],{"class":157,"line":505},[155,19439,17729],{"class":161},[155,19441,19442],{"class":157,"line":528},[155,19443,17734],{"class":161},[155,19445,19446],{"class":157,"line":549},[155,19447,217],{"emptyLinePlaceholder":216},[155,19449,19450],{"class":157,"line":570},[155,19451,17743],{"class":161},[155,19453,19454],{"class":157,"line":575},[155,19455,17748],{"class":161},[155,19457,19458,19460,19462,19464,19466,19468,19470,19472],{"class":157,"line":581},[155,19459,3570],{"class":171},[155,19461,317],{"class":167},[155,19463,17757],{"class":171},[155,19465,17760],{"class":263},[155,19467,332],{"class":171},[155,19469,17765],{"class":323},[155,19471,317],{"class":167},[155,19473,17770],{"class":171},[155,19475,19476,19478,19480,19482,19484,19486],{"class":157,"line":592},[155,19477,3627],{"class":171},[155,19479,317],{"class":167},[155,19481,1058],{"class":171},[155,19483,1061],{"class":323},[155,19485,317],{"class":167},[155,19487,3638],{"class":171},[155,19489,19490],{"class":157,"line":610},[155,19491,3643],{"class":161},[155,19493,19494,19496,19498,19500],{"class":157,"line":622},[155,19495,3648],{"class":323},[155,19497,317],{"class":167},[155,19499,329],{"class":263},[155,19501,990],{"class":171},[155,19503,19504,19506,19508,19510],{"class":157,"line":638},[155,19505,3659],{"class":323},[155,19507,317],{"class":167},[155,19509,1000],{"class":263},[155,19511,990],{"class":171},[155,19513,19514,19516,19518,19520],{"class":157,"line":650},[155,19515,3670],{"class":323},[155,19517,317],{"class":167},[155,19519,1109],{"class":263},[155,19521,363],{"class":171},[155,19523,19524,19526],{"class":157,"line":662},[155,19525,1692],{"class":167},[155,19527,3683],{"class":171},[155,19529,19530],{"class":157,"line":678},[155,19531,217],{"emptyLinePlaceholder":216},[155,19533,19534],{"class":157,"line":694},[155,19535,3692],{"class":161},[155,19537,19538,19540,19542],{"class":157,"line":706},[155,19539,1484],{"class":167},[155,19541,3699],{"class":226},[155,19543,3702],{"class":171},[155,19545,19546],{"class":157,"line":715},[155,19547,3707],{"class":161},[155,19549,19550,19552,19554,19556,19558,19560,19562],{"class":157,"line":720},[155,19551,748],{"class":171},[155,19553,317],{"class":167},[155,19555,756],{"class":732},[155,19557,759],{"class":167},[155,19559,762],{"class":171},[155,19561,765],{"class":167},[155,19563,3724],{"class":732},[155,19565,19566,19568,19570],{"class":157,"line":739},[155,19567,811],{"class":171},[155,19569,317],{"class":167},[155,19571,1829],{"class":171},[155,19573,19574],{"class":157,"line":745},[155,19575,217],{"emptyLinePlaceholder":216},[155,19577,19578],{"class":157,"line":773},[155,19579,3741],{"class":161},[155,19581,19582,19584,19586],{"class":157,"line":779},[155,19583,3746],{"class":171},[155,19585,317],{"class":167},[155,19587,1891],{"class":263},[155,19589,19590,19592,19594],{"class":157,"line":785},[155,19591,3755],{"class":171},[155,19593,317],{"class":167},[155,19595,2103],{"class":263},[155,19597,19598],{"class":157,"line":791},[155,19599,217],{"emptyLinePlaceholder":216},[155,19601,19602],{"class":157,"line":796},[155,19603,3768],{"class":161},[155,19605,19606],{"class":157,"line":802},[155,19607,3773],{"class":161},[155,19609,19610],{"class":157,"line":808},[155,19611,3778],{"class":161},[155,19613,19614,19616],{"class":157,"line":819},[155,19615,3783],{"class":167},[155,19617,2477],{"class":171},[155,19619,19620],{"class":157,"line":1832},[155,19621,3790],{"class":161},[155,19623,19624,19626,19628,19630],{"class":157,"line":1838},[155,19625,2179],{"class":167},[155,19627,3797],{"class":171},[155,19629,1131],{"class":167},[155,19631,3802],{"class":171},[155,19633,19634,19636,19638],{"class":157,"line":1844},[155,19635,3807],{"class":171},[155,19637,317],{"class":167},[155,19639,3812],{"class":171},[155,19641,19642,19644,19646],{"class":157,"line":1850},[155,19643,3817],{"class":171},[155,19645,317],{"class":167},[155,19647,3822],{"class":171},[155,19649,19650],{"class":157,"line":1861},[155,19651,3827],{"class":161},[155,19653,19654],{"class":157,"line":1866},[155,19655,2468],{"class":171},[155,19657,19658],{"class":157,"line":1871},[155,19659,3836],{"class":161},[155,19661,19662,19664,19666],{"class":157,"line":1877},[155,19663,2252],{"class":171},[155,19665,317],{"class":167},[155,19667,3845],{"class":171},[155,19669,19670],{"class":157,"line":1883},[155,19671,3850],{"class":161},[155,19673,19674,19676,19678,19680,19682,19684,19686],{"class":157,"line":1894},[155,19675,2269],{"class":171},[155,19677,317],{"class":167},[155,19679,2274],{"class":171},[155,19681,2277],{"class":323},[155,19683,317],{"class":167},[155,19685,329],{"class":263},[155,19687,363],{"class":171},[155,19689,19690],{"class":157,"line":1900},[155,19691,3871],{"class":161},[155,19693,19694],{"class":157,"line":1911},[155,19695,3876],{"class":161},[155,19697,19698],{"class":157,"line":1917},[155,19699,3881],{"class":161},[155,19701,19702,19704,19706,19708,19710],{"class":157,"line":1927},[155,19703,3886],{"class":171},[155,19705,2351],{"class":167},[155,19707,2380],{"class":171},[155,19709,729],{"class":167},[155,19711,3895],{"class":171},[155,19713,19714],{"class":157,"line":1933},[155,19715,3900],{"class":161},[155,19717,19718,19720,19722,19724,19726],{"class":157,"line":1943},[155,19719,3905],{"class":171},[155,19721,2351],{"class":167},[155,19723,3910],{"class":171},[155,19725,1109],{"class":263},[155,19727,363],{"class":171},[155,19729,19730],{"class":157,"line":1949},[155,19731,217],{"emptyLinePlaceholder":216},[155,19733,19734],{"class":157,"line":1959},[155,19735,3923],{"class":161},[155,19737,19738,19740,19742,19744,19746],{"class":157,"line":1964},[155,19739,3928],{"class":171},[155,19741,317],{"class":167},[155,19743,3933],{"class":171},[155,19745,2028],{"class":167},[155,19747,3938],{"class":171},[155,19749,19750],{"class":157,"line":1970},[155,19751,3943],{"class":161},[155,19753,19754,19756,19758,19760],{"class":157,"line":1981},[155,19755,2017],{"class":263},[155,19757,230],{"class":171},[155,19759,3952],{"class":732},[155,19761,3955],{"class":171},[155,19763,19764],{"class":157,"line":1986},[155,19765,217],{"emptyLinePlaceholder":216},[155,19767,19768],{"class":157,"line":1991},[155,19769,3964],{"class":161},[155,19771,19772,19774,19776,19778,19780],{"class":157,"line":1997},[155,19773,723],{"class":167},[155,19775,726],{"class":263},[155,19777,729],{"class":167},[155,19779,733],{"class":732},[155,19781,736],{"class":171},[155,19783,19784],{"class":157,"line":2014},[155,19785,3981],{"class":161},[155,19787,19788,19790,19792],{"class":157,"line":2046},[155,19789,811],{"class":171},[155,19791,317],{"class":167},[155,19793,14170],{"class":171},[155,19795,19796],{"class":157,"line":2062},[155,19797,3994],{"class":161},[155,19799,19800],{"class":157,"line":2067},[155,19801,3999],{"class":161},[155,19803,19804,19806,19808],{"class":157,"line":2073},[155,19805,4004],{"class":171},[155,19807,4007],{"class":732},[155,19809,1238],{"class":171},[155,19811,19812],{"class":157,"line":2079},[155,19813,4014],{"class":161},[155,19815,19816,19818,19820],{"class":157,"line":2089},[155,19817,3627],{"class":171},[155,19819,317],{"class":167},[155,19821,4023],{"class":171},[155,19823,19824],{"class":157,"line":2095},[155,19825,4028],{"class":161},[155,19827,19828],{"class":157,"line":2106},[155,19829,4033],{"class":171},[155,19831,19832],{"class":157,"line":2112},[155,19833,217],{"emptyLinePlaceholder":216},[155,19835,19836],{"class":157,"line":2122},[155,19837,4042],{"class":161},[155,19839,19840],{"class":157,"line":2128},[155,19841,4047],{"class":161},[155,19843,19844,19846,19848,19850,19852,19854,19856],{"class":157,"line":2138},[155,19845,748],{"class":171},[155,19847,317],{"class":167},[155,19849,756],{"class":732},[155,19851,759],{"class":167},[155,19853,762],{"class":171},[155,19855,765],{"class":167},[155,19857,3724],{"class":732},[155,19859,19860,19862,19864],{"class":157,"line":2144},[155,19861,811],{"class":171},[155,19863,317],{"class":167},[155,19865,1829],{"class":171},[155,19867,19868],{"class":157,"line":2154},[155,19869,4076],{"class":161},[155,19871,19872],{"class":157,"line":2160},[155,19873,4081],{"class":161},[155,19875,19876,19878,19880,19882,19885,19887,19890],{"class":157,"line":2170},[155,19877,4086],{"class":171},[155,19879,317],{"class":167},[155,19881,4091],{"class":171},[155,19883,19884],{"class":732},"'猫'",[155,19886,332],{"class":171},[155,19888,19889],{"class":732},"'狗'",[155,19891,2845],{"class":171},[155,19893,19894,19896],{"class":157,"line":2176},[155,19895,3783],{"class":167},[155,19897,2477],{"class":171},[155,19899,19900],{"class":157,"line":2191},[155,19901,4152],{"class":161},[155,19903,19904,19906,19908,19910],{"class":157,"line":2197},[155,19905,2179],{"class":167},[155,19907,4159],{"class":171},[155,19909,1131],{"class":167},[155,19911,3802],{"class":171},[155,19913,19914,19916,19918],{"class":157,"line":2208},[155,19915,2200],{"class":171},[155,19917,317],{"class":167},[155,19919,2205],{"class":171},[155,19921,19922,19924,19926],{"class":157,"line":2214},[155,19923,2217],{"class":171},[155,19925,317],{"class":167},[155,19927,2222],{"class":171},[155,19929,19930],{"class":157,"line":2225},[155,19931,217],{"emptyLinePlaceholder":216},[155,19933,19934],{"class":157,"line":2231},[155,19935,4188],{"class":161},[155,19937,19938],{"class":157,"line":2237},[155,19939,2468],{"class":171},[155,19941,19942],{"class":157,"line":2243},[155,19943,4197],{"class":161},[155,19945,19946,19948,19950],{"class":157,"line":2249},[155,19947,2252],{"class":171},[155,19949,317],{"class":167},[155,19951,2257],{"class":171},[155,19953,19954],{"class":157,"line":2260},[155,19955,4210],{"class":161},[155,19957,19958,19960,19962,19964,19966,19968,19970],{"class":157,"line":2266},[155,19959,2269],{"class":171},[155,19961,317],{"class":167},[155,19963,2274],{"class":171},[155,19965,2277],{"class":323},[155,19967,317],{"class":167},[155,19969,329],{"class":263},[155,19971,363],{"class":171},[155,19973,19974],{"class":157,"line":2286},[155,19975,4231],{"class":161},[155,19977,19978,19980,19982],{"class":157,"line":2292},[155,19979,4236],{"class":171},[155,19981,317],{"class":167},[155,19983,4241],{"class":171},[155,19985,19986,19988,19990],{"class":157,"line":2303},[155,19987,4246],{"class":171},[155,19989,317],{"class":167},[155,19991,4251],{"class":171},[155,19993,19994,19996,19998,20000,20002,20004,20006,20008],{"class":157,"line":2309},[155,19995,4256],{"class":263},[155,19997,230],{"class":171},[155,19999,4261],{"class":732},[155,20001,4264],{"class":171},[155,20003,4267],{"class":732},[155,20005,332],{"class":171},[155,20007,4272],{"class":732},[155,20009,4275],{"class":171},[20011,20012,20013],"style",{},"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":39,"searchDepth":46,"depth":46,"links":20015},[20016,20017,20018,20019],{"id":16,"depth":121,"text":17},{"id":7448,"depth":121,"text":7449},{"id":10885,"depth":121,"text":10886},{"id":14901,"depth":121,"text":14902},null,"md",{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":5,"description":20020},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",[20028,25026,26133,27549,30507,31858,33346,34435,43162,43174,43773,43799,43923,44164,44229,44247,44260,44307,44431,44600,44799,44977,45182,45318,45413,45450,45463,45773,46513,47221,47242,48262,49893,50044,50057,50069,50361,68956,68971,68988,69021,71893,95241,111386,111407,111520,111641,112411,113074,113435,113473,113579,113679,113722,113748,113809,115463,115564,115589,116080,116580,117660,117943,118685,119187,119199,121215,122879,124382,126080,127997,129916,131938,135408,135840,136303,137052,139996,140344,140366,140722,144029,144041,144444,144467,144614,144781,144986,145287,145844,146501,148432,150030,150679,152173,153604,154839,156533,158285,160695,160811,161746,161957,162842,164077,164305,164318,165473,167885,170253,173574,176051,177695,179472,181485,184537,186717,189244,191438],{"id":20029,"title":20030,"body":20031,"description":39,"extension":20021,"meta":25021,"navigation":216,"path":25022,"seo":25023,"stem":25024,"__hash__":25025},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":20032,"toc":24993},[20033,20036,20041,20044,20048,20059,20063,20067,20070,20073,20076,20079,20082,20107,20111,20114,20117,20120,20123,20169,20173,20191,20193,20207,20210,20218,20221,21044,21051,21068,21072,21158,21162,21168,21254,21258,21296,21300,21364,21368,21372,21378,21389,21393,21398,21402,21407,21411,21416,21420,21424,21429,21676,21681,21819,21824,22079,22082,22090,22094,22099,22202,22205,22501,22510,22611,22614,22617,22620,22623,22882,22887,23024,23027,23205,23208,23335,23338,23489,23493,23498,23501,23512,23520,23523,23629,23633,23637,23642,23692,23697,23702,23726,23731,23784,23787,23792,23966,23971,24256,24261,24656,24660,24665,24722,24727,24735,24738,24878,24881,24990],[10,20034,20030],{"id":20035},"_1基础入门",[20037,20038,20040],"h2",{"id":20039},"_11注释","1.1注释",[24,20042,20043],{},"\u002F\u002F或者\u002F* *\u002F",[20037,20045,20047],{"id":20046},"_12命名","1.2命名",[28,20049,20050,20053,20056],{},[31,20051,20052],{},"字母数字下划线",[31,20054,20055],{},"开头必须是字母或_",[31,20057,20058],{},"不能使用关键词",[20037,20060,20062],{"id":20061},"_13数据类型","1.3数据类型",[14,20064,20066],{"id":20065},"_131整形","1.3.1整形",[24,20068,20069],{},"short 短整形 2",[24,20071,20072],{},"int 整形 4",[24,20074,20075],{},"long 长整形 win4 linux32位4 linux64位8",[24,20077,20078],{},"long long 长长整形 8",[24,20080,20081],{},"利用sizeof可以求数据类型占用的内存空间大小",[146,20083,20087],{"className":20084,"code":20085,"language":20086,"meta":39,"style":39},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[152,20088,20089,20100],{"__ignoreMap":39},[155,20090,20091,20094,20096,20098],{"class":157,"line":158},[155,20092,20093],{"class":167},"sizeof",[155,20095,230],{"class":171},[155,20097,15239],{"class":167},[155,20099,363],{"class":171},[155,20101,20102,20104],{"class":157,"line":46},[155,20103,20093],{"class":167},[155,20105,20106],{"class":171},"(num)\n",[14,20108,20110],{"id":20109},"_132浮点型","1.3.2浮点型",[24,20112,20113],{},"float 单精度 4节 7位有效数字",[24,20115,20116],{},"double 双精度 8节 15-16有效数字",[24,20118,20119],{},"默认情况下，输出一个小数，会显示6位有效数字",[24,20121,20122],{},"注意点：",[146,20124,20126],{"className":20084,"code":20125,"language":20086,"meta":39,"style":39},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[152,20127,20128,20148],{"__ignoreMap":39},[155,20129,20130,20132,20135,20137,20140,20142,20145],{"class":157,"line":158},[155,20131,2833],{"class":167},[155,20133,20134],{"class":171}," f1",[155,20136,317],{"class":167},[155,20138,20139],{"class":263},"3.14",[155,20141,17391],{"class":167},[155,20143,20144],{"class":171},";",[155,20146,20147],{"class":161}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[155,20149,20150,20152,20155,20157,20159,20162,20164,20166],{"class":157,"line":46},[155,20151,2833],{"class":167},[155,20153,20154],{"class":171}," f2",[155,20156,317],{"class":167},[155,20158,4444],{"class":263},[155,20160,20161],{"class":167},"e",[155,20163,360],{"class":263},[155,20165,20144],{"class":171},[155,20167,20168],{"class":161}," \u002F\u002F科学记数法\n",[14,20170,20172],{"id":20171},"_133字符型","1.3.3字符型",[146,20174,20176],{"className":20084,"code":20175,"language":20086,"meta":39,"style":39},"char ch='a'\n",[152,20177,20178],{"__ignoreMap":39},[155,20179,20180,20183,20186,20188],{"class":157,"line":158},[155,20181,20182],{"class":167},"char",[155,20184,20185],{"class":171}," ch",[155,20187,317],{"class":167},[155,20189,20190],{"class":732},"'a'\n",[24,20192,20122],{},[28,20194,20195,20198,20201,20204],{},[31,20196,20197],{},"在显示字符型变量时，只能单引号，双引号x",[31,20199,20200],{},"单引号内只能一个字符，不能字符串",[31,20202,20203],{},"c和c++字符型变量只占用一个字符",[31,20205,20206],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[24,20208,20209],{},"ASCII码大致由以下两部分组成：",[28,20211,20212,20215],{},[31,20213,20214],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[31,20216,20217],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[24,20219,20220],{},"ASCII码表格：",[20222,20223,20224,20268],"table",{},[20225,20226,20227],"thead",{},[20228,20229,20230,20238,20243,20247,20252,20256,20260,20264],"tr",{},[20231,20232,20233,20237],"th",{},[20234,20235,20236],"strong",{},"ASCII","值",[20231,20239,20240],{},[20234,20241,20242],{},"控制字符",[20231,20244,20245,20237],{},[20234,20246,20236],{},[20231,20248,20249],{},[20234,20250,20251],{},"字符",[20231,20253,20254,20237],{},[20234,20255,20236],{},[20231,20257,20258],{},[20234,20259,20251],{},[20231,20261,20262,20237],{},[20234,20263,20236],{},[20231,20265,20266],{},[20234,20267,20251],{},[20269,20270,20271,20294,20319,20343,20368,20393,20416,20440,20464,20488,20514,20538,20561,20585,20609,20634,20659,20680,20705,20729,20754,20777,20802,20827,20852,20875,20900,20925,20948,20971,20994,21018],"tbody",{},[20228,20272,20273,20276,20279,20281,20284,20286,20289,20291],{},[20274,20275,1109],"td",{},[20274,20277,20278],{},"NUT",[20274,20280,11868],{},[20274,20282,20283],{},"(space)",[20274,20285,1076],{},[20274,20287,20288],{},"@",[20274,20290,4407],{},[20274,20292,20293],{},"、",[20228,20295,20296,20298,20301,20304,20307,20310,20313,20316],{},[20274,20297,329],{},[20274,20299,20300],{},"SOH",[20274,20302,20303],{},"33",[20274,20305,20306],{},"!",[20274,20308,20309],{},"65",[20274,20311,20312],{},"A",[20274,20314,20315],{},"97",[20274,20317,20318],{},"a",[20228,20320,20321,20323,20326,20329,20331,20334,20337,20340],{},[20274,20322,360],{},[20274,20324,20325],{},"STX",[20274,20327,20328],{},"34",[20274,20330,2033],{},[20274,20332,20333],{},"66",[20274,20335,20336],{},"B",[20274,20338,20339],{},"98",[20274,20341,20342],{},"b",[20228,20344,20345,20347,20350,20353,20356,20359,20362,20365],{},[20274,20346,4444],{},[20274,20348,20349],{},"ETX",[20274,20351,20352],{},"35",[20274,20354,20355],{},"#",[20274,20357,20358],{},"67",[20274,20360,20361],{},"C",[20274,20363,20364],{},"99",[20274,20366,20367],{},"c",[20228,20369,20370,20372,20375,20378,20381,20384,20387,20390],{},[20274,20371,1264],{},[20274,20373,20374],{},"EOT",[20274,20376,20377],{},"36",[20274,20379,20380],{},"$",[20274,20382,20383],{},"68",[20274,20385,20386],{},"D",[20274,20388,20389],{},"100",[20274,20391,20392],{},"d",[20228,20394,20395,20397,20400,20403,20405,20408,20411,20414],{},[20274,20396,350],{},[20274,20398,20399],{},"ENQ",[20274,20401,20402],{},"37",[20274,20404,2938],{},[20274,20406,20407],{},"69",[20274,20409,20410],{},"E",[20274,20412,20413],{},"101",[20274,20415,20161],{},[20228,20417,20418,20420,20423,20426,20429,20432,20435,20438],{},[20274,20419,340],{},[20274,20421,20422],{},"ACK",[20274,20424,20425],{},"38",[20274,20427,20428],{},"&",[20274,20430,20431],{},"70",[20274,20433,20434],{},"F",[20274,20436,20437],{},"102",[20274,20439,17391],{},[20228,20441,20442,20444,20447,20450,20452,20455,20458,20461],{},[20274,20443,8408],{},[20274,20445,20446],{},"BEL",[20274,20448,20449],{},"39",[20274,20451,332],{},[20274,20453,20454],{},"71",[20274,20456,20457],{},"G",[20274,20459,20460],{},"103",[20274,20462,20463],{},"g",[20228,20465,20466,20468,20471,20474,20476,20479,20482,20485],{},[20274,20467,1636],{},[20274,20469,20470],{},"BS",[20274,20472,20473],{},"40",[20274,20475,230],{},[20274,20477,20478],{},"72",[20274,20480,20481],{},"H",[20274,20483,20484],{},"104",[20274,20486,20487],{},"h",[20228,20489,20490,20493,20496,20499,20502,20505,20508,20511],{},[20274,20491,20492],{},"9",[20274,20494,20495],{},"HT",[20274,20497,20498],{},"41",[20274,20500,20501],{},")",[20274,20503,20504],{},"73",[20274,20506,20507],{},"I",[20274,20509,20510],{},"105",[20274,20512,20513],{},"i",[20228,20515,20516,20518,20521,20524,20526,20529,20532,20535],{},[20274,20517,565],{},[20274,20519,20520],{},"LF",[20274,20522,20523],{},"42",[20274,20525,1563],{},[20274,20527,20528],{},"74",[20274,20530,20531],{},"J",[20274,20533,20534],{},"106",[20274,20536,20537],{},"j",[20228,20539,20540,20542,20545,20548,20550,20553,20556,20559],{},[20274,20541,4416],{},[20274,20543,20544],{},"VT",[20274,20546,20547],{},"43",[20274,20549,1274],{},[20274,20551,20552],{},"75",[20274,20554,20555],{},"K",[20274,20557,20558],{},"107",[20274,20560,15234],{},[20228,20562,20563,20565,20568,20571,20573,20576,20579,20582],{},[20274,20564,1231],{},[20274,20566,20567],{},"FF",[20274,20569,20570],{},"44",[20274,20572,332],{},[20274,20574,20575],{},"76",[20274,20577,20578],{},"L",[20274,20580,20581],{},"108",[20274,20583,20584],{},"l",[20228,20586,20587,20590,20593,20596,20598,20601,20604,20607],{},[20274,20588,20589],{},"13",[20274,20591,20592],{},"CR",[20274,20594,20595],{},"45",[20274,20597,2039],{},[20274,20599,20600],{},"77",[20274,20602,20603],{},"M",[20274,20605,20606],{},"109",[20274,20608,2914],{},[20228,20610,20611,20614,20617,20620,20622,20625,20628,20631],{},[20274,20612,20613],{},"14",[20274,20615,20616],{},"SO",[20274,20618,20619],{},"46",[20274,20621,236],{},[20274,20623,20624],{},"78",[20274,20626,20627],{},"N",[20274,20629,20630],{},"110",[20274,20632,20633],{},"n",[20228,20635,20636,20639,20642,20645,20647,20650,20653,20656],{},[20274,20637,20638],{},"15",[20274,20640,20641],{},"SI",[20274,20643,20644],{},"47",[20274,20646,2028],{},[20274,20648,20649],{},"79",[20274,20651,20652],{},"O",[20274,20654,20655],{},"111",[20274,20657,20658],{},"o",[20228,20660,20661,20663,20666,20668,20670,20673,20676,20678],{},[20274,20662,439],{},[20274,20664,20665],{},"DLE",[20274,20667,11979],{},[20274,20669,1109],{},[20274,20671,20672],{},"80",[20274,20674,20675],{},"P",[20274,20677,12001],{},[20274,20679,24],{},[20228,20681,20682,20685,20688,20691,20693,20696,20699,20702],{},[20274,20683,20684],{},"17",[20274,20686,20687],{},"DCI",[20274,20689,20690],{},"49",[20274,20692,329],{},[20274,20694,20695],{},"81",[20274,20697,20698],{},"Q",[20274,20700,20701],{},"113",[20274,20703,20704],{},"q",[20228,20706,20707,20710,20713,20716,20718,20721,20724,20727],{},[20274,20708,20709],{},"18",[20274,20711,20712],{},"DC2",[20274,20714,20715],{},"50",[20274,20717,360],{},[20274,20719,20720],{},"82",[20274,20722,20723],{},"R",[20274,20725,20726],{},"114",[20274,20728,17599],{},[20228,20730,20731,20734,20737,20740,20742,20745,20748,20751],{},[20274,20732,20733],{},"19",[20274,20735,20736],{},"DC3",[20274,20738,20739],{},"51",[20274,20741,4444],{},[20274,20743,20744],{},"83",[20274,20746,20747],{},"S",[20274,20749,20750],{},"115",[20274,20752,20753],{},"s",[20228,20755,20756,20758,20761,20764,20766,20768,20771,20774],{},[20274,20757,3458],{},[20274,20759,20760],{},"DC4",[20274,20762,20763],{},"52",[20274,20765,1264],{},[20274,20767,544],{},[20274,20769,20770],{},"T",[20274,20772,20773],{},"116",[20274,20775,20776],{},"t",[20228,20778,20779,20782,20785,20788,20790,20793,20796,20799],{},[20274,20780,20781],{},"21",[20274,20783,20784],{},"NAK",[20274,20786,20787],{},"53",[20274,20789,350],{},[20274,20791,20792],{},"85",[20274,20794,20795],{},"U",[20274,20797,20798],{},"117",[20274,20800,20801],{},"u",[20228,20803,20804,20807,20810,20813,20815,20818,20821,20824],{},[20274,20805,20806],{},"22",[20274,20808,20809],{},"SYN",[20274,20811,20812],{},"54",[20274,20814,340],{},[20274,20816,20817],{},"86",[20274,20819,20820],{},"V",[20274,20822,20823],{},"118",[20274,20825,20826],{},"v",[20228,20828,20829,20832,20835,20838,20840,20843,20846,20849],{},[20274,20830,20831],{},"23",[20274,20833,20834],{},"TB",[20274,20836,20837],{},"55",[20274,20839,8408],{},[20274,20841,20842],{},"87",[20274,20844,20845],{},"W",[20274,20847,20848],{},"119",[20274,20850,20851],{},"w",[20228,20853,20854,20856,20859,20862,20864,20867,20870,20872],{},[20274,20855,12010],{},[20274,20857,20858],{},"CAN",[20274,20860,20861],{},"56",[20274,20863,1636],{},[20274,20865,20866],{},"88",[20274,20868,20869],{},"X",[20274,20871,523],{},[20274,20873,20874],{},"x",[20228,20876,20877,20880,20883,20886,20888,20891,20894,20897],{},[20274,20878,20879],{},"25",[20274,20881,20882],{},"EM",[20274,20884,20885],{},"57",[20274,20887,20492],{},[20274,20889,20890],{},"89",[20274,20892,20893],{},"Y",[20274,20895,20896],{},"121",[20274,20898,20899],{},"y",[20228,20901,20902,20905,20908,20911,20913,20916,20919,20922],{},[20274,20903,20904],{},"26",[20274,20906,20907],{},"SUB",[20274,20909,20910],{},"58",[20274,20912,3017],{},[20274,20914,20915],{},"90",[20274,20917,20918],{},"Z",[20274,20920,20921],{},"122",[20274,20923,20924],{},"z",[20228,20926,20927,20930,20933,20936,20938,20941,20943,20946],{},[20274,20928,20929],{},"27",[20274,20931,20932],{},"ESC",[20274,20934,20935],{},"59",[20274,20937,20144],{},[20274,20939,20940],{},"91",[20274,20942,4091],{},[20274,20944,20945],{},"123",[20274,20947,2705],{},[20228,20949,20950,20952,20955,20957,20960,20963,20965,20968],{},[20274,20951,832],{},[20274,20953,20954],{},"FS",[20274,20956,2932],{},[20274,20958,20959],{},"\u003C",[20274,20961,20962],{},"92",[20274,20964,2028],{},[20274,20966,20967],{},"124",[20274,20969,20970],{},"|",[20228,20972,20973,20976,20979,20982,20984,20987,20989,20992],{},[20274,20974,20975],{},"29",[20274,20977,20978],{},"GS",[20274,20980,20981],{},"61",[20274,20983,317],{},[20274,20985,20986],{},"93",[20274,20988,2813],{},[20274,20990,20991],{},"125",[20274,20993,2711],{},[20228,20995,20996,20998,21001,21004,21006,21009,21012,21015],{},[20274,20997,14194],{},[20274,20999,21000],{},"RS",[20274,21002,21003],{},"62",[20274,21005,1148],{},[20274,21007,21008],{},"94",[20274,21010,21011],{},"^",[20274,21013,21014],{},"126",[20274,21016,21017],{},"`",[20228,21019,21020,21023,21026,21029,21032,21035,21038,21041],{},[20274,21021,21022],{},"31",[20274,21024,21025],{},"US",[20274,21027,21028],{},"63",[20274,21030,21031],{},"?",[20274,21033,21034],{},"95",[20274,21036,21037],{},"_",[20274,21039,21040],{},"127",[20274,21042,21043],{},"DEL",[24,21045,21046,21047,21050],{},"ASCII 码大致由以下",[20234,21048,21049],{},"两部分组","成：",[21052,21053,21054,21061],"ul",{},[31,21055,21056,21057,21060],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[20234,21058,21059],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[31,21062,21063,21064,21067],{},"ASCII 打印字符：数字 ",[20234,21065,21066],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[14,21069,21071],{"id":21070},"_134转义字符","1.3.4转义字符",[146,21073,21075],{"className":20084,"code":21074,"language":20086,"meta":39,"style":39},"\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",[152,21076,21077,21082,21098,21112,21117,21130,21135],{"__ignoreMap":39},[155,21078,21079],{"class":157,"line":158},[155,21080,21081],{"class":161},"\u002F\u002F换行符\n",[155,21083,21084,21087,21090,21093,21095],{"class":157,"line":46},[155,21085,21086],{"class":171},"cout ",[155,21088,21089],{"class":167},"\u003C\u003C",[155,21091,21092],{"class":732},"\"hello world\u002Fn\"",[155,21094,20144],{"class":171},[155,21096,21097],{"class":161}," \u002F\u002F就等同于如下：\n",[155,21099,21100,21102,21104,21107,21109],{"class":157,"line":121},[155,21101,21086],{"class":171},[155,21103,21089],{"class":167},[155,21105,21106],{"class":732},"\"hello world\"",[155,21108,21089],{"class":167},[155,21110,21111],{"class":171},"endl;\n",[155,21113,21114],{"class":157,"line":180},[155,21115,21116],{"class":161},"\u002F\u002F反斜杠\n",[155,21118,21119,21121,21123,21126,21128],{"class":157,"line":194},[155,21120,21086],{"class":171},[155,21122,21089],{"class":167},[155,21124,21125],{"class":732},"\"\u002F\u002F\"",[155,21127,21089],{"class":167},[155,21129,21111],{"class":171},[155,21131,21132],{"class":157,"line":200},[155,21133,21134],{"class":161},"\u002F\u002F水平制表符\n",[155,21136,21137,21139,21141,21144,21147,21150,21152,21155],{"class":157,"line":213},[155,21138,21086],{"class":171},[155,21140,21089],{"class":167},[155,21142,21143],{"class":732},"\"aaaa",[155,21145,21146],{"class":263},"\\t",[155,21148,21149],{"class":732},"helloworld\"",[155,21151,21089],{"class":167},[155,21153,21154],{"class":171},"endl;",[155,21156,21157],{"class":161}," \u002F\u002F输出窗口时有对齐效果\n",[14,21159,21161],{"id":21160},"_135字符串型","1.3.5字符串型",[24,21163,21164,21165,21167],{},"char 变量名",[155,21166],{},"=\"字符串值\"",[146,21169,21171],{"className":20084,"code":21170,"language":20086,"meta":39,"style":39},"\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",[152,21172,21173,21178,21183,21188,21193,21207,21220,21225,21230,21241],{"__ignoreMap":39},[155,21174,21175],{"class":157,"line":158},[155,21176,21177],{"class":161},"\u002F\u002Fc风格字符串\n",[155,21179,21180],{"class":157,"line":46},[155,21181,21182],{"class":161},"\u002F\u002F注意事项：\n",[155,21184,21185],{"class":157,"line":121},[155,21186,21187],{"class":161},"\u002F\u002F1.char字符串名[]\n",[155,21189,21190],{"class":157,"line":180},[155,21191,21192],{"class":161},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[155,21194,21195,21197,21200,21202,21204],{"class":157,"line":194},[155,21196,20182],{"class":167},[155,21198,21199],{"class":171}," str[]",[155,21201,317],{"class":167},[155,21203,21106],{"class":732},[155,21205,21206],{"class":171},";\n",[155,21208,21209,21211,21213,21216,21218],{"class":157,"line":200},[155,21210,21086],{"class":171},[155,21212,21089],{"class":167},[155,21214,21215],{"class":171},"str",[155,21217,21089],{"class":167},[155,21219,21111],{"class":171},[155,21221,21222],{"class":157,"line":213},[155,21223,21224],{"class":161},"\u002F\u002Fc++风格字符串\n",[155,21226,21227],{"class":157,"line":220},[155,21228,21229],{"class":161},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[155,21231,21232,21235,21237,21239],{"class":157,"line":245},[155,21233,21234],{"class":171},"string str2",[155,21236,317],{"class":167},[155,21238,21106],{"class":732},[155,21240,21206],{"class":171},[155,21242,21243,21245,21247,21250,21252],{"class":157,"line":251},[155,21244,21086],{"class":171},[155,21246,21089],{"class":167},[155,21248,21249],{"class":171},"str2",[155,21251,21089],{"class":167},[155,21253,21111],{"class":171},[14,21255,21257],{"id":21256},"_136布尔类型bool","1.3.6布尔类型bool",[146,21259,21261],{"className":20084,"code":21260,"language":20086,"meta":39,"style":39},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[152,21262,21263,21278],{"__ignoreMap":39},[155,21264,21265,21268,21271,21273,21276],{"class":157,"line":158},[155,21266,21267],{"class":167},"bool",[155,21269,21270],{"class":171}," flag",[155,21272,317],{"class":167},[155,21274,21275],{"class":263},"true",[155,21277,21206],{"class":171},[155,21279,21280,21283,21286,21289,21291,21293],{"class":157,"line":46},[155,21281,21282],{"class":171},"cout",[155,21284,21285],{"class":167},"\u003C\u003Csizeof",[155,21287,21288],{"class":171},"(flag)",[155,21290,21089],{"class":167},[155,21292,21154],{"class":171},[155,21294,21295],{"class":161}," \u002F\u002F查看布尔占内存空间\n",[20037,21297,21299],{"id":21298},"_14键盘输入cin","1.4键盘输入cin",[146,21301,21303],{"className":20084,"code":21302,"language":20086,"meta":39,"style":39},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[152,21304,21305,21318,21335,21346],{"__ignoreMap":39},[155,21306,21307,21309,21312,21314,21316],{"class":157,"line":158},[155,21308,15239],{"class":167},[155,21310,21311],{"class":171}," a",[155,21313,317],{"class":167},[155,21315,1109],{"class":263},[155,21317,21206],{"class":171},[155,21319,21320,21322,21324,21327,21329,21331,21333],{"class":157,"line":46},[155,21321,21282],{"class":171},[155,21323,21089],{"class":167},[155,21325,21326],{"class":732},"\"请给整型变量a赋值\"",[155,21328,21089],{"class":167},[155,21330,20318],{"class":171},[155,21332,21089],{"class":167},[155,21334,21111],{"class":171},[155,21336,21337,21340,21343],{"class":157,"line":121},[155,21338,21339],{"class":171},"cin ",[155,21341,21342],{"class":167},">>",[155,21344,21345],{"class":171}," a;\n",[155,21347,21348,21350,21352,21355,21358,21360,21362],{"class":157,"line":180},[155,21349,21086],{"class":171},[155,21351,21089],{"class":167},[155,21353,21354],{"class":732}," \"整型变量a=\"",[155,21356,21357],{"class":167}," \u003C\u003C",[155,21359,20318],{"class":171},[155,21361,21089],{"class":167},[155,21363,21111],{"class":171},[20037,21365,21367],{"id":21366},"_15运算符","1.5运算符",[14,21369,21371],{"id":21370},"_151算术运算符","1.5.1算术运算符",[24,21373,21374,21377],{},[37,21375],{"alt":39,"src":21376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[28,21379,21380,21383,21386],{},[31,21381,21382],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[31,21384,21385],{},"两个小数不可以做取模运算",[31,21387,21388],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[14,21390,21392],{"id":21391},"_152赋值运算符","1.5.2赋值运算符",[24,21394,21395],{},[37,21396],{"alt":39,"src":21397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[14,21399,21401],{"id":21400},"_153比较运算符","1.5.3比较运算符",[24,21403,21404],{},[37,21405],{"alt":39,"src":21406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[14,21408,21410],{"id":21409},"_154逻辑运算符","1.5.4逻辑运算符",[24,21412,21413],{},[37,21414],{"alt":39,"src":21415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[20037,21417,21419],{"id":21418},"_16程序流程结构","1.6程序流程结构",[14,21421,21423],{"id":21422},"_161选择结构","1.6.1选择结构",[28,21425,21426],{},[31,21427,21428],{},"if语句\n单行、多行、多条件if语句",[146,21430,21432],{"className":20084,"code":21431,"language":20086,"meta":39,"style":39},"\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",[152,21433,21434,21439,21453,21457,21471,21476,21481,21490,21503,21507,21520,21524,21529,21533,21546,21550,21555,21575,21579,21592,21596,21622,21626,21642,21646,21650,21654,21667,21671],{"__ignoreMap":39},[155,21435,21436],{"class":157,"line":158},[155,21437,21438],{"class":161},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[155,21440,21441,21443,21446,21448,21451],{"class":157,"line":46},[155,21442,723],{"class":167},[155,21444,21445],{"class":171},"(score",[155,21447,1148],{"class":167},[155,21449,21450],{"class":263},"600",[155,21452,363],{"class":171},[155,21454,21455],{"class":157,"line":121},[155,21456,3008],{"class":171},[155,21458,21459,21462,21464,21467,21469],{"class":157,"line":180},[155,21460,21461],{"class":171},"    cout",[155,21463,21089],{"class":167},[155,21465,21466],{"class":732},"'这是单行if语句'",[155,21468,21089],{"class":167},[155,21470,21111],{"class":171},[155,21472,21473],{"class":157,"line":194},[155,21474,21475],{"class":171},"}\n",[155,21477,21478],{"class":157,"line":200},[155,21479,21480],{"class":161},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[155,21482,21483,21485,21487],{"class":157,"line":213},[155,21484,21339],{"class":171},[155,21486,21342],{"class":167},[155,21488,21489],{"class":171}," score\n",[155,21491,21492,21494,21496,21499,21501],{"class":157,"line":220},[155,21493,723],{"class":167},[155,21495,21445],{"class":171},[155,21497,21498],{"class":167},"\u003C=",[155,21500,21450],{"class":263},[155,21502,363],{"class":171},[155,21504,21505],{"class":157,"line":245},[155,21506,3008],{"class":171},[155,21508,21509,21511,21513,21516,21518],{"class":157,"line":251},[155,21510,21461],{"class":171},[155,21512,21342],{"class":167},[155,21514,21515],{"class":732},"\"小于等于600\"",[155,21517,21089],{"class":167},[155,21519,21111],{"class":171},[155,21521,21522],{"class":157,"line":257},[155,21523,21475],{"class":171},[155,21525,21526],{"class":157,"line":270},[155,21527,21528],{"class":167},"else\n",[155,21530,21531],{"class":157,"line":276},[155,21532,3008],{"class":171},[155,21534,21535,21537,21539,21542,21544],{"class":157,"line":297},[155,21536,21461],{"class":171},[155,21538,21342],{"class":167},[155,21540,21541],{"class":732},"\"大于600\"",[155,21543,21342],{"class":167},[155,21545,21111],{"class":171},[155,21547,21548],{"class":157,"line":302},[155,21549,21475],{"class":171},[155,21551,21552],{"class":157,"line":308},[155,21553,21554],{"class":161},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[155,21556,21557,21559,21562,21564,21566,21569,21571,21573],{"class":157,"line":366},[155,21558,723],{"class":167},[155,21560,21561],{"class":171}," (",[155,21563,1109],{"class":263},[155,21565,20959],{"class":167},[155,21567,21568],{"class":171},"num",[155,21570,20959],{"class":167},[155,21572,20389],{"class":263},[155,21574,363],{"class":171},[155,21576,21577],{"class":157,"line":379},[155,21578,3008],{"class":171},[155,21580,21581,21583,21585,21588,21590],{"class":157,"line":385},[155,21582,21461],{"class":171},[155,21584,21089],{"class":167},[155,21586,21587],{"class":732},"\"小于100\"",[155,21589,21089],{"class":167},[155,21591,21111],{"class":171},[155,21593,21594],{"class":157,"line":415},[155,21595,21475],{"class":171},[155,21597,21598,21600,21602,21605,21608,21610,21613,21615,21617,21620],{"class":157,"line":452},[155,21599,765],{"class":167},[155,21601,759],{"class":167},[155,21603,21604],{"class":171}," (nmu",[155,21606,21607],{"class":167},">=",[155,21609,20389],{"class":263},[155,21611,21612],{"class":167},"&&",[155,21614,21568],{"class":171},[155,21616,20959],{"class":167},[155,21618,21619],{"class":263},"200",[155,21621,363],{"class":171},[155,21623,21624],{"class":157,"line":480},[155,21625,3008],{"class":171},[155,21627,21628,21630,21632,21635,21637,21639],{"class":157,"line":486},[155,21629,21461],{"class":171},[155,21631,21089],{"class":167},[155,21633,21634],{"class":732},"\"不小于100且小于200\"",[155,21636,21089],{"class":167},[155,21638,21154],{"class":171},[155,21640,21641],{"class":161}," \u002F\u002F可以无限else if,python中是elif：\n",[155,21643,21644],{"class":157,"line":499},[155,21645,21475],{"class":171},[155,21647,21648],{"class":157,"line":505},[155,21649,21528],{"class":167},[155,21651,21652],{"class":157,"line":528},[155,21653,3008],{"class":171},[155,21655,21656,21658,21660,21663,21665],{"class":157,"line":549},[155,21657,21461],{"class":171},[155,21659,21089],{"class":167},[155,21661,21662],{"class":732},"\"不小于200\"",[155,21664,21089],{"class":167},[155,21666,21111],{"class":171},[155,21668,21669],{"class":157,"line":570},[155,21670,21475],{"class":171},[155,21672,21673],{"class":157,"line":575},[155,21674,21675],{"class":161},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[28,21677,21678],{"start":46},[31,21679,21680],{},"三目运算符",[146,21682,21684],{"className":20084,"code":21683,"language":20086,"meta":39,"style":39},"\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",[152,21685,21686,21691,21696,21722,21744,21761,21766,21789,21804],{"__ignoreMap":39},[155,21687,21688],{"class":157,"line":158},[155,21689,21690],{"class":161},"\u002F\u002F创建三个变量a,b,c\n",[155,21692,21693],{"class":157,"line":46},[155,21694,21695],{"class":161},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[155,21697,21698,21700,21702,21704,21706,21709,21711,21713,21716,21718,21720],{"class":157,"line":121},[155,21699,15239],{"class":167},[155,21701,21311],{"class":171},[155,21703,317],{"class":167},[155,21705,3458],{"class":263},[155,21707,21708],{"class":171},",b",[155,21710,317],{"class":167},[155,21712,565],{"class":263},[155,21714,21715],{"class":171},",c",[155,21717,317],{"class":167},[155,21719,1109],{"class":263},[155,21721,21206],{"class":171},[155,21723,21724,21726,21728,21731,21733,21735,21737,21739,21741],{"class":157,"line":180},[155,21725,20367],{"class":171},[155,21727,317],{"class":167},[155,21729,21730],{"class":171},"(a",[155,21732,1148],{"class":167},[155,21734,20342],{"class":171},[155,21736,21031],{"class":167},[155,21738,20318],{"class":171},[155,21740,3017],{"class":167},[155,21742,21743],{"class":171},"b)\n",[155,21745,21746,21748,21750,21753,21755,21757,21759],{"class":157,"line":194},[155,21747,21282],{"class":171},[155,21749,21089],{"class":167},[155,21751,21752],{"class":732},"\"c=\"",[155,21754,21089],{"class":167},[155,21756,20367],{"class":171},[155,21758,21089],{"class":167},[155,21760,21111],{"class":171},[155,21762,21763],{"class":157,"line":200},[155,21764,21765],{"class":161},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[155,21767,21768,21770,21772,21774,21776,21778,21780,21783,21785,21787],{"class":157,"line":213},[155,21769,21730],{"class":171},[155,21771,1148],{"class":167},[155,21773,20342],{"class":171},[155,21775,21031],{"class":167},[155,21777,20318],{"class":171},[155,21779,3017],{"class":167},[155,21781,21782],{"class":171},"b)",[155,21784,317],{"class":167},[155,21786,20389],{"class":263},[155,21788,21206],{"class":171},[155,21790,21791,21793,21795,21797,21799,21801],{"class":157,"line":220},[155,21792,21282],{"class":171},[155,21794,21089],{"class":167},[155,21796,20318],{"class":171},[155,21798,21089],{"class":167},[155,21800,21154],{"class":171},[155,21802,21803],{"class":161}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[155,21805,21806,21808,21810,21812,21814,21816],{"class":157,"line":245},[155,21807,21282],{"class":171},[155,21809,21089],{"class":167},[155,21811,20342],{"class":171},[155,21813,21089],{"class":167},[155,21815,21154],{"class":171},[155,21817,21818],{"class":161}," \u002F\u002F10   a>b,b还是原值\n",[28,21820,21821],{"start":121},[31,21822,21823],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[146,21825,21827],{"className":20084,"code":21826,"language":20086,"meta":39,"style":39},"\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",[152,21828,21829,21834,21842,21855,21864,21868,21882,21895,21905,21913,21918,21943,21964,21986,22007,22029,22050,22070,22075],{"__ignoreMap":39},[155,21830,21831],{"class":157,"line":158},[155,21832,21833],{"class":161},"\u002F\u002F案例-电影打分\n",[155,21835,21836,21839],{"class":157,"line":46},[155,21837,21838],{"class":167},"#include",[155,21840,21841],{"class":732},"\u003Ciostream>\n",[155,21843,21844,21847,21850,21853],{"class":157,"line":121},[155,21845,21846],{"class":167},"using",[155,21848,21849],{"class":167}," namespace",[155,21851,21852],{"class":226}," std",[155,21854,21206],{"class":171},[155,21856,21857,21859,21862],{"class":157,"line":180},[155,21858,15239],{"class":167},[155,21860,21861],{"class":226}," main",[155,21863,294],{"class":171},[155,21865,21866],{"class":157,"line":194},[155,21867,3008],{"class":171},[155,21869,21870,21873,21876,21878,21880],{"class":157,"line":200},[155,21871,21872],{"class":167},"    int",[155,21874,21875],{"class":171}," score",[155,21877,317],{"class":167},[155,21879,1109],{"class":263},[155,21881,21206],{"class":171},[155,21883,21884,21886,21888,21891,21893],{"class":157,"line":213},[155,21885,21461],{"class":171},[155,21887,21089],{"class":167},[155,21889,21890],{"class":732},"\"电影打分：\"",[155,21892,21089],{"class":167},[155,21894,21111],{"class":171},[155,21896,21897,21900,21902],{"class":157,"line":220},[155,21898,21899],{"class":171},"    cin",[155,21901,21342],{"class":167},[155,21903,21904],{"class":171},"score;\n",[155,21906,21907,21910],{"class":157,"line":245},[155,21908,21909],{"class":167},"    switch",[155,21911,21912],{"class":171},"(score)\n",[155,21914,21915],{"class":157,"line":251},[155,21916,21917],{"class":171},"    {\n",[155,21919,21920,21923,21926,21929,21931,21934,21936,21938,21941],{"class":157,"line":257},[155,21921,21922],{"class":167},"        case",[155,21924,21925],{"class":263}," 10",[155,21927,21928],{"class":171},":cout",[155,21930,21089],{"class":167},[155,21932,21933],{"class":732},"\"经典\"",[155,21935,21089],{"class":167},[155,21937,21154],{"class":171},[155,21939,21940],{"class":167},"break",[155,21942,21206],{"class":171},[155,21944,21945,21947,21950,21952,21954,21956,21958,21960,21962],{"class":157,"line":270},[155,21946,21922],{"class":167},[155,21948,21949],{"class":263}," 9",[155,21951,21928],{"class":171},[155,21953,21089],{"class":167},[155,21955,21933],{"class":732},[155,21957,21089],{"class":167},[155,21959,21154],{"class":171},[155,21961,21940],{"class":167},[155,21963,21206],{"class":171},[155,21965,21966,21968,21971,21973,21975,21978,21980,21982,21984],{"class":157,"line":276},[155,21967,21922],{"class":167},[155,21969,21970],{"class":263}," 8",[155,21972,21928],{"class":171},[155,21974,21089],{"class":167},[155,21976,21977],{"class":732},"\"非常好\"",[155,21979,21089],{"class":167},[155,21981,21154],{"class":171},[155,21983,21940],{"class":167},[155,21985,21206],{"class":171},[155,21987,21988,21990,21993,21995,21997,21999,22001,22003,22005],{"class":157,"line":297},[155,21989,21922],{"class":167},[155,21991,21992],{"class":263}," 7",[155,21994,21928],{"class":171},[155,21996,21089],{"class":167},[155,21998,21977],{"class":732},[155,22000,21089],{"class":167},[155,22002,21154],{"class":171},[155,22004,21940],{"class":167},[155,22006,21206],{"class":171},[155,22008,22009,22011,22014,22016,22018,22021,22023,22025,22027],{"class":157,"line":302},[155,22010,21922],{"class":167},[155,22012,22013],{"class":263}," 6",[155,22015,21928],{"class":171},[155,22017,21089],{"class":167},[155,22019,22020],{"class":732},"\"一般\"",[155,22022,21089],{"class":167},[155,22024,21154],{"class":171},[155,22026,21940],{"class":167},[155,22028,21206],{"class":171},[155,22030,22031,22033,22036,22038,22040,22042,22044,22046,22048],{"class":157,"line":308},[155,22032,21922],{"class":167},[155,22034,22035],{"class":263}," 5",[155,22037,21928],{"class":171},[155,22039,21089],{"class":167},[155,22041,22020],{"class":732},[155,22043,21089],{"class":167},[155,22045,21154],{"class":171},[155,22047,21940],{"class":167},[155,22049,21206],{"class":171},[155,22051,22052,22055,22057,22059,22062,22064,22066,22068],{"class":157,"line":366},[155,22053,22054],{"class":167},"        default",[155,22056,21928],{"class":171},[155,22058,21089],{"class":167},[155,22060,22061],{"class":732},"\"烂片\"",[155,22063,21089],{"class":167},[155,22065,21154],{"class":171},[155,22067,21940],{"class":167},[155,22069,21206],{"class":171},[155,22071,22072],{"class":157,"line":379},[155,22073,22074],{"class":171},"    }\n",[155,22076,22077],{"class":157,"line":385},[155,22078,21475],{"class":171},[24,22080,22081],{},"if和switch区别：",[21052,22083,22084,22087],{},[31,22085,22086],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[31,22088,22089],{},"switch优点：结构清晰，执行效率高",[14,22091,22093],{"id":22092},"_162循环结构","1.6.2循环结构",[28,22095,22096],{},[31,22097,22098],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[146,22100,22102],{"className":20084,"code":22101,"language":20086,"meta":39,"style":39},"\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",[152,22103,22104,22109,22117,22121,22134,22148,22152,22172,22182,22186,22198],{"__ignoreMap":39},[155,22105,22106],{"class":157,"line":158},[155,22107,22108],{"class":161},"\u002F\u002F打印0-9数字\n",[155,22110,22111,22113,22115],{"class":157,"line":46},[155,22112,15239],{"class":167},[155,22114,21861],{"class":226},[155,22116,294],{"class":171},[155,22118,22119],{"class":157,"line":121},[155,22120,3008],{"class":171},[155,22122,22123,22125,22128,22130,22132],{"class":157,"line":180},[155,22124,21872],{"class":167},[155,22126,22127],{"class":171}," num",[155,22129,317],{"class":167},[155,22131,1109],{"class":263},[155,22133,21206],{"class":171},[155,22135,22136,22139,22142,22144,22146],{"class":157,"line":194},[155,22137,22138],{"class":167},"    while",[155,22140,22141],{"class":171},"(num",[155,22143,20959],{"class":167},[155,22145,565],{"class":263},[155,22147,363],{"class":171},[155,22149,22150],{"class":157,"line":200},[155,22151,21917],{"class":171},[155,22153,22154,22157,22160,22162,22164,22166,22169],{"class":157,"line":213},[155,22155,22156],{"class":226},"       std",[155,22158,22159],{"class":171},"::cout",[155,22161,21089],{"class":167},[155,22163,21568],{"class":171},[155,22165,21089],{"class":167},[155,22167,22168],{"class":226},"std",[155,22170,22171],{"class":171},"::endl;\n",[155,22173,22174,22177,22180],{"class":157,"line":220},[155,22175,22176],{"class":171},"        num",[155,22178,22179],{"class":167},"++",[155,22181,21206],{"class":171},[155,22183,22184],{"class":157,"line":245},[155,22185,22074],{"class":171},[155,22187,22188,22191,22193,22196],{"class":157,"line":251},[155,22189,22190],{"class":226},"    system",[155,22192,230],{"class":171},[155,22194,22195],{"class":732},"\"pause\"",[155,22197,363],{"class":171},[155,22199,22200],{"class":157,"line":257},[155,22201,21475],{"class":171},[24,22203,22204],{},"注意：写好循环条件，避免死循环情况",[146,22206,22208],{"className":20084,"code":22207,"language":20086,"meta":39,"style":39},"\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",[152,22209,22210,22215,22222,22229,22239,22247,22251,22256,22283,22287,22292,22300,22327,22332,22337,22350,22360,22364,22374,22379,22391,22396,22410,22415,22429,22433,22446,22450,22455,22459,22472,22479,22483,22488,22493,22497],{"__ignoreMap":39},[155,22211,22212],{"class":157,"line":158},[155,22213,22214],{"class":161},"\u002F\u002F循环结构-猜数字\n",[155,22216,22217,22219],{"class":157,"line":46},[155,22218,21838],{"class":167},[155,22220,22221],{"class":732}," \u003Ciostream>\n",[155,22223,22224,22226],{"class":157,"line":121},[155,22225,21838],{"class":167},[155,22227,22228],{"class":732}," \u003Cctime>\n",[155,22230,22231,22233,22235,22237],{"class":157,"line":180},[155,22232,21846],{"class":167},[155,22234,21849],{"class":167},[155,22236,21852],{"class":226},[155,22238,21206],{"class":171},[155,22240,22241,22243,22245],{"class":157,"line":194},[155,22242,15239],{"class":167},[155,22244,21861],{"class":226},[155,22246,294],{"class":171},[155,22248,22249],{"class":157,"line":200},[155,22250,3008],{"class":171},[155,22252,22253],{"class":157,"line":213},[155,22254,22255],{"class":161},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[155,22257,22258,22261,22264,22267,22270,22272,22275,22277,22280],{"class":157,"line":220},[155,22259,22260],{"class":226},"    srand",[155,22262,22263],{"class":171},"((",[155,22265,22266],{"class":167},"unsigned",[155,22268,22269],{"class":167}," int",[155,22271,20501],{"class":171},[155,22273,22274],{"class":226},"time",[155,22276,230],{"class":171},[155,22278,22279],{"class":263},"NULL",[155,22281,22282],{"class":171},"));\n",[155,22284,22285],{"class":157,"line":245},[155,22286,217],{"emptyLinePlaceholder":216},[155,22288,22289],{"class":157,"line":251},[155,22290,22291],{"class":161},"    \u002F\u002F1.系统生成随机数\n",[155,22293,22294,22297],{"class":157,"line":257},[155,22295,22296],{"class":161},"    \u002F\u002Frand()%100",[155,22298,22299],{"class":161}," \u002F\u002F生成0-99的随机数\n",[155,22301,22302,22304,22306,22308,22311,22314,22316,22318,22320,22322,22324],{"class":157,"line":270},[155,22303,21872],{"class":167},[155,22305,22127],{"class":171},[155,22307,317],{"class":167},[155,22309,22310],{"class":226},"rand",[155,22312,22313],{"class":171},"()",[155,22315,2938],{"class":167},[155,22317,20389],{"class":263},[155,22319,1274],{"class":167},[155,22321,329],{"class":263},[155,22323,20144],{"class":171},[155,22325,22326],{"class":161}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[155,22328,22329],{"class":157,"line":276},[155,22330,22331],{"class":161},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[155,22333,22334],{"class":157,"line":297},[155,22335,22336],{"class":161},"    \u002F\u002F2.玩家猜测\n",[155,22338,22339,22341,22344,22346,22348],{"class":157,"line":302},[155,22340,21872],{"class":167},[155,22342,22343],{"class":171}," val",[155,22345,317],{"class":167},[155,22347,1109],{"class":263},[155,22349,21206],{"class":171},[155,22351,22352,22354,22356,22358],{"class":157,"line":308},[155,22353,22138],{"class":167},[155,22355,21561],{"class":171},[155,22357,329],{"class":263},[155,22359,363],{"class":171},[155,22361,22362],{"class":157,"line":366},[155,22363,21917],{"class":171},[155,22365,22366,22369,22371],{"class":157,"line":379},[155,22367,22368],{"class":171},"        cin",[155,22370,21342],{"class":167},[155,22372,22373],{"class":171},"val;\n",[155,22375,22376],{"class":157,"line":385},[155,22377,22378],{"class":161},"        \u002F\u002F3.判断玩家猜测\n",[155,22380,22381,22383,22386,22388],{"class":157,"line":415},[155,22382,2803],{"class":167},[155,22384,22385],{"class":171},"(val",[155,22387,20959],{"class":167},[155,22389,22390],{"class":171},"num) \n",[155,22392,22393],{"class":157,"line":452},[155,22394,22395],{"class":171},"        {\n",[155,22397,22398,22401,22403,22406,22408],{"class":157,"line":480},[155,22399,22400],{"class":171},"            cout",[155,22402,21089],{"class":167},[155,22404,22405],{"class":732},"\"猜小了！\"",[155,22407,21089],{"class":167},[155,22409,21111],{"class":171},[155,22411,22412],{"class":157,"line":486},[155,22413,22414],{"class":171},"        }\n",[155,22416,22417,22419,22421,22424,22426],{"class":157,"line":499},[155,22418,15343],{"class":167},[155,22420,759],{"class":167},[155,22422,22423],{"class":171}," (val",[155,22425,1148],{"class":167},[155,22427,22428],{"class":171},"num)\n",[155,22430,22431],{"class":157,"line":505},[155,22432,22395],{"class":171},[155,22434,22435,22437,22439,22442,22444],{"class":157,"line":528},[155,22436,22400],{"class":171},[155,22438,21089],{"class":167},[155,22440,22441],{"class":732},"\"猜大了！\"",[155,22443,21089],{"class":167},[155,22445,21111],{"class":171},[155,22447,22448],{"class":157,"line":549},[155,22449,22414],{"class":171},[155,22451,22452],{"class":157,"line":570},[155,22453,22454],{"class":167},"        else\n",[155,22456,22457],{"class":157,"line":575},[155,22458,22395],{"class":171},[155,22460,22461,22463,22465,22468,22470],{"class":157,"line":581},[155,22462,22400],{"class":171},[155,22464,21089],{"class":167},[155,22466,22467],{"class":732},"\"猜对了！\"",[155,22469,21089],{"class":167},[155,22471,21111],{"class":171},[155,22473,22474,22477],{"class":157,"line":592},[155,22475,22476],{"class":167},"            break",[155,22478,21206],{"class":171},[155,22480,22481],{"class":157,"line":610},[155,22482,22414],{"class":171},[155,22484,22485],{"class":157,"line":622},[155,22486,22487],{"class":161},"        \u002F\u002F猜对 退出游戏\n",[155,22489,22490],{"class":157,"line":638},[155,22491,22492],{"class":161},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[155,22494,22495],{"class":157,"line":650},[155,22496,22074],{"class":171},[155,22498,22499],{"class":157,"line":662},[155,22500,21475],{"class":171},[28,22502,22503],{"start":46},[31,22504,22505,22506,22509],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[20234,22507,22508],{},"do...while会先执行一次循环语句","，在判断循环语句",[146,22511,22513],{"className":20084,"code":22512,"language":20086,"meta":39,"style":39},"\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",[152,22514,22515,22520,22528,22532,22544,22552,22556,22573,22580,22584,22597,22607],{"__ignoreMap":39},[155,22516,22517],{"class":157,"line":158},[155,22518,22519],{"class":161},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[155,22521,22522,22524,22526],{"class":157,"line":46},[155,22523,15239],{"class":167},[155,22525,21861],{"class":226},[155,22527,294],{"class":171},[155,22529,22530],{"class":157,"line":121},[155,22531,3008],{"class":171},[155,22533,22534,22536,22538,22540,22542],{"class":157,"line":180},[155,22535,21872],{"class":167},[155,22537,22127],{"class":171},[155,22539,317],{"class":167},[155,22541,1109],{"class":263},[155,22543,21206],{"class":171},[155,22545,22546,22549],{"class":157,"line":194},[155,22547,22548],{"class":167},"    do",[155,22550,22551],{"class":171}," \n",[155,22553,22554],{"class":157,"line":200},[155,22555,21917],{"class":171},[155,22557,22558,22561,22563,22565,22567,22569,22571],{"class":157,"line":213},[155,22559,22560],{"class":226},"        std",[155,22562,22159],{"class":171},[155,22564,21089],{"class":167},[155,22566,21568],{"class":171},[155,22568,21089],{"class":167},[155,22570,22168],{"class":226},[155,22572,22171],{"class":171},[155,22574,22575,22577],{"class":157,"line":220},[155,22576,22176],{"class":171},[155,22578,22579],{"class":167},"++\n",[155,22581,22582],{"class":157,"line":245},[155,22583,22074],{"class":171},[155,22585,22586,22588,22590,22592,22594],{"class":157,"line":251},[155,22587,22138],{"class":167},[155,22589,22141],{"class":171},[155,22591,20959],{"class":167},[155,22593,565],{"class":263},[155,22595,22596],{"class":171},");\n",[155,22598,22599,22601,22603,22605],{"class":157,"line":257},[155,22600,22190],{"class":226},[155,22602,230],{"class":171},[155,22604,22195],{"class":732},[155,22606,22596],{"class":171},[155,22608,22609],{"class":157,"line":270},[155,22610,21475],{"class":171},[24,22612,22613],{},"案例-水仙花数",[24,22615,22616],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[24,22618,22619],{},"例如：1^3+5^3+3^3=153",[24,22621,22622],{},"请用do...while语句，求出所有3位数的水仙花数",[146,22624,22626],{"className":20084,"code":22625,"language":20086,"meta":39,"style":39},"#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",[152,22627,22628,22634,22644,22652,22656,22661,22673,22679,22683,22688,22704,22720,22736,22751,22770,22785,22832,22836,22848,22852,22860,22864,22878],{"__ignoreMap":39},[155,22629,22630,22632],{"class":157,"line":158},[155,22631,21838],{"class":167},[155,22633,22221],{"class":732},[155,22635,22636,22638,22640,22642],{"class":157,"line":46},[155,22637,21846],{"class":167},[155,22639,21849],{"class":167},[155,22641,21852],{"class":226},[155,22643,21206],{"class":171},[155,22645,22646,22648,22650],{"class":157,"line":121},[155,22647,15239],{"class":167},[155,22649,21861],{"class":226},[155,22651,294],{"class":171},[155,22653,22654],{"class":157,"line":180},[155,22655,3008],{"class":171},[155,22657,22658],{"class":157,"line":194},[155,22659,22660],{"class":161},"    \u002F\u002F1.先打印所有三位数字\n",[155,22662,22663,22665,22667,22669,22671],{"class":157,"line":200},[155,22664,21872],{"class":167},[155,22666,22127],{"class":171},[155,22668,317],{"class":167},[155,22670,20389],{"class":263},[155,22672,21206],{"class":171},[155,22674,22675,22677],{"class":157,"line":213},[155,22676,22548],{"class":167},[155,22678,22551],{"class":171},[155,22680,22681],{"class":157,"line":220},[155,22682,21917],{"class":171},[155,22684,22685],{"class":157,"line":245},[155,22686,22687],{"class":161},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[155,22689,22690,22693,22695,22697,22699,22701],{"class":157,"line":251},[155,22691,22692],{"class":167},"        int",[155,22694,21311],{"class":171},[155,22696,317],{"class":167},[155,22698,1109],{"class":263},[155,22700,20144],{"class":171},[155,22702,22703],{"class":161}," \u002F\u002F个位\n",[155,22705,22706,22708,22711,22713,22715,22717],{"class":157,"line":257},[155,22707,22692],{"class":167},[155,22709,22710],{"class":171}," b",[155,22712,317],{"class":167},[155,22714,1109],{"class":263},[155,22716,20144],{"class":171},[155,22718,22719],{"class":161}," \u002F\u002F十位\n",[155,22721,22722,22724,22727,22729,22731,22733],{"class":157,"line":270},[155,22723,22692],{"class":167},[155,22725,22726],{"class":171}," c",[155,22728,317],{"class":167},[155,22730,1109],{"class":263},[155,22732,20144],{"class":171},[155,22734,22735],{"class":161}," \u002F\u002F百位\n",[155,22737,22738,22741,22743,22745,22747,22749],{"class":157,"line":276},[155,22739,22740],{"class":171},"        a",[155,22742,317],{"class":167},[155,22744,21568],{"class":171},[155,22746,2938],{"class":167},[155,22748,565],{"class":263},[155,22750,21206],{"class":171},[155,22752,22753,22756,22758,22760,22762,22764,22766,22768],{"class":157,"line":297},[155,22754,22755],{"class":171},"        b",[155,22757,317],{"class":167},[155,22759,21568],{"class":171},[155,22761,2028],{"class":167},[155,22763,565],{"class":263},[155,22765,2938],{"class":167},[155,22767,565],{"class":263},[155,22769,21206],{"class":171},[155,22771,22772,22775,22777,22779,22781,22783],{"class":157,"line":302},[155,22773,22774],{"class":171},"        c",[155,22776,317],{"class":167},[155,22778,21568],{"class":171},[155,22780,2028],{"class":167},[155,22782,20389],{"class":263},[155,22784,21206],{"class":171},[155,22786,22787,22789,22791,22793,22795,22797,22799,22801,22803,22805,22807,22809,22811,22813,22815,22817,22819,22821,22824,22826,22829],{"class":157,"line":308},[155,22788,2803],{"class":167},[155,22790,21730],{"class":171},[155,22792,1563],{"class":167},[155,22794,20318],{"class":171},[155,22796,1563],{"class":167},[155,22798,20318],{"class":171},[155,22800,1274],{"class":167},[155,22802,20342],{"class":171},[155,22804,1563],{"class":167},[155,22806,20342],{"class":171},[155,22808,1563],{"class":167},[155,22810,20342],{"class":171},[155,22812,1274],{"class":167},[155,22814,20367],{"class":171},[155,22816,1563],{"class":167},[155,22818,20367],{"class":171},[155,22820,1563],{"class":167},[155,22822,22823],{"class":171},"c ",[155,22825,729],{"class":167},[155,22827,22828],{"class":171}," num)",[155,22830,22831],{"class":161}," \u002F\u002F如果是水仙花数，才打印\n",[155,22833,22834],{"class":157,"line":366},[155,22835,22395],{"class":171},[155,22837,22838,22840,22842,22844,22846],{"class":157,"line":379},[155,22839,22400],{"class":171},[155,22841,21089],{"class":167},[155,22843,21568],{"class":171},[155,22845,21089],{"class":167},[155,22847,21111],{"class":171},[155,22849,22850],{"class":157,"line":385},[155,22851,22414],{"class":171},[155,22853,22854,22856,22858],{"class":157,"line":415},[155,22855,22176],{"class":171},[155,22857,22179],{"class":167},[155,22859,21206],{"class":171},[155,22861,22862],{"class":157,"line":452},[155,22863,22074],{"class":171},[155,22865,22866,22868,22871,22873,22876],{"class":157,"line":480},[155,22867,22138],{"class":167},[155,22869,22870],{"class":171}," (num ",[155,22872,20959],{"class":167},[155,22874,22875],{"class":263}," 1000",[155,22877,22596],{"class":171},[155,22879,22880],{"class":157,"line":486},[155,22881,21475],{"class":171},[28,22883,22884],{"start":121},[31,22885,22886],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[146,22888,22890],{"className":20084,"code":22889,"language":20086,"meta":39,"style":39},"\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",[152,22891,22892,22897,22925,22929,22941,22945,22950,22960,22967,22971,22984,22988,22995,22999,23011,23020],{"__ignoreMap":39},[155,22893,22894],{"class":157,"line":158},[155,22895,22896],{"class":161},"\u002F\u002F从数字0-9打印\n",[155,22898,22899,22901,22903,22905,22908,22910,22912,22915,22917,22919,22921,22923],{"class":157,"line":46},[155,22900,1125],{"class":167},[155,22902,230],{"class":171},[155,22904,15239],{"class":167},[155,22906,22907],{"class":171}," i",[155,22909,317],{"class":167},[155,22911,1109],{"class":263},[155,22913,22914],{"class":171},";i",[155,22916,20959],{"class":167},[155,22918,565],{"class":263},[155,22920,22914],{"class":171},[155,22922,22179],{"class":167},[155,22924,363],{"class":171},[155,22926,22927],{"class":157,"line":121},[155,22928,3008],{"class":171},[155,22930,22931,22933,22935,22937,22939],{"class":157,"line":180},[155,22932,21461],{"class":171},[155,22934,21089],{"class":167},[155,22936,20513],{"class":171},[155,22938,21089],{"class":167},[155,22940,21111],{"class":171},[155,22942,22943],{"class":157,"line":194},[155,22944,21475],{"class":171},[155,22946,22947],{"class":157,"line":200},[155,22948,22949],{"class":161},"\u002F\u002F上式可以进行拆分\n",[155,22951,22952,22954,22956,22958],{"class":157,"line":213},[155,22953,15239],{"class":167},[155,22955,22907],{"class":171},[155,22957,317],{"class":167},[155,22959,2103],{"class":263},[155,22961,22962,22964],{"class":157,"line":220},[155,22963,1125],{"class":167},[155,22965,22966],{"class":171},"(;;;)\n",[155,22968,22969],{"class":157,"line":245},[155,22970,3008],{"class":171},[155,22972,22973,22975,22978,22980,22982],{"class":157,"line":251},[155,22974,1142],{"class":167},[155,22976,22977],{"class":171},"(i",[155,22979,21607],{"class":167},[155,22981,565],{"class":263},[155,22983,363],{"class":171},[155,22985,22986],{"class":157,"line":257},[155,22987,21917],{"class":171},[155,22989,22990,22993],{"class":157,"line":270},[155,22991,22992],{"class":167},"        break",[155,22994,21206],{"class":171},[155,22996,22997],{"class":157,"line":276},[155,22998,22074],{"class":171},[155,23000,23001,23003,23005,23007,23009],{"class":157,"line":297},[155,23002,21461],{"class":171},[155,23004,21089],{"class":167},[155,23006,20513],{"class":171},[155,23008,21089],{"class":167},[155,23010,21111],{"class":171},[155,23012,23013,23016,23018],{"class":157,"line":302},[155,23014,23015],{"class":171},"    i",[155,23017,22179],{"class":167},[155,23019,21206],{"class":171},[155,23021,23022],{"class":157,"line":308},[155,23023,21475],{"class":171},[24,23025,23026],{},"小练习",[146,23028,23030],{"className":20084,"code":23029,"language":20086,"meta":39,"style":39},"#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",[152,23031,23032,23038,23048,23056,23060,23065,23070,23097,23101,23106,23111,23152,23156,23169,23173,23177,23181,23193,23197,23201],{"__ignoreMap":39},[155,23033,23034,23036],{"class":157,"line":158},[155,23035,21838],{"class":167},[155,23037,21841],{"class":732},[155,23039,23040,23042,23044,23046],{"class":157,"line":46},[155,23041,21846],{"class":167},[155,23043,21849],{"class":167},[155,23045,21852],{"class":226},[155,23047,21206],{"class":171},[155,23049,23050,23052,23054],{"class":157,"line":121},[155,23051,15239],{"class":167},[155,23053,21861],{"class":226},[155,23055,294],{"class":171},[155,23057,23058],{"class":157,"line":180},[155,23059,3008],{"class":171},[155,23061,23062],{"class":157,"line":194},[155,23063,23064],{"class":161},"    \u002F\u002F敲桌子案例\n",[155,23066,23067],{"class":157,"line":200},[155,23068,23069],{"class":161},"    \u002F\u002F1.先输出1-100的数字\n",[155,23071,23072,23074,23076,23078,23080,23082,23084,23087,23089,23091,23093,23095],{"class":157,"line":213},[155,23073,2000],{"class":167},[155,23075,230],{"class":171},[155,23077,15239],{"class":167},[155,23079,22907],{"class":171},[155,23081,317],{"class":167},[155,23083,329],{"class":263},[155,23085,23086],{"class":171},"; i",[155,23088,21498],{"class":167},[155,23090,20389],{"class":263},[155,23092,23086],{"class":171},[155,23094,22179],{"class":167},[155,23096,363],{"class":171},[155,23098,23099],{"class":157,"line":220},[155,23100,21917],{"class":171},[155,23102,23103],{"class":157,"line":245},[155,23104,23105],{"class":161},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[155,23107,23108],{"class":157,"line":251},[155,23109,23110],{"class":161},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[155,23112,23113,23115,23117,23119,23121,23123,23125,23128,23130,23132,23134,23136,23138,23140,23142,23144,23146,23148,23150],{"class":157,"line":257},[155,23114,2803],{"class":167},[155,23116,22977],{"class":171},[155,23118,2938],{"class":167},[155,23120,8408],{"class":263},[155,23122,729],{"class":167},[155,23124,1109],{"class":263},[155,23126,23127],{"class":167}," ||",[155,23129,22907],{"class":171},[155,23131,2938],{"class":167},[155,23133,565],{"class":263},[155,23135,729],{"class":167},[155,23137,8408],{"class":263},[155,23139,23127],{"class":167},[155,23141,22907],{"class":171},[155,23143,2028],{"class":167},[155,23145,565],{"class":263},[155,23147,729],{"class":167},[155,23149,8408],{"class":263},[155,23151,363],{"class":171},[155,23153,23154],{"class":157,"line":270},[155,23155,22395],{"class":171},[155,23157,23158,23160,23162,23165,23167],{"class":157,"line":276},[155,23159,22400],{"class":171},[155,23161,21089],{"class":167},[155,23163,23164],{"class":732},"\"敲桌子\"",[155,23166,21089],{"class":167},[155,23168,21111],{"class":171},[155,23170,23171],{"class":157,"line":297},[155,23172,22414],{"class":171},[155,23174,23175],{"class":157,"line":302},[155,23176,22454],{"class":167},[155,23178,23179],{"class":157,"line":308},[155,23180,22395],{"class":171},[155,23182,23183,23185,23187,23189,23191],{"class":157,"line":366},[155,23184,22400],{"class":171},[155,23186,21089],{"class":167},[155,23188,20513],{"class":171},[155,23190,21089],{"class":167},[155,23192,21111],{"class":171},[155,23194,23195],{"class":157,"line":379},[155,23196,22414],{"class":171},[155,23198,23199],{"class":157,"line":385},[155,23200,22074],{"class":171},[155,23202,23203],{"class":157,"line":415},[155,23204,21475],{"class":171},[24,23206,23207],{},"嵌套实现星图",[146,23209,23211],{"className":20084,"code":23210,"language":20086,"meta":39,"style":39},"#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",[152,23212,23213,23219,23229,23237,23241,23267,23271,23299,23303,23314,23318,23327,23331],{"__ignoreMap":39},[155,23214,23215,23217],{"class":157,"line":158},[155,23216,21838],{"class":167},[155,23218,21841],{"class":732},[155,23220,23221,23223,23225,23227],{"class":157,"line":46},[155,23222,21846],{"class":167},[155,23224,21849],{"class":167},[155,23226,21852],{"class":226},[155,23228,21206],{"class":171},[155,23230,23231,23233,23235],{"class":157,"line":121},[155,23232,15239],{"class":167},[155,23234,21861],{"class":226},[155,23236,294],{"class":171},[155,23238,23239],{"class":157,"line":180},[155,23240,3008],{"class":171},[155,23242,23243,23245,23247,23249,23251,23253,23255,23257,23259,23261,23263,23265],{"class":157,"line":194},[155,23244,2000],{"class":167},[155,23246,21561],{"class":171},[155,23248,15239],{"class":167},[155,23250,22907],{"class":171},[155,23252,317],{"class":167},[155,23254,1109],{"class":263},[155,23256,22914],{"class":171},[155,23258,20959],{"class":167},[155,23260,565],{"class":263},[155,23262,22914],{"class":171},[155,23264,22179],{"class":167},[155,23266,363],{"class":171},[155,23268,23269],{"class":157,"line":200},[155,23270,21917],{"class":171},[155,23272,23273,23275,23277,23279,23282,23284,23286,23289,23291,23293,23295,23297],{"class":157,"line":213},[155,23274,2179],{"class":167},[155,23276,21561],{"class":171},[155,23278,15239],{"class":167},[155,23280,23281],{"class":171}," j",[155,23283,317],{"class":167},[155,23285,1109],{"class":263},[155,23287,23288],{"class":171},";j",[155,23290,20959],{"class":167},[155,23292,565],{"class":263},[155,23294,23288],{"class":171},[155,23296,22179],{"class":167},[155,23298,363],{"class":171},[155,23300,23301],{"class":157,"line":220},[155,23302,22395],{"class":171},[155,23304,23305,23307,23309,23312],{"class":157,"line":245},[155,23306,22400],{"class":171},[155,23308,21089],{"class":167},[155,23310,23311],{"class":732},"\"*\"",[155,23313,21206],{"class":171},[155,23315,23316],{"class":157,"line":251},[155,23317,22414],{"class":171},[155,23319,23320,23323,23325],{"class":157,"line":257},[155,23321,23322],{"class":171},"        cout",[155,23324,21089],{"class":167},[155,23326,21111],{"class":171},[155,23328,23329],{"class":157,"line":270},[155,23330,22074],{"class":171},[155,23332,23333],{"class":157,"line":276},[155,23334,21475],{"class":171},[24,23336,23337],{},"乘法口诀表",[146,23339,23341],{"className":20084,"code":23340,"language":20086,"meta":39,"style":39},"#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",[152,23342,23343,23349,23359,23367,23371,23397,23401,23426,23430,23469,23473,23481,23485],{"__ignoreMap":39},[155,23344,23345,23347],{"class":157,"line":158},[155,23346,21838],{"class":167},[155,23348,22221],{"class":732},[155,23350,23351,23353,23355,23357],{"class":157,"line":46},[155,23352,21846],{"class":167},[155,23354,21849],{"class":167},[155,23356,21852],{"class":226},[155,23358,21206],{"class":171},[155,23360,23361,23363,23365],{"class":157,"line":121},[155,23362,15239],{"class":167},[155,23364,21861],{"class":226},[155,23366,294],{"class":171},[155,23368,23369],{"class":157,"line":180},[155,23370,3008],{"class":171},[155,23372,23373,23375,23377,23379,23381,23383,23385,23387,23389,23391,23393,23395],{"class":157,"line":194},[155,23374,2000],{"class":167},[155,23376,230],{"class":171},[155,23378,15239],{"class":167},[155,23380,22907],{"class":171},[155,23382,317],{"class":167},[155,23384,329],{"class":263},[155,23386,22914],{"class":171},[155,23388,20959],{"class":167},[155,23390,565],{"class":263},[155,23392,22914],{"class":171},[155,23394,22179],{"class":167},[155,23396,363],{"class":171},[155,23398,23399],{"class":157,"line":200},[155,23400,21917],{"class":171},[155,23402,23403,23405,23407,23409,23411,23413,23415,23417,23419,23422,23424],{"class":157,"line":213},[155,23404,2179],{"class":167},[155,23406,230],{"class":171},[155,23408,15239],{"class":167},[155,23410,23281],{"class":171},[155,23412,317],{"class":167},[155,23414,329],{"class":263},[155,23416,23288],{"class":171},[155,23418,21498],{"class":167},[155,23420,23421],{"class":171},"i;j",[155,23423,22179],{"class":167},[155,23425,363],{"class":171},[155,23427,23428],{"class":157,"line":220},[155,23429,22395],{"class":171},[155,23431,23432,23434,23436,23438,23440,23442,23444,23446,23448,23451,23453,23455,23457,23459,23461,23463,23465,23467],{"class":157,"line":245},[155,23433,22400],{"class":171},[155,23435,21089],{"class":167},[155,23437,20537],{"class":171},[155,23439,21089],{"class":167},[155,23441,23311],{"class":732},[155,23443,21089],{"class":167},[155,23445,20513],{"class":171},[155,23447,21089],{"class":167},[155,23449,23450],{"class":732},"\"=\"",[155,23452,21089],{"class":167},[155,23454,20513],{"class":171},[155,23456,1563],{"class":167},[155,23458,20537],{"class":171},[155,23460,21089],{"class":167},[155,23462,2697],{"class":732},[155,23464,21146],{"class":263},[155,23466,2697],{"class":732},[155,23468,21206],{"class":171},[155,23470,23471],{"class":157,"line":251},[155,23472,22414],{"class":171},[155,23474,23475,23477,23479],{"class":157,"line":257},[155,23476,23322],{"class":171},[155,23478,21089],{"class":167},[155,23480,21111],{"class":171},[155,23482,23483],{"class":157,"line":270},[155,23484,22074],{"class":171},[155,23486,23487],{"class":157,"line":276},[155,23488,21475],{"class":171},[14,23490,23492],{"id":23491},"_163跳出语句","1.6.3跳出语句",[28,23494,23495],{},[31,23496,23497],{},"break语句\n作用：用于跳出选择结构或者循环结构",[24,23499,23500],{},"break使用时机：",[21052,23502,23503,23506,23509],{},[31,23504,23505],{},"出现在switch条件语句中，作用是终止case并跳出switch",[31,23507,23508],{},"出现在循环结构中，作用是跳出当前的循环结构",[31,23510,23511],{},"出现在嵌套循环中，跳出最近的内层循环语句",[28,23513,23514,23517],{"start":46},[31,23515,23516],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[31,23518,23519],{},"goto语句\n语法：goto 标记;",[24,23521,23522],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[146,23524,23526],{"className":20084,"code":23525,"language":20086,"meta":39,"style":39},"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",[152,23527,23528,23536,23540,23553,23563,23576,23589,23602,23609,23625],{"__ignoreMap":39},[155,23529,23530,23532,23534],{"class":157,"line":158},[155,23531,15239],{"class":167},[155,23533,21861],{"class":226},[155,23535,294],{"class":171},[155,23537,23538],{"class":157,"line":46},[155,23539,3008],{"class":171},[155,23541,23542,23544,23546,23549,23551],{"class":157,"line":121},[155,23543,21461],{"class":171},[155,23545,21089],{"class":167},[155,23547,23548],{"class":732},"\"1\"",[155,23550,21089],{"class":167},[155,23552,21111],{"class":171},[155,23554,23555,23558,23561],{"class":157,"line":180},[155,23556,23557],{"class":167},"    goto",[155,23559,23560],{"class":226}," FLAG",[155,23562,21206],{"class":171},[155,23564,23565,23567,23569,23572,23574],{"class":157,"line":194},[155,23566,21461],{"class":171},[155,23568,21089],{"class":167},[155,23570,23571],{"class":732},"\"2\"",[155,23573,21089],{"class":167},[155,23575,21111],{"class":171},[155,23577,23578,23580,23582,23585,23587],{"class":157,"line":200},[155,23579,21461],{"class":171},[155,23581,21089],{"class":167},[155,23583,23584],{"class":732},"\"3\"",[155,23586,21089],{"class":167},[155,23588,21111],{"class":171},[155,23590,23591,23593,23595,23598,23600],{"class":157,"line":213},[155,23592,21461],{"class":171},[155,23594,21089],{"class":167},[155,23596,23597],{"class":732},"\"4\"",[155,23599,21089],{"class":167},[155,23601,21111],{"class":171},[155,23603,23604,23607],{"class":157,"line":220},[155,23605,23606],{"class":226},"    FLAG",[155,23608,736],{"class":171},[155,23610,23611,23613,23615,23618,23620,23622],{"class":157,"line":245},[155,23612,21461],{"class":171},[155,23614,21089],{"class":167},[155,23616,23617],{"class":732},"\"5\"",[155,23619,21089],{"class":167},[155,23621,21154],{"class":171},[155,23623,23624],{"class":161},"\u002F\u002F跳过了2,3,4,直接到5\n",[155,23626,23627],{"class":157,"line":251},[155,23628,21475],{"class":171},[20037,23630,23632],{"id":23631},"_17数组","1.7数组",[14,23634,23636],{"id":23635},"_171一维数组","1.7.1一维数组",[28,23638,23639],{},[31,23640,23641],{},"一维数组定义方式",[20222,23643,23644,23654],{},[20225,23645,23646],{},[20228,23647,23648,23651],{},[20231,23649,23650],{},"方式",[20231,23652,23653],{},"注意事项",[20269,23655,23656,23670,23680],{},[20228,23657,23658,23664],{},[20274,23659,23660,23661,20144],{},"数据类型 数组名",[155,23662,23663],{},"数组长度",[20274,23665,23666,23667,23669],{},"这种方式是先定义再arr",[155,23668,20513],{},"赋值",[20228,23671,23672,23677],{},[20274,23673,23660,23674,23676],{},[155,23675,23663],{},"={值1,值2....};",[20274,23678,23679],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[20228,23681,23682,23686],{},[20274,23683,23660,23684,23676],{},[155,23685],{},[20274,23687,23688,23689,23691],{},"int arr",[155,23690],{},";这是不正确的，按照这样的方式定义必须有初始长度",[28,23693,23694],{"start":46},[31,23695,23696],{},"一维数组数组名\n用途：",[21052,23698,23699],{},[31,23700,23701],{},"1.可以统计整个数组在内存中的长度：",[146,23703,23705],{"className":20084,"code":23704,"language":20086,"meta":39,"style":39},"sizeof(arr);\nsizeof(arr[0]);\n",[152,23706,23707,23714],{"__ignoreMap":39},[155,23708,23709,23711],{"class":157,"line":158},[155,23710,20093],{"class":167},[155,23712,23713],{"class":171},"(arr);\n",[155,23715,23716,23718,23721,23723],{"class":157,"line":46},[155,23717,20093],{"class":167},[155,23719,23720],{"class":171},"(arr[",[155,23722,1109],{"class":263},[155,23724,23725],{"class":171},"]);\n",[21052,23727,23728],{},[31,23729,23730],{},"2.可以获取数组在内存中的首地址:",[146,23732,23734],{"className":20084,"code":23733,"language":20086,"meta":39,"style":39},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[152,23735,23736,23741,23754,23759],{"__ignoreMap":39},[155,23737,23738],{"class":157,"line":158},[155,23739,23740],{"class":161},"\u002F\u002F查看16进制的首地址\n",[155,23742,23743,23745,23747,23750,23752],{"class":157,"line":46},[155,23744,21282],{"class":171},[155,23746,21089],{"class":167},[155,23748,23749],{"class":171},"arr",[155,23751,21089],{"class":167},[155,23753,21111],{"class":171},[155,23755,23756],{"class":157,"line":121},[155,23757,23758],{"class":161},"\u002F\u002F看10进制数\n",[155,23760,23761,23763,23765,23767,23769,23771,23773,23776,23778,23780,23782],{"class":157,"line":180},[155,23762,21282],{"class":171},[155,23764,21089],{"class":167},[155,23766,230],{"class":171},[155,23768,15239],{"class":167},[155,23770,20501],{"class":171},[155,23772,20428],{"class":167},[155,23774,23775],{"class":171},"arr[",[155,23777,1109],{"class":263},[155,23779,2813],{"class":171},[155,23781,21089],{"class":167},[155,23783,21111],{"class":171},[24,23785,23786],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[21052,23788,23789],{},[31,23790,23791],{},"1️⃣五只小猪称体重",[146,23793,23795],{"className":20084,"code":23794,"language":20086,"meta":39,"style":39},"#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",[152,23796,23797,23803,23813,23821,23825,23864,23877,23903,23907,23919,23923,23933,23937,23941,23954,23962],{"__ignoreMap":39},[155,23798,23799,23801],{"class":157,"line":158},[155,23800,21838],{"class":167},[155,23802,21841],{"class":732},[155,23804,23805,23807,23809,23811],{"class":157,"line":46},[155,23806,21846],{"class":167},[155,23808,21849],{"class":167},[155,23810,21852],{"class":226},[155,23812,21206],{"class":171},[155,23814,23815,23817,23819],{"class":157,"line":121},[155,23816,15239],{"class":167},[155,23818,21861],{"class":226},[155,23820,294],{"class":171},[155,23822,23823],{"class":157,"line":180},[155,23824,3008],{"class":171},[155,23826,23827,23829,23832,23834,23836,23838,23840,23843,23845,23848,23850,23852,23854,23856,23858,23861],{"class":157,"line":194},[155,23828,21872],{"class":167},[155,23830,23831],{"class":171}," arr[",[155,23833,350],{"class":263},[155,23835,2813],{"class":171},[155,23837,317],{"class":167},[155,23839,2705],{"class":171},[155,23841,23842],{"class":263},"300",[155,23844,332],{"class":171},[155,23846,23847],{"class":263},"350",[155,23849,332],{"class":171},[155,23851,21619],{"class":263},[155,23853,332],{"class":171},[155,23855,518],{"class":263},[155,23857,332],{"class":171},[155,23859,23860],{"class":263},"250",[155,23862,23863],{"class":171},"};\n",[155,23865,23866,23868,23871,23873,23875],{"class":157,"line":200},[155,23867,21872],{"class":167},[155,23869,23870],{"class":171}," tmp",[155,23872,317],{"class":167},[155,23874,1109],{"class":263},[155,23876,21206],{"class":171},[155,23878,23879,23881,23883,23885,23887,23889,23891,23893,23895,23897,23899,23901],{"class":157,"line":213},[155,23880,2000],{"class":167},[155,23882,21561],{"class":171},[155,23884,15239],{"class":167},[155,23886,22907],{"class":171},[155,23888,317],{"class":167},[155,23890,1109],{"class":263},[155,23892,22914],{"class":171},[155,23894,20959],{"class":167},[155,23896,350],{"class":263},[155,23898,22914],{"class":171},[155,23900,22179],{"class":167},[155,23902,363],{"class":171},[155,23904,23905],{"class":157,"line":220},[155,23906,21917],{"class":171},[155,23908,23909,23911,23914,23916],{"class":157,"line":245},[155,23910,2803],{"class":167},[155,23912,23913],{"class":171},"(tmp",[155,23915,20959],{"class":167},[155,23917,23918],{"class":171},"arr[i])\n",[155,23920,23921],{"class":157,"line":251},[155,23922,22395],{"class":171},[155,23924,23925,23928,23930],{"class":157,"line":257},[155,23926,23927],{"class":171},"            tmp",[155,23929,317],{"class":167},[155,23931,23932],{"class":171},"arr[i];\n",[155,23934,23935],{"class":157,"line":270},[155,23936,22414],{"class":171},[155,23938,23939],{"class":157,"line":276},[155,23940,22074],{"class":171},[155,23942,23943,23945,23947,23950,23952],{"class":157,"line":297},[155,23944,21461],{"class":171},[155,23946,21089],{"class":167},[155,23948,23949],{"class":171},"tmp",[155,23951,21089],{"class":167},[155,23953,21111],{"class":171},[155,23955,23956,23958,23960],{"class":157,"line":302},[155,23957,1692],{"class":167},[155,23959,1151],{"class":263},[155,23961,21206],{"class":171},[155,23963,23964],{"class":157,"line":308},[155,23965,21475],{"class":171},[21052,23967,23968],{},[31,23969,23970],{},"2️⃣数组元素逆置",[146,23972,23974],{"className":20084,"code":23973,"language":20086,"meta":39,"style":39},"\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",[152,23975,23976,23981,23987,23997,24005,24009,24044,24060,24092,24105,24110,24115,24127,24137,24147,24152,24161,24171,24176,24181,24208,24212,24228,24232,24243,24252],{"__ignoreMap":39},[155,23977,23978],{"class":157,"line":158},[155,23979,23980],{"class":161},"\u002F\u002F元素逆置\n",[155,23982,23983,23985],{"class":157,"line":46},[155,23984,21838],{"class":167},[155,23986,21841],{"class":732},[155,23988,23989,23991,23993,23995],{"class":157,"line":121},[155,23990,21846],{"class":167},[155,23992,21849],{"class":167},[155,23994,21852],{"class":226},[155,23996,21206],{"class":171},[155,23998,23999,24001,24003],{"class":157,"line":180},[155,24000,15239],{"class":167},[155,24002,21861],{"class":226},[155,24004,294],{"class":171},[155,24006,24007],{"class":157,"line":194},[155,24008,3008],{"class":171},[155,24010,24011,24014,24016,24018,24020,24022,24024,24026,24028,24030,24032,24034,24036,24038,24040,24042],{"class":157,"line":200},[155,24012,24013],{"class":167},"   int",[155,24015,23831],{"class":171},[155,24017,350],{"class":263},[155,24019,2813],{"class":171},[155,24021,317],{"class":167},[155,24023,2705],{"class":171},[155,24025,329],{"class":263},[155,24027,332],{"class":171},[155,24029,360],{"class":263},[155,24031,332],{"class":171},[155,24033,4444],{"class":263},[155,24035,332],{"class":171},[155,24037,1264],{"class":263},[155,24039,332],{"class":171},[155,24041,350],{"class":263},[155,24043,23863],{"class":171},[155,24045,24046,24048,24051,24053,24055,24057],{"class":157,"line":213},[155,24047,24013],{"class":167},[155,24049,24050],{"class":171}," start",[155,24052,317],{"class":167},[155,24054,1109],{"class":263},[155,24056,20144],{"class":171},[155,24058,24059],{"class":161},"\u002F\u002F起始下标\n",[155,24061,24062,24064,24067,24070,24073,24076,24078,24080,24083,24085,24087,24089],{"class":157,"line":220},[155,24063,24013],{"class":167},[155,24065,24066],{"class":171}," end",[155,24068,24069],{"class":167},"=sizeof",[155,24071,24072],{"class":171},"(arr)",[155,24074,24075],{"class":167},"\u002Fsizeof",[155,24077,23720],{"class":171},[155,24079,1109],{"class":263},[155,24081,24082],{"class":171},"])",[155,24084,2039],{"class":167},[155,24086,329],{"class":263},[155,24088,20144],{"class":171},[155,24090,24091],{"class":161},"\u002F\u002F结束下标\n",[155,24093,24094,24097,24100,24102],{"class":157,"line":245},[155,24095,24096],{"class":167},"   while",[155,24098,24099],{"class":171}," (start",[155,24101,20959],{"class":167},[155,24103,24104],{"class":171},"end)\n",[155,24106,24107],{"class":157,"line":251},[155,24108,24109],{"class":171},"   {\n",[155,24111,24112],{"class":157,"line":257},[155,24113,24114],{"class":161},"    \u002F\u002F实现元素互换代码\n",[155,24116,24117,24119,24122,24124],{"class":157,"line":270},[155,24118,21872],{"class":167},[155,24120,24121],{"class":171}," temp",[155,24123,317],{"class":167},[155,24125,24126],{"class":171},"arr[start];\n",[155,24128,24129,24132,24134],{"class":157,"line":276},[155,24130,24131],{"class":171},"    arr[start]",[155,24133,317],{"class":167},[155,24135,24136],{"class":171},"arr[end];\n",[155,24138,24139,24142,24144],{"class":157,"line":297},[155,24140,24141],{"class":171},"    arr[end]",[155,24143,317],{"class":167},[155,24145,24146],{"class":171},"temp;\n",[155,24148,24149],{"class":157,"line":302},[155,24150,24151],{"class":161},"    \u002F\u002F下标更新\n",[155,24153,24154,24157,24159],{"class":157,"line":308},[155,24155,24156],{"class":171},"    start",[155,24158,22179],{"class":167},[155,24160,21206],{"class":171},[155,24162,24163,24166,24169],{"class":157,"line":366},[155,24164,24165],{"class":171},"    end",[155,24167,24168],{"class":167},"--",[155,24170,21206],{"class":171},[155,24172,24173],{"class":157,"line":379},[155,24174,24175],{"class":171},"   }\n",[155,24177,24178],{"class":157,"line":385},[155,24179,24180],{"class":161},"   \u002F\u002F输出逆置后的数组\n",[155,24182,24183,24186,24188,24190,24192,24194,24196,24198,24200,24202,24204,24206],{"class":157,"line":415},[155,24184,24185],{"class":167},"   for",[155,24187,21561],{"class":171},[155,24189,15239],{"class":167},[155,24191,22907],{"class":171},[155,24193,317],{"class":167},[155,24195,1109],{"class":263},[155,24197,22914],{"class":171},[155,24199,20959],{"class":167},[155,24201,350],{"class":263},[155,24203,22914],{"class":171},[155,24205,22179],{"class":167},[155,24207,363],{"class":171},[155,24209,24210],{"class":157,"line":452},[155,24211,24109],{"class":171},[155,24213,24214,24216,24218,24221,24223,24226],{"class":157,"line":480},[155,24215,21461],{"class":171},[155,24217,21089],{"class":167},[155,24219,24220],{"class":171},"arr[i]",[155,24222,21089],{"class":167},[155,24224,24225],{"class":732},"\" \"",[155,24227,21206],{"class":171},[155,24229,24230],{"class":157,"line":486},[155,24231,24175],{"class":171},[155,24233,24234,24237,24239,24241],{"class":157,"line":499},[155,24235,24236],{"class":226},"   system",[155,24238,230],{"class":171},[155,24240,22195],{"class":732},[155,24242,22596],{"class":171},[155,24244,24245,24248,24250],{"class":157,"line":505},[155,24246,24247],{"class":167},"   return",[155,24249,1151],{"class":263},[155,24251,21206],{"class":171},[155,24253,24254],{"class":157,"line":528},[155,24255,21475],{"class":171},[21052,24257,24258],{},[31,24259,24260],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[146,24262,24264],{"className":20084,"code":24263,"language":20086,"meta":39,"style":39},"\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",[152,24265,24266,24271,24277,24287,24295,24299,24351,24364,24390,24394,24408,24412,24417,24422,24452,24456,24461,24495,24499,24504,24522,24527,24539,24555,24570,24575,24579,24583,24596,24622,24626,24640,24644,24652],{"__ignoreMap":39},[155,24267,24268],{"class":157,"line":158},[155,24269,24270],{"class":161},"\u002F\u002F冒泡排序,升序\n",[155,24272,24273,24275],{"class":157,"line":46},[155,24274,21838],{"class":167},[155,24276,21841],{"class":732},[155,24278,24279,24281,24283,24285],{"class":157,"line":121},[155,24280,21846],{"class":167},[155,24282,21849],{"class":167},[155,24284,21852],{"class":226},[155,24286,21206],{"class":171},[155,24288,24289,24291,24293],{"class":157,"line":180},[155,24290,15239],{"class":167},[155,24292,21861],{"class":226},[155,24294,294],{"class":171},[155,24296,24297],{"class":157,"line":194},[155,24298,3008],{"class":171},[155,24300,24301,24303,24305,24307,24310,24312,24315,24317,24319,24321,24323,24325,24327,24329,24331,24333,24335,24337,24339,24341,24343,24345,24347,24349],{"class":157,"line":200},[155,24302,21872],{"class":167},[155,24304,23831],{"class":171},[155,24306,20492],{"class":263},[155,24308,24309],{"class":171},"] ",[155,24311,317],{"class":167},[155,24313,24314],{"class":171}," {",[155,24316,1264],{"class":263},[155,24318,332],{"class":171},[155,24320,360],{"class":263},[155,24322,332],{"class":171},[155,24324,1636],{"class":263},[155,24326,332],{"class":171},[155,24328,1109],{"class":263},[155,24330,332],{"class":171},[155,24332,350],{"class":263},[155,24334,332],{"class":171},[155,24336,8408],{"class":263},[155,24338,332],{"class":171},[155,24340,329],{"class":263},[155,24342,332],{"class":171},[155,24344,4444],{"class":263},[155,24346,332],{"class":171},[155,24348,20492],{"class":263},[155,24350,23863],{"class":171},[155,24352,24353,24355,24357,24360,24362],{"class":157,"line":213},[155,24354,21461],{"class":171},[155,24356,21089],{"class":167},[155,24358,24359],{"class":732},"\"排序前：\"",[155,24361,21089],{"class":167},[155,24363,21111],{"class":171},[155,24365,24366,24368,24370,24372,24374,24376,24378,24380,24382,24384,24386,24388],{"class":157,"line":220},[155,24367,2000],{"class":167},[155,24369,21561],{"class":171},[155,24371,15239],{"class":167},[155,24373,22907],{"class":171},[155,24375,317],{"class":167},[155,24377,1109],{"class":263},[155,24379,22914],{"class":171},[155,24381,20959],{"class":167},[155,24383,20492],{"class":263},[155,24385,22914],{"class":171},[155,24387,22179],{"class":167},[155,24389,363],{"class":171},[155,24391,24392],{"class":157,"line":245},[155,24393,21917],{"class":171},[155,24395,24396,24398,24400,24402,24404,24406],{"class":157,"line":251},[155,24397,23322],{"class":171},[155,24399,21089],{"class":167},[155,24401,24220],{"class":171},[155,24403,21089],{"class":167},[155,24405,24225],{"class":732},[155,24407,21206],{"class":171},[155,24409,24410],{"class":157,"line":257},[155,24411,22074],{"class":171},[155,24413,24414],{"class":157,"line":270},[155,24415,24416],{"class":161},"    \u002F\u002F开始冒泡排序\n",[155,24418,24419],{"class":157,"line":276},[155,24420,24421],{"class":161},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[155,24423,24424,24426,24428,24430,24432,24434,24436,24438,24440,24442,24444,24446,24448,24450],{"class":157,"line":297},[155,24425,2000],{"class":167},[155,24427,21561],{"class":171},[155,24429,15239],{"class":167},[155,24431,22907],{"class":171},[155,24433,317],{"class":167},[155,24435,1109],{"class":263},[155,24437,22914],{"class":171},[155,24439,20959],{"class":167},[155,24441,20492],{"class":263},[155,24443,2039],{"class":167},[155,24445,329],{"class":263},[155,24447,22914],{"class":171},[155,24449,22179],{"class":167},[155,24451,363],{"class":171},[155,24453,24454],{"class":157,"line":302},[155,24455,21917],{"class":171},[155,24457,24458],{"class":157,"line":308},[155,24459,24460],{"class":161},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[155,24462,24463,24465,24467,24469,24471,24473,24475,24477,24479,24481,24483,24485,24487,24489,24491,24493],{"class":157,"line":366},[155,24464,2179],{"class":167},[155,24466,21561],{"class":171},[155,24468,15239],{"class":167},[155,24470,23281],{"class":171},[155,24472,317],{"class":167},[155,24474,1109],{"class":263},[155,24476,23288],{"class":171},[155,24478,20959],{"class":167},[155,24480,20492],{"class":263},[155,24482,2039],{"class":167},[155,24484,20513],{"class":171},[155,24486,2039],{"class":167},[155,24488,329],{"class":263},[155,24490,23288],{"class":171},[155,24492,22179],{"class":167},[155,24494,363],{"class":171},[155,24496,24497],{"class":157,"line":379},[155,24498,22395],{"class":171},[155,24500,24501],{"class":157,"line":385},[155,24502,24503],{"class":161},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[155,24505,24506,24508,24511,24513,24516,24518,24520],{"class":157,"line":415},[155,24507,8497],{"class":167},[155,24509,24510],{"class":171},"(arr[j]",[155,24512,1148],{"class":167},[155,24514,24515],{"class":171},"arr[j",[155,24517,1274],{"class":167},[155,24519,329],{"class":263},[155,24521,17676],{"class":171},[155,24523,24524],{"class":157,"line":452},[155,24525,24526],{"class":171},"            {\n",[155,24528,24529,24532,24534,24536],{"class":157,"line":480},[155,24530,24531],{"class":167},"                int",[155,24533,24121],{"class":171},[155,24535,317],{"class":167},[155,24537,24538],{"class":171},"arr[j];\n",[155,24540,24541,24544,24546,24548,24550,24552],{"class":157,"line":486},[155,24542,24543],{"class":171},"                arr[j]",[155,24545,317],{"class":167},[155,24547,24515],{"class":171},[155,24549,1274],{"class":167},[155,24551,329],{"class":263},[155,24553,24554],{"class":171},"];\n",[155,24556,24557,24560,24562,24564,24566,24568],{"class":157,"line":499},[155,24558,24559],{"class":171},"                arr[j",[155,24561,1274],{"class":167},[155,24563,329],{"class":263},[155,24565,2813],{"class":171},[155,24567,317],{"class":167},[155,24569,24146],{"class":171},[155,24571,24572],{"class":157,"line":505},[155,24573,24574],{"class":171},"            }\n",[155,24576,24577],{"class":157,"line":528},[155,24578,22414],{"class":171},[155,24580,24581],{"class":157,"line":549},[155,24582,22074],{"class":171},[155,24584,24585,24587,24589,24592,24594],{"class":157,"line":570},[155,24586,21461],{"class":171},[155,24588,21089],{"class":167},[155,24590,24591],{"class":732},"\"排序后：\"",[155,24593,21089],{"class":167},[155,24595,21111],{"class":171},[155,24597,24598,24600,24602,24604,24606,24608,24610,24612,24614,24616,24618,24620],{"class":157,"line":575},[155,24599,2000],{"class":167},[155,24601,21561],{"class":171},[155,24603,15239],{"class":167},[155,24605,22907],{"class":171},[155,24607,317],{"class":167},[155,24609,1109],{"class":263},[155,24611,22914],{"class":171},[155,24613,20959],{"class":167},[155,24615,20492],{"class":263},[155,24617,22914],{"class":171},[155,24619,22179],{"class":167},[155,24621,363],{"class":171},[155,24623,24624],{"class":157,"line":581},[155,24625,21917],{"class":171},[155,24627,24628,24630,24632,24634,24636,24638],{"class":157,"line":592},[155,24629,23322],{"class":171},[155,24631,21089],{"class":167},[155,24633,24220],{"class":171},[155,24635,21089],{"class":167},[155,24637,24225],{"class":732},[155,24639,21206],{"class":171},[155,24641,24642],{"class":157,"line":610},[155,24643,22074],{"class":171},[155,24645,24646,24648,24650],{"class":157,"line":622},[155,24647,1692],{"class":167},[155,24649,1151],{"class":263},[155,24651,21206],{"class":171},[155,24653,24654],{"class":157,"line":638},[155,24655,21475],{"class":171},[14,24657,24659],{"id":24658},"_172二维数组","1.7.2二维数组",[28,24661,24662],{},[31,24663,24664],{},"二维数组的四种定义方式",[20222,24666,24667,24676],{},[20225,24668,24669],{},[20228,24670,24671,24674],{},[20231,24672,24673],{},"序号",[20231,24675,23650],{},[20269,24677,24678,24688,24697,24706,24715],{},[20228,24679,24680,24682],{},[20274,24681,329],{},[20274,24683,24684,24685,20144],{},"数据类型 数组名[行数]",[155,24686,24687],{},"列数",[20228,24689,24690,24692],{},[20274,24691,360],{},[20274,24693,24684,24694,24696],{},[155,24695,24687],{},"={ {数据1,数据2}，{数据3，数据4}... }",[20228,24698,24699,24701],{},[20274,24700,4444],{},[20274,24702,24684,24703,24705],{},[155,24704,24687],{},"={数据1,数据2,数据3...}",[20228,24707,24708,24710],{},[20274,24709,1264],{},[20274,24711,24712,24713,24705],{},"数据类型 数组名[]",[155,24714,24687],{},[20228,24716,24717,24720],{},[20274,24718,24719],{},"注意：不能只省略列数",[20274,24721],{},[28,24723,24724],{"start":46},[31,24725,24726],{},"二维数组数组名",[21052,24728,24729,24732],{},[31,24730,24731],{},"1.查看二维数组所占内存空间",[31,24733,24734],{},"2.获取二维数组首地址",[24,24736,24737],{},"已知二维数组，求二维数组的行数与列数",[146,24739,24741],{"className":20084,"code":24740,"language":20086,"meta":39,"style":39},"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",[152,24742,24743,24751,24755,24773,24777,24795,24811,24816,24841,24874],{"__ignoreMap":39},[155,24744,24745,24747,24749],{"class":157,"line":158},[155,24746,15239],{"class":167},[155,24748,21861],{"class":226},[155,24750,294],{"class":171},[155,24752,24753],{"class":157,"line":46},[155,24754,3008],{"class":171},[155,24756,24757,24759,24761,24763,24766,24768,24770],{"class":157,"line":121},[155,24758,21872],{"class":167},[155,24760,23831],{"class":171},[155,24762,360],{"class":263},[155,24764,24765],{"class":171},"][",[155,24767,4444],{"class":263},[155,24769,2813],{"class":171},[155,24771,24772],{"class":167},"=\n",[155,24774,24775],{"class":157,"line":180},[155,24776,21917],{"class":171},[155,24778,24779,24782,24784,24786,24788,24790,24792],{"class":157,"line":194},[155,24780,24781],{"class":171},"        {",[155,24783,329],{"class":263},[155,24785,332],{"class":171},[155,24787,360],{"class":263},[155,24789,332],{"class":171},[155,24791,4444],{"class":263},[155,24793,24794],{"class":171},"},\n",[155,24796,24797,24799,24801,24803,24805,24807,24809],{"class":157,"line":200},[155,24798,24781],{"class":171},[155,24800,1264],{"class":263},[155,24802,332],{"class":171},[155,24804,350],{"class":263},[155,24806,332],{"class":171},[155,24808,340],{"class":263},[155,24810,21475],{"class":171},[155,24812,24813],{"class":157,"line":213},[155,24814,24815],{"class":171},"    };\n",[155,24817,24818,24820,24822,24825,24827,24829,24831,24833,24835,24837,24839],{"class":157,"line":220},[155,24819,21461],{"class":171},[155,24821,21089],{"class":167},[155,24823,24824],{"class":732},"\"二维数组的行数\"",[155,24826,21285],{"class":167},[155,24828,24072],{"class":171},[155,24830,24075],{"class":167},[155,24832,23720],{"class":171},[155,24834,1109],{"class":263},[155,24836,24082],{"class":171},[155,24838,21089],{"class":167},[155,24840,21111],{"class":171},[155,24842,24843,24845,24847,24850,24852,24854,24856,24858,24860,24862,24864,24866,24868,24870,24872],{"class":157,"line":245},[155,24844,21461],{"class":171},[155,24846,21089],{"class":167},[155,24848,24849],{"class":732},"\"二维数组的列数\"",[155,24851,21285],{"class":167},[155,24853,23720],{"class":171},[155,24855,1109],{"class":263},[155,24857,24082],{"class":171},[155,24859,24075],{"class":167},[155,24861,23720],{"class":171},[155,24863,1109],{"class":263},[155,24865,24765],{"class":171},[155,24867,1109],{"class":263},[155,24869,24082],{"class":171},[155,24871,21089],{"class":167},[155,24873,21111],{"class":171},[155,24875,24876],{"class":157,"line":251},[155,24877,21475],{"class":171},[24,24879,24880],{},"查看二维数组首地址",[146,24882,24884],{"className":20084,"code":24883,"language":20086,"meta":39,"style":39},"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",[152,24885,24886,24903,24929,24954],{"__ignoreMap":39},[155,24887,24888,24890,24892,24895,24897,24899,24901],{"class":157,"line":158},[155,24889,21282],{"class":171},[155,24891,21089],{"class":167},[155,24893,24894],{"class":732},"\"二维数组首地址：\"",[155,24896,21089],{"class":167},[155,24898,23749],{"class":171},[155,24900,21089],{"class":167},[155,24902,21111],{"class":171},[155,24904,24905,24907,24909,24912,24914,24916,24918,24921,24923,24925,24927],{"class":157,"line":46},[155,24906,21282],{"class":171},[155,24908,21089],{"class":167},[155,24910,24911],{"class":732},"\"二维数组第一行的首地址：\"",[155,24913,21089],{"class":167},[155,24915,230],{"class":171},[155,24917,15239],{"class":167},[155,24919,24920],{"class":171},")arr[",[155,24922,1109],{"class":263},[155,24924,2813],{"class":171},[155,24926,21089],{"class":167},[155,24928,21111],{"class":171},[155,24930,24931,24933,24935,24938,24940,24942,24944,24946,24948,24950,24952],{"class":157,"line":121},[155,24932,21282],{"class":171},[155,24934,21089],{"class":167},[155,24936,24937],{"class":732},"\"二维数组第二行的首地址：\"",[155,24939,21089],{"class":167},[155,24941,230],{"class":171},[155,24943,15239],{"class":167},[155,24945,24920],{"class":171},[155,24947,329],{"class":263},[155,24949,2813],{"class":171},[155,24951,21089],{"class":167},[155,24953,21111],{"class":171},[155,24955,24956,24958,24960,24963,24965,24967,24969,24971,24973,24975,24977,24979,24981,24983,24985,24987],{"class":157,"line":180},[155,24957,21282],{"class":171},[155,24959,21089],{"class":167},[155,24961,24962],{"class":732},"\"二维数组第一个元素的首地址:\"",[155,24964,21089],{"class":167},[155,24966,230],{"class":171},[155,24968,15239],{"class":167},[155,24970,20501],{"class":171},[155,24972,20428],{"class":167},[155,24974,23775],{"class":171},[155,24976,1109],{"class":263},[155,24978,24765],{"class":171},[155,24980,1109],{"class":263},[155,24982,2813],{"class":171},[155,24984,21089],{"class":167},[155,24986,21154],{"class":171},[155,24988,24989],{"class":161},"\u002F\u002F对于数，要加取址符\n",[20011,24991,24992],{},"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":39,"searchDepth":46,"depth":46,"links":24994},[24995,24996,24997,25005,25006,25012,25017],{"id":20039,"depth":46,"text":20040},{"id":20046,"depth":46,"text":20047},{"id":20061,"depth":46,"text":20062,"children":24998},[24999,25000,25001,25002,25003,25004],{"id":20065,"depth":121,"text":20066},{"id":20109,"depth":121,"text":20110},{"id":20171,"depth":121,"text":20172},{"id":21070,"depth":121,"text":21071},{"id":21160,"depth":121,"text":21161},{"id":21256,"depth":121,"text":21257},{"id":21298,"depth":46,"text":21299},{"id":21366,"depth":46,"text":21367,"children":25007},[25008,25009,25010,25011],{"id":21370,"depth":121,"text":21371},{"id":21391,"depth":121,"text":21392},{"id":21400,"depth":121,"text":21401},{"id":21409,"depth":121,"text":21410},{"id":21418,"depth":46,"text":21419,"children":25013},[25014,25015,25016],{"id":21422,"depth":121,"text":21423},{"id":22092,"depth":121,"text":22093},{"id":23491,"depth":121,"text":23492},{"id":23631,"depth":46,"text":23632,"children":25018},[25019,25020],{"id":23635,"depth":121,"text":23636},{"id":24658,"depth":121,"text":24659},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":20030,"description":39},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":25027,"title":25028,"body":25029,"description":39,"extension":20021,"meta":26128,"navigation":216,"path":26129,"seo":26130,"stem":26131,"__hash__":26132},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":25030,"toc":26120},[25031,25034,25038,25046,25054,25057,25122,25126,25129,25205,25209,25212,25215,25218,25431,25435,25440,25504,25509,25576,25581,25672,25675,25780,25784,25787,25793,25937,25941,25944,25958,25961,26006,26009,26117],[10,25032,25028],{"id":25033},"_2函数",[20037,25035,25037],{"id":25036},"_21函数概述","2.1函数概述",[28,25039,25040,25043],{},[31,25041,25042],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[31,25044,25045],{},"语法：",[146,25047,25052],{"className":25048,"code":25050,"language":25051,"meta":39},[25049],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[152,25053,25050],{"__ignoreMap":39},[24,25055,25056],{},"小案例",[146,25058,25060],{"className":20084,"code":25059,"language":20086,"meta":39,"style":39},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[152,25061,25062,25067,25090,25094,25111,25118],{"__ignoreMap":39},[155,25063,25064],{"class":157,"line":158},[155,25065,25066],{"class":161},"\u002F\u002Fnum1,num2形参\n",[155,25068,25069,25071,25074,25076,25078,25081,25083,25085,25088],{"class":157,"line":46},[155,25070,15239],{"class":167},[155,25072,25073],{"class":226}," add",[155,25075,230],{"class":171},[155,25077,15239],{"class":167},[155,25079,25080],{"class":323}," num1",[155,25082,332],{"class":171},[155,25084,15239],{"class":167},[155,25086,25087],{"class":323}," num2",[155,25089,363],{"class":171},[155,25091,25092],{"class":157,"line":121},[155,25093,3008],{"class":171},[155,25095,25096,25098,25101,25103,25106,25108],{"class":157,"line":180},[155,25097,21872],{"class":167},[155,25099,25100],{"class":171}," sum",[155,25102,317],{"class":167},[155,25104,25105],{"class":171},"num1",[155,25107,1274],{"class":167},[155,25109,25110],{"class":171},"num2;\n",[155,25112,25113,25115],{"class":157,"line":194},[155,25114,1692],{"class":167},[155,25116,25117],{"class":171}," sum;\n",[155,25119,25120],{"class":157,"line":200},[155,25121,21475],{"class":171},[20037,25123,25125],{"id":25124},"_22函数调用","2.2函数调用",[24,25127,25128],{},"调用刚刚写的求和函数",[146,25130,25132],{"className":20084,"code":25131,"language":20086,"meta":39,"style":39},"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",[152,25133,25134,25142,25146,25151,25163,25175,25184,25189,25201],{"__ignoreMap":39},[155,25135,25136,25138,25140],{"class":157,"line":158},[155,25137,15239],{"class":167},[155,25139,21861],{"class":226},[155,25141,294],{"class":171},[155,25143,25144],{"class":157,"line":46},[155,25145,3008],{"class":171},[155,25147,25148],{"class":157,"line":121},[155,25149,25150],{"class":161},"    \u002F\u002Fa,b实参\n",[155,25152,25153,25155,25157,25159,25161],{"class":157,"line":180},[155,25154,21872],{"class":167},[155,25156,21311],{"class":171},[155,25158,317],{"class":167},[155,25160,1109],{"class":263},[155,25162,21206],{"class":171},[155,25164,25165,25167,25169,25171,25173],{"class":157,"line":194},[155,25166,21872],{"class":167},[155,25168,22710],{"class":171},[155,25170,317],{"class":167},[155,25172,1109],{"class":263},[155,25174,21206],{"class":171},[155,25176,25177,25179,25181],{"class":157,"line":200},[155,25178,21899],{"class":171},[155,25180,21342],{"class":167},[155,25182,25183],{"class":171},"a,b;\n",[155,25185,25186],{"class":157,"line":213},[155,25187,25188],{"class":161},"    \u002F\u002F调用函数时，实参值传给了形参\n",[155,25190,25191,25193,25195,25198],{"class":157,"line":220},[155,25192,21461],{"class":171},[155,25194,21089],{"class":167},[155,25196,25197],{"class":226},"add",[155,25199,25200],{"class":171},"(a,b);\n",[155,25202,25203],{"class":157,"line":245},[155,25204,21475],{"class":171},[20037,25206,25208],{"id":25207},"_23值传递","2.3值传递",[24,25210,25211],{},"值传递就是函数调用时实参将数值传给形参",[24,25213,25214],{},"值传递时，如果形参发生任何改变，不会影响实参",[24,25216,25217],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[146,25219,25221],{"className":20084,"code":25220,"language":20086,"meta":39,"style":39},"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",[152,25222,25223,25245,25249,25262,25279,25297,25308,25317,25326,25339,25355,25371,25380,25384,25392,25396,25408,25420,25427],{"__ignoreMap":39},[155,25224,25225,25228,25231,25233,25235,25237,25239,25241,25243],{"class":157,"line":158},[155,25226,25227],{"class":167},"void",[155,25229,25230],{"class":226}," swap",[155,25232,230],{"class":171},[155,25234,15239],{"class":167},[155,25236,25080],{"class":323},[155,25238,332],{"class":171},[155,25240,15239],{"class":167},[155,25242,25087],{"class":323},[155,25244,363],{"class":171},[155,25246,25247],{"class":157,"line":46},[155,25248,3008],{"class":171},[155,25250,25251,25253,25255,25258,25260],{"class":157,"line":121},[155,25252,21461],{"class":171},[155,25254,21089],{"class":167},[155,25256,25257],{"class":732},"\"交换前：\"",[155,25259,21089],{"class":167},[155,25261,21111],{"class":171},[155,25263,25264,25266,25268,25271,25273,25275,25277],{"class":157,"line":180},[155,25265,21461],{"class":171},[155,25267,21089],{"class":167},[155,25269,25270],{"class":732},"\"num1=\"",[155,25272,21089],{"class":167},[155,25274,25105],{"class":171},[155,25276,21089],{"class":167},[155,25278,21111],{"class":171},[155,25280,25281,25283,25285,25288,25290,25293,25295],{"class":157,"line":194},[155,25282,21461],{"class":171},[155,25284,21089],{"class":167},[155,25286,25287],{"class":732},"\"num2=\"",[155,25289,21089],{"class":167},[155,25291,25292],{"class":171},"num2",[155,25294,21089],{"class":167},[155,25296,21111],{"class":171},[155,25298,25299,25301,25303,25305],{"class":157,"line":200},[155,25300,21872],{"class":167},[155,25302,24121],{"class":171},[155,25304,317],{"class":167},[155,25306,25307],{"class":171},"num1;\n",[155,25309,25310,25313,25315],{"class":157,"line":213},[155,25311,25312],{"class":171},"    num1",[155,25314,317],{"class":167},[155,25316,25110],{"class":171},[155,25318,25319,25322,25324],{"class":157,"line":220},[155,25320,25321],{"class":171},"    num2",[155,25323,317],{"class":167},[155,25325,24146],{"class":171},[155,25327,25328,25330,25332,25335,25337],{"class":157,"line":245},[155,25329,21461],{"class":171},[155,25331,21089],{"class":167},[155,25333,25334],{"class":732},"\"交换后：\"",[155,25336,21089],{"class":167},[155,25338,21111],{"class":171},[155,25340,25341,25343,25345,25347,25349,25351,25353],{"class":157,"line":251},[155,25342,21461],{"class":171},[155,25344,21089],{"class":167},[155,25346,25270],{"class":732},[155,25348,21089],{"class":167},[155,25350,25105],{"class":171},[155,25352,21089],{"class":167},[155,25354,21111],{"class":171},[155,25356,25357,25359,25361,25363,25365,25367,25369],{"class":157,"line":257},[155,25358,21461],{"class":171},[155,25360,21089],{"class":167},[155,25362,25287],{"class":732},[155,25364,21089],{"class":167},[155,25366,25292],{"class":171},[155,25368,21089],{"class":167},[155,25370,21111],{"class":171},[155,25372,25373,25375,25377],{"class":157,"line":270},[155,25374,1692],{"class":167},[155,25376,20144],{"class":171},[155,25378,25379],{"class":161},"\u002F\u002F或者不写\n",[155,25381,25382],{"class":157,"line":276},[155,25383,21475],{"class":171},[155,25385,25386,25388,25390],{"class":157,"line":297},[155,25387,15239],{"class":167},[155,25389,21861],{"class":226},[155,25391,294],{"class":171},[155,25393,25394],{"class":157,"line":302},[155,25395,3008],{"class":171},[155,25397,25398,25400,25402,25404,25406],{"class":157,"line":308},[155,25399,21872],{"class":167},[155,25401,21311],{"class":171},[155,25403,317],{"class":167},[155,25405,565],{"class":263},[155,25407,21206],{"class":171},[155,25409,25410,25412,25414,25416,25418],{"class":157,"line":366},[155,25411,21872],{"class":167},[155,25413,22710],{"class":171},[155,25415,317],{"class":167},[155,25417,3458],{"class":263},[155,25419,21206],{"class":171},[155,25421,25422,25425],{"class":157,"line":379},[155,25423,25424],{"class":226},"    swap",[155,25426,25200],{"class":171},[155,25428,25429],{"class":157,"line":385},[155,25430,21475],{"class":171},[20037,25432,25434],{"id":25433},"_24函数的常见形式","2.4函数的常见形式",[28,25436,25437],{},[31,25438,25439],{},"无参无返",[146,25441,25443],{"className":20084,"code":25442,"language":20086,"meta":39,"style":39},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[152,25444,25445,25454,25458,25471,25475,25483,25487,25492,25500],{"__ignoreMap":39},[155,25446,25447,25449,25452],{"class":157,"line":158},[155,25448,25227],{"class":167},[155,25450,25451],{"class":226}," test01",[155,25453,294],{"class":171},[155,25455,25456],{"class":157,"line":46},[155,25457,3008],{"class":171},[155,25459,25460,25462,25464,25467,25469],{"class":157,"line":121},[155,25461,21461],{"class":171},[155,25463,21089],{"class":167},[155,25465,25466],{"class":732},"\"你好\"",[155,25468,21089],{"class":167},[155,25470,21111],{"class":171},[155,25472,25473],{"class":157,"line":180},[155,25474,21475],{"class":171},[155,25476,25477,25479,25481],{"class":157,"line":194},[155,25478,15239],{"class":167},[155,25480,21861],{"class":226},[155,25482,294],{"class":171},[155,25484,25485],{"class":157,"line":200},[155,25486,3008],{"class":171},[155,25488,25489],{"class":157,"line":213},[155,25490,25491],{"class":161},"    \u002F\u002F函数调用\n",[155,25493,25494,25497],{"class":157,"line":220},[155,25495,25496],{"class":226},"    test01",[155,25498,25499],{"class":171},"();\n",[155,25501,25502],{"class":157,"line":245},[155,25503,21475],{"class":171},[28,25505,25506],{"start":46},[31,25507,25508],{},"有参无返",[146,25510,25512],{"className":20084,"code":25511,"language":20086,"meta":39,"style":39},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[152,25513,25514,25529,25533,25545,25549,25557,25561,25572],{"__ignoreMap":39},[155,25515,25516,25518,25521,25523,25525,25527],{"class":157,"line":158},[155,25517,25227],{"class":167},[155,25519,25520],{"class":226}," test02",[155,25522,230],{"class":171},[155,25524,15239],{"class":167},[155,25526,21311],{"class":323},[155,25528,363],{"class":171},[155,25530,25531],{"class":157,"line":46},[155,25532,3008],{"class":171},[155,25534,25535,25537,25539,25541,25543],{"class":157,"line":121},[155,25536,21461],{"class":171},[155,25538,21089],{"class":167},[155,25540,25466],{"class":732},[155,25542,21089],{"class":167},[155,25544,21111],{"class":171},[155,25546,25547],{"class":157,"line":180},[155,25548,21475],{"class":171},[155,25550,25551,25553,25555],{"class":157,"line":194},[155,25552,15239],{"class":167},[155,25554,21861],{"class":226},[155,25556,294],{"class":171},[155,25558,25559],{"class":157,"line":200},[155,25560,3008],{"class":171},[155,25562,25563,25566,25568,25570],{"class":157,"line":213},[155,25564,25565],{"class":226},"    test02",[155,25567,230],{"class":171},[155,25569,20389],{"class":263},[155,25571,22596],{"class":171},[155,25573,25574],{"class":157,"line":220},[155,25575,21475],{"class":171},[28,25577,25578],{"start":121},[31,25579,25580],{},"无参有返",[146,25582,25584],{"className":20084,"code":25583,"language":20086,"meta":39,"style":39},"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",[152,25585,25586,25595,25599,25611,25620,25624,25632,25636,25649,25668],{"__ignoreMap":39},[155,25587,25588,25590,25593],{"class":157,"line":158},[155,25589,15239],{"class":167},[155,25591,25592],{"class":226}," test03",[155,25594,294],{"class":171},[155,25596,25597],{"class":157,"line":46},[155,25598,3008],{"class":171},[155,25600,25601,25603,25605,25607,25609],{"class":157,"line":121},[155,25602,21461],{"class":171},[155,25604,21089],{"class":167},[155,25606,25466],{"class":732},[155,25608,21089],{"class":167},[155,25610,21111],{"class":171},[155,25612,25613,25615,25618],{"class":157,"line":180},[155,25614,1692],{"class":167},[155,25616,25617],{"class":263}," 100",[155,25619,21206],{"class":171},[155,25621,25622],{"class":157,"line":194},[155,25623,21475],{"class":171},[155,25625,25626,25628,25630],{"class":157,"line":200},[155,25627,15239],{"class":167},[155,25629,21861],{"class":226},[155,25631,294],{"class":171},[155,25633,25634],{"class":157,"line":213},[155,25635,3008],{"class":171},[155,25637,25638,25640,25642,25644,25647],{"class":157,"line":220},[155,25639,21872],{"class":167},[155,25641,25080],{"class":171},[155,25643,317],{"class":167},[155,25645,25646],{"class":226},"test03",[155,25648,25499],{"class":171},[155,25650,25651,25653,25655,25657,25659,25661,25663,25665],{"class":157,"line":245},[155,25652,21461],{"class":171},[155,25654,21089],{"class":167},[155,25656,25270],{"class":732},[155,25658,21089],{"class":167},[155,25660,25105],{"class":171},[155,25662,21089],{"class":167},[155,25664,21154],{"class":171},[155,25666,25667],{"class":161}," \u002F\u002F100\n",[155,25669,25670],{"class":157,"line":251},[155,25671,21475],{"class":171},[24,25673,25674],{},"4.有参有返",[146,25676,25678],{"className":20084,"code":25677,"language":20086,"meta":39,"style":39},"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",[152,25679,25680,25695,25699,25712,25718,25722,25731,25735,25747,25761,25776],{"__ignoreMap":39},[155,25681,25682,25684,25687,25689,25691,25693],{"class":157,"line":158},[155,25683,15239],{"class":167},[155,25685,25686],{"class":226}," test04",[155,25688,230],{"class":171},[155,25690,15239],{"class":167},[155,25692,21311],{"class":323},[155,25694,363],{"class":171},[155,25696,25697],{"class":157,"line":46},[155,25698,3008],{"class":171},[155,25700,25701,25703,25705,25708,25710],{"class":157,"line":121},[155,25702,21461],{"class":171},[155,25704,21089],{"class":167},[155,25706,25707],{"class":732},"\"hello\"",[155,25709,21089],{"class":167},[155,25711,21111],{"class":171},[155,25713,25714,25716],{"class":157,"line":180},[155,25715,1692],{"class":167},[155,25717,21345],{"class":171},[155,25719,25720],{"class":157,"line":194},[155,25721,21475],{"class":171},[155,25723,25724,25726,25729],{"class":157,"line":200},[155,25725,15239],{"class":167},[155,25727,25728],{"class":226}," mian",[155,25730,294],{"class":171},[155,25732,25733],{"class":157,"line":213},[155,25734,3008],{"class":171},[155,25736,25737,25739,25741,25743,25745],{"class":157,"line":220},[155,25738,21872],{"class":167},[155,25740,22710],{"class":171},[155,25742,317],{"class":167},[155,25744,329],{"class":263},[155,25746,21206],{"class":171},[155,25748,25749,25751,25753,25755,25758],{"class":157,"line":245},[155,25750,21872],{"class":167},[155,25752,22726],{"class":171},[155,25754,317],{"class":167},[155,25756,25757],{"class":226},"test04",[155,25759,25760],{"class":171},"(b);\n",[155,25762,25763,25765,25767,25769,25771,25773],{"class":157,"line":251},[155,25764,21461],{"class":171},[155,25766,21089],{"class":167},[155,25768,20367],{"class":171},[155,25770,21089],{"class":167},[155,25772,21154],{"class":171},[155,25774,25775],{"class":161}," \u002F\u002F1\n",[155,25777,25778],{"class":157,"line":257},[155,25779,21475],{"class":171},[20037,25781,25783],{"id":25782},"_25函数的声明","2.5函数的声明",[24,25785,25786],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[24,25788,25789,25790],{},"函数的",[20234,25791,25792],{},"声明可以多次，但是函数的定义只能有一次",[146,25794,25796],{"className":20084,"code":25795,"language":20086,"meta":39,"style":39},"\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",[152,25797,25798,25803,25808,25833,25842,25846,25858,25870,25886,25890,25910,25914,25933],{"__ignoreMap":39},[155,25799,25800],{"class":157,"line":158},[155,25801,25802],{"class":161},"\u002F\u002F函数声明\n",[155,25804,25805],{"class":157,"line":46},[155,25806,25807],{"class":161},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[155,25809,25810,25812,25815,25817,25819,25821,25823,25825,25827,25830],{"class":157,"line":121},[155,25811,15239],{"class":167},[155,25813,25814],{"class":226}," max",[155,25816,230],{"class":171},[155,25818,15239],{"class":167},[155,25820,21311],{"class":323},[155,25822,332],{"class":171},[155,25824,15239],{"class":167},[155,25826,22710],{"class":323},[155,25828,25829],{"class":171},");",[155,25831,25832],{"class":161},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[155,25834,25835,25837,25839],{"class":157,"line":180},[155,25836,15239],{"class":167},[155,25838,21861],{"class":226},[155,25840,25841],{"class":171},"() \n",[155,25843,25844],{"class":157,"line":194},[155,25845,3008],{"class":171},[155,25847,25848,25850,25852,25854,25856],{"class":157,"line":200},[155,25849,21872],{"class":167},[155,25851,21311],{"class":171},[155,25853,317],{"class":167},[155,25855,565],{"class":263},[155,25857,21206],{"class":171},[155,25859,25860,25862,25864,25866,25868],{"class":157,"line":213},[155,25861,21872],{"class":167},[155,25863,22710],{"class":171},[155,25865,317],{"class":167},[155,25867,3458],{"class":263},[155,25869,21206],{"class":171},[155,25871,25872,25874,25876,25879,25882,25884],{"class":157,"line":220},[155,25873,21461],{"class":171},[155,25875,21089],{"class":167},[155,25877,25878],{"class":226},"max",[155,25880,25881],{"class":171},"(a,b)",[155,25883,21089],{"class":167},[155,25885,21111],{"class":171},[155,25887,25888],{"class":157,"line":245},[155,25889,21475],{"class":171},[155,25891,25892,25894,25896,25898,25900,25902,25904,25906,25908],{"class":157,"line":251},[155,25893,15239],{"class":167},[155,25895,25814],{"class":226},[155,25897,230],{"class":171},[155,25899,15239],{"class":167},[155,25901,21311],{"class":323},[155,25903,332],{"class":171},[155,25905,15239],{"class":167},[155,25907,22710],{"class":323},[155,25909,363],{"class":171},[155,25911,25912],{"class":157,"line":257},[155,25913,3008],{"class":171},[155,25915,25916,25918,25920,25922,25924,25926,25928,25930],{"class":157,"line":270},[155,25917,1692],{"class":167},[155,25919,21311],{"class":171},[155,25921,1148],{"class":167},[155,25923,20342],{"class":171},[155,25925,21031],{"class":167},[155,25927,20318],{"class":171},[155,25929,3017],{"class":167},[155,25931,25932],{"class":171},"b;\n",[155,25934,25935],{"class":157,"line":276},[155,25936,21475],{"class":171},[20037,25938,25940],{"id":25939},"_26函数的分文件编写","2.6函数的分文件编写",[24,25942,25943],{},"4个步骤：",[21052,25945,25946,25949,25952,25955],{},[31,25947,25948],{},"1.创建后缀名为.h的头文件",[31,25950,25951],{},"2.创建后缀名为.cpp的源文件",[31,25953,25954],{},"3.在头文件中写函数的定义",[31,25956,25957],{},"4.在源文件中写函数的定义\n示例：",[24,25959,25960],{},"头文件：swap.h",[146,25962,25964],{"className":20084,"code":25963,"language":20086,"meta":39,"style":39},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[152,25965,25966,25972,25982,25986],{"__ignoreMap":39},[155,25967,25968,25970],{"class":157,"line":158},[155,25969,21838],{"class":167},[155,25971,21841],{"class":732},[155,25973,25974,25976,25978,25980],{"class":157,"line":46},[155,25975,21846],{"class":167},[155,25977,21849],{"class":167},[155,25979,21852],{"class":226},[155,25981,21206],{"class":171},[155,25983,25984],{"class":157,"line":121},[155,25985,25802],{"class":161},[155,25987,25988,25990,25992,25994,25996,25998,26000,26002,26004],{"class":157,"line":180},[155,25989,25227],{"class":167},[155,25991,25230],{"class":226},[155,25993,230],{"class":171},[155,25995,15239],{"class":167},[155,25997,21311],{"class":323},[155,25999,332],{"class":171},[155,26001,15239],{"class":167},[155,26003,22710],{"class":323},[155,26005,22596],{"class":171},[24,26007,26008],{},"源文件：swap.cpp",[146,26010,26012],{"className":20084,"code":26011,"language":20086,"meta":39,"style":39},"#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",[152,26013,26014,26021,26026,26046,26050,26061,26070,26079,26096,26113],{"__ignoreMap":39},[155,26015,26016,26018],{"class":157,"line":158},[155,26017,21838],{"class":167},[155,26019,26020],{"class":732}," \"swap.h\"\n",[155,26022,26023],{"class":157,"line":46},[155,26024,26025],{"class":161},"\u002F\u002F函数的定义\n",[155,26027,26028,26030,26032,26034,26036,26038,26040,26042,26044],{"class":157,"line":121},[155,26029,25227],{"class":167},[155,26031,25230],{"class":226},[155,26033,230],{"class":171},[155,26035,15239],{"class":167},[155,26037,21311],{"class":323},[155,26039,332],{"class":171},[155,26041,15239],{"class":167},[155,26043,22710],{"class":323},[155,26045,363],{"class":171},[155,26047,26048],{"class":157,"line":180},[155,26049,3008],{"class":171},[155,26051,26052,26054,26056,26058],{"class":157,"line":194},[155,26053,21872],{"class":167},[155,26055,24121],{"class":171},[155,26057,317],{"class":167},[155,26059,26060],{"class":171},"a;\n",[155,26062,26063,26066,26068],{"class":157,"line":200},[155,26064,26065],{"class":171},"    a",[155,26067,317],{"class":167},[155,26069,25932],{"class":171},[155,26071,26072,26075,26077],{"class":157,"line":213},[155,26073,26074],{"class":171},"    b",[155,26076,317],{"class":167},[155,26078,24146],{"class":171},[155,26080,26081,26083,26085,26088,26090,26092,26094],{"class":157,"line":220},[155,26082,21461],{"class":171},[155,26084,21089],{"class":167},[155,26086,26087],{"class":732},"\"a=\"",[155,26089,21089],{"class":167},[155,26091,20318],{"class":171},[155,26093,21089],{"class":167},[155,26095,21111],{"class":171},[155,26097,26098,26100,26102,26105,26107,26109,26111],{"class":157,"line":245},[155,26099,21461],{"class":171},[155,26101,21089],{"class":167},[155,26103,26104],{"class":732},"\"b=\"",[155,26106,21089],{"class":167},[155,26108,20342],{"class":171},[155,26110,21089],{"class":167},[155,26112,21111],{"class":171},[155,26114,26115],{"class":157,"line":251},[155,26116,21475],{"class":171},[20011,26118,26119],{},"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":39,"searchDepth":46,"depth":46,"links":26121},[26122,26123,26124,26125,26126,26127],{"id":25036,"depth":46,"text":25037},{"id":25124,"depth":46,"text":25125},{"id":25207,"depth":46,"text":25208},{"id":25433,"depth":46,"text":25434},{"id":25782,"depth":46,"text":25783},{"id":25939,"depth":46,"text":25940},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":25028,"description":39},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":26134,"title":26135,"body":26136,"description":26143,"extension":20021,"meta":27544,"navigation":216,"path":27545,"seo":27546,"stem":27547,"__hash__":27548},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":26137,"toc":27534},[26138,26141,26144,26148,26310,26314,26317,26320,26323,26326,26466,26470,26473,26476,26479,26544,26548,26553,26620,26623,26627,26630,26641,26646,26666,26669,26674,26693,26696,26700,26719,26722,26726,26960,26964,26967,26970,26973,27135,27138,27142,27145,27151,27531],[10,26139,26135],{"id":26140},"_3指针",[24,26142,26143],{},"通过指针保存一个地址，指针就是个地址",[20037,26145,26147],{"id":26146},"_31定义指针","3.1定义指针",[146,26149,26151],{"className":20084,"code":26150,"language":20086,"meta":39,"style":39},"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",[152,26152,26153,26161,26165,26170,26182,26187,26195,26205,26223,26243,26247,26252,26257,26262,26276,26292,26306],{"__ignoreMap":39},[155,26154,26155,26157,26159],{"class":157,"line":158},[155,26156,15239],{"class":167},[155,26158,21861],{"class":226},[155,26160,294],{"class":171},[155,26162,26163],{"class":157,"line":46},[155,26164,3008],{"class":171},[155,26166,26167],{"class":157,"line":121},[155,26168,26169],{"class":161},"    \u002F\u002F1.定义指针\n",[155,26171,26172,26174,26176,26178,26180],{"class":157,"line":180},[155,26173,21872],{"class":167},[155,26175,21311],{"class":171},[155,26177,317],{"class":167},[155,26179,565],{"class":263},[155,26181,21206],{"class":171},[155,26183,26184],{"class":157,"line":194},[155,26185,26186],{"class":161},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[155,26188,26189,26192],{"class":157,"line":200},[155,26190,26191],{"class":167},"    int*",[155,26193,26194],{"class":171},"p;\n",[155,26196,26197,26200,26203],{"class":157,"line":213},[155,26198,26199],{"class":171},"    p",[155,26201,26202],{"class":167},"=&",[155,26204,26060],{"class":171},[155,26206,26207,26209,26211,26214,26217,26219,26221],{"class":157,"line":220},[155,26208,21461],{"class":171},[155,26210,21089],{"class":167},[155,26212,26213],{"class":732},"\"a的地址为：\"",[155,26215,26216],{"class":167},"\u003C\u003C&",[155,26218,20318],{"class":171},[155,26220,21089],{"class":167},[155,26222,21111],{"class":171},[155,26224,26225,26227,26229,26232,26234,26236,26238,26240],{"class":157,"line":245},[155,26226,21461],{"class":171},[155,26228,21089],{"class":167},[155,26230,26231],{"class":732},"\"指针p为：\"",[155,26233,21089],{"class":167},[155,26235,24],{"class":171},[155,26237,21089],{"class":167},[155,26239,21154],{"class":171},[155,26241,26242],{"class":161},"\u002F\u002F指针p表示的就是a的地址\n",[155,26244,26245],{"class":157,"line":251},[155,26246,217],{"emptyLinePlaceholder":216},[155,26248,26249],{"class":157,"line":257},[155,26250,26251],{"class":161},"    \u002F\u002F2.使用指针\n",[155,26253,26254],{"class":157,"line":270},[155,26255,26256],{"class":161},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[155,26258,26259],{"class":157,"line":276},[155,26260,26261],{"class":161},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[155,26263,26264,26267,26269,26271,26274],{"class":157,"line":297},[155,26265,26266],{"class":167},"    *",[155,26268,24],{"class":171},[155,26270,317],{"class":167},[155,26272,26273],{"class":263},"1000",[155,26275,21206],{"class":171},[155,26277,26278,26280,26283,26285,26287,26289],{"class":157,"line":302},[155,26279,21461],{"class":171},[155,26281,26282],{"class":167},"\u003C\u003C*",[155,26284,24],{"class":171},[155,26286,21089],{"class":167},[155,26288,21154],{"class":171},[155,26290,26291],{"class":161},"\u002F\u002F1000\n",[155,26293,26294,26296,26298,26300,26302,26304],{"class":157,"line":308},[155,26295,21461],{"class":171},[155,26297,21089],{"class":167},[155,26299,20318],{"class":171},[155,26301,21089],{"class":167},[155,26303,21154],{"class":171},[155,26305,26291],{"class":161},[155,26307,26308],{"class":157,"line":366},[155,26309,21475],{"class":171},[20037,26311,26313],{"id":26312},"_32指针所占的内存空间","3.2指针所占的内存空间",[24,26315,26316],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[24,26318,26319],{},"在32位操作系统下：占用4个字节空间",[24,26321,26322],{},"在64位操作系统下：占用8个字节空间",[24,26324,26325],{},"上方是不管啥数据类型的",[146,26327,26329],{"className":20084,"code":26328,"language":20086,"meta":39,"style":39},"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",[152,26330,26331,26339,26343,26348,26360,26365,26370,26375,26388,26410,26436,26462],{"__ignoreMap":39},[155,26332,26333,26335,26337],{"class":157,"line":158},[155,26334,15239],{"class":167},[155,26336,21861],{"class":226},[155,26338,294],{"class":171},[155,26340,26341],{"class":157,"line":46},[155,26342,3008],{"class":171},[155,26344,26345],{"class":157,"line":121},[155,26346,26347],{"class":161},"    \u002F\u002F指针所占内存空间\n",[155,26349,26350,26352,26354,26356,26358],{"class":157,"line":180},[155,26351,21872],{"class":167},[155,26353,21311],{"class":171},[155,26355,317],{"class":167},[155,26357,565],{"class":263},[155,26359,21206],{"class":171},[155,26361,26362],{"class":157,"line":194},[155,26363,26364],{"class":161},"    \u002F\u002Fint *p;\n",[155,26366,26367],{"class":157,"line":200},[155,26368,26369],{"class":161},"    \u002F\u002Fp=&a;\n",[155,26371,26372],{"class":157,"line":213},[155,26373,26374],{"class":161},"    \u002F\u002F上述可以写为以下：\n",[155,26376,26377,26379,26382,26384,26386],{"class":157,"line":220},[155,26378,21872],{"class":167},[155,26380,26381],{"class":167}," *",[155,26383,24],{"class":171},[155,26385,26202],{"class":167},[155,26387,26060],{"class":171},[155,26389,26390,26393,26395,26398,26400,26403,26405,26407],{"class":157,"line":245},[155,26391,26392],{"class":171},"    cout ",[155,26394,21089],{"class":167},[155,26396,26397],{"class":732},"\"sizeof(int *)\"",[155,26399,21285],{"class":167},[155,26401,26402],{"class":171},"(p)",[155,26404,21089],{"class":167},[155,26406,21154],{"class":171},[155,26408,26409],{"class":161},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[155,26411,26412,26414,26416,26418,26420,26422,26424,26426,26428,26430,26433],{"class":157,"line":251},[155,26413,26392],{"class":171},[155,26415,21089],{"class":167},[155,26417,26397],{"class":732},[155,26419,21285],{"class":167},[155,26421,230],{"class":171},[155,26423,15239],{"class":167},[155,26425,26381],{"class":167},[155,26427,20501],{"class":171},[155,26429,21089],{"class":167},[155,26431,26432],{"class":171},"endl",[155,26434,26435],{"class":161},"  \u002F\u002F4字节(32位的话)\n",[155,26437,26438,26440,26442,26445,26447,26449,26451,26453,26455,26457,26459],{"class":157,"line":257},[155,26439,26392],{"class":171},[155,26441,21089],{"class":167},[155,26443,26444],{"class":732},"\"sizeof(char *)\"",[155,26446,21285],{"class":167},[155,26448,230],{"class":171},[155,26450,20182],{"class":167},[155,26452,26381],{"class":167},[155,26454,20501],{"class":171},[155,26456,21089],{"class":167},[155,26458,21154],{"class":171},[155,26460,26461],{"class":161}," \u002F\u002F4字节(32位的话)\n",[155,26463,26464],{"class":157,"line":270},[155,26465,21475],{"class":171},[20037,26467,26469],{"id":26468},"_33空指针","3.3空指针",[24,26471,26472],{},"空指针：指针变量指向内存中编号为0的空间",[24,26474,26475],{},"用途：初始化指针变量",[24,26477,26478],{},"注意：空指针指向的内存是不可以访问的",[146,26480,26482],{"className":20084,"code":26481,"language":20086,"meta":39,"style":39},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[152,26483,26484,26492,26496,26501,26515,26520,26535,26540],{"__ignoreMap":39},[155,26485,26486,26488,26490],{"class":157,"line":158},[155,26487,15239],{"class":167},[155,26489,21861],{"class":226},[155,26491,294],{"class":171},[155,26493,26494],{"class":157,"line":46},[155,26495,3008],{"class":171},[155,26497,26498],{"class":157,"line":121},[155,26499,26500],{"class":161},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[155,26502,26503,26505,26507,26509,26511,26513],{"class":157,"line":180},[155,26504,21872],{"class":167},[155,26506,26381],{"class":167},[155,26508,24],{"class":171},[155,26510,317],{"class":167},[155,26512,22279],{"class":263},[155,26514,21206],{"class":171},[155,26516,26517],{"class":157,"line":194},[155,26518,26519],{"class":161},"    \u002F\u002F2.空指针不能进行访问\n",[155,26521,26522,26524,26526,26528,26530,26532],{"class":157,"line":200},[155,26523,26266],{"class":167},[155,26525,24],{"class":171},[155,26527,317],{"class":167},[155,26529,20389],{"class":263},[155,26531,20144],{"class":171},[155,26533,26534],{"class":161},"\u002F\u002F直接报错，压根不能访问\n",[155,26536,26537],{"class":157,"line":213},[155,26538,26539],{"class":161},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[155,26541,26542],{"class":157,"line":220},[155,26543,21475],{"class":171},[20037,26545,26547],{"id":26546},"_34野指针","3.4野指针",[24,26549,26550],{},[20234,26551,26552],{},"指针变量指向非法的内存空间",[146,26554,26556],{"className":20084,"code":26555,"language":20086,"meta":39,"style":39},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[152,26557,26558,26566,26570,26599,26604,26616],{"__ignoreMap":39},[155,26559,26560,26562,26564],{"class":157,"line":158},[155,26561,15239],{"class":167},[155,26563,21861],{"class":226},[155,26565,294],{"class":171},[155,26567,26568],{"class":157,"line":46},[155,26569,3008],{"class":171},[155,26571,26572,26574,26576,26578,26580,26582,26584,26586,26588,26591,26594,26596],{"class":157,"line":121},[155,26573,21872],{"class":167},[155,26575,26381],{"class":167},[155,26577,24],{"class":171},[155,26579,317],{"class":167},[155,26581,230],{"class":171},[155,26583,15239],{"class":167},[155,26585,26381],{"class":167},[155,26587,20501],{"class":171},[155,26589,26590],{"class":167},"0x",[155,26592,26593],{"class":263},"1100",[155,26595,20144],{"class":171},[155,26597,26598],{"class":161}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[155,26600,26601],{"class":157,"line":180},[155,26602,26603],{"class":161},"    \u002F\u002F访问野指针报错\n",[155,26605,26606,26608,26610,26612,26614],{"class":157,"line":194},[155,26607,21461],{"class":171},[155,26609,26282],{"class":167},[155,26611,24],{"class":171},[155,26613,21089],{"class":167},[155,26615,21111],{"class":171},[155,26617,26618],{"class":157,"line":200},[155,26619,21475],{"class":171},[24,26621,26622],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[20037,26624,26626],{"id":26625},"_35const修饰指针","3.5const修饰指针",[24,26628,26629],{},"三种情况：",[21052,26631,26632,26635,26638],{},[31,26633,26634],{},"const修饰指针 常量指针",[31,26636,26637],{},"const修饰常量 指针常量",[31,26639,26640],{},"const即修饰指针，又修饰常量",[28,26642,26643],{},[31,26644,26645],{},"常量指针",[146,26647,26649],{"className":20084,"code":26648,"language":20086,"meta":39,"style":39},"const int *p=&a;\n",[152,26650,26651],{"__ignoreMap":39},[155,26652,26653,26656,26658,26660,26662,26664],{"class":157,"line":158},[155,26654,26655],{"class":167},"const",[155,26657,22269],{"class":167},[155,26659,26381],{"class":167},[155,26661,24],{"class":171},[155,26663,26202],{"class":167},[155,26665,26060],{"class":171},[24,26667,26668],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[28,26670,26671],{"start":46},[31,26672,26673],{},"指针常量",[146,26675,26677],{"className":20084,"code":26676,"language":20086,"meta":39,"style":39},"int *const p=&a;\n",[152,26678,26679],{"__ignoreMap":39},[155,26680,26681,26683,26686,26689,26691],{"class":157,"line":158},[155,26682,15239],{"class":167},[155,26684,26685],{"class":167}," *const",[155,26687,26688],{"class":171}," p",[155,26690,26202],{"class":167},[155,26692,26060],{"class":171},[24,26694,26695],{},"指针的指向不可以改，指针指向的值可以改",[28,26697,26698],{"start":121},[31,26699,26640],{},[146,26701,26703],{"className":20084,"code":26702,"language":20086,"meta":39,"style":39},"const int *const p=&a;\n",[152,26704,26705],{"__ignoreMap":39},[155,26706,26707,26709,26711,26713,26715,26717],{"class":157,"line":158},[155,26708,26655],{"class":167},[155,26710,22269],{"class":167},[155,26712,26685],{"class":167},[155,26714,26688],{"class":171},[155,26716,26202],{"class":167},[155,26718,26060],{"class":171},[24,26720,26721],{},"指针的指向和指针指向的值都不可以改变",[20037,26723,26725],{"id":26724},"_36指针和数组","3.6指针和数组",[146,26727,26729],{"className":20084,"code":26728,"language":20086,"meta":39,"style":39},"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",[152,26730,26731,26739,26743,26748,26802,26823,26839,26855,26866,26883,26888,26902,26928,26932,26944,26952,26956],{"__ignoreMap":39},[155,26732,26733,26735,26737],{"class":157,"line":158},[155,26734,15239],{"class":167},[155,26736,21861],{"class":226},[155,26738,294],{"class":171},[155,26740,26741],{"class":157,"line":46},[155,26742,3008],{"class":171},[155,26744,26745],{"class":157,"line":121},[155,26746,26747],{"class":161},"    \u002F\u002F利用指针访问数组中的元素\n",[155,26749,26750,26752,26754,26756,26758,26760,26762,26764,26766,26768,26770,26772,26774,26776,26778,26780,26782,26784,26786,26788,26790,26792,26794,26796,26798,26800],{"class":157,"line":180},[155,26751,21872],{"class":167},[155,26753,23831],{"class":171},[155,26755,565],{"class":263},[155,26757,2813],{"class":171},[155,26759,317],{"class":167},[155,26761,2705],{"class":171},[155,26763,329],{"class":263},[155,26765,332],{"class":171},[155,26767,360],{"class":263},[155,26769,332],{"class":171},[155,26771,4444],{"class":263},[155,26773,332],{"class":171},[155,26775,1264],{"class":263},[155,26777,332],{"class":171},[155,26779,350],{"class":263},[155,26781,332],{"class":171},[155,26783,340],{"class":263},[155,26785,332],{"class":171},[155,26787,8408],{"class":263},[155,26789,332],{"class":171},[155,26791,1636],{"class":263},[155,26793,332],{"class":171},[155,26795,20492],{"class":263},[155,26797,332],{"class":171},[155,26799,565],{"class":263},[155,26801,23863],{"class":171},[155,26803,26804,26806,26808,26811,26813,26815,26817,26819,26821],{"class":157,"line":194},[155,26805,21461],{"class":171},[155,26807,21089],{"class":167},[155,26809,26810],{"class":732},"\"数组的第一个元素为：\"",[155,26812,21089],{"class":167},[155,26814,23775],{"class":171},[155,26816,1109],{"class":263},[155,26818,2813],{"class":171},[155,26820,21089],{"class":167},[155,26822,21111],{"class":171},[155,26824,26825,26827,26829,26831,26833,26836],{"class":157,"line":200},[155,26826,21872],{"class":167},[155,26828,26381],{"class":167},[155,26830,24],{"class":171},[155,26832,317],{"class":167},[155,26834,26835],{"class":171},"arr;",[155,26837,26838],{"class":161},"\u002F\u002F注意数才要加取地址符号&\n",[155,26840,26841,26843,26845,26847,26849,26851,26853],{"class":157,"line":213},[155,26842,21461],{"class":171},[155,26844,21089],{"class":167},[155,26846,26810],{"class":732},[155,26848,26282],{"class":167},[155,26850,24],{"class":171},[155,26852,21089],{"class":167},[155,26854,21111],{"class":171},[155,26856,26857,26859,26861,26863],{"class":157,"line":220},[155,26858,26199],{"class":171},[155,26860,22179],{"class":167},[155,26862,20144],{"class":171},[155,26864,26865],{"class":161}," \u002F\u002F让指针向后偏移4个字节\n",[155,26867,26868,26870,26872,26875,26877,26879,26881],{"class":157,"line":245},[155,26869,21461],{"class":171},[155,26871,21089],{"class":167},[155,26873,26874],{"class":732},"\"数组的第二个元素为：\"",[155,26876,26282],{"class":167},[155,26878,24],{"class":171},[155,26880,21089],{"class":167},[155,26882,21111],{"class":171},[155,26884,26885],{"class":157,"line":251},[155,26886,26887],{"class":161},"    \u002F\u002F利用指针遍历数组\n",[155,26889,26890,26892,26894,26897,26899],{"class":157,"line":257},[155,26891,21872],{"class":167},[155,26893,26381],{"class":167},[155,26895,26896],{"class":171},"p2",[155,26898,317],{"class":167},[155,26900,26901],{"class":171},"arr;\n",[155,26903,26904,26906,26908,26910,26912,26914,26916,26918,26920,26922,26924,26926],{"class":157,"line":270},[155,26905,2000],{"class":167},[155,26907,21561],{"class":171},[155,26909,15239],{"class":167},[155,26911,22907],{"class":171},[155,26913,317],{"class":167},[155,26915,1109],{"class":263},[155,26917,22914],{"class":171},[155,26919,20959],{"class":167},[155,26921,565],{"class":263},[155,26923,22914],{"class":171},[155,26925,22179],{"class":167},[155,26927,363],{"class":171},[155,26929,26930],{"class":157,"line":276},[155,26931,21917],{"class":171},[155,26933,26934,26936,26938,26940,26942],{"class":157,"line":297},[155,26935,23322],{"class":171},[155,26937,26282],{"class":167},[155,26939,26896],{"class":171},[155,26941,21089],{"class":167},[155,26943,21111],{"class":171},[155,26945,26946,26948,26950],{"class":157,"line":302},[155,26947,11475],{"class":171},[155,26949,22179],{"class":167},[155,26951,21206],{"class":171},[155,26953,26954],{"class":157,"line":308},[155,26955,22074],{"class":171},[155,26957,26958],{"class":157,"line":366},[155,26959,21475],{"class":171},[20037,26961,26963],{"id":26962},"_37指针和函数","3.7指针和函数",[24,26965,26966],{},"利用指针做函数参数，可以修改实参的值",[24,26968,26969],{},"值传递：只改变形参，不改变实参",[24,26971,26972],{},"地址传递：",[146,26974,26976],{"className":20084,"code":26975,"language":20086,"meta":39,"style":39},"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",[152,26977,26978,27003,27007,27019,27030,27040,27044,27052,27056,27068,27080,27085,27101,27116,27131],{"__ignoreMap":39},[155,26979,26980,26982,26984,26986,26988,26990,26993,26995,26997,26999,27001],{"class":157,"line":158},[155,26981,25227],{"class":167},[155,26983,25230],{"class":226},[155,26985,230],{"class":171},[155,26987,15239],{"class":167},[155,26989,26381],{"class":167},[155,26991,26992],{"class":323},"p1",[155,26994,332],{"class":171},[155,26996,15239],{"class":167},[155,26998,26381],{"class":167},[155,27000,26896],{"class":323},[155,27002,363],{"class":171},[155,27004,27005],{"class":157,"line":46},[155,27006,3008],{"class":171},[155,27008,27009,27011,27013,27016],{"class":157,"line":121},[155,27010,21872],{"class":167},[155,27012,24121],{"class":171},[155,27014,27015],{"class":167},"=*",[155,27017,27018],{"class":171},"p1;\n",[155,27020,27021,27023,27025,27027],{"class":157,"line":180},[155,27022,26266],{"class":167},[155,27024,26992],{"class":171},[155,27026,27015],{"class":167},[155,27028,27029],{"class":171},"p2;\n",[155,27031,27032,27034,27036,27038],{"class":157,"line":194},[155,27033,26266],{"class":167},[155,27035,26896],{"class":171},[155,27037,317],{"class":167},[155,27039,24146],{"class":171},[155,27041,27042],{"class":157,"line":200},[155,27043,21475],{"class":171},[155,27045,27046,27048,27050],{"class":157,"line":213},[155,27047,15239],{"class":167},[155,27049,21861],{"class":226},[155,27051,294],{"class":171},[155,27053,27054],{"class":157,"line":220},[155,27055,3008],{"class":171},[155,27057,27058,27060,27062,27064,27066],{"class":157,"line":245},[155,27059,21872],{"class":167},[155,27061,21311],{"class":171},[155,27063,317],{"class":167},[155,27065,565],{"class":263},[155,27067,21206],{"class":171},[155,27069,27070,27072,27074,27076,27078],{"class":157,"line":251},[155,27071,21872],{"class":167},[155,27073,22710],{"class":171},[155,27075,317],{"class":167},[155,27077,3458],{"class":263},[155,27079,21206],{"class":171},[155,27081,27082],{"class":157,"line":257},[155,27083,27084],{"class":161},"    \u002F\u002F地址传递\n",[155,27086,27087,27089,27091,27093,27096,27098],{"class":157,"line":270},[155,27088,25424],{"class":226},[155,27090,230],{"class":171},[155,27092,20428],{"class":167},[155,27094,27095],{"class":171},"a,",[155,27097,20428],{"class":167},[155,27099,27100],{"class":171},"b);\n",[155,27102,27103,27105,27107,27109,27111,27113],{"class":157,"line":276},[155,27104,21461],{"class":171},[155,27106,21089],{"class":167},[155,27108,20318],{"class":171},[155,27110,21089],{"class":167},[155,27112,21154],{"class":171},[155,27114,27115],{"class":161},"\u002F\u002F20\n",[155,27117,27118,27120,27122,27124,27126,27128],{"class":157,"line":297},[155,27119,21461],{"class":171},[155,27121,21089],{"class":167},[155,27123,20342],{"class":171},[155,27125,21089],{"class":167},[155,27127,21154],{"class":171},[155,27129,27130],{"class":161},"\u002F\u002F10\n",[155,27132,27133],{"class":157,"line":302},[155,27134,21475],{"class":171},[24,27136,27137],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[20037,27139,27141],{"id":27140},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[24,27143,27144],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[24,27146,27147,27148,27150],{},"例如数组：int arr",[155,27149,565],{},"={4,3,6,9,1,2,10,8,7,5}",[146,27152,27154],{"className":20084,"code":27153,"language":20086,"meta":39,"style":39},"#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",[152,27155,27156,27162,27172,27195,27199,27229,27233,27267,27271,27289,27293,27304,27319,27334,27338,27342,27346,27350,27354,27362,27366,27371,27425,27437,27449,27454,27462,27466,27471,27496,27500,27514,27523,27527],{"__ignoreMap":39},[155,27157,27158,27160],{"class":157,"line":158},[155,27159,21838],{"class":167},[155,27161,21841],{"class":732},[155,27163,27164,27166,27168,27170],{"class":157,"line":46},[155,27165,21846],{"class":167},[155,27167,21849],{"class":167},[155,27169,21852],{"class":226},[155,27171,21206],{"class":171},[155,27173,27174,27176,27179,27181,27183,27185,27187,27189,27191,27193],{"class":157,"line":121},[155,27175,25227],{"class":167},[155,27177,27178],{"class":226}," bubbleSort",[155,27180,230],{"class":171},[155,27182,15239],{"class":167},[155,27184,26381],{"class":167},[155,27186,24],{"class":323},[155,27188,332],{"class":171},[155,27190,15239],{"class":167},[155,27192,15218],{"class":323},[155,27194,363],{"class":171},[155,27196,27197],{"class":157,"line":180},[155,27198,3008],{"class":171},[155,27200,27201,27203,27205,27207,27209,27211,27213,27215,27217,27219,27221,27223,27225,27227],{"class":157,"line":194},[155,27202,2000],{"class":167},[155,27204,230],{"class":171},[155,27206,15239],{"class":167},[155,27208,22907],{"class":171},[155,27210,317],{"class":167},[155,27212,1109],{"class":263},[155,27214,22914],{"class":171},[155,27216,20959],{"class":167},[155,27218,1253],{"class":171},[155,27220,2039],{"class":167},[155,27222,329],{"class":263},[155,27224,22914],{"class":171},[155,27226,22179],{"class":167},[155,27228,363],{"class":171},[155,27230,27231],{"class":157,"line":200},[155,27232,21917],{"class":171},[155,27234,27235,27237,27239,27241,27243,27245,27247,27249,27251,27253,27255,27257,27259,27261,27263,27265],{"class":157,"line":213},[155,27236,2179],{"class":167},[155,27238,230],{"class":171},[155,27240,15239],{"class":167},[155,27242,23281],{"class":171},[155,27244,317],{"class":167},[155,27246,1109],{"class":263},[155,27248,23288],{"class":171},[155,27250,20959],{"class":167},[155,27252,1253],{"class":171},[155,27254,2039],{"class":167},[155,27256,20513],{"class":171},[155,27258,2039],{"class":167},[155,27260,329],{"class":263},[155,27262,23288],{"class":171},[155,27264,22179],{"class":167},[155,27266,363],{"class":171},[155,27268,27269],{"class":157,"line":220},[155,27270,22395],{"class":171},[155,27272,27273,27275,27278,27280,27283,27285,27287],{"class":157,"line":245},[155,27274,8497],{"class":167},[155,27276,27277],{"class":171},"(p[j]",[155,27279,1148],{"class":167},[155,27281,27282],{"class":171},"p[j",[155,27284,1274],{"class":167},[155,27286,329],{"class":263},[155,27288,17676],{"class":171},[155,27290,27291],{"class":157,"line":251},[155,27292,24526],{"class":171},[155,27294,27295,27297,27299,27301],{"class":157,"line":257},[155,27296,24531],{"class":167},[155,27298,24121],{"class":171},[155,27300,317],{"class":167},[155,27302,27303],{"class":171},"p[j];\n",[155,27305,27306,27309,27311,27313,27315,27317],{"class":157,"line":270},[155,27307,27308],{"class":171},"                p[j]",[155,27310,317],{"class":167},[155,27312,27282],{"class":171},[155,27314,1274],{"class":167},[155,27316,329],{"class":263},[155,27318,24554],{"class":171},[155,27320,27321,27324,27326,27328,27330,27332],{"class":157,"line":276},[155,27322,27323],{"class":171},"                p[j",[155,27325,1274],{"class":167},[155,27327,329],{"class":263},[155,27329,2813],{"class":171},[155,27331,317],{"class":167},[155,27333,24146],{"class":171},[155,27335,27336],{"class":157,"line":297},[155,27337,24574],{"class":171},[155,27339,27340],{"class":157,"line":302},[155,27341,22414],{"class":171},[155,27343,27344],{"class":157,"line":308},[155,27345,22074],{"class":171},[155,27347,27348],{"class":157,"line":366},[155,27349,21475],{"class":171},[155,27351,27352],{"class":157,"line":379},[155,27353,217],{"emptyLinePlaceholder":216},[155,27355,27356,27358,27360],{"class":157,"line":385},[155,27357,15239],{"class":167},[155,27359,21861],{"class":226},[155,27361,294],{"class":171},[155,27363,27364],{"class":157,"line":415},[155,27365,3008],{"class":171},[155,27367,27368],{"class":157,"line":452},[155,27369,27370],{"class":161},"    \u002F\u002F 1.创建数组\n",[155,27372,27373,27375,27377,27379,27381,27383,27385,27387,27389,27391,27393,27395,27397,27399,27401,27403,27405,27407,27409,27411,27413,27415,27417,27419,27421,27423],{"class":157,"line":480},[155,27374,21872],{"class":167},[155,27376,23831],{"class":171},[155,27378,565],{"class":263},[155,27380,2813],{"class":171},[155,27382,317],{"class":167},[155,27384,2705],{"class":171},[155,27386,1264],{"class":263},[155,27388,332],{"class":171},[155,27390,4444],{"class":263},[155,27392,332],{"class":171},[155,27394,340],{"class":263},[155,27396,332],{"class":171},[155,27398,20492],{"class":263},[155,27400,332],{"class":171},[155,27402,329],{"class":263},[155,27404,332],{"class":171},[155,27406,360],{"class":263},[155,27408,332],{"class":171},[155,27410,565],{"class":263},[155,27412,332],{"class":171},[155,27414,1636],{"class":263},[155,27416,332],{"class":171},[155,27418,8408],{"class":263},[155,27420,332],{"class":171},[155,27422,350],{"class":263},[155,27424,23863],{"class":171},[155,27426,27427,27429,27431,27433,27435],{"class":157,"line":486},[155,27428,21872],{"class":167},[155,27430,15218],{"class":171},[155,27432,317],{"class":167},[155,27434,565],{"class":263},[155,27436,21206],{"class":171},[155,27438,27439,27441,27443,27445,27447],{"class":157,"line":499},[155,27440,21872],{"class":167},[155,27442,26381],{"class":167},[155,27444,24],{"class":171},[155,27446,317],{"class":167},[155,27448,26901],{"class":171},[155,27450,27451],{"class":157,"line":505},[155,27452,27453],{"class":161},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[155,27455,27456,27459],{"class":157,"line":528},[155,27457,27458],{"class":226},"    bubbleSort",[155,27460,27461],{"class":171},"(p,len);\n",[155,27463,27464],{"class":157,"line":549},[155,27465,217],{"emptyLinePlaceholder":216},[155,27467,27468],{"class":157,"line":570},[155,27469,27470],{"class":161},"    \u002F\u002F 3.打印排序后的数组\n",[155,27472,27473,27475,27477,27479,27481,27483,27485,27487,27489,27492,27494],{"class":157,"line":575},[155,27474,2000],{"class":167},[155,27476,21561],{"class":171},[155,27478,15239],{"class":167},[155,27480,22907],{"class":171},[155,27482,317],{"class":167},[155,27484,1109],{"class":263},[155,27486,23086],{"class":171},[155,27488,20959],{"class":167},[155,27490,27491],{"class":171},"len; i",[155,27493,22179],{"class":167},[155,27495,363],{"class":171},[155,27497,27498],{"class":157,"line":581},[155,27499,21917],{"class":171},[155,27501,27502,27504,27506,27508,27510,27512],{"class":157,"line":592},[155,27503,23322],{"class":171},[155,27505,26282],{"class":167},[155,27507,24],{"class":171},[155,27509,21089],{"class":167},[155,27511,15430],{"class":732},[155,27513,21206],{"class":171},[155,27515,27516,27519,27521],{"class":157,"line":610},[155,27517,27518],{"class":171},"        p",[155,27520,22179],{"class":167},[155,27522,21206],{"class":171},[155,27524,27525],{"class":157,"line":622},[155,27526,22074],{"class":171},[155,27528,27529],{"class":157,"line":638},[155,27530,21475],{"class":171},[20011,27532,27533],{},"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":39,"searchDepth":46,"depth":46,"links":27535},[27536,27537,27538,27539,27540,27541,27542,27543],{"id":26146,"depth":46,"text":26147},{"id":26312,"depth":46,"text":26313},{"id":26468,"depth":46,"text":26469},{"id":26546,"depth":46,"text":26547},{"id":26625,"depth":46,"text":26626},{"id":26724,"depth":46,"text":26725},{"id":26962,"depth":46,"text":26963},{"id":27140,"depth":46,"text":27141},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":26135,"description":26143},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":27550,"title":27551,"body":27552,"description":27559,"extension":20021,"meta":30502,"navigation":216,"path":30503,"seo":30504,"stem":30505,"__hash__":30506},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":27553,"toc":30493},[27554,27557,27560,27564,27567,27570,27581,27909,27912,27916,27919,27926,28181,28185,28188,28191,28346,28350,28353,28356,28562,28566,28569,28872,28875,28883,28887,28890,29041,29043,29054,29111,29115,29120,29757,29765,29768,29862,29865,30485,30490],[10,27555,27551],{"id":27556},"_4结构体",[24,27558,27559],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[20037,27561,27563],{"id":27562},"_41结构体定义与使用","4.1结构体定义与使用",[24,27565,27566],{},"语法：struct 结构体名 {结构体成员列表}；",[24,27568,27569],{},"通过结构体创建变量的方式：",[21052,27571,27572,27575,27578],{},[31,27573,27574],{},"struct 结构体名 变量名",[31,27576,27577],{},"struct 结构体名 变量名={成员1值，成员2值...}",[31,27579,27580],{},"定义结构体时顺便创建变量",[146,27582,27584],{"className":20084,"code":27583,"language":20086,"meta":39,"style":39},"#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",[152,27585,27586,27592,27602,27609,27614,27622,27626,27631,27635,27640,27645,27650,27657,27662,27669,27673,27680,27684,27688,27692,27696,27700,27704,27710,27714,27720,27728,27736,27740,27745,27750,27761,27766,27778,27789,27800,27805,27828,27832,27837,27863,27867,27872,27883,27894,27905],{"__ignoreMap":39},[155,27587,27588,27590],{"class":157,"line":158},[155,27589,21838],{"class":167},[155,27591,21841],{"class":732},[155,27593,27594,27596,27598,27600],{"class":157,"line":46},[155,27595,21846],{"class":167},[155,27597,21849],{"class":167},[155,27599,21852],{"class":226},[155,27601,21206],{"class":171},[155,27603,27604,27606],{"class":157,"line":121},[155,27605,21838],{"class":167},[155,27607,27608],{"class":732},"\u003Cstring>\n",[155,27610,27611],{"class":157,"line":180},[155,27612,27613],{"class":161},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[155,27615,27616,27619],{"class":157,"line":194},[155,27617,27618],{"class":167},"struct",[155,27620,27621],{"class":226}," Student\n",[155,27623,27624],{"class":157,"line":200},[155,27625,3008],{"class":171},[155,27627,27628],{"class":157,"line":213},[155,27629,27630],{"class":161},"    \u002F\u002F成员列表\n",[155,27632,27633],{"class":157,"line":220},[155,27634,217],{"emptyLinePlaceholder":216},[155,27636,27637],{"class":157,"line":245},[155,27638,27639],{"class":161},"    \u002F\u002F姓名\n",[155,27641,27642],{"class":157,"line":251},[155,27643,27644],{"class":171},"    string name;\n",[155,27646,27647],{"class":157,"line":257},[155,27648,27649],{"class":161},"    \u002F\u002F年龄\n",[155,27651,27652,27654],{"class":157,"line":270},[155,27653,21872],{"class":167},[155,27655,27656],{"class":171}," age;\n",[155,27658,27659],{"class":157,"line":276},[155,27660,27661],{"class":161},"    \u002F\u002F分数\n",[155,27663,27664,27666],{"class":157,"line":297},[155,27665,21872],{"class":167},[155,27667,27668],{"class":171}," score;\n",[155,27670,27671],{"class":157,"line":302},[155,27672,23863],{"class":171},[155,27674,27675,27677],{"class":157,"line":308},[155,27676,27618],{"class":167},[155,27678,27679],{"class":226}," School\n",[155,27681,27682],{"class":157,"line":366},[155,27683,3008],{"class":171},[155,27685,27686],{"class":157,"line":379},[155,27687,27630],{"class":161},[155,27689,27690],{"class":157,"line":385},[155,27691,217],{"emptyLinePlaceholder":216},[155,27693,27694],{"class":157,"line":415},[155,27695,27639],{"class":161},[155,27697,27698],{"class":157,"line":452},[155,27699,27644],{"class":171},[155,27701,27702],{"class":157,"line":480},[155,27703,27649],{"class":161},[155,27705,27706,27708],{"class":157,"line":486},[155,27707,21872],{"class":167},[155,27709,27656],{"class":171},[155,27711,27712],{"class":157,"line":499},[155,27713,27661],{"class":161},[155,27715,27716,27718],{"class":157,"line":505},[155,27717,21872],{"class":167},[155,27719,27668],{"class":171},[155,27721,27722,27725],{"class":157,"line":528},[155,27723,27724],{"class":171},"} s3;",[155,27726,27727],{"class":161}," \u002F\u002F创建结构体时就创建了变量\n",[155,27729,27730,27732,27734],{"class":157,"line":549},[155,27731,15239],{"class":167},[155,27733,21861],{"class":226},[155,27735,294],{"class":171},[155,27737,27738],{"class":157,"line":570},[155,27739,3008],{"class":171},[155,27741,27742],{"class":157,"line":575},[155,27743,27744],{"class":161},"    \u002F\u002F2.通过学生类型创建具体学生\n",[155,27746,27747],{"class":157,"line":581},[155,27748,27749],{"class":161},"    \u002F\u002F2.1 struct Student s1;\n",[155,27751,27752,27755,27758],{"class":157,"line":592},[155,27753,27754],{"class":167},"    struct",[155,27756,27757],{"class":226}," Student",[155,27759,27760],{"class":171}," s1;\n",[155,27762,27763],{"class":157,"line":610},[155,27764,27765],{"class":161},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[155,27767,27768,27771,27773,27776],{"class":157,"line":622},[155,27769,27770],{"class":171},"    s1.name",[155,27772,317],{"class":167},[155,27774,27775],{"class":732},"\"张三\"",[155,27777,21206],{"class":171},[155,27779,27780,27783,27785,27787],{"class":157,"line":638},[155,27781,27782],{"class":171},"    s1.age",[155,27784,317],{"class":167},[155,27786,20709],{"class":263},[155,27788,21206],{"class":171},[155,27790,27791,27794,27796,27798],{"class":157,"line":650},[155,27792,27793],{"class":171},"    s1.score",[155,27795,317],{"class":167},[155,27797,20333],{"class":263},[155,27799,21206],{"class":171},[155,27801,27802],{"class":157,"line":662},[155,27803,27804],{"class":161},"    \u002F\u002F输出结果\n",[155,27806,27807,27809,27811,27814,27816,27819,27821,27824,27826],{"class":157,"line":678},[155,27808,21461],{"class":171},[155,27810,21089],{"class":167},[155,27812,27813],{"class":171},"s1.name",[155,27815,21089],{"class":167},[155,27817,27818],{"class":171},"s1.age",[155,27820,21089],{"class":167},[155,27822,27823],{"class":171},"s1.score",[155,27825,21089],{"class":167},[155,27827,21111],{"class":171},[155,27829,27830],{"class":157,"line":694},[155,27831,217],{"emptyLinePlaceholder":216},[155,27833,27834],{"class":157,"line":706},[155,27835,27836],{"class":161},"    \u002F\u002F2.2 struct Student s2={...}\n",[155,27838,27839,27841,27843,27846,27848,27850,27853,27855,27857,27859,27861],{"class":157,"line":715},[155,27840,27754],{"class":167},[155,27842,27757],{"class":226},[155,27844,27845],{"class":171}," s2",[155,27847,317],{"class":167},[155,27849,2705],{"class":171},[155,27851,27852],{"class":732},"\"王五\"",[155,27854,332],{"class":171},[155,27856,20709],{"class":263},[155,27858,332],{"class":171},[155,27860,20333],{"class":263},[155,27862,23863],{"class":171},[155,27864,27865],{"class":157,"line":720},[155,27866,217],{"emptyLinePlaceholder":216},[155,27868,27869],{"class":157,"line":739},[155,27870,27871],{"class":161},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[155,27873,27874,27877,27879,27881],{"class":157,"line":745},[155,27875,27876],{"class":171},"    s3.name",[155,27878,317],{"class":167},[155,27880,23548],{"class":732},[155,27882,21206],{"class":171},[155,27884,27885,27888,27890,27892],{"class":157,"line":773},[155,27886,27887],{"class":171},"    s3.age",[155,27889,317],{"class":167},[155,27891,20709],{"class":263},[155,27893,21206],{"class":171},[155,27895,27896,27899,27901,27903],{"class":157,"line":779},[155,27897,27898],{"class":171},"    s3.score",[155,27900,317],{"class":167},[155,27902,3458],{"class":263},[155,27904,21206],{"class":171},[155,27906,27907],{"class":157,"line":785},[155,27908,21475],{"class":171},[24,27910,27911],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[20037,27913,27915],{"id":27914},"_42结构体数组","4.2结构体数组",[24,27917,27918],{},"将自定义的结构体放入到数组中方便维护",[24,27920,27921,27922,27925],{},"语法：struct 结构体名 数组名",[155,27923,27924],{},"元素个数","={ {}，{},...{} };",[146,27927,27929],{"className":20084,"code":27928,"language":20086,"meta":39,"style":39},"#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",[152,27930,27931,27937,27947,27953,27958,27964,27968,27972,27978,27984,27988,27992,28000,28004,28009,28024,28028,28044,28060,28064,28069,28085,28100,28115,28120,28146,28150,28173,28177],{"__ignoreMap":39},[155,27932,27933,27935],{"class":157,"line":158},[155,27934,21838],{"class":167},[155,27936,21841],{"class":732},[155,27938,27939,27941,27943,27945],{"class":157,"line":46},[155,27940,21846],{"class":167},[155,27942,21849],{"class":167},[155,27944,21852],{"class":226},[155,27946,21206],{"class":171},[155,27948,27949,27951],{"class":157,"line":121},[155,27950,21838],{"class":167},[155,27952,27608],{"class":732},[155,27954,27955],{"class":157,"line":180},[155,27956,27957],{"class":161},"\u002F\u002F1.定义结构体\n",[155,27959,27960,27962],{"class":157,"line":194},[155,27961,27618],{"class":167},[155,27963,27621],{"class":226},[155,27965,27966],{"class":157,"line":200},[155,27967,3008],{"class":171},[155,27969,27970],{"class":157,"line":213},[155,27971,27644],{"class":171},[155,27973,27974,27976],{"class":157,"line":220},[155,27975,21872],{"class":167},[155,27977,27656],{"class":171},[155,27979,27980,27982],{"class":157,"line":245},[155,27981,21872],{"class":167},[155,27983,27668],{"class":171},[155,27985,27986],{"class":157,"line":251},[155,27987,217],{"emptyLinePlaceholder":216},[155,27989,27990],{"class":157,"line":257},[155,27991,23863],{"class":171},[155,27993,27994,27996,27998],{"class":157,"line":270},[155,27995,15239],{"class":167},[155,27997,21861],{"class":226},[155,27999,294],{"class":171},[155,28001,28002],{"class":157,"line":276},[155,28003,3008],{"class":171},[155,28005,28006],{"class":157,"line":297},[155,28007,28008],{"class":161},"    \u002F\u002F2.创建结构体数组\n",[155,28010,28011,28013,28015,28018,28020,28022],{"class":157,"line":302},[155,28012,27754],{"class":167},[155,28014,27757],{"class":226},[155,28016,28017],{"class":171}," stuArray[",[155,28019,360],{"class":263},[155,28021,2813],{"class":171},[155,28023,24772],{"class":167},[155,28025,28026],{"class":157,"line":308},[155,28027,21917],{"class":171},[155,28029,28030,28032,28034,28036,28038,28040,28042],{"class":157,"line":366},[155,28031,24781],{"class":171},[155,28033,27775],{"class":732},[155,28035,332],{"class":171},[155,28037,20709],{"class":263},[155,28039,332],{"class":171},[155,28041,20389],{"class":263},[155,28043,24794],{"class":171},[155,28045,28046,28048,28050,28052,28054,28056,28058],{"class":157,"line":379},[155,28047,24781],{"class":171},[155,28049,23548],{"class":732},[155,28051,332],{"class":171},[155,28053,20638],{"class":263},[155,28055,332],{"class":171},[155,28057,20638],{"class":263},[155,28059,21475],{"class":171},[155,28061,28062],{"class":157,"line":385},[155,28063,22074],{"class":171},[155,28065,28066],{"class":157,"line":415},[155,28067,28068],{"class":161},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[155,28070,28071,28074,28076,28079,28081,28083],{"class":157,"line":452},[155,28072,28073],{"class":171},"    stuArray[",[155,28075,329],{"class":263},[155,28077,28078],{"class":171},"].name",[155,28080,317],{"class":167},[155,28082,23571],{"class":732},[155,28084,21206],{"class":171},[155,28086,28087,28089,28091,28094,28096,28098],{"class":157,"line":480},[155,28088,28073],{"class":171},[155,28090,329],{"class":263},[155,28092,28093],{"class":171},"].age",[155,28095,317],{"class":167},[155,28097,360],{"class":263},[155,28099,21206],{"class":171},[155,28101,28102,28104,28106,28109,28111,28113],{"class":157,"line":486},[155,28103,28073],{"class":171},[155,28105,329],{"class":263},[155,28107,28108],{"class":171},"].score",[155,28110,317],{"class":167},[155,28112,360],{"class":263},[155,28114,21206],{"class":171},[155,28116,28117],{"class":157,"line":499},[155,28118,28119],{"class":161},"    \u002F\u002F4.遍历结构体数组\n",[155,28121,28122,28124,28126,28128,28130,28132,28134,28136,28138,28140,28142,28144],{"class":157,"line":505},[155,28123,2000],{"class":167},[155,28125,21561],{"class":171},[155,28127,15239],{"class":167},[155,28129,22907],{"class":171},[155,28131,317],{"class":167},[155,28133,1109],{"class":263},[155,28135,22914],{"class":171},[155,28137,20959],{"class":167},[155,28139,360],{"class":263},[155,28141,22914],{"class":171},[155,28143,22179],{"class":167},[155,28145,363],{"class":171},[155,28147,28148],{"class":157,"line":528},[155,28149,21917],{"class":171},[155,28151,28152,28154,28156,28159,28161,28164,28166,28169,28171],{"class":157,"line":549},[155,28153,23322],{"class":171},[155,28155,21089],{"class":167},[155,28157,28158],{"class":171},"stuArray[i].name",[155,28160,21089],{"class":167},[155,28162,28163],{"class":171},"stuArray[i].age",[155,28165,21089],{"class":167},[155,28167,28168],{"class":171},"stuArray[i].score",[155,28170,21089],{"class":167},[155,28172,21111],{"class":171},[155,28174,28175],{"class":157,"line":570},[155,28176,22074],{"class":171},[155,28178,28179],{"class":157,"line":575},[155,28180,21475],{"class":171},[20037,28182,28184],{"id":28183},"_43结构体指针","4.3结构体指针",[24,28186,28187],{},"作用：通过指针访问结构体中的成员",[24,28189,28190],{},"利用操作符->可以通过结构体指针访问结构体属性",[146,28192,28194],{"className":20084,"code":28193,"language":20086,"meta":39,"style":39},"#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",[152,28195,28196,28202,28212,28218,28222,28228,28232,28236,28242,28248,28252,28260,28264,28269,28294,28299,28314,28319,28342],{"__ignoreMap":39},[155,28197,28198,28200],{"class":157,"line":158},[155,28199,21838],{"class":167},[155,28201,21841],{"class":732},[155,28203,28204,28206,28208,28210],{"class":157,"line":46},[155,28205,21846],{"class":167},[155,28207,21849],{"class":167},[155,28209,21852],{"class":226},[155,28211,21206],{"class":171},[155,28213,28214,28216],{"class":157,"line":121},[155,28215,21838],{"class":167},[155,28217,27608],{"class":732},[155,28219,28220],{"class":157,"line":180},[155,28221,27957],{"class":161},[155,28223,28224,28226],{"class":157,"line":194},[155,28225,27618],{"class":167},[155,28227,27621],{"class":226},[155,28229,28230],{"class":157,"line":200},[155,28231,3008],{"class":171},[155,28233,28234],{"class":157,"line":213},[155,28235,27644],{"class":171},[155,28237,28238,28240],{"class":157,"line":220},[155,28239,21872],{"class":167},[155,28241,27656],{"class":171},[155,28243,28244,28246],{"class":157,"line":245},[155,28245,21872],{"class":167},[155,28247,27668],{"class":171},[155,28249,28250],{"class":157,"line":251},[155,28251,23863],{"class":171},[155,28253,28254,28256,28258],{"class":157,"line":257},[155,28255,15239],{"class":167},[155,28257,21861],{"class":226},[155,28259,294],{"class":171},[155,28261,28262],{"class":157,"line":270},[155,28263,3008],{"class":171},[155,28265,28266],{"class":157,"line":276},[155,28267,28268],{"class":161},"    \u002F\u002F创建学生结构体变量\n",[155,28270,28271,28273,28275,28278,28280,28282,28284,28286,28288,28290,28292],{"class":157,"line":297},[155,28272,27754],{"class":167},[155,28274,27757],{"class":226},[155,28276,28277],{"class":171}," s",[155,28279,317],{"class":167},[155,28281,2705],{"class":171},[155,28283,27775],{"class":732},[155,28285,332],{"class":171},[155,28287,20709],{"class":263},[155,28289,332],{"class":171},[155,28291,21619],{"class":263},[155,28293,23863],{"class":171},[155,28295,28296],{"class":157,"line":302},[155,28297,28298],{"class":161},"    \u002F\u002F通过指针指向结构体变量\n",[155,28300,28301,28303,28305,28307,28309,28311],{"class":157,"line":308},[155,28302,27754],{"class":167},[155,28304,27757],{"class":226},[155,28306,26381],{"class":167},[155,28308,24],{"class":171},[155,28310,26202],{"class":167},[155,28312,28313],{"class":171},"s\n",[155,28315,28316],{"class":157,"line":366},[155,28317,28318],{"class":161},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[155,28320,28321,28323,28325,28328,28330,28333,28335,28338,28340],{"class":157,"line":379},[155,28322,21461],{"class":171},[155,28324,21089],{"class":167},[155,28326,28327],{"class":171},"p->name",[155,28329,21089],{"class":167},[155,28331,28332],{"class":171},"p->age",[155,28334,21089],{"class":167},[155,28336,28337],{"class":171},"p->score",[155,28339,21089],{"class":167},[155,28341,21111],{"class":171},[155,28343,28344],{"class":157,"line":385},[155,28345,21475],{"class":171},[20037,28347,28349],{"id":28348},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[24,28351,28352],{},"作用：结构体中的成员可以是另一个结构体",[24,28354,28355],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[146,28357,28359],{"className":20084,"code":28358,"language":20086,"meta":39,"style":39},"#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",[152,28360,28361,28367,28377,28383,28388,28396,28400,28404,28410,28416,28420,28425,28432,28436,28443,28447,28453,28458,28462,28470,28474,28479,28484,28489,28500,28512,28523,28536,28547,28558],{"__ignoreMap":39},[155,28362,28363,28365],{"class":157,"line":158},[155,28364,21838],{"class":167},[155,28366,21841],{"class":732},[155,28368,28369,28371,28373,28375],{"class":157,"line":46},[155,28370,21846],{"class":167},[155,28372,21849],{"class":167},[155,28374,21852],{"class":226},[155,28376,21206],{"class":171},[155,28378,28379,28381],{"class":157,"line":121},[155,28380,21838],{"class":167},[155,28382,27608],{"class":732},[155,28384,28385],{"class":157,"line":180},[155,28386,28387],{"class":161},"\u002F\u002F定义学生结构体\n",[155,28389,28390,28392,28394],{"class":157,"line":194},[155,28391,27618],{"class":167},[155,28393,27757],{"class":226},[155,28395,22551],{"class":171},[155,28397,28398],{"class":157,"line":200},[155,28399,3008],{"class":171},[155,28401,28402],{"class":157,"line":213},[155,28403,27644],{"class":171},[155,28405,28406,28408],{"class":157,"line":220},[155,28407,21872],{"class":167},[155,28409,27656],{"class":171},[155,28411,28412,28414],{"class":157,"line":245},[155,28413,21872],{"class":167},[155,28415,27668],{"class":171},[155,28417,28418],{"class":157,"line":251},[155,28419,21475],{"class":171},[155,28421,28422],{"class":157,"line":257},[155,28423,28424],{"class":161},"\u002F\u002F定义老师结构体\n",[155,28426,28427,28429],{"class":157,"line":270},[155,28428,27618],{"class":167},[155,28430,28431],{"class":226}," Teacher\n",[155,28433,28434],{"class":157,"line":276},[155,28435,3008],{"class":171},[155,28437,28438,28440],{"class":157,"line":297},[155,28439,21872],{"class":167},[155,28441,28442],{"class":171}," id;\n",[155,28444,28445],{"class":157,"line":302},[155,28446,27644],{"class":171},[155,28448,28449,28451],{"class":157,"line":308},[155,28450,21872],{"class":167},[155,28452,27656],{"class":171},[155,28454,28455],{"class":157,"line":366},[155,28456,28457],{"class":171},"    Student stu;\n",[155,28459,28460],{"class":157,"line":379},[155,28461,21475],{"class":171},[155,28463,28464,28466,28468],{"class":157,"line":385},[155,28465,15239],{"class":167},[155,28467,21861],{"class":226},[155,28469,25841],{"class":171},[155,28471,28472],{"class":157,"line":415},[155,28473,3008],{"class":171},[155,28475,28476],{"class":157,"line":452},[155,28477,28478],{"class":161},"    \u002F\u002F结构体嵌套结构体\n",[155,28480,28481],{"class":157,"line":480},[155,28482,28483],{"class":161},"    \u002F\u002F创建老师\n",[155,28485,28486],{"class":157,"line":486},[155,28487,28488],{"class":171},"    Teacher t;\n",[155,28490,28491,28494,28496,28498],{"class":157,"line":499},[155,28492,28493],{"class":171},"    t.id",[155,28495,317],{"class":167},[155,28497,20389],{"class":263},[155,28499,21206],{"class":171},[155,28501,28502,28505,28507,28510],{"class":157,"line":505},[155,28503,28504],{"class":171},"    t.name",[155,28506,317],{"class":167},[155,28508,28509],{"class":732},"\"老王\"",[155,28511,21206],{"class":171},[155,28513,28514,28517,28519,28521],{"class":157,"line":528},[155,28515,28516],{"class":171},"    t.age",[155,28518,317],{"class":167},[155,28520,20709],{"class":263},[155,28522,21206],{"class":171},[155,28524,28525,28528,28530,28533],{"class":157,"line":549},[155,28526,28527],{"class":171},"    t.stu.name",[155,28529,317],{"class":167},[155,28531,28532],{"class":732},"\"小王\"",[155,28534,28535],{"class":171},"；\n",[155,28537,28538,28541,28543,28545],{"class":157,"line":570},[155,28539,28540],{"class":171},"    t.stu.age",[155,28542,317],{"class":167},[155,28544,3458],{"class":263},[155,28546,21206],{"class":171},[155,28548,28549,28552,28554,28556],{"class":157,"line":575},[155,28550,28551],{"class":171},"    t.stu.score",[155,28553,317],{"class":167},[155,28555,340],{"class":263},[155,28557,21206],{"class":171},[155,28559,28560],{"class":157,"line":581},[155,28561,21475],{"class":171},[20037,28563,28565],{"id":28564},"_45结构体做函数参数","4.5结构体做函数参数",[24,28567,28568],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[146,28570,28572],{"className":20084,"code":28571,"language":20086,"meta":39,"style":39},"#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",[152,28573,28574,28580,28590,28596,28602,28606,28610,28616,28622,28626,28631,28636,28653,28657,28690,28694,28699,28718,28722,28753,28757,28765,28769,28778,28790,28802,28814,28827,28835,28848,28860,28868],{"__ignoreMap":39},[155,28575,28576,28578],{"class":157,"line":158},[155,28577,21838],{"class":167},[155,28579,21841],{"class":732},[155,28581,28582,28584,28586,28588],{"class":157,"line":46},[155,28583,21846],{"class":167},[155,28585,21849],{"class":167},[155,28587,21852],{"class":226},[155,28589,21206],{"class":171},[155,28591,28592,28594],{"class":157,"line":121},[155,28593,21838],{"class":167},[155,28595,27608],{"class":732},[155,28597,28598,28600],{"class":157,"line":180},[155,28599,27618],{"class":167},[155,28601,27621],{"class":226},[155,28603,28604],{"class":157,"line":194},[155,28605,3008],{"class":171},[155,28607,28608],{"class":157,"line":200},[155,28609,27644],{"class":171},[155,28611,28612,28614],{"class":157,"line":213},[155,28613,21872],{"class":167},[155,28615,27656],{"class":171},[155,28617,28618,28620],{"class":157,"line":220},[155,28619,21872],{"class":167},[155,28621,27668],{"class":171},[155,28623,28624],{"class":157,"line":245},[155,28625,23863],{"class":171},[155,28627,28628],{"class":157,"line":251},[155,28629,28630],{"class":161},"\u002F\u002F打印学生信息的函数\n",[155,28632,28633],{"class":157,"line":257},[155,28634,28635],{"class":161},"\u002F\u002F值传递\n",[155,28637,28638,28640,28643,28645,28647,28649,28651],{"class":157,"line":270},[155,28639,25227],{"class":167},[155,28641,28642],{"class":226}," printStudent1",[155,28644,230],{"class":171},[155,28646,27618],{"class":167},[155,28648,27757],{"class":226},[155,28650,28277],{"class":323},[155,28652,363],{"class":171},[155,28654,28655],{"class":157,"line":276},[155,28656,3008],{"class":171},[155,28658,28659,28661,28663,28666,28668,28671,28673,28676,28678,28680,28682,28685,28687],{"class":157,"line":297},[155,28660,26392],{"class":171},[155,28662,21089],{"class":167},[155,28664,28665],{"class":171}," s.name ",[155,28667,21089],{"class":167},[155,28669,28670],{"class":732}," \" \"",[155,28672,21357],{"class":167},[155,28674,28675],{"class":171}," s.age ",[155,28677,21089],{"class":167},[155,28679,28670],{"class":732},[155,28681,21357],{"class":167},[155,28683,28684],{"class":171}," s.score ",[155,28686,21089],{"class":167},[155,28688,28689],{"class":171}," endl;\n",[155,28691,28692],{"class":157,"line":302},[155,28693,21475],{"class":171},[155,28695,28696],{"class":157,"line":308},[155,28697,28698],{"class":161},"\u002F\u002F地址传递\n",[155,28700,28701,28703,28706,28708,28710,28712,28714,28716],{"class":157,"line":366},[155,28702,25227],{"class":167},[155,28704,28705],{"class":226}," printStudent2",[155,28707,230],{"class":171},[155,28709,27618],{"class":167},[155,28711,27757],{"class":226},[155,28713,26381],{"class":167},[155,28715,20753],{"class":323},[155,28717,363],{"class":171},[155,28719,28720],{"class":157,"line":379},[155,28721,3008],{"class":171},[155,28723,28724,28726,28728,28731,28733,28735,28737,28740,28742,28744,28746,28749,28751],{"class":157,"line":385},[155,28725,26392],{"class":171},[155,28727,21089],{"class":167},[155,28729,28730],{"class":171}," s->name ",[155,28732,21089],{"class":167},[155,28734,28670],{"class":732},[155,28736,21357],{"class":167},[155,28738,28739],{"class":171}," s->age ",[155,28741,21089],{"class":167},[155,28743,28670],{"class":732},[155,28745,21357],{"class":167},[155,28747,28748],{"class":171}," s->score ",[155,28750,21089],{"class":167},[155,28752,28689],{"class":171},[155,28754,28755],{"class":157,"line":415},[155,28756,21475],{"class":171},[155,28758,28759,28761,28763],{"class":157,"line":452},[155,28760,15239],{"class":167},[155,28762,21861],{"class":226},[155,28764,294],{"class":171},[155,28766,28767],{"class":157,"line":480},[155,28768,3008],{"class":171},[155,28770,28771,28773,28775],{"class":157,"line":486},[155,28772,27754],{"class":167},[155,28774,27757],{"class":226},[155,28776,28777],{"class":171}," s;\n",[155,28779,28780,28783,28785,28788],{"class":157,"line":499},[155,28781,28782],{"class":171},"    s.name ",[155,28784,317],{"class":167},[155,28786,28787],{"class":732}," \"张三\"",[155,28789,21206],{"class":171},[155,28791,28792,28795,28797,28800],{"class":157,"line":505},[155,28793,28794],{"class":171},"    s.age ",[155,28796,317],{"class":167},[155,28798,28799],{"class":263}," 20",[155,28801,21206],{"class":171},[155,28803,28804,28807,28809,28812],{"class":157,"line":528},[155,28805,28806],{"class":171},"    s.score ",[155,28808,317],{"class":167},[155,28810,28811],{"class":263}," 85",[155,28813,21206],{"class":171},[155,28815,28816,28818,28820,28823,28825],{"class":157,"line":549},[155,28817,21461],{"class":171},[155,28819,21089],{"class":167},[155,28821,28822],{"class":732},"\"值传递:\"",[155,28824,21089],{"class":167},[155,28826,21111],{"class":171},[155,28828,28829,28832],{"class":157,"line":570},[155,28830,28831],{"class":226},"    printStudent1",[155,28833,28834],{"class":171},"(s);\n",[155,28836,28837,28839,28841,28844,28846],{"class":157,"line":575},[155,28838,21461],{"class":171},[155,28840,21089],{"class":167},[155,28842,28843],{"class":732},"\"地址传递:\"",[155,28845,21089],{"class":167},[155,28847,21111],{"class":171},[155,28849,28850,28853,28855,28857],{"class":157,"line":581},[155,28851,28852],{"class":226},"    printStudent2",[155,28854,230],{"class":171},[155,28856,20428],{"class":167},[155,28858,28859],{"class":171},"s); \n",[155,28861,28862,28864,28866],{"class":157,"line":592},[155,28863,1692],{"class":167},[155,28865,1151],{"class":263},[155,28867,21206],{"class":171},[155,28869,28870],{"class":157,"line":610},[155,28871,21475],{"class":171},[24,28873,28874],{},"注意：",[21052,28876,28877,28880],{},[31,28878,28879],{},"1.先定义结构体，不要在函数中写结构体的定义",[31,28881,28882],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[20037,28884,28886],{"id":28885},"_46结构体中const使用场景","4.6结构体中const使用场景",[24,28888,28889],{},"用const防止误操作",[146,28891,28893],{"className":20084,"code":28892,"language":20086,"meta":39,"style":39},"#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",[152,28894,28895,28901,28911,28917,28922,28926,28930,28936,28942,28946,28962,28966,28989,28993,29001,29005,29026,29033,29037],{"__ignoreMap":39},[155,28896,28897,28899],{"class":157,"line":158},[155,28898,21838],{"class":167},[155,28900,21841],{"class":732},[155,28902,28903,28905,28907,28909],{"class":157,"line":46},[155,28904,21846],{"class":167},[155,28906,21849],{"class":167},[155,28908,21852],{"class":226},[155,28910,21206],{"class":171},[155,28912,28913,28915],{"class":157,"line":121},[155,28914,21838],{"class":167},[155,28916,27608],{"class":732},[155,28918,28919],{"class":157,"line":180},[155,28920,28921],{"class":171},"sctuct Student\n",[155,28923,28924],{"class":157,"line":194},[155,28925,3008],{"class":171},[155,28927,28928],{"class":157,"line":200},[155,28929,27644],{"class":171},[155,28931,28932,28934],{"class":157,"line":213},[155,28933,21872],{"class":167},[155,28935,27656],{"class":171},[155,28937,28938,28940],{"class":157,"line":220},[155,28939,21872],{"class":167},[155,28941,27668],{"class":171},[155,28943,28944],{"class":157,"line":245},[155,28945,23863],{"class":171},[155,28947,28948,28950,28953,28955,28958,28960],{"class":157,"line":251},[155,28949,25227],{"class":167},[155,28951,28952],{"class":226}," printStudents",[155,28954,230],{"class":171},[155,28956,28957],{"class":226},"student",[155,28959,28277],{"class":323},[155,28961,363],{"class":171},[155,28963,28964],{"class":157,"line":257},[155,28965,3008],{"class":171},[155,28967,28968,28970,28972,28975,28977,28980,28982,28985,28987],{"class":157,"line":270},[155,28969,21461],{"class":171},[155,28971,21089],{"class":167},[155,28973,28974],{"class":171},"s.name",[155,28976,21089],{"class":167},[155,28978,28979],{"class":171},"s.age",[155,28981,21089],{"class":167},[155,28983,28984],{"class":171},"s.score",[155,28986,21089],{"class":167},[155,28988,21111],{"class":171},[155,28990,28991],{"class":157,"line":276},[155,28992,21475],{"class":171},[155,28994,28995,28997,28999],{"class":157,"line":297},[155,28996,15239],{"class":167},[155,28998,21861],{"class":226},[155,29000,25841],{"class":171},[155,29002,29003],{"class":157,"line":302},[155,29004,3008],{"class":171},[155,29006,29007,29010,29012,29014,29016,29018,29020,29022,29024],{"class":157,"line":308},[155,29008,29009],{"class":171},"    Student s",[155,29011,317],{"class":167},[155,29013,2705],{"class":171},[155,29015,27775],{"class":732},[155,29017,332],{"class":171},[155,29019,20709],{"class":263},[155,29021,332],{"class":171},[155,29023,20709],{"class":263},[155,29025,23863],{"class":171},[155,29027,29028,29031],{"class":157,"line":366},[155,29029,29030],{"class":226},"    printStudent",[155,29032,28834],{"class":171},[155,29034,29035],{"class":157,"line":379},[155,29036,217],{"emptyLinePlaceholder":216},[155,29038,29039],{"class":157,"line":385},[155,29040,21475],{"class":171},[24,29042,28874],{},[21052,29044,29045,29048,29051],{},[31,29046,29047],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[31,29049,29050],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[31,29052,29053],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[146,29055,29057],{"className":20084,"code":29056,"language":20086,"meta":39,"style":39},"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",[152,29058,29059,29078,29082,29087,29107],{"__ignoreMap":39},[155,29060,29061,29063,29065,29067,29069,29072,29074,29076],{"class":157,"line":158},[155,29062,25227],{"class":167},[155,29064,28952],{"class":226},[155,29066,230],{"class":171},[155,29068,26655],{"class":167},[155,29070,29071],{"class":226}," student",[155,29073,26381],{"class":167},[155,29075,20753],{"class":323},[155,29077,363],{"class":171},[155,29079,29080],{"class":157,"line":46},[155,29081,3008],{"class":171},[155,29083,29084],{"class":157,"line":121},[155,29085,29086],{"class":161},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[155,29088,29089,29091,29093,29095,29097,29099,29101,29103,29105],{"class":157,"line":180},[155,29090,21461],{"class":171},[155,29092,21089],{"class":167},[155,29094,28974],{"class":171},[155,29096,21089],{"class":167},[155,29098,28979],{"class":171},[155,29100,21089],{"class":167},[155,29102,28984],{"class":171},[155,29104,21089],{"class":167},[155,29106,21111],{"class":171},[155,29108,29109],{"class":157,"line":194},[155,29110,21475],{"class":171},[20037,29112,29114],{"id":29113},"_47案例","4.7案例",[28,29116,29117],{},[31,29118,29119],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[146,29121,29123],{"className":20084,"code":29122,"language":20086,"meta":39,"style":39},"#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",[152,29124,29125,29131,29141,29147,29154,29158,29164,29168,29173,29179,29185,29189,29193,29199,29203,29208,29213,29226,29230,29235,29261,29265,29277,29304,29308,29320,29329,29333,29338,29367,29371,29383,29392,29419,29430,29440,29444,29448,29452,29457,29481,29485,29509,29513,29532,29558,29562,29586,29608,29631,29635,29639,29643,29651,29655,29660,29680,29685,29698,29703,29729,29737,29742,29749,29753],{"__ignoreMap":39},[155,29126,29127,29129],{"class":157,"line":158},[155,29128,21838],{"class":167},[155,29130,21841],{"class":732},[155,29132,29133,29135,29137,29139],{"class":157,"line":46},[155,29134,21846],{"class":167},[155,29136,21849],{"class":167},[155,29138,21852],{"class":226},[155,29140,21206],{"class":171},[155,29142,29143,29145],{"class":157,"line":121},[155,29144,21838],{"class":167},[155,29146,27608],{"class":732},[155,29148,29149,29151],{"class":157,"line":180},[155,29150,21838],{"class":167},[155,29152,29153],{"class":732},"\u003Cctime>\n",[155,29155,29156],{"class":157,"line":194},[155,29157,28387],{"class":161},[155,29159,29160,29162],{"class":157,"line":200},[155,29161,27618],{"class":167},[155,29163,27621],{"class":226},[155,29165,29166],{"class":157,"line":213},[155,29167,3008],{"class":171},[155,29169,29170],{"class":157,"line":220},[155,29171,29172],{"class":171},"    string sName;\n",[155,29174,29175,29177],{"class":157,"line":245},[155,29176,21872],{"class":167},[155,29178,27656],{"class":171},[155,29180,29181,29183],{"class":157,"line":251},[155,29182,21872],{"class":167},[155,29184,27668],{"class":171},[155,29186,29187],{"class":157,"line":257},[155,29188,23863],{"class":171},[155,29190,29191],{"class":157,"line":270},[155,29192,28424],{"class":161},[155,29194,29195,29197],{"class":157,"line":276},[155,29196,27618],{"class":167},[155,29198,28431],{"class":226},[155,29200,29201],{"class":157,"line":297},[155,29202,3008],{"class":171},[155,29204,29205],{"class":157,"line":302},[155,29206,29207],{"class":171},"    string tName;\n",[155,29209,29210],{"class":157,"line":308},[155,29211,29212],{"class":161},"    \u002F\u002F学生数组\n",[155,29214,29215,29217,29219,29222,29224],{"class":157,"line":366},[155,29216,27754],{"class":167},[155,29218,27757],{"class":226},[155,29220,29221],{"class":171}," sArray[",[155,29223,350],{"class":263},[155,29225,24554],{"class":171},[155,29227,29228],{"class":157,"line":379},[155,29229,23863],{"class":171},[155,29231,29232],{"class":157,"line":385},[155,29233,29234],{"class":161},"\u002F\u002F给老师和学生赋值的函数\n",[155,29236,29237,29239,29242,29244,29246,29249,29252,29255,29257,29259],{"class":157,"line":415},[155,29238,25227],{"class":167},[155,29240,29241],{"class":226}," allocateSpace",[155,29243,230],{"class":171},[155,29245,27618],{"class":167},[155,29247,29248],{"class":226}," Teacher",[155,29250,29251],{"class":323}," tArray",[155,29253,29254],{"class":171},"[],",[155,29256,15239],{"class":167},[155,29258,15218],{"class":323},[155,29260,363],{"class":171},[155,29262,29263],{"class":157,"line":452},[155,29264,3008],{"class":171},[155,29266,29267,29270,29272,29275],{"class":157,"line":480},[155,29268,29269],{"class":171},"    string nameSeed",[155,29271,317],{"class":167},[155,29273,29274],{"class":732},"\"ABCDE\"",[155,29276,21206],{"class":171},[155,29278,29279,29281,29283,29285,29288,29290,29292,29295,29297,29300,29302],{"class":157,"line":486},[155,29280,2000],{"class":167},[155,29282,21561],{"class":171},[155,29284,15239],{"class":167},[155,29286,29287],{"class":171}," i ",[155,29289,317],{"class":167},[155,29291,1151],{"class":263},[155,29293,29294],{"class":171},"; i ",[155,29296,20959],{"class":167},[155,29298,29299],{"class":171}," len; i",[155,29301,22179],{"class":167},[155,29303,363],{"class":171},[155,29305,29306],{"class":157,"line":499},[155,29307,21917],{"class":171},[155,29309,29310,29313,29315,29318],{"class":157,"line":505},[155,29311,29312],{"class":171},"        tArray[i].tName ",[155,29314,317],{"class":167},[155,29316,29317],{"class":732}," \"Teacher_\"",[155,29319,21206],{"class":171},[155,29321,29322,29324,29326],{"class":157,"line":528},[155,29323,29312],{"class":171},[155,29325,2351],{"class":167},[155,29327,29328],{"class":171},"nameSeed[i];\n",[155,29330,29331],{"class":157,"line":549},[155,29332,217],{"emptyLinePlaceholder":216},[155,29334,29335],{"class":157,"line":570},[155,29336,29337],{"class":161},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[155,29339,29340,29342,29344,29346,29349,29351,29353,29356,29358,29360,29363,29365],{"class":157,"line":575},[155,29341,2179],{"class":167},[155,29343,21561],{"class":171},[155,29345,15239],{"class":167},[155,29347,29348],{"class":171}," j ",[155,29350,317],{"class":167},[155,29352,1151],{"class":263},[155,29354,29355],{"class":171},"; j ",[155,29357,20959],{"class":167},[155,29359,22035],{"class":263},[155,29361,29362],{"class":171},"; j",[155,29364,22179],{"class":167},[155,29366,363],{"class":171},[155,29368,29369],{"class":157,"line":581},[155,29370,22395],{"class":171},[155,29372,29373,29376,29378,29381],{"class":157,"line":592},[155,29374,29375],{"class":171},"            tArray[i].sArray[j].sName ",[155,29377,317],{"class":167},[155,29379,29380],{"class":732}," \"Student_\"",[155,29382,21206],{"class":171},[155,29384,29385,29387,29389],{"class":157,"line":610},[155,29386,29375],{"class":171},[155,29388,2351],{"class":167},[155,29390,29391],{"class":171}," nameSeed[j];\n",[155,29393,29394,29397,29400,29402,29404,29406,29408,29410,29412,29414,29416],{"class":157,"line":622},[155,29395,29396],{"class":167},"            int",[155,29398,29399],{"class":171}," random",[155,29401,317],{"class":167},[155,29403,22310],{"class":226},[155,29405,22313],{"class":171},[155,29407,2938],{"class":167},[155,29409,2932],{"class":263},[155,29411,1274],{"class":167},[155,29413,20473],{"class":263},[155,29415,20144],{"class":171},[155,29417,29418],{"class":161},"\u002F\u002F40~99\n",[155,29420,29421,29424,29426,29428],{"class":157,"line":638},[155,29422,29423],{"class":171},"            tArray[i].sArray[j].age ",[155,29425,317],{"class":167},[155,29427,28799],{"class":263},[155,29429,21206],{"class":171},[155,29431,29432,29435,29437],{"class":157,"line":650},[155,29433,29434],{"class":171},"            tArray[i].sArray[j].score ",[155,29436,317],{"class":167},[155,29438,29439],{"class":171}," random;\n",[155,29441,29442],{"class":157,"line":662},[155,29443,22414],{"class":171},[155,29445,29446],{"class":157,"line":678},[155,29447,22074],{"class":171},[155,29449,29450],{"class":157,"line":694},[155,29451,21475],{"class":171},[155,29453,29454],{"class":157,"line":706},[155,29455,29456],{"class":161},"\u002F\u002F打印所有信息的函数\n",[155,29458,29459,29461,29464,29466,29468,29470,29472,29475,29477,29479],{"class":157,"line":715},[155,29460,25227],{"class":167},[155,29462,29463],{"class":226}," printInfo",[155,29465,230],{"class":171},[155,29467,27618],{"class":167},[155,29469,29248],{"class":226},[155,29471,29251],{"class":323},[155,29473,29474],{"class":171},"[], ",[155,29476,15239],{"class":167},[155,29478,15218],{"class":323},[155,29480,363],{"class":171},[155,29482,29483],{"class":157,"line":720},[155,29484,3008],{"class":171},[155,29486,29487,29489,29491,29493,29495,29497,29499,29501,29503,29505,29507],{"class":157,"line":739},[155,29488,2000],{"class":167},[155,29490,21561],{"class":171},[155,29492,15239],{"class":167},[155,29494,29287],{"class":171},[155,29496,317],{"class":167},[155,29498,1151],{"class":263},[155,29500,29294],{"class":171},[155,29502,20959],{"class":167},[155,29504,29299],{"class":171},[155,29506,22179],{"class":167},[155,29508,363],{"class":171},[155,29510,29511],{"class":157,"line":745},[155,29512,21917],{"class":171},[155,29514,29515,29518,29520,29523,29525,29528,29530],{"class":157,"line":773},[155,29516,29517],{"class":171},"        cout ",[155,29519,21089],{"class":167},[155,29521,29522],{"class":732}," \"Teacher: \"",[155,29524,21357],{"class":167},[155,29526,29527],{"class":171}," tArray[i].tName ",[155,29529,21089],{"class":167},[155,29531,28689],{"class":171},[155,29533,29534,29536,29538,29540,29542,29544,29546,29548,29550,29552,29554,29556],{"class":157,"line":779},[155,29535,2179],{"class":167},[155,29537,21561],{"class":171},[155,29539,15239],{"class":167},[155,29541,29348],{"class":171},[155,29543,317],{"class":167},[155,29545,1151],{"class":263},[155,29547,29355],{"class":171},[155,29549,20959],{"class":167},[155,29551,22035],{"class":263},[155,29553,29362],{"class":171},[155,29555,22179],{"class":167},[155,29557,363],{"class":171},[155,29559,29560],{"class":157,"line":785},[155,29561,22395],{"class":171},[155,29563,29564,29567,29569,29572,29574,29577,29579,29582,29584],{"class":157,"line":791},[155,29565,29566],{"class":171},"            cout ",[155,29568,21089],{"class":167},[155,29570,29571],{"class":732}," \"",[155,29573,21146],{"class":263},[155,29575,29576],{"class":732},"Student: \"",[155,29578,21357],{"class":167},[155,29580,29581],{"class":171}," tArray[i].sArray[j].sName",[155,29583,21089],{"class":167},[155,29585,21111],{"class":171},[155,29587,29588,29590,29592,29594,29596,29599,29601,29604,29606],{"class":157,"line":796},[155,29589,29566],{"class":171},[155,29591,21089],{"class":167},[155,29593,29571],{"class":732},[155,29595,21146],{"class":263},[155,29597,29598],{"class":732},"Age: \"",[155,29600,21357],{"class":167},[155,29602,29603],{"class":171}," tArray[i].sArray[j].age ",[155,29605,21089],{"class":167},[155,29607,28689],{"class":171},[155,29609,29610,29612,29614,29616,29618,29621,29623,29626,29628],{"class":157,"line":802},[155,29611,29566],{"class":171},[155,29613,21089],{"class":167},[155,29615,29571],{"class":732},[155,29617,21146],{"class":263},[155,29619,29620],{"class":732},"Score: \"",[155,29622,21357],{"class":167},[155,29624,29625],{"class":171}," tArray[i].sArray[j].score ",[155,29627,21089],{"class":167},[155,29629,29630],{"class":171}," endl;   \n",[155,29632,29633],{"class":157,"line":808},[155,29634,22414],{"class":171},[155,29636,29637],{"class":157,"line":819},[155,29638,22074],{"class":171},[155,29640,29641],{"class":157,"line":1832},[155,29642,21475],{"class":171},[155,29644,29645,29647,29649],{"class":157,"line":1838},[155,29646,15239],{"class":167},[155,29648,21861],{"class":226},[155,29650,294],{"class":171},[155,29652,29653],{"class":157,"line":1844},[155,29654,3008],{"class":171},[155,29656,29657],{"class":157,"line":1850},[155,29658,29659],{"class":161},"    \u002F\u002F随机数种子\n",[155,29661,29662,29664,29666,29668,29670,29672,29674,29676,29678],{"class":157,"line":1861},[155,29663,22260],{"class":226},[155,29665,22263],{"class":171},[155,29667,22266],{"class":167},[155,29669,22269],{"class":167},[155,29671,20501],{"class":171},[155,29673,22274],{"class":226},[155,29675,230],{"class":171},[155,29677,22279],{"class":263},[155,29679,22282],{"class":171},[155,29681,29682],{"class":157,"line":1866},[155,29683,29684],{"class":161},"    \u002F\u002F1.创建3名老师的数组\n",[155,29686,29687,29689,29691,29694,29696],{"class":157,"line":1871},[155,29688,27754],{"class":167},[155,29690,29248],{"class":226},[155,29692,29693],{"class":171}," tArray[",[155,29695,4444],{"class":263},[155,29697,24554],{"class":171},[155,29699,29700],{"class":157,"line":1877},[155,29701,29702],{"class":161},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[155,29704,29705,29707,29710,29712,29715,29718,29720,29722,29725,29727],{"class":157,"line":1883},[155,29706,21872],{"class":167},[155,29708,29709],{"class":171}," len ",[155,29711,317],{"class":167},[155,29713,29714],{"class":167}," sizeof",[155,29716,29717],{"class":171},"(tArray) ",[155,29719,2028],{"class":167},[155,29721,29714],{"class":167},[155,29723,29724],{"class":171},"(tArray[",[155,29726,1109],{"class":263},[155,29728,23725],{"class":171},[155,29730,29731,29734],{"class":157,"line":1894},[155,29732,29733],{"class":226},"    allocateSpace",[155,29735,29736],{"class":171},"(tArray, len);\n",[155,29738,29739],{"class":157,"line":1900},[155,29740,29741],{"class":161},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[155,29743,29744,29747],{"class":157,"line":1911},[155,29745,29746],{"class":226},"    printInfo",[155,29748,29736],{"class":171},[155,29750,29751],{"class":157,"line":1917},[155,29752,217],{"emptyLinePlaceholder":216},[155,29754,29755],{"class":157,"line":1927},[155,29756,21475],{"class":171},[28,29758,29759],{"start":46},[31,29760,29761,29764],{},[20234,29762,29763],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[24,29766,29767],{},"五名英雄信息如下：",[146,29769,29773],{"className":29770,"code":29771,"language":29772,"meta":39,"style":39},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[152,29774,29775,29793,29810,29827,29844],{"__ignoreMap":39},[155,29776,29777,29779,29782,29784,29786,29788,29791],{"class":157,"line":158},[155,29778,24781],{"class":171},[155,29780,29781],{"class":732},"\"刘备\"",[155,29783,332],{"class":171},[155,29785,20831],{"class":263},[155,29787,332],{"class":171},[155,29789,29790],{"class":732},"\"男\"",[155,29792,24794],{"class":171},[155,29794,29795,29797,29800,29802,29804,29806,29808],{"class":157,"line":46},[155,29796,24781],{"class":171},[155,29798,29799],{"class":732},"\"关羽\"",[155,29801,332],{"class":171},[155,29803,20806],{"class":263},[155,29805,332],{"class":171},[155,29807,29790],{"class":732},[155,29809,24794],{"class":171},[155,29811,29812,29814,29817,29819,29821,29823,29825],{"class":157,"line":121},[155,29813,24781],{"class":171},[155,29815,29816],{"class":732},"\"张飞\"",[155,29818,332],{"class":171},[155,29820,3458],{"class":263},[155,29822,332],{"class":171},[155,29824,29790],{"class":732},[155,29826,24794],{"class":171},[155,29828,29829,29831,29834,29836,29838,29840,29842],{"class":157,"line":180},[155,29830,24781],{"class":171},[155,29832,29833],{"class":732},"\"赵云\"",[155,29835,332],{"class":171},[155,29837,20781],{"class":263},[155,29839,332],{"class":171},[155,29841,29790],{"class":732},[155,29843,24794],{"class":171},[155,29845,29846,29848,29851,29853,29855,29857,29860],{"class":157,"line":194},[155,29847,24781],{"class":171},[155,29849,29850],{"class":732},"\"貂蝉\"",[155,29852,332],{"class":171},[155,29854,20733],{"class":263},[155,29856,332],{"class":171},[155,29858,29859],{"class":732},"\"女\"",[155,29861,24794],{"class":171},[24,29863,29864],{},"代码：",[146,29866,29868],{"className":20084,"code":29867,"language":20086,"meta":39,"style":39},"#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",[152,29869,29870,29876,29886,29892,29899,29903,29907,29913,29918,29922,29927,29950,29954,29979,29983,30016,30021,30050,30055,30070,30096,30116,30121,30126,30130,30134,30139,30161,30165,30189,30193,30255,30259,30263,30271,30275,30280,30291,30295,30311,30327,30343,30359,30375,30379,30399,30421,30426,30439,30446,30451,30457,30462,30475,30481],{"__ignoreMap":39},[155,29871,29872,29874],{"class":157,"line":158},[155,29873,21838],{"class":167},[155,29875,21841],{"class":732},[155,29877,29878,29880,29882,29884],{"class":157,"line":46},[155,29879,21846],{"class":167},[155,29881,21849],{"class":167},[155,29883,21852],{"class":226},[155,29885,21206],{"class":171},[155,29887,29888,29890],{"class":157,"line":121},[155,29889,21838],{"class":167},[155,29891,27608],{"class":732},[155,29893,29894,29896],{"class":157,"line":180},[155,29895,27618],{"class":167},[155,29897,29898],{"class":226}," Sanguo\n",[155,29900,29901],{"class":157,"line":194},[155,29902,3008],{"class":171},[155,29904,29905],{"class":157,"line":200},[155,29906,27644],{"class":171},[155,29908,29909,29911],{"class":157,"line":213},[155,29910,21872],{"class":167},[155,29912,27656],{"class":171},[155,29914,29915],{"class":157,"line":220},[155,29916,29917],{"class":171},"    string gender;\n",[155,29919,29920],{"class":157,"line":245},[155,29921,23863],{"class":171},[155,29923,29924],{"class":157,"line":251},[155,29925,29926],{"class":161},"\u002F\u002F定义排序函数\n",[155,29928,29929,29931,29933,29935,29938,29940,29942,29944,29946,29948],{"class":157,"line":257},[155,29930,25227],{"class":167},[155,29932,27178],{"class":226},[155,29934,230],{"class":171},[155,29936,29937],{"class":226},"Sanguo",[155,29939,26381],{"class":167},[155,29941,20753],{"class":323},[155,29943,332],{"class":171},[155,29945,15239],{"class":167},[155,29947,15218],{"class":323},[155,29949,363],{"class":171},[155,29951,29952],{"class":157,"line":270},[155,29953,3008],{"class":171},[155,29955,29956,29958,29960,29962,29964,29966,29968,29970,29972,29975,29977],{"class":157,"line":276},[155,29957,2000],{"class":167},[155,29959,230],{"class":171},[155,29961,15239],{"class":167},[155,29963,22907],{"class":171},[155,29965,317],{"class":167},[155,29967,1109],{"class":263},[155,29969,22914],{"class":171},[155,29971,20959],{"class":167},[155,29973,29974],{"class":171},"len;i",[155,29976,22179],{"class":167},[155,29978,363],{"class":171},[155,29980,29981],{"class":157,"line":297},[155,29982,21917],{"class":171},[155,29984,29985,29988,29990,29992,29994,29996,29998,30000,30002,30004,30006,30008,30010,30012,30014],{"class":157,"line":302},[155,29986,29987],{"class":167},"     for",[155,29989,21561],{"class":171},[155,29991,15239],{"class":167},[155,29993,23281],{"class":171},[155,29995,317],{"class":167},[155,29997,1109],{"class":263},[155,29999,23288],{"class":171},[155,30001,20959],{"class":167},[155,30003,1253],{"class":171},[155,30005,2039],{"class":167},[155,30007,329],{"class":263},[155,30009,2039],{"class":167},[155,30011,23421],{"class":171},[155,30013,22179],{"class":167},[155,30015,363],{"class":171},[155,30017,30018],{"class":157,"line":308},[155,30019,30020],{"class":171},"     {\n",[155,30022,30023,30026,30029,30031,30034,30036,30039,30041,30043,30045,30047],{"class":157,"line":366},[155,30024,30025],{"class":167},"         if",[155,30027,30028],{"class":171}," ((s",[155,30030,1274],{"class":167},[155,30032,30033],{"class":171},"j)->age ",[155,30035,1148],{"class":167},[155,30037,30038],{"class":171}," (s",[155,30040,1274],{"class":167},[155,30042,20537],{"class":171},[155,30044,1274],{"class":167},[155,30046,329],{"class":263},[155,30048,30049],{"class":171},")->age)\n",[155,30051,30052],{"class":157,"line":379},[155,30053,30054],{"class":171},"         {\n",[155,30056,30057,30060,30062,30065,30067],{"class":157,"line":385},[155,30058,30059],{"class":171},"             Sanguo temp",[155,30061,27015],{"class":167},[155,30063,30064],{"class":171},"(s",[155,30066,1274],{"class":167},[155,30068,30069],{"class":171},"j);\n",[155,30071,30072,30075,30077,30079,30082,30084,30086,30088,30090,30092,30094],{"class":157,"line":415},[155,30073,30074],{"class":167},"             *",[155,30076,30064],{"class":171},[155,30078,1274],{"class":167},[155,30080,30081],{"class":171},"j)",[155,30083,27015],{"class":167},[155,30085,30064],{"class":171},[155,30087,1274],{"class":167},[155,30089,20537],{"class":171},[155,30091,1274],{"class":167},[155,30093,329],{"class":263},[155,30095,22596],{"class":171},[155,30097,30098,30100,30102,30104,30106,30108,30110,30112,30114],{"class":157,"line":452},[155,30099,30074],{"class":167},[155,30101,30064],{"class":171},[155,30103,1274],{"class":167},[155,30105,20537],{"class":171},[155,30107,1274],{"class":167},[155,30109,329],{"class":263},[155,30111,20501],{"class":171},[155,30113,317],{"class":167},[155,30115,24146],{"class":171},[155,30117,30118],{"class":157,"line":480},[155,30119,30120],{"class":171},"         }\n",[155,30122,30123],{"class":157,"line":486},[155,30124,30125],{"class":171},"     }\n",[155,30127,30128],{"class":157,"line":499},[155,30129,22074],{"class":171},[155,30131,30132],{"class":157,"line":505},[155,30133,21475],{"class":171},[155,30135,30136],{"class":157,"line":528},[155,30137,30138],{"class":161},"\u002F\u002F定义打印函数\n",[155,30140,30141,30143,30145,30147,30149,30151,30153,30155,30157,30159],{"class":157,"line":549},[155,30142,25227],{"class":167},[155,30144,29463],{"class":226},[155,30146,230],{"class":171},[155,30148,29937],{"class":226},[155,30150,26381],{"class":167},[155,30152,20753],{"class":323},[155,30154,332],{"class":171},[155,30156,15239],{"class":167},[155,30158,15218],{"class":323},[155,30160,363],{"class":171},[155,30162,30163],{"class":157,"line":570},[155,30164,3008],{"class":171},[155,30166,30167,30169,30171,30173,30175,30177,30179,30181,30183,30185,30187],{"class":157,"line":575},[155,30168,2000],{"class":167},[155,30170,21561],{"class":171},[155,30172,15239],{"class":167},[155,30174,22907],{"class":171},[155,30176,317],{"class":167},[155,30178,1109],{"class":263},[155,30180,22914],{"class":171},[155,30182,20959],{"class":167},[155,30184,29974],{"class":171},[155,30186,22179],{"class":167},[155,30188,363],{"class":171},[155,30190,30191],{"class":157,"line":581},[155,30192,21917],{"class":171},[155,30194,30195,30197,30199,30201,30203,30206,30208,30210,30212,30215,30217,30219,30221,30224,30226,30228,30230,30233,30235,30237,30239,30242,30244,30246,30248,30251,30253],{"class":157,"line":592},[155,30196,23322],{"class":171},[155,30198,21089],{"class":167},[155,30200,2033],{"class":732},[155,30202,21146],{"class":263},[155,30204,30205],{"class":732},"姓名：\"",[155,30207,21089],{"class":167},[155,30209,30064],{"class":171},[155,30211,1274],{"class":167},[155,30213,30214],{"class":171},"i)->name",[155,30216,21089],{"class":167},[155,30218,2033],{"class":732},[155,30220,21146],{"class":263},[155,30222,30223],{"class":732},"年龄：\"",[155,30225,21089],{"class":167},[155,30227,30064],{"class":171},[155,30229,1274],{"class":167},[155,30231,30232],{"class":171},"i)->age",[155,30234,21089],{"class":167},[155,30236,2033],{"class":732},[155,30238,21146],{"class":263},[155,30240,30241],{"class":732},"性别：\"",[155,30243,21089],{"class":167},[155,30245,30064],{"class":171},[155,30247,1274],{"class":167},[155,30249,30250],{"class":171},"i)->gender",[155,30252,21089],{"class":167},[155,30254,21111],{"class":171},[155,30256,30257],{"class":157,"line":610},[155,30258,22074],{"class":171},[155,30260,30261],{"class":157,"line":622},[155,30262,21475],{"class":171},[155,30264,30265,30267,30269],{"class":157,"line":638},[155,30266,15239],{"class":167},[155,30268,21861],{"class":226},[155,30270,294],{"class":171},[155,30272,30273],{"class":157,"line":650},[155,30274,3008],{"class":171},[155,30276,30277],{"class":157,"line":662},[155,30278,30279],{"class":161},"    \u002F\u002F定义结构体变量\n",[155,30281,30282,30285,30287,30289],{"class":157,"line":678},[155,30283,30284],{"class":171},"    Sanguo s1[",[155,30286,350],{"class":263},[155,30288,2813],{"class":171},[155,30290,24772],{"class":167},[155,30292,30293],{"class":157,"line":694},[155,30294,21917],{"class":171},[155,30296,30297,30299,30301,30303,30305,30307,30309],{"class":157,"line":706},[155,30298,24781],{"class":171},[155,30300,29781],{"class":732},[155,30302,332],{"class":171},[155,30304,20831],{"class":263},[155,30306,332],{"class":171},[155,30308,29790],{"class":732},[155,30310,24794],{"class":171},[155,30312,30313,30315,30317,30319,30321,30323,30325],{"class":157,"line":715},[155,30314,24781],{"class":171},[155,30316,29799],{"class":732},[155,30318,332],{"class":171},[155,30320,20806],{"class":263},[155,30322,332],{"class":171},[155,30324,29790],{"class":732},[155,30326,24794],{"class":171},[155,30328,30329,30331,30333,30335,30337,30339,30341],{"class":157,"line":720},[155,30330,24781],{"class":171},[155,30332,29816],{"class":732},[155,30334,332],{"class":171},[155,30336,3458],{"class":263},[155,30338,332],{"class":171},[155,30340,29790],{"class":732},[155,30342,24794],{"class":171},[155,30344,30345,30347,30349,30351,30353,30355,30357],{"class":157,"line":739},[155,30346,24781],{"class":171},[155,30348,29833],{"class":732},[155,30350,332],{"class":171},[155,30352,20781],{"class":263},[155,30354,332],{"class":171},[155,30356,29790],{"class":732},[155,30358,24794],{"class":171},[155,30360,30361,30363,30365,30367,30369,30371,30373],{"class":157,"line":745},[155,30362,24781],{"class":171},[155,30364,29850],{"class":732},[155,30366,332],{"class":171},[155,30368,20733],{"class":263},[155,30370,332],{"class":171},[155,30372,29859],{"class":732},[155,30374,24794],{"class":171},[155,30376,30377],{"class":157,"line":773},[155,30378,24815],{"class":171},[155,30380,30381,30383,30385,30387,30390,30392,30395,30397],{"class":157,"line":779},[155,30382,21872],{"class":167},[155,30384,15218],{"class":171},[155,30386,24069],{"class":167},[155,30388,30389],{"class":171},"(s1)",[155,30391,24075],{"class":167},[155,30393,30394],{"class":171},"(s1[",[155,30396,1109],{"class":263},[155,30398,23725],{"class":171},[155,30400,30401,30404,30406,30409,30411,30414,30417,30419],{"class":157,"line":785},[155,30402,30403],{"class":171},"    Sanguo ",[155,30405,1563],{"class":167},[155,30407,30408],{"class":171},"s ",[155,30410,317],{"class":167},[155,30412,30413],{"class":167}," &",[155,30415,30416],{"class":171},"s1[",[155,30418,1109],{"class":263},[155,30420,24554],{"class":171},[155,30422,30423],{"class":157,"line":791},[155,30424,30425],{"class":161},"    \u002F\u002F排序前：\n",[155,30427,30428,30430,30432,30435,30437],{"class":157,"line":796},[155,30429,26392],{"class":171},[155,30431,21089],{"class":167},[155,30433,30434],{"class":732}," \"排序前：\"",[155,30436,21357],{"class":167},[155,30438,28689],{"class":171},[155,30440,30441,30443],{"class":157,"line":802},[155,30442,29746],{"class":226},[155,30444,30445],{"class":171},"(s,len);\n",[155,30447,30448],{"class":157,"line":808},[155,30449,30450],{"class":161},"    \u002F\u002F调用排序函数\n",[155,30452,30453,30455],{"class":157,"line":819},[155,30454,27458],{"class":226},[155,30456,30445],{"class":171},[155,30458,30459],{"class":157,"line":1832},[155,30460,30461],{"class":161},"    \u002F\u002F排序后\n",[155,30463,30464,30466,30468,30471,30473],{"class":157,"line":1838},[155,30465,26392],{"class":171},[155,30467,21089],{"class":167},[155,30469,30470],{"class":732}," \"排序后：\"",[155,30472,21357],{"class":167},[155,30474,28689],{"class":171},[155,30476,30477,30479],{"class":157,"line":1844},[155,30478,29746],{"class":226},[155,30480,30445],{"class":171},[155,30482,30483],{"class":157,"line":1850},[155,30484,21475],{"class":171},[24,30486,30487,30488,17347],{},"注意：使用指针时直接用传首地址**&s",[155,30489,1109],{},[20011,30491,30492],{},"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":39,"searchDepth":46,"depth":46,"links":30494},[30495,30496,30497,30498,30499,30500,30501],{"id":27562,"depth":46,"text":27563},{"id":27914,"depth":46,"text":27915},{"id":28183,"depth":46,"text":28184},{"id":28348,"depth":46,"text":28349},{"id":28564,"depth":46,"text":28565},{"id":28885,"depth":46,"text":28886},{"id":29113,"depth":46,"text":29114},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":27551,"description":27559},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":30508,"title":30509,"body":30510,"description":39,"extension":20021,"meta":31853,"navigation":216,"path":31854,"seo":31855,"stem":31856,"__hash__":31857},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":30511,"toc":31847},[30512,30515,30519,30525,30539,30544,30547,30551,30558,30564,30567,30574,30580,30585,30588,30591,30594,31158,31161,31175,31179,31184,31200,31340,31343,31349,31352,31357,31365,31473,31476,31481,31484,31489,31492,31498,31501,31844],[10,30513,30509],{"id":30514},"_5程序内存模型",[20037,30516,30518],{"id":30517},"_51内存分区模型","5.1内存分区模型",[24,30520,30521,30522],{},"C++程序在执行时，将内存大方向划分为",[20234,30523,30524],{},"4个区域",[21052,30526,30527,30530,30533,30536],{},[31,30528,30529],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[31,30531,30532],{},"全局区：存放全局变量和静态变量以及常量",[31,30534,30535],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[31,30537,30538],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[24,30540,30541],{},[20234,30542,30543],{},"内存四区意义：",[24,30545,30546],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[14,30548,30550],{"id":30549},"_511程序运行前","5.1.1程序运行前",[24,30552,30553,30554,30557],{},"​\t在程序编译后，生成了exe可执行程序，",[20234,30555,30556],{},"未执行该程序前","分为两个区域",[24,30559,30560,30561],{},"​\t",[20234,30562,30563],{},"代码区：",[24,30565,30566],{},"​\t\t存放 CPU 执行的机器指令",[24,30568,30569,30570,30573],{},"​\t\t代码区是",[20234,30571,30572],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[24,30575,30569,30576,30579],{},[20234,30577,30578],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[24,30581,30560,30582],{},[20234,30583,30584],{},"全局区：",[24,30586,30587],{},"​\t\t全局变量和静态变量存放在此.",[24,30589,30590],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[24,30592,30593],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[146,30595,30597],{"className":20084,"code":30596,"language":20086,"meta":39,"style":39},"\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",[152,30598,30599,30604,30617,30630,30634,30639,30654,30669,30673,30682,30686,30691,30704,30717,30721,30726,30752,30778,30782,30809,30835,30839,30844,30860,30875,30879,30905,30931,30935,30960,30985,30989,31015,31041,31045,31061,31076,31102,31128,31132,31142,31146,31154],{"__ignoreMap":39},[155,30600,30601],{"class":157,"line":158},[155,30602,30603],{"class":161},"\u002F\u002F全局变量\n",[155,30605,30606,30608,30611,30613,30615],{"class":157,"line":46},[155,30607,15239],{"class":167},[155,30609,30610],{"class":171}," g_a ",[155,30612,317],{"class":167},[155,30614,21925],{"class":263},[155,30616,21206],{"class":171},[155,30618,30619,30621,30624,30626,30628],{"class":157,"line":121},[155,30620,15239],{"class":167},[155,30622,30623],{"class":171}," g_b ",[155,30625,317],{"class":167},[155,30627,21925],{"class":263},[155,30629,21206],{"class":171},[155,30631,30632],{"class":157,"line":180},[155,30633,217],{"emptyLinePlaceholder":216},[155,30635,30636],{"class":157,"line":194},[155,30637,30638],{"class":161},"\u002F\u002F全局常量\n",[155,30640,30641,30643,30645,30648,30650,30652],{"class":157,"line":200},[155,30642,26655],{"class":167},[155,30644,22269],{"class":167},[155,30646,30647],{"class":171}," c_g_a ",[155,30649,317],{"class":167},[155,30651,21925],{"class":263},[155,30653,21206],{"class":171},[155,30655,30656,30658,30660,30663,30665,30667],{"class":157,"line":213},[155,30657,26655],{"class":167},[155,30659,22269],{"class":167},[155,30661,30662],{"class":171}," c_g_b ",[155,30664,317],{"class":167},[155,30666,21925],{"class":263},[155,30668,21206],{"class":171},[155,30670,30671],{"class":157,"line":220},[155,30672,217],{"emptyLinePlaceholder":216},[155,30674,30675,30677,30679],{"class":157,"line":245},[155,30676,15239],{"class":167},[155,30678,21861],{"class":226},[155,30680,30681],{"class":171},"() {\n",[155,30683,30684],{"class":157,"line":251},[155,30685,217],{"emptyLinePlaceholder":216},[155,30687,30688],{"class":157,"line":257},[155,30689,30690],{"class":161},"    \u002F\u002F局部变量\n",[155,30692,30693,30695,30698,30700,30702],{"class":157,"line":270},[155,30694,21872],{"class":167},[155,30696,30697],{"class":171}," a ",[155,30699,317],{"class":167},[155,30701,21925],{"class":263},[155,30703,21206],{"class":171},[155,30705,30706,30708,30711,30713,30715],{"class":157,"line":276},[155,30707,21872],{"class":167},[155,30709,30710],{"class":171}," b ",[155,30712,317],{"class":167},[155,30714,21925],{"class":263},[155,30716,21206],{"class":171},[155,30718,30719],{"class":157,"line":297},[155,30720,217],{"emptyLinePlaceholder":216},[155,30722,30723],{"class":157,"line":302},[155,30724,30725],{"class":161},"    \u002F\u002F打印地址\n",[155,30727,30728,30730,30732,30735,30737,30739,30741,30743,30745,30748,30750],{"class":157,"line":308},[155,30729,26392],{"class":171},[155,30731,21089],{"class":167},[155,30733,30734],{"class":732}," \"局部变量a地址为： \"",[155,30736,21357],{"class":167},[155,30738,21561],{"class":171},[155,30740,15239],{"class":167},[155,30742,20501],{"class":171},[155,30744,20428],{"class":167},[155,30746,30747],{"class":171},"a ",[155,30749,21089],{"class":167},[155,30751,28689],{"class":171},[155,30753,30754,30756,30758,30761,30763,30765,30767,30769,30771,30774,30776],{"class":157,"line":366},[155,30755,26392],{"class":171},[155,30757,21089],{"class":167},[155,30759,30760],{"class":732}," \"局部变量b地址为： \"",[155,30762,21357],{"class":167},[155,30764,21561],{"class":171},[155,30766,15239],{"class":167},[155,30768,20501],{"class":171},[155,30770,20428],{"class":167},[155,30772,30773],{"class":171},"b ",[155,30775,21089],{"class":167},[155,30777,28689],{"class":171},[155,30779,30780],{"class":157,"line":379},[155,30781,217],{"emptyLinePlaceholder":216},[155,30783,30784,30786,30788,30791,30793,30796,30798,30800,30802,30805,30807],{"class":157,"line":385},[155,30785,26392],{"class":171},[155,30787,21089],{"class":167},[155,30789,30790],{"class":732}," \"全局变量g_a地址为： \"",[155,30792,21357],{"class":167},[155,30794,30795],{"class":171},"  (",[155,30797,15239],{"class":167},[155,30799,20501],{"class":171},[155,30801,20428],{"class":167},[155,30803,30804],{"class":171},"g_a ",[155,30806,21089],{"class":167},[155,30808,28689],{"class":171},[155,30810,30811,30813,30815,30818,30820,30822,30824,30826,30828,30831,30833],{"class":157,"line":415},[155,30812,26392],{"class":171},[155,30814,21089],{"class":167},[155,30816,30817],{"class":732}," \"全局变量g_b地址为： \"",[155,30819,21357],{"class":167},[155,30821,30795],{"class":171},[155,30823,15239],{"class":167},[155,30825,20501],{"class":171},[155,30827,20428],{"class":167},[155,30829,30830],{"class":171},"g_b ",[155,30832,21089],{"class":167},[155,30834,28689],{"class":171},[155,30836,30837],{"class":157,"line":452},[155,30838,217],{"emptyLinePlaceholder":216},[155,30840,30841],{"class":157,"line":480},[155,30842,30843],{"class":161},"    \u002F\u002F静态变量\n",[155,30845,30846,30849,30851,30854,30856,30858],{"class":157,"line":486},[155,30847,30848],{"class":167},"    static",[155,30850,22269],{"class":167},[155,30852,30853],{"class":171}," s_a ",[155,30855,317],{"class":167},[155,30857,21925],{"class":263},[155,30859,21206],{"class":171},[155,30861,30862,30864,30866,30869,30871,30873],{"class":157,"line":499},[155,30863,30848],{"class":167},[155,30865,22269],{"class":167},[155,30867,30868],{"class":171}," s_b ",[155,30870,317],{"class":167},[155,30872,21925],{"class":263},[155,30874,21206],{"class":171},[155,30876,30877],{"class":157,"line":505},[155,30878,217],{"emptyLinePlaceholder":216},[155,30880,30881,30883,30885,30888,30890,30892,30894,30896,30898,30901,30903],{"class":157,"line":528},[155,30882,26392],{"class":171},[155,30884,21089],{"class":167},[155,30886,30887],{"class":732}," \"静态变量s_a地址为： \"",[155,30889,21357],{"class":167},[155,30891,21561],{"class":171},[155,30893,15239],{"class":167},[155,30895,20501],{"class":171},[155,30897,20428],{"class":167},[155,30899,30900],{"class":171},"s_a ",[155,30902,21089],{"class":167},[155,30904,28689],{"class":171},[155,30906,30907,30909,30911,30914,30916,30918,30920,30922,30924,30927,30929],{"class":157,"line":549},[155,30908,26392],{"class":171},[155,30910,21089],{"class":167},[155,30912,30913],{"class":732}," \"静态变量s_b地址为： \"",[155,30915,21357],{"class":167},[155,30917,21561],{"class":171},[155,30919,15239],{"class":167},[155,30921,20501],{"class":171},[155,30923,20428],{"class":167},[155,30925,30926],{"class":171},"s_b ",[155,30928,21089],{"class":167},[155,30930,28689],{"class":171},[155,30932,30933],{"class":157,"line":570},[155,30934,217],{"emptyLinePlaceholder":216},[155,30936,30937,30939,30941,30944,30946,30948,30950,30952,30954,30956,30958],{"class":157,"line":575},[155,30938,26392],{"class":171},[155,30940,21089],{"class":167},[155,30942,30943],{"class":732}," \"字符串常量地址为： \"",[155,30945,21357],{"class":167},[155,30947,21561],{"class":171},[155,30949,15239],{"class":167},[155,30951,20501],{"class":171},[155,30953,20428],{"class":167},[155,30955,21106],{"class":732},[155,30957,21357],{"class":167},[155,30959,28689],{"class":171},[155,30961,30962,30964,30966,30968,30970,30972,30974,30976,30978,30981,30983],{"class":157,"line":581},[155,30963,26392],{"class":171},[155,30965,21089],{"class":167},[155,30967,30943],{"class":732},[155,30969,21357],{"class":167},[155,30971,21561],{"class":171},[155,30973,15239],{"class":167},[155,30975,20501],{"class":171},[155,30977,20428],{"class":167},[155,30979,30980],{"class":732},"\"hello world1\"",[155,30982,21357],{"class":167},[155,30984,28689],{"class":171},[155,30986,30987],{"class":157,"line":592},[155,30988,217],{"emptyLinePlaceholder":216},[155,30990,30991,30993,30995,30998,31000,31002,31004,31006,31008,31011,31013],{"class":157,"line":610},[155,30992,26392],{"class":171},[155,30994,21089],{"class":167},[155,30996,30997],{"class":732}," \"全局常量c_g_a地址为： \"",[155,30999,21357],{"class":167},[155,31001,21561],{"class":171},[155,31003,15239],{"class":167},[155,31005,20501],{"class":171},[155,31007,20428],{"class":167},[155,31009,31010],{"class":171},"c_g_a ",[155,31012,21089],{"class":167},[155,31014,28689],{"class":171},[155,31016,31017,31019,31021,31024,31026,31028,31030,31032,31034,31037,31039],{"class":157,"line":622},[155,31018,26392],{"class":171},[155,31020,21089],{"class":167},[155,31022,31023],{"class":732}," \"全局常量c_g_b地址为： \"",[155,31025,21357],{"class":167},[155,31027,21561],{"class":171},[155,31029,15239],{"class":167},[155,31031,20501],{"class":171},[155,31033,20428],{"class":167},[155,31035,31036],{"class":171},"c_g_b ",[155,31038,21089],{"class":167},[155,31040,28689],{"class":171},[155,31042,31043],{"class":157,"line":638},[155,31044,217],{"emptyLinePlaceholder":216},[155,31046,31047,31050,31052,31055,31057,31059],{"class":157,"line":650},[155,31048,31049],{"class":167},"    const",[155,31051,22269],{"class":167},[155,31053,31054],{"class":171}," c_l_a ",[155,31056,317],{"class":167},[155,31058,21925],{"class":263},[155,31060,21206],{"class":171},[155,31062,31063,31065,31067,31070,31072,31074],{"class":157,"line":662},[155,31064,31049],{"class":167},[155,31066,22269],{"class":167},[155,31068,31069],{"class":171}," c_l_b ",[155,31071,317],{"class":167},[155,31073,21925],{"class":263},[155,31075,21206],{"class":171},[155,31077,31078,31080,31082,31085,31087,31089,31091,31093,31095,31098,31100],{"class":157,"line":678},[155,31079,26392],{"class":171},[155,31081,21089],{"class":167},[155,31083,31084],{"class":732}," \"局部常量c_l_a地址为： \"",[155,31086,21357],{"class":167},[155,31088,21561],{"class":171},[155,31090,15239],{"class":167},[155,31092,20501],{"class":171},[155,31094,20428],{"class":167},[155,31096,31097],{"class":171},"c_l_a ",[155,31099,21089],{"class":167},[155,31101,28689],{"class":171},[155,31103,31104,31106,31108,31111,31113,31115,31117,31119,31121,31124,31126],{"class":157,"line":694},[155,31105,26392],{"class":171},[155,31107,21089],{"class":167},[155,31109,31110],{"class":732}," \"局部常量c_l_b地址为： \"",[155,31112,21357],{"class":167},[155,31114,21561],{"class":171},[155,31116,15239],{"class":167},[155,31118,20501],{"class":171},[155,31120,20428],{"class":167},[155,31122,31123],{"class":171},"c_l_b ",[155,31125,21089],{"class":167},[155,31127,28689],{"class":171},[155,31129,31130],{"class":157,"line":706},[155,31131,217],{"emptyLinePlaceholder":216},[155,31133,31134,31136,31138,31140],{"class":157,"line":715},[155,31135,22190],{"class":226},[155,31137,230],{"class":171},[155,31139,22195],{"class":732},[155,31141,22596],{"class":171},[155,31143,31144],{"class":157,"line":720},[155,31145,217],{"emptyLinePlaceholder":216},[155,31147,31148,31150,31152],{"class":157,"line":739},[155,31149,1692],{"class":167},[155,31151,1151],{"class":263},[155,31153,21206],{"class":171},[155,31155,31156],{"class":157,"line":745},[155,31157,21475],{"class":171},[24,31159,31160],{},"总结：",[21052,31162,31163,31166,31169,31172],{},[31,31164,31165],{},"c++中程序运行前分为全局区和代码区",[31,31167,31168],{},"代码区特点是共享和只读",[31,31170,31171],{},"全局区中存放全局变量、静态变量、常量",[31,31173,31174],{},"常量区中存放const修饰的全局常量和字符串常量",[14,31176,31178],{"id":31177},"_512程序运行后","5.1.2程序运行后",[28,31180,31181],{},[31,31182,31183],{},"栈区：",[21052,31185,31186,31193],{},[31,31187,31188,31189,31192],{},"由编译器自动分配释放, 存放",[20234,31190,31191],{},"函数的参数值,局部变量","等",[31,31194,31195,31196,31199],{},"注意事项：",[20234,31197,31198],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[146,31201,31203],{"className":20084,"code":31202,"language":20086,"meta":39,"style":39},"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",[152,31204,31205,31216,31220,31235,31247,31251,31255,31263,31268,31283,31301,31318,31328,31336],{"__ignoreMap":39},[155,31206,31207,31209,31211,31214],{"class":157,"line":158},[155,31208,15239],{"class":167},[155,31210,26381],{"class":167},[155,31212,31213],{"class":226}," func",[155,31215,294],{"class":171},[155,31217,31218],{"class":157,"line":46},[155,31219,3008],{"class":171},[155,31221,31222,31224,31226,31228,31230,31232],{"class":157,"line":121},[155,31223,21872],{"class":167},[155,31225,30697],{"class":171},[155,31227,317],{"class":167},[155,31229,21925],{"class":263},[155,31231,20144],{"class":171},[155,31233,31234],{"class":161}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[155,31236,31237,31239,31241,31244],{"class":157,"line":180},[155,31238,1692],{"class":167},[155,31240,30413],{"class":167},[155,31242,31243],{"class":171},"a;",[155,31245,31246],{"class":161}," \u002F\u002F放回局部变量的地址\n",[155,31248,31249],{"class":157,"line":194},[155,31250,21475],{"class":171},[155,31252,31253],{"class":157,"line":200},[155,31254,217],{"emptyLinePlaceholder":216},[155,31256,31257,31259,31261],{"class":157,"line":213},[155,31258,15239],{"class":167},[155,31260,21861],{"class":226},[155,31262,30681],{"class":171},[155,31264,31265],{"class":157,"line":220},[155,31266,31267],{"class":161},"    \u002F\u002F接受func的返回值\n",[155,31269,31270,31272,31274,31277,31279,31281],{"class":157,"line":245},[155,31271,21872],{"class":167},[155,31273,26381],{"class":167},[155,31275,31276],{"class":171},"p ",[155,31278,317],{"class":167},[155,31280,31213],{"class":226},[155,31282,25499],{"class":171},[155,31284,31285,31287,31289,31291,31293,31295,31298],{"class":157,"line":251},[155,31286,26392],{"class":171},[155,31288,21089],{"class":167},[155,31290,26381],{"class":167},[155,31292,31276],{"class":171},[155,31294,21089],{"class":167},[155,31296,31297],{"class":171}," endl;",[155,31299,31300],{"class":161}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[155,31302,31303,31305,31307,31309,31311,31313,31315],{"class":157,"line":257},[155,31304,26392],{"class":171},[155,31306,21089],{"class":167},[155,31308,26381],{"class":167},[155,31310,31276],{"class":171},[155,31312,21089],{"class":167},[155,31314,31297],{"class":171},[155,31316,31317],{"class":161}," \u002F\u002F第二次这个数据不再保留\n",[155,31319,31320,31322,31324,31326],{"class":157,"line":270},[155,31321,22190],{"class":226},[155,31323,230],{"class":171},[155,31325,22195],{"class":732},[155,31327,22596],{"class":171},[155,31329,31330,31332,31334],{"class":157,"line":276},[155,31331,1692],{"class":167},[155,31333,1151],{"class":263},[155,31335,21206],{"class":171},[155,31337,31338],{"class":157,"line":297},[155,31339,21475],{"class":171},[24,31341,31342],{},"输出结果：",[24,31344,31345],{},[37,31346],{"alt":31347,"src":31348},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[24,31350,31351],{},"总结：不要返回局部变量的地址",[28,31353,31354],{"start":46},[31,31355,31356],{},"堆区",[21052,31358,31359,31362],{},[31,31360,31361],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[31,31363,31364],{},"在c++中主要利用new在堆区开辟内存",[146,31366,31368],{"className":20084,"code":31367,"language":20086,"meta":39,"style":39},"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",[152,31369,31370,31385,31389,31394,31415,31422,31426,31434,31438,31443,31457,31469],{"__ignoreMap":39},[155,31371,31372,31374,31377,31380,31382],{"class":157,"line":158},[155,31373,15239],{"class":167},[155,31375,31376],{"class":167},"  *",[155,31378,31379],{"class":226},"func",[155,31381,22313],{"class":171},[155,31383,31384],{"class":161},"  \u002F\u002F函数返回指针\n",[155,31386,31387],{"class":157,"line":46},[155,31388,3008],{"class":171},[155,31390,31391],{"class":157,"line":121},[155,31392,31393],{"class":161},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[155,31395,31396,31398,31400,31402,31404,31407,31409,31411,31413],{"class":157,"line":180},[155,31397,24013],{"class":167},[155,31399,26381],{"class":167},[155,31401,24],{"class":171},[155,31403,317],{"class":167},[155,31405,31406],{"class":167}," new",[155,31408,22269],{"class":167},[155,31410,230],{"class":171},[155,31412,565],{"class":263},[155,31414,22596],{"class":171},[155,31416,31417,31419],{"class":157,"line":194},[155,31418,24247],{"class":167},[155,31420,31421],{"class":171}," p;\n",[155,31423,31424],{"class":157,"line":200},[155,31425,21475],{"class":171},[155,31427,31428,31430,31432],{"class":157,"line":213},[155,31429,15239],{"class":167},[155,31431,21861],{"class":226},[155,31433,294],{"class":171},[155,31435,31436],{"class":157,"line":220},[155,31437,3008],{"class":171},[155,31439,31440],{"class":157,"line":245},[155,31441,31442],{"class":161},"    \u002F\u002F在堆区开辟数据\n",[155,31444,31445,31447,31449,31451,31453,31455],{"class":157,"line":251},[155,31446,21872],{"class":167},[155,31448,26381],{"class":167},[155,31450,24],{"class":171},[155,31452,317],{"class":167},[155,31454,31379],{"class":226},[155,31456,25499],{"class":171},[155,31458,31459,31461,31463,31465,31467],{"class":157,"line":257},[155,31460,21461],{"class":171},[155,31462,26282],{"class":167},[155,31464,24],{"class":171},[155,31466,21089],{"class":167},[155,31468,21111],{"class":171},[155,31470,31471],{"class":157,"line":270},[155,31472,21475],{"class":171},[24,31474,31475],{},"图片展示：",[24,31477,31478],{},[37,31479],{"alt":31347,"src":31480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[24,31482,31483],{},"堆区内存由程序员管生死！！！",[28,31485,31486],{"start":121},[31,31487,31488],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[24,31490,31491],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[24,31493,31494,31495],{},"​语法：",[152,31496,31497],{}," new 数据类型",[24,31499,31500],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[146,31502,31504],{"className":20084,"code":31503,"language":20086,"meta":39,"style":39},"\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",[152,31505,31506,31511,31521,31525,31530,31535,31557,31561,31569,31573,31587,31599,31611,31623,31628,31633,31644,31648,31653,31661,31665,31670,31692,31718,31722,31740,31744,31770,31774,31786,31790,31795,31800,31808,31812,31816,31824,31828,31834,31840],{"__ignoreMap":39},[155,31507,31508],{"class":157,"line":158},[155,31509,31510],{"class":161},"\u002F\u002F1.new的基本语法\n",[155,31512,31513,31515,31517,31519],{"class":157,"line":46},[155,31514,15239],{"class":167},[155,31516,26381],{"class":167},[155,31518,31379],{"class":226},[155,31520,294],{"class":171},[155,31522,31523],{"class":157,"line":121},[155,31524,3008],{"class":171},[155,31526,31527],{"class":157,"line":180},[155,31528,31529],{"class":161},"    \u002F\u002F在堆区创建整型数据\n",[155,31531,31532],{"class":157,"line":194},[155,31533,31534],{"class":161},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[155,31536,31537,31539,31541,31543,31546,31548,31550,31552,31554],{"class":157,"line":200},[155,31538,21872],{"class":167},[155,31540,26381],{"class":167},[155,31542,24],{"class":171},[155,31544,31545],{"class":167},"=new",[155,31547,22269],{"class":167},[155,31549,230],{"class":171},[155,31551,565],{"class":263},[155,31553,25829],{"class":171},[155,31555,31556],{"class":161},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[155,31558,31559],{"class":157,"line":213},[155,31560,21475],{"class":171},[155,31562,31563,31565,31567],{"class":157,"line":220},[155,31564,25227],{"class":167},[155,31566,25451],{"class":226},[155,31568,294],{"class":171},[155,31570,31571],{"class":157,"line":245},[155,31572,3008],{"class":171},[155,31574,31575,31577,31579,31581,31583,31585],{"class":157,"line":251},[155,31576,21872],{"class":167},[155,31578,26381],{"class":167},[155,31580,24],{"class":171},[155,31582,317],{"class":167},[155,31584,31379],{"class":226},[155,31586,25499],{"class":171},[155,31588,31589,31591,31593,31595,31597],{"class":157,"line":257},[155,31590,21461],{"class":171},[155,31592,26282],{"class":167},[155,31594,24],{"class":171},[155,31596,21089],{"class":167},[155,31598,21111],{"class":171},[155,31600,31601,31603,31605,31607,31609],{"class":157,"line":270},[155,31602,21461],{"class":171},[155,31604,26282],{"class":167},[155,31606,24],{"class":171},[155,31608,21089],{"class":167},[155,31610,21111],{"class":171},[155,31612,31613,31615,31617,31619,31621],{"class":157,"line":276},[155,31614,21461],{"class":171},[155,31616,26282],{"class":167},[155,31618,24],{"class":171},[155,31620,21089],{"class":167},[155,31622,21111],{"class":171},[155,31624,31625],{"class":157,"line":297},[155,31626,31627],{"class":161},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[155,31629,31630],{"class":157,"line":302},[155,31631,31632],{"class":161},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[155,31634,31635,31638,31641],{"class":157,"line":308},[155,31636,31637],{"class":167},"    delete",[155,31639,31640],{"class":171}," p;",[155,31642,31643],{"class":161},"\u002F\u002F删除这块地址\n",[155,31645,31646],{"class":157,"line":366},[155,31647,21475],{"class":171},[155,31649,31650],{"class":157,"line":379},[155,31651,31652],{"class":161},"\u002F\u002F2.在堆区利用new开辟数组\n",[155,31654,31655,31657,31659],{"class":157,"line":385},[155,31656,25227],{"class":167},[155,31658,25520],{"class":226},[155,31660,294],{"class":171},[155,31662,31663],{"class":157,"line":415},[155,31664,3008],{"class":171},[155,31666,31667],{"class":157,"line":452},[155,31668,31669],{"class":161},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[155,31671,31672,31674,31676,31678,31680,31682,31684,31686,31689],{"class":157,"line":480},[155,31673,21872],{"class":167},[155,31675,26381],{"class":167},[155,31677,23749],{"class":171},[155,31679,31545],{"class":167},[155,31681,22269],{"class":167},[155,31683,4091],{"class":171},[155,31685,565],{"class":263},[155,31687,31688],{"class":171},"];",[155,31690,31691],{"class":161},"\u002F\u002F10代表数组有10个元素\n",[155,31693,31694,31696,31698,31700,31702,31704,31706,31708,31710,31712,31714,31716],{"class":157,"line":486},[155,31695,2000],{"class":167},[155,31697,21561],{"class":171},[155,31699,15239],{"class":167},[155,31701,22907],{"class":171},[155,31703,317],{"class":167},[155,31705,1109],{"class":263},[155,31707,22914],{"class":171},[155,31709,20959],{"class":167},[155,31711,565],{"class":263},[155,31713,22914],{"class":171},[155,31715,22179],{"class":167},[155,31717,363],{"class":171},[155,31719,31720],{"class":157,"line":499},[155,31721,21917],{"class":171},[155,31723,31724,31727,31729,31731,31733,31735,31737],{"class":157,"line":505},[155,31725,31726],{"class":171},"        arr[i]",[155,31728,317],{"class":167},[155,31730,20513],{"class":171},[155,31732,1274],{"class":167},[155,31734,20389],{"class":263},[155,31736,20144],{"class":171},[155,31738,31739],{"class":161},"\u002F\u002F给10个元素赋值100～109\n",[155,31741,31742],{"class":157,"line":528},[155,31743,22074],{"class":171},[155,31745,31746,31748,31750,31752,31754,31756,31758,31760,31762,31764,31766,31768],{"class":157,"line":549},[155,31747,2000],{"class":167},[155,31749,21561],{"class":171},[155,31751,15239],{"class":167},[155,31753,22907],{"class":171},[155,31755,317],{"class":167},[155,31757,1109],{"class":263},[155,31759,22914],{"class":171},[155,31761,20959],{"class":167},[155,31763,565],{"class":263},[155,31765,22914],{"class":171},[155,31767,22179],{"class":167},[155,31769,363],{"class":171},[155,31771,31772],{"class":157,"line":570},[155,31773,21917],{"class":171},[155,31775,31776,31778,31780,31782,31784],{"class":157,"line":575},[155,31777,23322],{"class":171},[155,31779,21089],{"class":167},[155,31781,24220],{"class":171},[155,31783,21089],{"class":167},[155,31785,21111],{"class":171},[155,31787,31788],{"class":157,"line":581},[155,31789,22074],{"class":171},[155,31791,31792],{"class":157,"line":592},[155,31793,31794],{"class":161},"    \u002F\u002F释放堆区数组\n",[155,31796,31797],{"class":157,"line":610},[155,31798,31799],{"class":161},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[155,31801,31802,31805],{"class":157,"line":622},[155,31803,31804],{"class":167},"    delete[]",[155,31806,31807],{"class":171}," arr;\n",[155,31809,31810],{"class":157,"line":638},[155,31811,21475],{"class":171},[155,31813,31814],{"class":157,"line":650},[155,31815,217],{"emptyLinePlaceholder":216},[155,31817,31818,31820,31822],{"class":157,"line":662},[155,31819,15239],{"class":167},[155,31821,21861],{"class":226},[155,31823,294],{"class":171},[155,31825,31826],{"class":157,"line":678},[155,31827,3008],{"class":171},[155,31829,31830,31832],{"class":157,"line":694},[155,31831,25496],{"class":226},[155,31833,25499],{"class":171},[155,31835,31836,31838],{"class":157,"line":706},[155,31837,25565],{"class":226},[155,31839,25499],{"class":171},[155,31841,31842],{"class":157,"line":715},[155,31843,21475],{"class":171},[20011,31845,31846],{},"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":39,"searchDepth":46,"depth":46,"links":31848},[31849],{"id":30517,"depth":46,"text":30518,"children":31850},[31851,31852],{"id":30549,"depth":121,"text":30550},{"id":31177,"depth":121,"text":31178},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":30509,"description":39},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":31859,"title":31860,"body":31861,"description":39,"extension":20021,"meta":33341,"navigation":216,"path":33342,"seo":33343,"stem":33344,"__hash__":33345},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":31862,"toc":33333},[31863,31866,31870,31873,31876,32045,32049,32054,32071,32076,32228,32232,32235,32238,32631,32635,32638,32643,32646,32958,32962,32968,33128,33130,33138,33142,33145,33152,33330],[10,31864,31860],{"id":31865},"_6引用",[20037,31867,31869],{"id":31868},"_61引用基本用法","6.1引用基本用法",[24,31871,31872],{},"引用的本质：给变量起别名",[24,31874,31875],{},"语法：数据类型 &别名=原名",[146,31877,31879],{"className":20084,"code":31878,"language":20086,"meta":39,"style":39},"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",[152,31880,31881,31889,31893,31905,31917,31921,31940,31959,31963,31974,31978,31997,32015,32019,32029,32033,32041],{"__ignoreMap":39},[155,31882,31883,31885,31887],{"class":157,"line":158},[155,31884,15239],{"class":167},[155,31886,21861],{"class":226},[155,31888,30681],{"class":171},[155,31890,31891],{"class":157,"line":46},[155,31892,217],{"emptyLinePlaceholder":216},[155,31894,31895,31897,31899,31901,31903],{"class":157,"line":121},[155,31896,21872],{"class":167},[155,31898,30697],{"class":171},[155,31900,317],{"class":167},[155,31902,21925],{"class":263},[155,31904,21206],{"class":171},[155,31906,31907,31909,31911,31913,31915],{"class":157,"line":180},[155,31908,21872],{"class":167},[155,31910,30413],{"class":167},[155,31912,30773],{"class":171},[155,31914,317],{"class":167},[155,31916,21345],{"class":171},[155,31918,31919],{"class":157,"line":194},[155,31920,217],{"emptyLinePlaceholder":216},[155,31922,31923,31925,31927,31930,31932,31934,31936,31938],{"class":157,"line":200},[155,31924,26392],{"class":171},[155,31926,21089],{"class":167},[155,31928,31929],{"class":732}," \"a = \"",[155,31931,21357],{"class":167},[155,31933,30697],{"class":171},[155,31935,21089],{"class":167},[155,31937,31297],{"class":171},[155,31939,27130],{"class":161},[155,31941,31942,31944,31946,31949,31951,31953,31955,31957],{"class":157,"line":213},[155,31943,26392],{"class":171},[155,31945,21089],{"class":167},[155,31947,31948],{"class":732}," \"b = \"",[155,31950,21357],{"class":167},[155,31952,30710],{"class":171},[155,31954,21089],{"class":167},[155,31956,31297],{"class":171},[155,31958,27130],{"class":161},[155,31960,31961],{"class":157,"line":220},[155,31962,217],{"emptyLinePlaceholder":216},[155,31964,31965,31968,31970,31972],{"class":157,"line":245},[155,31966,31967],{"class":171},"    b ",[155,31969,317],{"class":167},[155,31971,25617],{"class":263},[155,31973,21206],{"class":171},[155,31975,31976],{"class":157,"line":251},[155,31977,217],{"emptyLinePlaceholder":216},[155,31979,31980,31982,31984,31986,31988,31990,31992,31994],{"class":157,"line":257},[155,31981,26392],{"class":171},[155,31983,21089],{"class":167},[155,31985,31929],{"class":732},[155,31987,21357],{"class":167},[155,31989,30697],{"class":171},[155,31991,21089],{"class":167},[155,31993,31297],{"class":171},[155,31995,31996],{"class":161},"\u002F\u002F100\n",[155,31998,31999,32001,32003,32005,32007,32009,32011,32013],{"class":157,"line":270},[155,32000,26392],{"class":171},[155,32002,21089],{"class":167},[155,32004,31948],{"class":732},[155,32006,21357],{"class":167},[155,32008,30710],{"class":171},[155,32010,21089],{"class":167},[155,32012,31297],{"class":171},[155,32014,31996],{"class":161},[155,32016,32017],{"class":157,"line":276},[155,32018,217],{"emptyLinePlaceholder":216},[155,32020,32021,32023,32025,32027],{"class":157,"line":297},[155,32022,22190],{"class":226},[155,32024,230],{"class":171},[155,32026,22195],{"class":732},[155,32028,22596],{"class":171},[155,32030,32031],{"class":157,"line":302},[155,32032,217],{"emptyLinePlaceholder":216},[155,32034,32035,32037,32039],{"class":157,"line":308},[155,32036,1692],{"class":167},[155,32038,1151],{"class":263},[155,32040,21206],{"class":171},[155,32042,32043],{"class":157,"line":366},[155,32044,21475],{"class":171},[20037,32046,32048],{"id":32047},"_62引用的注意事项","6.2引用的注意事项",[28,32050,32051],{},[31,32052,32053],{},"引用必须要初始化",[146,32055,32057],{"className":20084,"code":32056,"language":20086,"meta":39,"style":39},"int &b;\u002F\u002F非常错误！\n",[152,32058,32059],{"__ignoreMap":39},[155,32060,32061,32063,32065,32068],{"class":157,"line":158},[155,32062,15239],{"class":167},[155,32064,30413],{"class":167},[155,32066,32067],{"class":171},"b;",[155,32069,32070],{"class":161},"\u002F\u002F非常错误！\n",[28,32072,32073],{"start":46},[31,32074,32075],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[146,32077,32079],{"className":20084,"code":32078,"language":20086,"meta":39,"style":39},"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",[152,32080,32081,32089,32101,32113,32121,32137,32150,32168,32186,32206,32216,32224],{"__ignoreMap":39},[155,32082,32083,32085,32087],{"class":157,"line":158},[155,32084,15239],{"class":167},[155,32086,21861],{"class":226},[155,32088,30681],{"class":171},[155,32090,32091,32093,32095,32097,32099],{"class":157,"line":46},[155,32092,21872],{"class":167},[155,32094,30697],{"class":171},[155,32096,317],{"class":167},[155,32098,21925],{"class":263},[155,32100,21206],{"class":171},[155,32102,32103,32105,32107,32109,32111],{"class":157,"line":121},[155,32104,21872],{"class":167},[155,32106,30710],{"class":171},[155,32108,317],{"class":167},[155,32110,28799],{"class":263},[155,32112,21206],{"class":171},[155,32114,32115,32118],{"class":157,"line":180},[155,32116,32117],{"class":161},"    \u002F\u002Fint &c;",[155,32119,32120],{"class":161}," \u002F\u002F错误，引用必须初始化\n",[155,32122,32123,32125,32127,32129,32131,32134],{"class":157,"line":194},[155,32124,21872],{"class":167},[155,32126,30413],{"class":167},[155,32128,22823],{"class":171},[155,32130,317],{"class":167},[155,32132,32133],{"class":171}," a;",[155,32135,32136],{"class":161}," \u002F\u002F一旦初始化后，就不可以更改\n",[155,32138,32139,32142,32144,32147],{"class":157,"line":200},[155,32140,32141],{"class":171},"    c ",[155,32143,317],{"class":167},[155,32145,32146],{"class":171}," b;",[155,32148,32149],{"class":161}," \u002F\u002F这是赋值操作，不是更改引用\n",[155,32151,32152,32154,32156,32158,32160,32162,32164,32166],{"class":157,"line":213},[155,32153,26392],{"class":171},[155,32155,21089],{"class":167},[155,32157,31929],{"class":732},[155,32159,21357],{"class":167},[155,32161,30697],{"class":171},[155,32163,21089],{"class":167},[155,32165,31297],{"class":171},[155,32167,27115],{"class":161},[155,32169,32170,32172,32174,32176,32178,32180,32182,32184],{"class":157,"line":220},[155,32171,26392],{"class":171},[155,32173,21089],{"class":167},[155,32175,31948],{"class":732},[155,32177,21357],{"class":167},[155,32179,30710],{"class":171},[155,32181,21089],{"class":167},[155,32183,31297],{"class":171},[155,32185,27115],{"class":161},[155,32187,32188,32190,32192,32195,32197,32200,32202,32204],{"class":157,"line":245},[155,32189,26392],{"class":171},[155,32191,21089],{"class":167},[155,32193,32194],{"class":732}," \"c = \"",[155,32196,21357],{"class":167},[155,32198,32199],{"class":171}," c ",[155,32201,21089],{"class":167},[155,32203,31297],{"class":171},[155,32205,27115],{"class":161},[155,32207,32208,32210,32212,32214],{"class":157,"line":251},[155,32209,22190],{"class":226},[155,32211,230],{"class":171},[155,32213,22195],{"class":732},[155,32215,22596],{"class":171},[155,32217,32218,32220,32222],{"class":157,"line":257},[155,32219,1692],{"class":167},[155,32221,1151],{"class":263},[155,32223,21206],{"class":171},[155,32225,32226],{"class":157,"line":270},[155,32227,21475],{"class":171},[20037,32229,32231],{"id":32230},"_63引用做函数参数","6.3引用做函数参数",[24,32233,32234],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[24,32236,32237],{},"优点：可以简化指针修改实参",[146,32239,32241],{"className":20084,"code":32240,"language":20086,"meta":39,"style":39},"\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",[152,32242,32243,32248,32270,32281,32291,32300,32304,32308,32313,32335,32347,32359,32369,32373,32377,32382,32404,32414,32422,32430,32434,32438,32446,32450,32462,32474,32478,32489,32515,32519,32539,32563,32567,32577,32601,32605,32615,32619,32627],{"__ignoreMap":39},[155,32244,32245],{"class":157,"line":158},[155,32246,32247],{"class":161},"\u002F\u002F1. 值传递\n",[155,32249,32250,32252,32255,32257,32259,32261,32263,32265,32267],{"class":157,"line":46},[155,32251,25227],{"class":167},[155,32253,32254],{"class":226}," mySwap01",[155,32256,230],{"class":171},[155,32258,15239],{"class":167},[155,32260,21311],{"class":323},[155,32262,7589],{"class":171},[155,32264,15239],{"class":167},[155,32266,22710],{"class":323},[155,32268,32269],{"class":171},") {\n",[155,32271,32272,32274,32277,32279],{"class":157,"line":121},[155,32273,21872],{"class":167},[155,32275,32276],{"class":171}," temp ",[155,32278,317],{"class":167},[155,32280,21345],{"class":171},[155,32282,32283,32286,32288],{"class":157,"line":180},[155,32284,32285],{"class":171},"    a ",[155,32287,317],{"class":167},[155,32289,32290],{"class":171}," b;\n",[155,32292,32293,32295,32297],{"class":157,"line":194},[155,32294,31967],{"class":171},[155,32296,317],{"class":167},[155,32298,32299],{"class":171}," temp;\n",[155,32301,32302],{"class":157,"line":200},[155,32303,21475],{"class":171},[155,32305,32306],{"class":157,"line":213},[155,32307,217],{"emptyLinePlaceholder":216},[155,32309,32310],{"class":157,"line":220},[155,32311,32312],{"class":161},"\u002F\u002F2. 地址传递\n",[155,32314,32315,32317,32320,32322,32325,32327,32329,32331,32333],{"class":157,"line":245},[155,32316,25227],{"class":167},[155,32318,32319],{"class":226}," mySwap02",[155,32321,230],{"class":171},[155,32323,32324],{"class":167},"int*",[155,32326,21311],{"class":323},[155,32328,7589],{"class":171},[155,32330,32324],{"class":167},[155,32332,22710],{"class":323},[155,32334,32269],{"class":171},[155,32336,32337,32339,32341,32343,32345],{"class":157,"line":251},[155,32338,21872],{"class":167},[155,32340,32276],{"class":171},[155,32342,317],{"class":167},[155,32344,26381],{"class":167},[155,32346,26060],{"class":171},[155,32348,32349,32351,32353,32355,32357],{"class":157,"line":257},[155,32350,26266],{"class":167},[155,32352,30747],{"class":171},[155,32354,317],{"class":167},[155,32356,26381],{"class":167},[155,32358,25932],{"class":171},[155,32360,32361,32363,32365,32367],{"class":157,"line":270},[155,32362,26266],{"class":167},[155,32364,30773],{"class":171},[155,32366,317],{"class":167},[155,32368,32299],{"class":171},[155,32370,32371],{"class":157,"line":276},[155,32372,21475],{"class":171},[155,32374,32375],{"class":157,"line":297},[155,32376,217],{"emptyLinePlaceholder":216},[155,32378,32379],{"class":157,"line":302},[155,32380,32381],{"class":161},"\u002F\u002F3. 引用传递\n",[155,32383,32384,32386,32389,32391,32394,32396,32398,32400,32402],{"class":157,"line":308},[155,32385,25227],{"class":167},[155,32387,32388],{"class":226}," mySwap03",[155,32390,230],{"class":171},[155,32392,32393],{"class":167},"int&",[155,32395,21311],{"class":323},[155,32397,7589],{"class":171},[155,32399,32393],{"class":167},[155,32401,22710],{"class":323},[155,32403,32269],{"class":171},[155,32405,32406,32408,32410,32412],{"class":157,"line":366},[155,32407,21872],{"class":167},[155,32409,32276],{"class":171},[155,32411,317],{"class":167},[155,32413,21345],{"class":171},[155,32415,32416,32418,32420],{"class":157,"line":379},[155,32417,32285],{"class":171},[155,32419,317],{"class":167},[155,32421,32290],{"class":171},[155,32423,32424,32426,32428],{"class":157,"line":385},[155,32425,31967],{"class":171},[155,32427,317],{"class":167},[155,32429,32299],{"class":171},[155,32431,32432],{"class":157,"line":415},[155,32433,21475],{"class":171},[155,32435,32436],{"class":157,"line":452},[155,32437,217],{"emptyLinePlaceholder":216},[155,32439,32440,32442,32444],{"class":157,"line":480},[155,32441,15239],{"class":167},[155,32443,21861],{"class":226},[155,32445,30681],{"class":171},[155,32447,32448],{"class":157,"line":486},[155,32449,217],{"emptyLinePlaceholder":216},[155,32451,32452,32454,32456,32458,32460],{"class":157,"line":499},[155,32453,21872],{"class":167},[155,32455,30697],{"class":171},[155,32457,317],{"class":167},[155,32459,21925],{"class":263},[155,32461,21206],{"class":171},[155,32463,32464,32466,32468,32470,32472],{"class":157,"line":505},[155,32465,21872],{"class":167},[155,32467,30710],{"class":171},[155,32469,317],{"class":167},[155,32471,28799],{"class":263},[155,32473,21206],{"class":171},[155,32475,32476],{"class":157,"line":528},[155,32477,217],{"emptyLinePlaceholder":216},[155,32479,32480,32483,32486],{"class":157,"line":549},[155,32481,32482],{"class":226},"    mySwap01",[155,32484,32485],{"class":171},"(a, b);",[155,32487,32488],{"class":161},"\u002F\u002F值传递，形参不会修饰实参\n",[155,32490,32491,32493,32495,32498,32500,32502,32504,32507,32509,32511,32513],{"class":157,"line":570},[155,32492,26392],{"class":171},[155,32494,21089],{"class":167},[155,32496,32497],{"class":732}," \"a:\"",[155,32499,21357],{"class":167},[155,32501,30697],{"class":171},[155,32503,21089],{"class":167},[155,32505,32506],{"class":732}," \" b:\"",[155,32508,21357],{"class":167},[155,32510,30710],{"class":171},[155,32512,21089],{"class":167},[155,32514,28689],{"class":171},[155,32516,32517],{"class":157,"line":575},[155,32518,217],{"emptyLinePlaceholder":216},[155,32520,32521,32524,32526,32528,32531,32533,32536],{"class":157,"line":581},[155,32522,32523],{"class":226},"    mySwap02",[155,32525,230],{"class":171},[155,32527,20428],{"class":167},[155,32529,32530],{"class":171},"a, ",[155,32532,20428],{"class":167},[155,32534,32535],{"class":171},"b);",[155,32537,32538],{"class":161},"\u002F\u002F地址传递，形参会修饰实参\n",[155,32540,32541,32543,32545,32547,32549,32551,32553,32555,32557,32559,32561],{"class":157,"line":592},[155,32542,26392],{"class":171},[155,32544,21089],{"class":167},[155,32546,32497],{"class":732},[155,32548,21357],{"class":167},[155,32550,30697],{"class":171},[155,32552,21089],{"class":167},[155,32554,32506],{"class":732},[155,32556,21357],{"class":167},[155,32558,30710],{"class":171},[155,32560,21089],{"class":167},[155,32562,28689],{"class":171},[155,32564,32565],{"class":157,"line":610},[155,32566,217],{"emptyLinePlaceholder":216},[155,32568,32569,32572,32574],{"class":157,"line":622},[155,32570,32571],{"class":226},"    mySwap03",[155,32573,32485],{"class":171},[155,32575,32576],{"class":161},"\u002F\u002F引用传递，形参会修饰实参\n",[155,32578,32579,32581,32583,32585,32587,32589,32591,32593,32595,32597,32599],{"class":157,"line":638},[155,32580,26392],{"class":171},[155,32582,21089],{"class":167},[155,32584,32497],{"class":732},[155,32586,21357],{"class":167},[155,32588,30697],{"class":171},[155,32590,21089],{"class":167},[155,32592,32506],{"class":732},[155,32594,21357],{"class":167},[155,32596,30710],{"class":171},[155,32598,21089],{"class":167},[155,32600,28689],{"class":171},[155,32602,32603],{"class":157,"line":650},[155,32604,217],{"emptyLinePlaceholder":216},[155,32606,32607,32609,32611,32613],{"class":157,"line":662},[155,32608,22190],{"class":226},[155,32610,230],{"class":171},[155,32612,22195],{"class":732},[155,32614,22596],{"class":171},[155,32616,32617],{"class":157,"line":678},[155,32618,217],{"emptyLinePlaceholder":216},[155,32620,32621,32623,32625],{"class":157,"line":694},[155,32622,1692],{"class":167},[155,32624,1151],{"class":263},[155,32626,21206],{"class":171},[155,32628,32629],{"class":157,"line":706},[155,32630,21475],{"class":171},[20037,32632,32634],{"id":32633},"_64引用做函数的返回值","6.4引用做函数的返回值",[24,32636,32637],{},"作用：引用是可以作为函数的返回值存在的",[24,32639,28874,32640],{},[20234,32641,32642],{},"不要返回局部变量引用",[24,32644,32645],{},"用法：函数调用作为左值",[146,32647,32649],{"className":29770,"code":32648,"language":29772,"meta":39,"style":39},"\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",[152,32650,32651,32656,32664,32679,32685,32689,32693,32698,32706,32723,32729,32733,32737,32745,32749,32754,32768,32788,32807,32811,32816,32829,32849,32867,32871,32887,32891,32910,32928,32932,32942,32946,32954],{"__ignoreMap":39},[155,32652,32653],{"class":157,"line":158},[155,32654,32655],{"class":161},"\u002F\u002F返回局部变量引用\n",[155,32657,32658,32660,32662],{"class":157,"line":46},[155,32659,32393],{"class":167},[155,32661,25451],{"class":226},[155,32663,30681],{"class":171},[155,32665,32666,32668,32670,32672,32674,32676],{"class":157,"line":121},[155,32667,21872],{"class":167},[155,32669,30697],{"class":171},[155,32671,317],{"class":167},[155,32673,21925],{"class":263},[155,32675,20144],{"class":171},[155,32677,32678],{"class":161}," \u002F\u002F局部变量\n",[155,32680,32681,32683],{"class":157,"line":180},[155,32682,1692],{"class":167},[155,32684,21345],{"class":171},[155,32686,32687],{"class":157,"line":194},[155,32688,21475],{"class":171},[155,32690,32691],{"class":157,"line":200},[155,32692,217],{"emptyLinePlaceholder":216},[155,32694,32695],{"class":157,"line":213},[155,32696,32697],{"class":161},"\u002F\u002F返回静态变量引用\n",[155,32699,32700,32702,32704],{"class":157,"line":220},[155,32701,32393],{"class":167},[155,32703,25520],{"class":226},[155,32705,30681],{"class":171},[155,32707,32708,32710,32712,32714,32716,32718,32720],{"class":157,"line":245},[155,32709,30848],{"class":167},[155,32711,22269],{"class":167},[155,32713,30697],{"class":171},[155,32715,317],{"class":167},[155,32717,28799],{"class":263},[155,32719,20144],{"class":171},[155,32721,32722],{"class":161},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[155,32724,32725,32727],{"class":157,"line":251},[155,32726,1692],{"class":167},[155,32728,21345],{"class":171},[155,32730,32731],{"class":157,"line":257},[155,32732,21475],{"class":171},[155,32734,32735],{"class":157,"line":270},[155,32736,217],{"emptyLinePlaceholder":216},[155,32738,32739,32741,32743],{"class":157,"line":276},[155,32740,15239],{"class":167},[155,32742,21861],{"class":226},[155,32744,30681],{"class":171},[155,32746,32747],{"class":157,"line":297},[155,32748,217],{"emptyLinePlaceholder":216},[155,32750,32751],{"class":157,"line":302},[155,32752,32753],{"class":161},"    \u002F\u002F不能返回局部变量的引用\n",[155,32755,32756,32759,32762,32764,32766],{"class":157,"line":308},[155,32757,32758],{"class":167},"    int&",[155,32760,32761],{"class":171}," ref ",[155,32763,317],{"class":167},[155,32765,25451],{"class":226},[155,32767,25499],{"class":171},[155,32769,32770,32772,32774,32777,32779,32781,32783,32785],{"class":157,"line":366},[155,32771,26392],{"class":171},[155,32773,21089],{"class":167},[155,32775,32776],{"class":732}," \"ref = \"",[155,32778,21357],{"class":167},[155,32780,32761],{"class":171},[155,32782,21089],{"class":167},[155,32784,31297],{"class":171},[155,32786,32787],{"class":161},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[155,32789,32790,32792,32794,32796,32798,32800,32802,32804],{"class":157,"line":379},[155,32791,26392],{"class":171},[155,32793,21089],{"class":167},[155,32795,32776],{"class":732},[155,32797,21357],{"class":167},[155,32799,32761],{"class":171},[155,32801,21089],{"class":167},[155,32803,31297],{"class":171},[155,32805,32806],{"class":161},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[155,32808,32809],{"class":157,"line":385},[155,32810,217],{"emptyLinePlaceholder":216},[155,32812,32813],{"class":157,"line":415},[155,32814,32815],{"class":161},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[155,32817,32818,32820,32823,32825,32827],{"class":157,"line":452},[155,32819,32758],{"class":167},[155,32821,32822],{"class":171}," ref2 ",[155,32824,317],{"class":167},[155,32826,25520],{"class":226},[155,32828,25499],{"class":171},[155,32830,32831,32833,32835,32838,32840,32842,32844,32846],{"class":157,"line":480},[155,32832,26392],{"class":171},[155,32834,21089],{"class":167},[155,32836,32837],{"class":732}," \"ref2 = \"",[155,32839,21357],{"class":167},[155,32841,32822],{"class":171},[155,32843,21089],{"class":167},[155,32845,31297],{"class":171},[155,32847,32848],{"class":161}," \u002F\u002F20\n",[155,32850,32851,32853,32855,32857,32859,32861,32863,32865],{"class":157,"line":486},[155,32852,26392],{"class":171},[155,32854,21089],{"class":167},[155,32856,32837],{"class":732},[155,32858,21357],{"class":167},[155,32860,32822],{"class":171},[155,32862,21089],{"class":167},[155,32864,31297],{"class":171},[155,32866,32848],{"class":161},[155,32868,32869],{"class":157,"line":499},[155,32870,217],{"emptyLinePlaceholder":216},[155,32872,32873,32875,32878,32880,32882,32884],{"class":157,"line":505},[155,32874,25565],{"class":226},[155,32876,32877],{"class":171},"() ",[155,32879,317],{"class":167},[155,32881,22875],{"class":263},[155,32883,20144],{"class":171},[155,32885,32886],{"class":161},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[155,32888,32889],{"class":157,"line":528},[155,32890,217],{"emptyLinePlaceholder":216},[155,32892,32893,32895,32897,32899,32901,32903,32905,32907],{"class":157,"line":549},[155,32894,26392],{"class":171},[155,32896,21089],{"class":167},[155,32898,32837],{"class":732},[155,32900,21357],{"class":167},[155,32902,32822],{"class":171},[155,32904,21089],{"class":167},[155,32906,31297],{"class":171},[155,32908,32909],{"class":161}," \u002F\u002F1000\n",[155,32911,32912,32914,32916,32918,32920,32922,32924,32926],{"class":157,"line":570},[155,32913,26392],{"class":171},[155,32915,21089],{"class":167},[155,32917,32837],{"class":732},[155,32919,21357],{"class":167},[155,32921,32822],{"class":171},[155,32923,21089],{"class":167},[155,32925,31297],{"class":171},[155,32927,32909],{"class":161},[155,32929,32930],{"class":157,"line":575},[155,32931,217],{"emptyLinePlaceholder":216},[155,32933,32934,32936,32938,32940],{"class":157,"line":581},[155,32935,22190],{"class":226},[155,32937,230],{"class":171},[155,32939,22195],{"class":732},[155,32941,22596],{"class":171},[155,32943,32944],{"class":157,"line":592},[155,32945,217],{"emptyLinePlaceholder":216},[155,32947,32948,32950,32952],{"class":157,"line":610},[155,32949,1692],{"class":167},[155,32951,1151],{"class":263},[155,32953,21206],{"class":171},[155,32955,32956],{"class":157,"line":622},[155,32957,21475],{"class":171},[20037,32959,32961],{"id":32960},"_65引用的本质","6.5引用的本质",[24,32963,32964,32965],{},"本质：",[20234,32966,32967],{},"引用的本质在c++内部实现是一个指针常量.",[146,32969,32971],{"className":20084,"code":32970,"language":20086,"meta":39,"style":39},"\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",[152,32972,32973,32978,32994,33008,33012,33021,33033,33038,33043,33054,33067,33071,33087,33104,33108,33116,33124],{"__ignoreMap":39},[155,32974,32975],{"class":157,"line":158},[155,32976,32977],{"class":161},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[155,32979,32980,32982,32984,32986,32988,32991],{"class":157,"line":46},[155,32981,25227],{"class":167},[155,32983,31213],{"class":226},[155,32985,230],{"class":171},[155,32987,32393],{"class":167},[155,32989,32990],{"class":323}," ref",[155,32992,32993],{"class":171},"){\n",[155,32995,32996,32999,33001,33003,33005],{"class":157,"line":121},[155,32997,32998],{"class":171},"    ref ",[155,33000,317],{"class":167},[155,33002,25617],{"class":263},[155,33004,20144],{"class":171},[155,33006,33007],{"class":161}," \u002F\u002F ref是引用，转换为*ref = 100\n",[155,33009,33010],{"class":157,"line":180},[155,33011,21475],{"class":171},[155,33013,33014,33016,33018],{"class":157,"line":194},[155,33015,15239],{"class":167},[155,33017,21861],{"class":226},[155,33019,33020],{"class":171},"(){\n",[155,33022,33023,33025,33027,33029,33031],{"class":157,"line":200},[155,33024,21872],{"class":167},[155,33026,30697],{"class":171},[155,33028,317],{"class":167},[155,33030,21925],{"class":263},[155,33032,21206],{"class":171},[155,33034,33035],{"class":157,"line":213},[155,33036,33037],{"class":171},"    \n",[155,33039,33040],{"class":157,"line":220},[155,33041,33042],{"class":161},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[155,33044,33045,33047,33049,33051],{"class":157,"line":245},[155,33046,32758],{"class":167},[155,33048,32761],{"class":171},[155,33050,317],{"class":167},[155,33052,33053],{"class":171}," a; \n",[155,33055,33056,33058,33060,33062,33064],{"class":157,"line":251},[155,33057,32998],{"class":171},[155,33059,317],{"class":167},[155,33061,28799],{"class":263},[155,33063,20144],{"class":171},[155,33065,33066],{"class":161}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[155,33068,33069],{"class":157,"line":257},[155,33070,33037],{"class":171},[155,33072,33073,33075,33077,33079,33081,33083,33085],{"class":157,"line":270},[155,33074,26392],{"class":171},[155,33076,21089],{"class":167},[155,33078,32497],{"class":732},[155,33080,21357],{"class":167},[155,33082,30697],{"class":171},[155,33084,21089],{"class":167},[155,33086,28689],{"class":171},[155,33088,33089,33091,33093,33096,33098,33100,33102],{"class":157,"line":276},[155,33090,26392],{"class":171},[155,33092,21089],{"class":167},[155,33094,33095],{"class":732}," \"ref:\"",[155,33097,21357],{"class":167},[155,33099,32761],{"class":171},[155,33101,21089],{"class":167},[155,33103,28689],{"class":171},[155,33105,33106],{"class":157,"line":297},[155,33107,33037],{"class":171},[155,33109,33110,33113],{"class":157,"line":302},[155,33111,33112],{"class":226},"    func",[155,33114,33115],{"class":171},"(a);\n",[155,33117,33118,33120,33122],{"class":157,"line":308},[155,33119,1692],{"class":167},[155,33121,1151],{"class":263},[155,33123,21206],{"class":171},[155,33125,33126],{"class":157,"line":366},[155,33127,21475],{"class":171},[24,33129,31160],{},[28,33131,33132,33135],{},[31,33133,33134],{},"引用的本质，就是一个指针常量",[31,33136,33137],{},"引用一旦初始化，就不可以发生改变",[20037,33139,33141],{"id":33140},"_66常量引用","6.6常量引用",[24,33143,33144],{},"作用：常量引用主要用来修饰形参",[24,33146,33147,33148,33151],{},"在函数形参列表中，可以加",[20234,33149,33150],{},"const修饰形参","，防止形参改变实参",[146,33153,33155],{"className":20084,"code":33154,"language":20086,"meta":39,"style":39},"\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",[152,33156,33157,33162,33167,33186,33191,33204,33208,33212,33220,33224,33229,33234,33248,33252,33260,33272,33276,33281,33293,33300,33304,33314,33318,33326],{"__ignoreMap":39},[155,33158,33159],{"class":157,"line":158},[155,33160,33161],{"class":161},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[155,33163,33164],{"class":157,"line":46},[155,33165,33166],{"class":161},"\u002F\u002F加上const就不能修改实参的\n",[155,33168,33169,33171,33174,33176,33178,33181,33184],{"class":157,"line":121},[155,33170,25227],{"class":167},[155,33172,33173],{"class":226}," showValue",[155,33175,230],{"class":171},[155,33177,26655],{"class":167},[155,33179,33180],{"class":167}," int&",[155,33182,33183],{"class":323}," v",[155,33185,32269],{"class":171},[155,33187,33188],{"class":157,"line":180},[155,33189,33190],{"class":161},"    \u002F\u002Fv += 100;\n",[155,33192,33193,33195,33197,33200,33202],{"class":157,"line":194},[155,33194,26392],{"class":171},[155,33196,21089],{"class":167},[155,33198,33199],{"class":171}," v ",[155,33201,21089],{"class":167},[155,33203,28689],{"class":171},[155,33205,33206],{"class":157,"line":200},[155,33207,21475],{"class":171},[155,33209,33210],{"class":157,"line":213},[155,33211,217],{"emptyLinePlaceholder":216},[155,33213,33214,33216,33218],{"class":157,"line":220},[155,33215,15239],{"class":167},[155,33217,21861],{"class":226},[155,33219,30681],{"class":171},[155,33221,33222],{"class":157,"line":245},[155,33223,217],{"emptyLinePlaceholder":216},[155,33225,33226],{"class":157,"line":251},[155,33227,33228],{"class":161},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[155,33230,33231],{"class":157,"line":257},[155,33232,33233],{"class":161},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[155,33235,33236,33238,33240,33242,33244,33246],{"class":157,"line":270},[155,33237,31049],{"class":167},[155,33239,33180],{"class":167},[155,33241,32761],{"class":171},[155,33243,317],{"class":167},[155,33245,21925],{"class":263},[155,33247,21206],{"class":171},[155,33249,33250],{"class":157,"line":276},[155,33251,217],{"emptyLinePlaceholder":216},[155,33253,33254,33257],{"class":157,"line":297},[155,33255,33256],{"class":161},"    \u002F\u002Fref = 100;",[155,33258,33259],{"class":161},"  \u002F\u002F加入const后不可以修改变量\n",[155,33261,33262,33264,33266,33268,33270],{"class":157,"line":302},[155,33263,26392],{"class":171},[155,33265,21089],{"class":167},[155,33267,32761],{"class":171},[155,33269,21089],{"class":167},[155,33271,28689],{"class":171},[155,33273,33274],{"class":157,"line":308},[155,33275,217],{"emptyLinePlaceholder":216},[155,33277,33278],{"class":157,"line":366},[155,33279,33280],{"class":161},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[155,33282,33283,33285,33287,33289,33291],{"class":157,"line":379},[155,33284,21872],{"class":167},[155,33286,30697],{"class":171},[155,33288,317],{"class":167},[155,33290,21925],{"class":263},[155,33292,21206],{"class":171},[155,33294,33295,33298],{"class":157,"line":385},[155,33296,33297],{"class":226},"    showValue",[155,33299,33115],{"class":171},[155,33301,33302],{"class":157,"line":415},[155,33303,217],{"emptyLinePlaceholder":216},[155,33305,33306,33308,33310,33312],{"class":157,"line":452},[155,33307,22190],{"class":226},[155,33309,230],{"class":171},[155,33311,22195],{"class":732},[155,33313,22596],{"class":171},[155,33315,33316],{"class":157,"line":480},[155,33317,217],{"emptyLinePlaceholder":216},[155,33319,33320,33322,33324],{"class":157,"line":486},[155,33321,1692],{"class":167},[155,33323,1151],{"class":263},[155,33325,21206],{"class":171},[155,33327,33328],{"class":157,"line":499},[155,33329,21475],{"class":171},[20011,33331,33332],{},"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":39,"searchDepth":46,"depth":46,"links":33334},[33335,33336,33337,33338,33339,33340],{"id":31868,"depth":46,"text":31869},{"id":32047,"depth":46,"text":32048},{"id":32230,"depth":46,"text":32231},{"id":32633,"depth":46,"text":32634},{"id":32960,"depth":46,"text":32961},{"id":33140,"depth":46,"text":33141},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":31860,"description":39},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":33347,"title":33348,"body":33349,"description":39,"extension":20021,"meta":34430,"navigation":216,"path":34431,"seo":34432,"stem":34433,"__hash__":34434},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":33350,"toc":34422},[33351,33354,33358,33361,33366,33598,33600,33611,33615,33618,33626,33730,33733,33737,33740,33744,33747,33752,33774,33780,34107,34110,34114,34122,34419],[10,33352,33348],{"id":33353},"_7函数高级部分",[20037,33355,33357],{"id":33356},"_71函数默认参数","7.1函数默认参数",[24,33359,33360],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[24,33362,25045,33363],{},[152,33364,33365],{}," 返回值类型  函数名 （参数= 默认值）{}",[146,33367,33369],{"className":20084,"code":33368,"language":20086,"meta":39,"style":39},"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",[152,33370,33371,33406,33421,33425,33429,33434,33439,33468,33488,33498,33502,33506,33514,33518,33546,33568,33572,33582,33586,33594],{"__ignoreMap":39},[155,33372,33373,33375,33377,33379,33381,33383,33385,33387,33389,33392,33394,33396,33398,33400,33402,33404],{"class":157,"line":158},[155,33374,15239],{"class":167},[155,33376,31213],{"class":226},[155,33378,230],{"class":171},[155,33380,15239],{"class":167},[155,33382,21311],{"class":323},[155,33384,7589],{"class":171},[155,33386,15239],{"class":167},[155,33388,22710],{"class":323},[155,33390,33391],{"class":167}," =",[155,33393,21925],{"class":263},[155,33395,7589],{"class":171},[155,33397,15239],{"class":167},[155,33399,22726],{"class":323},[155,33401,33391],{"class":167},[155,33403,21925],{"class":263},[155,33405,32269],{"class":171},[155,33407,33408,33410,33412,33414,33416,33418],{"class":157,"line":46},[155,33409,1692],{"class":167},[155,33411,30697],{"class":171},[155,33413,1274],{"class":167},[155,33415,30710],{"class":171},[155,33417,1274],{"class":167},[155,33419,33420],{"class":171}," c;\n",[155,33422,33423],{"class":157,"line":121},[155,33424,21475],{"class":171},[155,33426,33427],{"class":157,"line":180},[155,33428,217],{"emptyLinePlaceholder":216},[155,33430,33431],{"class":157,"line":194},[155,33432,33433],{"class":161},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[155,33435,33436],{"class":157,"line":200},[155,33437,33438],{"class":161},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[155,33440,33441,33443,33446,33448,33450,33452,33454,33456,33458,33460,33462,33464,33466],{"class":157,"line":213},[155,33442,15239],{"class":167},[155,33444,33445],{"class":226}," func2",[155,33447,230],{"class":171},[155,33449,15239],{"class":167},[155,33451,21311],{"class":323},[155,33453,33391],{"class":167},[155,33455,21925],{"class":263},[155,33457,7589],{"class":171},[155,33459,15239],{"class":167},[155,33461,22710],{"class":323},[155,33463,33391],{"class":167},[155,33465,21925],{"class":263},[155,33467,22596],{"class":171},[155,33469,33470,33472,33474,33476,33478,33480,33482,33484,33486],{"class":157,"line":220},[155,33471,15239],{"class":167},[155,33473,33445],{"class":226},[155,33475,230],{"class":171},[155,33477,15239],{"class":167},[155,33479,21311],{"class":323},[155,33481,7589],{"class":171},[155,33483,15239],{"class":167},[155,33485,22710],{"class":323},[155,33487,32269],{"class":171},[155,33489,33490,33492,33494,33496],{"class":157,"line":245},[155,33491,1692],{"class":167},[155,33493,30697],{"class":171},[155,33495,1274],{"class":167},[155,33497,32290],{"class":171},[155,33499,33500],{"class":157,"line":251},[155,33501,21475],{"class":171},[155,33503,33504],{"class":157,"line":257},[155,33505,217],{"emptyLinePlaceholder":216},[155,33507,33508,33510,33512],{"class":157,"line":270},[155,33509,15239],{"class":167},[155,33511,21861],{"class":226},[155,33513,30681],{"class":171},[155,33515,33516],{"class":157,"line":276},[155,33517,217],{"emptyLinePlaceholder":216},[155,33519,33520,33522,33524,33527,33529,33531,33533,33535,33537,33539,33542,33544],{"class":157,"line":297},[155,33521,26392],{"class":171},[155,33523,21089],{"class":167},[155,33525,33526],{"class":732}," \"ret = \"",[155,33528,21357],{"class":167},[155,33530,31213],{"class":226},[155,33532,230],{"class":171},[155,33534,3458],{"class":263},[155,33536,7589],{"class":171},[155,33538,3458],{"class":263},[155,33540,33541],{"class":171},") ",[155,33543,21089],{"class":167},[155,33545,28689],{"class":171},[155,33547,33548,33550,33552,33554,33556,33558,33560,33562,33564,33566],{"class":157,"line":302},[155,33549,26392],{"class":171},[155,33551,21089],{"class":167},[155,33553,33526],{"class":732},[155,33555,21357],{"class":167},[155,33557,31213],{"class":226},[155,33559,230],{"class":171},[155,33561,20389],{"class":263},[155,33563,33541],{"class":171},[155,33565,21089],{"class":167},[155,33567,28689],{"class":171},[155,33569,33570],{"class":157,"line":308},[155,33571,217],{"emptyLinePlaceholder":216},[155,33573,33574,33576,33578,33580],{"class":157,"line":366},[155,33575,22190],{"class":226},[155,33577,230],{"class":171},[155,33579,22195],{"class":732},[155,33581,22596],{"class":171},[155,33583,33584],{"class":157,"line":379},[155,33585,217],{"emptyLinePlaceholder":216},[155,33587,33588,33590,33592],{"class":157,"line":385},[155,33589,1692],{"class":167},[155,33591,1151],{"class":263},[155,33593,21206],{"class":171},[155,33595,33596],{"class":157,"line":415},[155,33597,21475],{"class":171},[24,33599,31160],{},[28,33601,33602,33605,33608],{},[31,33603,33604],{},"我传就用我；没传就用你",[31,33606,33607],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[31,33609,33610],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[20037,33612,33614],{"id":33613},"_72函数的占位参数","7.2函数的占位参数",[24,33616,33617],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[24,33619,33620,33622,33623],{},[20234,33621,25045],{}," ",[152,33624,33625],{},"返回值类型 函数名 (数据类型){}",[146,33627,33629],{"className":20084,"code":33628,"language":20086,"meta":39,"style":39},"\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",[152,33630,33631,33636,33654,33667,33671,33679,33683,33700,33704,33714,33718,33726],{"__ignoreMap":39},[155,33632,33633],{"class":157,"line":158},[155,33634,33635],{"class":161},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[155,33637,33638,33640,33642,33644,33646,33648,33650,33652],{"class":157,"line":46},[155,33639,25227],{"class":167},[155,33641,31213],{"class":226},[155,33643,230],{"class":171},[155,33645,15239],{"class":167},[155,33647,21311],{"class":323},[155,33649,7589],{"class":171},[155,33651,15239],{"class":167},[155,33653,32269],{"class":171},[155,33655,33656,33658,33660,33663,33665],{"class":157,"line":121},[155,33657,26392],{"class":171},[155,33659,21089],{"class":167},[155,33661,33662],{"class":732}," \"this is func\"",[155,33664,21357],{"class":167},[155,33666,28689],{"class":171},[155,33668,33669],{"class":157,"line":180},[155,33670,21475],{"class":171},[155,33672,33673,33675,33677],{"class":157,"line":194},[155,33674,15239],{"class":167},[155,33676,21861],{"class":226},[155,33678,30681],{"class":171},[155,33680,33681],{"class":157,"line":200},[155,33682,217],{"emptyLinePlaceholder":216},[155,33684,33685,33687,33689,33691,33693,33695,33697],{"class":157,"line":213},[155,33686,33112],{"class":226},[155,33688,230],{"class":171},[155,33690,565],{"class":263},[155,33692,332],{"class":171},[155,33694,565],{"class":263},[155,33696,25829],{"class":171},[155,33698,33699],{"class":161}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[155,33701,33702],{"class":157,"line":220},[155,33703,217],{"emptyLinePlaceholder":216},[155,33705,33706,33708,33710,33712],{"class":157,"line":245},[155,33707,22190],{"class":226},[155,33709,230],{"class":171},[155,33711,22195],{"class":732},[155,33713,22596],{"class":171},[155,33715,33716],{"class":157,"line":251},[155,33717,217],{"emptyLinePlaceholder":216},[155,33719,33720,33722,33724],{"class":157,"line":257},[155,33721,1692],{"class":167},[155,33723,1151],{"class":263},[155,33725,21206],{"class":171},[155,33727,33728],{"class":157,"line":270},[155,33729,21475],{"class":171},[24,33731,33732],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[20037,33734,33736],{"id":33735},"_73函数重载","7.3函数重载",[24,33738,33739],{},"意思是函数名是可以相同的",[14,33741,33743],{"id":33742},"_731基本语法","7.3.1基本语法",[24,33745,33746],{},"作用：函数名可以相同，提高复用性",[24,33748,33749],{},[20234,33750,33751],{},"函数重载满足条件：",[21052,33753,33754,33757,33760],{},[31,33755,33756],{},"同一个作用域下",[31,33758,33759],{},"函数名称相同",[31,33761,33762,33763,33766,33767,33770,33771],{},"函数参数",[20234,33764,33765],{},"类型不同","  或者 ",[20234,33768,33769],{},"个数不同"," 或者 ",[20234,33772,33773],{},"顺序不同",[24,33775,33776,33779],{},[20234,33777,33778],{},"注意:","  函数的返回值不可以作为函数重载的条件",[146,33781,33783],{"className":29770,"code":33782,"language":29772,"meta":39,"style":39},"\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",[152,33784,33785,33790,33798,33802,33815,33819,33833,33837,33850,33854,33869,33873,33886,33890,33911,33915,33928,33932,33952,33956,33969,33973,33977,33982,33987,33992,33997,34002,34006,34010,34018,34022,34028,34038,34048,34062,34077,34081,34091,34095,34103],{"__ignoreMap":39},[155,33786,33787],{"class":157,"line":158},[155,33788,33789],{"class":161},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[155,33791,33792,33794,33796],{"class":157,"line":46},[155,33793,25227],{"class":167},[155,33795,31213],{"class":226},[155,33797,294],{"class":171},[155,33799,33800],{"class":157,"line":121},[155,33801,3008],{"class":171},[155,33803,33804,33806,33808,33811,33813],{"class":157,"line":180},[155,33805,26392],{"class":171},[155,33807,21089],{"class":167},[155,33809,33810],{"class":732}," \"func 的调用！\"",[155,33812,21357],{"class":167},[155,33814,28689],{"class":171},[155,33816,33817],{"class":157,"line":194},[155,33818,21475],{"class":171},[155,33820,33821,33823,33825,33827,33829,33831],{"class":157,"line":200},[155,33822,25227],{"class":167},[155,33824,31213],{"class":226},[155,33826,230],{"class":171},[155,33828,15239],{"class":167},[155,33830,21311],{"class":323},[155,33832,363],{"class":171},[155,33834,33835],{"class":157,"line":213},[155,33836,3008],{"class":171},[155,33838,33839,33841,33843,33846,33848],{"class":157,"line":220},[155,33840,26392],{"class":171},[155,33842,21089],{"class":167},[155,33844,33845],{"class":732}," \"func (int a) 的调用！\"",[155,33847,21357],{"class":167},[155,33849,28689],{"class":171},[155,33851,33852],{"class":157,"line":245},[155,33853,21475],{"class":171},[155,33855,33856,33858,33860,33862,33865,33867],{"class":157,"line":251},[155,33857,25227],{"class":167},[155,33859,31213],{"class":226},[155,33861,230],{"class":171},[155,33863,33864],{"class":167},"double",[155,33866,21311],{"class":323},[155,33868,363],{"class":171},[155,33870,33871],{"class":157,"line":257},[155,33872,3008],{"class":171},[155,33874,33875,33877,33879,33882,33884],{"class":157,"line":270},[155,33876,26392],{"class":171},[155,33878,21089],{"class":167},[155,33880,33881],{"class":732}," \"func (double a)的调用！\"",[155,33883,21357],{"class":167},[155,33885,28689],{"class":171},[155,33887,33888],{"class":157,"line":276},[155,33889,21475],{"class":171},[155,33891,33892,33894,33896,33898,33900,33902,33905,33907,33909],{"class":157,"line":297},[155,33893,25227],{"class":167},[155,33895,31213],{"class":226},[155,33897,230],{"class":171},[155,33899,15239],{"class":167},[155,33901,21311],{"class":323},[155,33903,33904],{"class":171}," ,",[155,33906,33864],{"class":167},[155,33908,22710],{"class":323},[155,33910,363],{"class":171},[155,33912,33913],{"class":157,"line":302},[155,33914,3008],{"class":171},[155,33916,33917,33919,33921,33924,33926],{"class":157,"line":308},[155,33918,26392],{"class":171},[155,33920,21089],{"class":167},[155,33922,33923],{"class":732}," \"func (int a ,double b) 的调用！\"",[155,33925,21357],{"class":167},[155,33927,28689],{"class":171},[155,33929,33930],{"class":157,"line":366},[155,33931,21475],{"class":171},[155,33933,33934,33936,33938,33940,33942,33944,33946,33948,33950],{"class":157,"line":379},[155,33935,25227],{"class":167},[155,33937,31213],{"class":226},[155,33939,230],{"class":171},[155,33941,33864],{"class":167},[155,33943,21311],{"class":323},[155,33945,33904],{"class":171},[155,33947,15239],{"class":167},[155,33949,22710],{"class":323},[155,33951,363],{"class":171},[155,33953,33954],{"class":157,"line":385},[155,33955,3008],{"class":171},[155,33957,33958,33960,33962,33965,33967],{"class":157,"line":415},[155,33959,26392],{"class":171},[155,33961,21089],{"class":167},[155,33963,33964],{"class":732}," \"func (double a ,int b)的调用！\"",[155,33966,21357],{"class":167},[155,33968,28689],{"class":171},[155,33970,33971],{"class":157,"line":452},[155,33972,21475],{"class":171},[155,33974,33975],{"class":157,"line":480},[155,33976,217],{"emptyLinePlaceholder":216},[155,33978,33979],{"class":157,"line":486},[155,33980,33981],{"class":161},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[155,33983,33984],{"class":157,"line":499},[155,33985,33986],{"class":161},"\u002F\u002Fint func(double a, int b)\n",[155,33988,33989],{"class":157,"line":505},[155,33990,33991],{"class":161},"\u002F\u002F{\n",[155,33993,33994],{"class":157,"line":528},[155,33995,33996],{"class":161},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[155,33998,33999],{"class":157,"line":549},[155,34000,34001],{"class":161},"\u002F\u002F}\n",[155,34003,34004],{"class":157,"line":570},[155,34005,217],{"emptyLinePlaceholder":216},[155,34007,34008],{"class":157,"line":575},[155,34009,217],{"emptyLinePlaceholder":216},[155,34011,34012,34014,34016],{"class":157,"line":581},[155,34013,15239],{"class":167},[155,34015,21861],{"class":226},[155,34017,30681],{"class":171},[155,34019,34020],{"class":157,"line":592},[155,34021,217],{"emptyLinePlaceholder":216},[155,34023,34024,34026],{"class":157,"line":610},[155,34025,33112],{"class":226},[155,34027,25499],{"class":171},[155,34029,34030,34032,34034,34036],{"class":157,"line":622},[155,34031,33112],{"class":226},[155,34033,230],{"class":171},[155,34035,565],{"class":263},[155,34037,22596],{"class":171},[155,34039,34040,34042,34044,34046],{"class":157,"line":638},[155,34041,33112],{"class":226},[155,34043,230],{"class":171},[155,34045,20139],{"class":263},[155,34047,22596],{"class":171},[155,34049,34050,34052,34054,34056,34058,34060],{"class":157,"line":650},[155,34051,33112],{"class":226},[155,34053,230],{"class":171},[155,34055,565],{"class":263},[155,34057,332],{"class":171},[155,34059,20139],{"class":263},[155,34061,22596],{"class":171},[155,34063,34064,34066,34068,34070,34073,34075],{"class":157,"line":662},[155,34065,33112],{"class":226},[155,34067,230],{"class":171},[155,34069,20139],{"class":263},[155,34071,34072],{"class":171}," , ",[155,34074,565],{"class":263},[155,34076,22596],{"class":171},[155,34078,34079],{"class":157,"line":678},[155,34080,33037],{"class":171},[155,34082,34083,34085,34087,34089],{"class":157,"line":694},[155,34084,22190],{"class":226},[155,34086,230],{"class":171},[155,34088,22195],{"class":732},[155,34090,22596],{"class":171},[155,34092,34093],{"class":157,"line":706},[155,34094,217],{"emptyLinePlaceholder":216},[155,34096,34097,34099,34101],{"class":157,"line":715},[155,34098,1692],{"class":167},[155,34100,1151],{"class":263},[155,34102,21206],{"class":171},[155,34104,34105],{"class":157,"line":720},[155,34106,21475],{"class":171},[24,34108,34109],{},"重点：函数返回值不可以作为函数重载条件！",[14,34111,34113],{"id":34112},"_732注意事项","7.3.2注意事项",[21052,34115,34116,34119],{},[31,34117,34118],{},"引用作为重载条件!!!",[31,34120,34121],{},"函数重载碰到函数默认参数",[146,34123,34125],{"className":20084,"code":34124,"language":20086,"meta":39,"style":39},"\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",[152,34126,34127,34132,34137,34141,34157,34161,34174,34178,34182,34200,34204,34217,34221,34225,34229,34234,34238,34262,34266,34279,34283,34287,34301,34305,34318,34322,34326,34334,34338,34350,34360,34373,34377,34381,34389,34393,34403,34407,34415],{"__ignoreMap":39},[155,34128,34129],{"class":157,"line":158},[155,34130,34131],{"class":161},"\u002F\u002F函数重载注意事项\n",[155,34133,34134],{"class":157,"line":46},[155,34135,34136],{"class":161},"\u002F\u002F1、引用作为重载条件\n",[155,34138,34139],{"class":157,"line":121},[155,34140,217],{"emptyLinePlaceholder":216},[155,34142,34143,34145,34147,34149,34151,34153,34155],{"class":157,"line":180},[155,34144,25227],{"class":167},[155,34146,31213],{"class":226},[155,34148,230],{"class":171},[155,34150,15239],{"class":167},[155,34152,30413],{"class":167},[155,34154,20318],{"class":323},[155,34156,363],{"class":171},[155,34158,34159],{"class":157,"line":194},[155,34160,3008],{"class":171},[155,34162,34163,34165,34167,34170,34172],{"class":157,"line":200},[155,34164,26392],{"class":171},[155,34166,21089],{"class":167},[155,34168,34169],{"class":732}," \"func (int &a) 调用 \"",[155,34171,21357],{"class":167},[155,34173,28689],{"class":171},[155,34175,34176],{"class":157,"line":213},[155,34177,21475],{"class":171},[155,34179,34180],{"class":157,"line":220},[155,34181,217],{"emptyLinePlaceholder":216},[155,34183,34184,34186,34188,34190,34192,34194,34196,34198],{"class":157,"line":245},[155,34185,25227],{"class":167},[155,34187,31213],{"class":226},[155,34189,230],{"class":171},[155,34191,26655],{"class":167},[155,34193,22269],{"class":167},[155,34195,30413],{"class":167},[155,34197,20318],{"class":323},[155,34199,363],{"class":171},[155,34201,34202],{"class":157,"line":251},[155,34203,3008],{"class":171},[155,34205,34206,34208,34210,34213,34215],{"class":157,"line":257},[155,34207,26392],{"class":171},[155,34209,21089],{"class":167},[155,34211,34212],{"class":732}," \"func (const int &a) 调用 \"",[155,34214,21357],{"class":167},[155,34216,28689],{"class":171},[155,34218,34219],{"class":157,"line":270},[155,34220,21475],{"class":171},[155,34222,34223],{"class":157,"line":276},[155,34224,217],{"emptyLinePlaceholder":216},[155,34226,34227],{"class":157,"line":297},[155,34228,217],{"emptyLinePlaceholder":216},[155,34230,34231],{"class":157,"line":302},[155,34232,34233],{"class":161},"\u002F\u002F2、函数重载碰到函数默认参数\n",[155,34235,34236],{"class":157,"line":308},[155,34237,217],{"emptyLinePlaceholder":216},[155,34239,34240,34242,34244,34246,34248,34250,34252,34254,34256,34258,34260],{"class":157,"line":366},[155,34241,25227],{"class":167},[155,34243,33445],{"class":226},[155,34245,230],{"class":171},[155,34247,15239],{"class":167},[155,34249,21311],{"class":323},[155,34251,7589],{"class":171},[155,34253,15239],{"class":167},[155,34255,22710],{"class":323},[155,34257,33391],{"class":167},[155,34259,21925],{"class":263},[155,34261,363],{"class":171},[155,34263,34264],{"class":157,"line":379},[155,34265,3008],{"class":171},[155,34267,34268,34270,34272,34275,34277],{"class":157,"line":385},[155,34269,26392],{"class":171},[155,34271,21089],{"class":167},[155,34273,34274],{"class":732}," \"func2(int a, int b = 10) 调用\"",[155,34276,21357],{"class":167},[155,34278,28689],{"class":171},[155,34280,34281],{"class":157,"line":415},[155,34282,21475],{"class":171},[155,34284,34285],{"class":157,"line":452},[155,34286,217],{"emptyLinePlaceholder":216},[155,34288,34289,34291,34293,34295,34297,34299],{"class":157,"line":480},[155,34290,25227],{"class":167},[155,34292,33445],{"class":226},[155,34294,230],{"class":171},[155,34296,15239],{"class":167},[155,34298,21311],{"class":323},[155,34300,363],{"class":171},[155,34302,34303],{"class":157,"line":486},[155,34304,3008],{"class":171},[155,34306,34307,34309,34311,34314,34316],{"class":157,"line":499},[155,34308,26392],{"class":171},[155,34310,21089],{"class":167},[155,34312,34313],{"class":732}," \"func2(int a) 调用\"",[155,34315,21357],{"class":167},[155,34317,28689],{"class":171},[155,34319,34320],{"class":157,"line":505},[155,34321,21475],{"class":171},[155,34323,34324],{"class":157,"line":528},[155,34325,217],{"emptyLinePlaceholder":216},[155,34327,34328,34330,34332],{"class":157,"line":549},[155,34329,15239],{"class":167},[155,34331,21861],{"class":226},[155,34333,30681],{"class":171},[155,34335,34336],{"class":157,"line":570},[155,34337,33037],{"class":171},[155,34339,34340,34342,34344,34346,34348],{"class":157,"line":575},[155,34341,21872],{"class":167},[155,34343,30697],{"class":171},[155,34345,317],{"class":167},[155,34347,21925],{"class":263},[155,34349,21206],{"class":171},[155,34351,34352,34354,34357],{"class":157,"line":581},[155,34353,33112],{"class":226},[155,34355,34356],{"class":171},"(a);",[155,34358,34359],{"class":161}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[155,34361,34362,34364,34366,34368,34370],{"class":157,"line":592},[155,34363,33112],{"class":226},[155,34365,230],{"class":171},[155,34367,565],{"class":263},[155,34369,25829],{"class":171},[155,34371,34372],{"class":161},"\u002F\u002F调用有const   10是个常量\n",[155,34374,34375],{"class":157,"line":610},[155,34376,217],{"emptyLinePlaceholder":216},[155,34378,34379],{"class":157,"line":622},[155,34380,217],{"emptyLinePlaceholder":216},[155,34382,34383,34386],{"class":157,"line":638},[155,34384,34385],{"class":161},"    \u002F\u002Ffunc2(10);",[155,34387,34388],{"class":161}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[155,34390,34391],{"class":157,"line":650},[155,34392,217],{"emptyLinePlaceholder":216},[155,34394,34395,34397,34399,34401],{"class":157,"line":662},[155,34396,22190],{"class":226},[155,34398,230],{"class":171},[155,34400,22195],{"class":732},[155,34402,22596],{"class":171},[155,34404,34405],{"class":157,"line":678},[155,34406,217],{"emptyLinePlaceholder":216},[155,34408,34409,34411,34413],{"class":157,"line":694},[155,34410,1692],{"class":167},[155,34412,1151],{"class":263},[155,34414,21206],{"class":171},[155,34416,34417],{"class":157,"line":706},[155,34418,21475],{"class":171},[20011,34420,34421],{},"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":39,"searchDepth":46,"depth":46,"links":34423},[34424,34425,34426],{"id":33356,"depth":46,"text":33357},{"id":33613,"depth":46,"text":33614},{"id":33735,"depth":46,"text":33736,"children":34427},[34428,34429],{"id":33742,"depth":121,"text":33743},{"id":34112,"depth":121,"text":34113},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":33348,"description":39},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":34436,"title":34437,"body":34438,"description":43156,"extension":20021,"meta":43157,"navigation":216,"path":43158,"seo":43159,"stem":43160,"__hash__":43161},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":34439,"toc":43137},[34440,34443,34449,34456,34461,34464,34467,34470,34474,34478,34481,34484,34492,34497,34500,34507,34512,34669,34672,34925,34928,34931,34934,34939,34942,34945,34956,34961,35197,35201,35211,35214,35222,35369,35373,35376,35379,35383,35828,35832,35840,35848,36728,36735,36740,37368,37371,37374,37377,37496,37499,37586,37589,37715,37718,37812,37815,38168,38172,38180,38184,38191,38194,38197,38208,38214,38219,38231,38239,38259,38267,38284,38470,38473,38477,38480,38483,38486,38489,38492,38495,38498,38958,38964,38968,38971,38982,39569,39572,40061,40065,40068,40071,40074,40077,40080,40088,40484,40488,40491,40494,40940,40943,40946,40951,40954,40959,40962,40966,40969,40971,40977,40980,41286,41296,41337,41341,41344,41346,41379,41382,41689,41691,41706,41709,41732,41741,41747,41750,41754,41757,41760,41765,41776,41781,41789,41793,41923,41926,41929,42104,42109,42321,42325,42328,42442,42447,42686,42690,42694,42697,42700,42705,42810,42813,42816,42819,42823,42934,42937,42940,42945,42997,43000,43003,43008,43054,43057,43062,43130,43132,43135],[10,34441,34437],{"id":34442},"_8类和对象",[24,34444,34445,34446],{},"C++面向对象的三大特性为",[20234,34447,34448],{},"封装、继承、多态",[24,34450,34451,34452,34455],{},"C++认为",[20234,34453,34454],{},"万事万物都皆为对象","，对象上有其属性和行为",[24,34457,34458],{},[20234,34459,34460],{},"例如：",[24,34462,34463],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[24,34465,34466],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[24,34468,34469],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[20037,34471,34473],{"id":34472},"_81封装","8.1封装",[14,34475,34477],{"id":34476},"_811封装的意义","8.1.1封装的意义",[24,34479,34480],{},"封装是C++面向对象三大特性之一",[24,34482,34483],{},"封装的意义：",[21052,34485,34486,34489],{},[31,34487,34488],{},"将属性和行为作为一个整体，表现生活中的事物",[31,34490,34491],{},"将属性和行为加以权限控制",[24,34493,34494],{},[20234,34495,34496],{},"封装意义一：",[24,34498,34499],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[24,34501,34502,33622,34504],{},[20234,34503,25045],{},[152,34505,34506],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[28,34508,34509],{},[31,34510,34511],{},"**示例1：**设计一个圆类，求圆的周长",[146,34513,34515],{"className":20084,"code":34514,"language":20086,"meta":39,"style":39},"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",[152,34516,34517,34524,34528,34533,34538,34543,34548,34555,34560,34570,34574,34591,34595,34599,34607,34611,34616,34621,34626,34631,34642,34665],{"__ignoreMap":39},[155,34518,34519,34521],{"class":157,"line":158},[155,34520,223],{"class":167},[155,34522,34523],{"class":226}," Circle\n",[155,34525,34526],{"class":157,"line":46},[155,34527,3008],{"class":171},[155,34529,34530],{"class":157,"line":121},[155,34531,34532],{"class":161},"    \u002F\u002F访问权限\n",[155,34534,34535],{"class":157,"line":180},[155,34536,34537],{"class":161},"    \u002F\u002F公共权限\n",[155,34539,34540],{"class":157,"line":194},[155,34541,34542],{"class":167},"public:\n",[155,34544,34545],{"class":157,"line":200},[155,34546,34547],{"class":161},"    \u002F\u002F属性\n",[155,34549,34550,34552],{"class":157,"line":213},[155,34551,21872],{"class":167},[155,34553,34554],{"class":171}," m_r;\n",[155,34556,34557],{"class":157,"line":220},[155,34558,34559],{"class":161},"    \u002F\u002F行为\n",[155,34561,34562,34565,34568],{"class":157,"line":245},[155,34563,34564],{"class":167},"    double",[155,34566,34567],{"class":226}," calculateZC",[155,34569,294],{"class":171},[155,34571,34572],{"class":157,"line":251},[155,34573,21917],{"class":171},[155,34575,34576,34578,34581,34583,34586,34588],{"class":157,"line":257},[155,34577,709],{"class":167},[155,34579,34580],{"class":263}," 2",[155,34582,1563],{"class":167},[155,34584,34585],{"class":171},"PI",[155,34587,1563],{"class":167},[155,34589,34590],{"class":171},"m_r;\n",[155,34592,34593],{"class":157,"line":270},[155,34594,22074],{"class":171},[155,34596,34597],{"class":157,"line":276},[155,34598,23863],{"class":171},[155,34600,34601,34603,34605],{"class":157,"line":297},[155,34602,15239],{"class":167},[155,34604,21861],{"class":226},[155,34606,294],{"class":171},[155,34608,34609],{"class":157,"line":302},[155,34610,3008],{"class":171},[155,34612,34613],{"class":157,"line":308},[155,34614,34615],{"class":161},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[155,34617,34618],{"class":157,"line":366},[155,34619,34620],{"class":161},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[155,34622,34623],{"class":157,"line":379},[155,34624,34625],{"class":171},"    Circle c1;\n",[155,34627,34628],{"class":157,"line":385},[155,34629,34630],{"class":161},"    \u002F\u002F给圆对象 的属性进行赋值\n",[155,34632,34633,34636,34638,34640],{"class":157,"line":415},[155,34634,34635],{"class":171},"    c1.m_r",[155,34637,317],{"class":167},[155,34639,565],{"class":263},[155,34641,21206],{"class":171},[155,34643,34644,34646,34648,34651,34653,34656,34659,34661,34663],{"class":157,"line":452},[155,34645,21461],{"class":171},[155,34647,21089],{"class":167},[155,34649,34650],{"class":732},"\"圆的周长\"",[155,34652,21089],{"class":167},[155,34654,34655],{"class":171},"c1.",[155,34657,34658],{"class":226},"calculateZC",[155,34660,22313],{"class":171},[155,34662,21089],{"class":167},[155,34664,21111],{"class":171},[155,34666,34667],{"class":157,"line":480},[155,34668,21475],{"class":171},[24,34670,34671],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[146,34673,34675],{"className":20084,"code":34674,"language":20086,"meta":39,"style":39},"#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",[152,34676,34677,34683,34693,34699,34705,34709,34713,34718,34725,34730,34748,34752,34762,34766,34771,34787,34791,34801,34805,34810,34818,34822,34854,34858,34862,34870,34874,34879,34884,34898,34912,34921],{"__ignoreMap":39},[155,34678,34679,34681],{"class":157,"line":158},[155,34680,21838],{"class":167},[155,34682,21841],{"class":732},[155,34684,34685,34687,34689,34691],{"class":157,"line":46},[155,34686,21846],{"class":167},[155,34688,21849],{"class":167},[155,34690,21852],{"class":226},[155,34692,21206],{"class":171},[155,34694,34695,34697],{"class":157,"line":121},[155,34696,21838],{"class":167},[155,34698,27608],{"class":732},[155,34700,34701,34703],{"class":157,"line":180},[155,34702,223],{"class":167},[155,34704,27621],{"class":226},[155,34706,34707],{"class":157,"line":194},[155,34708,3008],{"class":171},[155,34710,34711],{"class":157,"line":200},[155,34712,34542],{"class":167},[155,34714,34715],{"class":157,"line":213},[155,34716,34717],{"class":171},"    string m_name;\n",[155,34719,34720,34722],{"class":157,"line":220},[155,34721,21872],{"class":167},[155,34723,34724],{"class":171}," m_id;\n",[155,34726,34727],{"class":157,"line":245},[155,34728,34729],{"class":161},"    \u002F\u002F赋值姓名\n",[155,34731,34732,34735,34738,34740,34743,34746],{"class":157,"line":251},[155,34733,34734],{"class":167},"    void",[155,34736,34737],{"class":226}," setName",[155,34739,230],{"class":171},[155,34741,34742],{"class":226},"string",[155,34744,34745],{"class":323}," name",[155,34747,363],{"class":171},[155,34749,34750],{"class":157,"line":257},[155,34751,21917],{"class":171},[155,34753,34754,34757,34759],{"class":157,"line":270},[155,34755,34756],{"class":171},"        m_name",[155,34758,317],{"class":167},[155,34760,34761],{"class":171},"name;\n",[155,34763,34764],{"class":157,"line":276},[155,34765,22074],{"class":171},[155,34767,34768],{"class":157,"line":297},[155,34769,34770],{"class":161},"    \u002F\u002F赋值学号\n",[155,34772,34773,34775,34778,34780,34782,34785],{"class":157,"line":302},[155,34774,34734],{"class":167},[155,34776,34777],{"class":226}," setId",[155,34779,230],{"class":171},[155,34781,15239],{"class":167},[155,34783,34784],{"class":323}," id",[155,34786,363],{"class":171},[155,34788,34789],{"class":157,"line":308},[155,34790,21917],{"class":171},[155,34792,34793,34796,34798],{"class":157,"line":366},[155,34794,34795],{"class":171},"        m_id",[155,34797,317],{"class":167},[155,34799,34800],{"class":171},"id;\n",[155,34802,34803],{"class":157,"line":379},[155,34804,22074],{"class":171},[155,34806,34807],{"class":157,"line":385},[155,34808,34809],{"class":161},"    \u002F\u002F打印学生信息\n",[155,34811,34812,34814,34816],{"class":157,"line":415},[155,34813,34734],{"class":167},[155,34815,29463],{"class":226},[155,34817,294],{"class":171},[155,34819,34820],{"class":157,"line":452},[155,34821,21917],{"class":171},[155,34823,34824,34826,34828,34831,34833,34836,34838,34840,34842,34845,34847,34850,34852],{"class":157,"line":480},[155,34825,23322],{"class":171},[155,34827,21089],{"class":167},[155,34829,34830],{"class":732},"\"姓名：\"",[155,34832,21089],{"class":167},[155,34834,34835],{"class":171},"m_name",[155,34837,21089],{"class":167},[155,34839,24225],{"class":732},[155,34841,21089],{"class":167},[155,34843,34844],{"class":732},"\"学号：\"",[155,34846,21089],{"class":167},[155,34848,34849],{"class":171},"m_id",[155,34851,21089],{"class":167},[155,34853,21111],{"class":171},[155,34855,34856],{"class":157,"line":486},[155,34857,22074],{"class":171},[155,34859,34860],{"class":157,"line":499},[155,34861,23863],{"class":171},[155,34863,34864,34866,34868],{"class":157,"line":505},[155,34865,15239],{"class":167},[155,34867,21861],{"class":226},[155,34869,294],{"class":171},[155,34871,34872],{"class":157,"line":528},[155,34873,3008],{"class":171},[155,34875,34876],{"class":157,"line":549},[155,34877,34878],{"class":161},"    \u002F\u002F实例化\n",[155,34880,34881],{"class":157,"line":570},[155,34882,34883],{"class":171},"    Student s1;\n",[155,34885,34886,34889,34892,34894,34896],{"class":157,"line":575},[155,34887,34888],{"class":171},"    s1.",[155,34890,34891],{"class":226},"setName",[155,34893,230],{"class":171},[155,34895,27775],{"class":732},[155,34897,22596],{"class":171},[155,34899,34900,34902,34905,34907,34910],{"class":157,"line":581},[155,34901,34888],{"class":171},[155,34903,34904],{"class":226},"setId",[155,34906,230],{"class":171},[155,34908,34909],{"class":263},"123456",[155,34911,22596],{"class":171},[155,34913,34914,34916,34919],{"class":157,"line":592},[155,34915,34888],{"class":171},[155,34917,34918],{"class":226},"printInfo",[155,34920,25499],{"class":171},[155,34922,34923],{"class":157,"line":610},[155,34924,21475],{"class":171},[24,34926,34927],{},"类中的属性和行为统称为成员",[24,34929,34930],{},"属性：成员属性(成员变量)",[24,34932,34933],{},"方法：成员函数(成员方法)",[24,34935,34936],{},[20234,34937,34938],{},"封装意义二：",[24,34940,34941],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[24,34943,34944],{},"访问权限有三种：",[28,34946,34947,34950,34953],{},[31,34948,34949],{},"public        公共权限",[31,34951,34952],{},"protected 保护权限",[31,34954,34955],{},"private      私有权限",[24,34957,34958],{},[20234,34959,34960],{},"示例：",[146,34962,34964],{"className":29770,"code":34963,"language":29772,"meta":39,"style":39},"\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",[152,34965,34966,34971,34976,34981,34986,34990,34997,35001,35006,35010,35015,35019,35024,35029,35034,35038,35043,35048,35055,35059,35063,35071,35075,35086,35098,35110,35114,35118,35122,35130,35134,35139,35151,35159,35167,35171,35181,35185,35193],{"__ignoreMap":39},[155,34967,34968],{"class":157,"line":158},[155,34969,34970],{"class":161},"\u002F\u002F三种权限\n",[155,34972,34973],{"class":157,"line":46},[155,34974,34975],{"class":161},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[155,34977,34978],{"class":157,"line":121},[155,34979,34980],{"class":161},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[155,34982,34983],{"class":157,"line":180},[155,34984,34985],{"class":161},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[155,34987,34988],{"class":157,"line":194},[155,34989,217],{"emptyLinePlaceholder":216},[155,34991,34992,34994],{"class":157,"line":200},[155,34993,223],{"class":167},[155,34995,34996],{"class":226}," Person\n",[155,34998,34999],{"class":157,"line":213},[155,35000,3008],{"class":171},[155,35002,35003],{"class":157,"line":220},[155,35004,35005],{"class":161},"    \u002F\u002F姓名  公共权限\n",[155,35007,35008],{"class":157,"line":245},[155,35009,34542],{"class":167},[155,35011,35012],{"class":157,"line":251},[155,35013,35014],{"class":171},"    string m_Name;\n",[155,35016,35017],{"class":157,"line":257},[155,35018,217],{"emptyLinePlaceholder":216},[155,35020,35021],{"class":157,"line":270},[155,35022,35023],{"class":161},"    \u002F\u002F汽车  保护权限\n",[155,35025,35026],{"class":157,"line":276},[155,35027,35028],{"class":167},"protected:\n",[155,35030,35031],{"class":157,"line":297},[155,35032,35033],{"class":171},"    string m_Car;\n",[155,35035,35036],{"class":157,"line":302},[155,35037,217],{"emptyLinePlaceholder":216},[155,35039,35040],{"class":157,"line":308},[155,35041,35042],{"class":161},"    \u002F\u002F银行卡密码  私有权限\n",[155,35044,35045],{"class":157,"line":366},[155,35046,35047],{"class":167},"private:\n",[155,35049,35050,35052],{"class":157,"line":379},[155,35051,21872],{"class":167},[155,35053,35054],{"class":171}," m_Password;\n",[155,35056,35057],{"class":157,"line":385},[155,35058,217],{"emptyLinePlaceholder":216},[155,35060,35061],{"class":157,"line":415},[155,35062,34542],{"class":167},[155,35064,35065,35067,35069],{"class":157,"line":452},[155,35066,34734],{"class":167},[155,35068,31213],{"class":226},[155,35070,294],{"class":171},[155,35072,35073],{"class":157,"line":480},[155,35074,21917],{"class":171},[155,35076,35077,35080,35082,35084],{"class":157,"line":486},[155,35078,35079],{"class":171},"        m_Name ",[155,35081,317],{"class":167},[155,35083,28787],{"class":732},[155,35085,21206],{"class":171},[155,35087,35088,35091,35093,35096],{"class":157,"line":499},[155,35089,35090],{"class":171},"        m_Car ",[155,35092,317],{"class":167},[155,35094,35095],{"class":732}," \"拖拉机\"",[155,35097,21206],{"class":171},[155,35099,35100,35103,35105,35108],{"class":157,"line":505},[155,35101,35102],{"class":171},"        m_Password ",[155,35104,317],{"class":167},[155,35106,35107],{"class":263}," 123456",[155,35109,21206],{"class":171},[155,35111,35112],{"class":157,"line":528},[155,35113,22074],{"class":171},[155,35115,35116],{"class":157,"line":549},[155,35117,23863],{"class":171},[155,35119,35120],{"class":157,"line":570},[155,35121,217],{"emptyLinePlaceholder":216},[155,35123,35124,35126,35128],{"class":157,"line":575},[155,35125,15239],{"class":167},[155,35127,21861],{"class":226},[155,35129,30681],{"class":171},[155,35131,35132],{"class":157,"line":581},[155,35133,217],{"emptyLinePlaceholder":216},[155,35135,35136],{"class":157,"line":592},[155,35137,35138],{"class":171},"    Person p;\n",[155,35140,35141,35144,35146,35149],{"class":157,"line":610},[155,35142,35143],{"class":171},"    p.m_Name ",[155,35145,317],{"class":167},[155,35147,35148],{"class":732}," \"李四\"",[155,35150,21206],{"class":171},[155,35152,35153,35156],{"class":157,"line":622},[155,35154,35155],{"class":161},"    \u002F\u002Fp.m_Car = \"奔驰\";",[155,35157,35158],{"class":161},"  \u002F\u002F保护权限类外访问不到\n",[155,35160,35161,35164],{"class":157,"line":638},[155,35162,35163],{"class":161},"    \u002F\u002Fp.m_Password = 123;",[155,35165,35166],{"class":161}," \u002F\u002F私有权限类外访问不到\n",[155,35168,35169],{"class":157,"line":650},[155,35170,217],{"emptyLinePlaceholder":216},[155,35172,35173,35175,35177,35179],{"class":157,"line":662},[155,35174,22190],{"class":226},[155,35176,230],{"class":171},[155,35178,22195],{"class":732},[155,35180,22596],{"class":171},[155,35182,35183],{"class":157,"line":678},[155,35184,217],{"emptyLinePlaceholder":216},[155,35186,35187,35189,35191],{"class":157,"line":694},[155,35188,1692],{"class":167},[155,35190,1151],{"class":263},[155,35192,21206],{"class":171},[155,35194,35195],{"class":157,"line":706},[155,35196,21475],{"class":171},[14,35198,35200],{"id":35199},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[24,35202,35203,35204,35207,35208],{},"在C++中 struct和class唯一的",[20234,35205,35206],{},"区别","就在于 ",[20234,35209,35210],{},"默认的访问权限不同",[24,35212,35213],{},"区别：",[21052,35215,35216,35219],{},[31,35217,35218],{},"struct 默认权限为公共",[31,35220,35221],{},"class   默认权限为私有",[146,35223,35225],{"className":29770,"code":35224,"language":29772,"meta":39,"style":39},"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",[152,35226,35227,35234,35238,35248,35252,35256,35263,35267,35277,35281,35285,35293,35297,35302,35316,35320,35325,35339,35343,35353,35357,35365],{"__ignoreMap":39},[155,35228,35229,35231],{"class":157,"line":158},[155,35230,223],{"class":167},[155,35232,35233],{"class":226}," C1\n",[155,35235,35236],{"class":157,"line":46},[155,35237,3008],{"class":171},[155,35239,35240,35242,35245],{"class":157,"line":121},[155,35241,21872],{"class":167},[155,35243,35244],{"class":171},"  m_A;",[155,35246,35247],{"class":161}," \u002F\u002F默认是私有权限\n",[155,35249,35250],{"class":157,"line":180},[155,35251,23863],{"class":171},[155,35253,35254],{"class":157,"line":194},[155,35255,217],{"emptyLinePlaceholder":216},[155,35257,35258,35260],{"class":157,"line":200},[155,35259,27618],{"class":167},[155,35261,35262],{"class":226}," C2\n",[155,35264,35265],{"class":157,"line":213},[155,35266,3008],{"class":171},[155,35268,35269,35271,35274],{"class":157,"line":220},[155,35270,21872],{"class":167},[155,35272,35273],{"class":171}," m_A;",[155,35275,35276],{"class":161},"  \u002F\u002F默认是公共权限\n",[155,35278,35279],{"class":157,"line":245},[155,35280,23863],{"class":171},[155,35282,35283],{"class":157,"line":251},[155,35284,217],{"emptyLinePlaceholder":216},[155,35286,35287,35289,35291],{"class":157,"line":257},[155,35288,15239],{"class":167},[155,35290,21861],{"class":226},[155,35292,30681],{"class":171},[155,35294,35295],{"class":157,"line":270},[155,35296,217],{"emptyLinePlaceholder":216},[155,35298,35299],{"class":157,"line":276},[155,35300,35301],{"class":171},"    C1 c1;\n",[155,35303,35304,35307,35309,35311,35313],{"class":157,"line":297},[155,35305,35306],{"class":171},"    c1.m_A ",[155,35308,317],{"class":167},[155,35310,21925],{"class":263},[155,35312,20144],{"class":171},[155,35314,35315],{"class":161}," \u002F\u002F错误，访问权限是私有\n",[155,35317,35318],{"class":157,"line":302},[155,35319,217],{"emptyLinePlaceholder":216},[155,35321,35322],{"class":157,"line":308},[155,35323,35324],{"class":171},"    C2 c2;\n",[155,35326,35327,35330,35332,35334,35336],{"class":157,"line":366},[155,35328,35329],{"class":171},"    c2.m_A ",[155,35331,317],{"class":167},[155,35333,21925],{"class":263},[155,35335,20144],{"class":171},[155,35337,35338],{"class":161}," \u002F\u002F正确，访问权限是公共\n",[155,35340,35341],{"class":157,"line":379},[155,35342,217],{"emptyLinePlaceholder":216},[155,35344,35345,35347,35349,35351],{"class":157,"line":385},[155,35346,22190],{"class":226},[155,35348,230],{"class":171},[155,35350,22195],{"class":732},[155,35352,22596],{"class":171},[155,35354,35355],{"class":157,"line":415},[155,35356,217],{"emptyLinePlaceholder":216},[155,35358,35359,35361,35363],{"class":157,"line":452},[155,35360,1692],{"class":167},[155,35362,1151],{"class":263},[155,35364,21206],{"class":171},[155,35366,35367],{"class":157,"line":480},[155,35368,21475],{"class":171},[14,35370,35372],{"id":35371},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[24,35374,35375],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[24,35377,35378],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[24,35380,35381],{},[20234,35382,34960],{},[146,35384,35386],{"className":29770,"code":35385,"language":29772,"meta":39,"style":39},"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",[152,35387,35388,35398,35402,35406,35411,35425,35434,35438,35448,35452,35459,35463,35467,35471,35476,35485,35492,35496,35501,35517,35540,35553,35560,35564,35573,35577,35581,35586,35602,35612,35616,35620,35624,35632,35636,35646,35650,35658,35662,35666,35674,35678,35682,35687,35700,35723,35727,35732,35745,35767,35771,35776,35790,35798,35802,35812,35816,35824],{"__ignoreMap":39},[155,35389,35390,35392,35395],{"class":157,"line":158},[155,35391,223],{"class":167},[155,35393,35394],{"class":226}," Person",[155,35396,35397],{"class":171}," {\n",[155,35399,35400],{"class":157,"line":46},[155,35401,34542],{"class":167},[155,35403,35404],{"class":157,"line":121},[155,35405,217],{"emptyLinePlaceholder":216},[155,35407,35408],{"class":157,"line":180},[155,35409,35410],{"class":161},"    \u002F\u002F姓名设置可读可写\n",[155,35412,35413,35415,35417,35419,35421,35423],{"class":157,"line":194},[155,35414,34734],{"class":167},[155,35416,34737],{"class":226},[155,35418,230],{"class":171},[155,35420,34742],{"class":226},[155,35422,34745],{"class":323},[155,35424,32269],{"class":171},[155,35426,35427,35429,35431],{"class":157,"line":200},[155,35428,35079],{"class":171},[155,35430,317],{"class":167},[155,35432,35433],{"class":171}," name;\n",[155,35435,35436],{"class":157,"line":213},[155,35437,22074],{"class":171},[155,35439,35440,35443,35446],{"class":157,"line":220},[155,35441,35442],{"class":226},"    string",[155,35444,35445],{"class":226}," getName",[155,35447,294],{"class":171},[155,35449,35450],{"class":157,"line":245},[155,35451,21917],{"class":171},[155,35453,35454,35456],{"class":157,"line":251},[155,35455,709],{"class":167},[155,35457,35458],{"class":171}," m_Name;\n",[155,35460,35461],{"class":157,"line":257},[155,35462,22074],{"class":171},[155,35464,35465],{"class":157,"line":270},[155,35466,217],{"emptyLinePlaceholder":216},[155,35468,35469],{"class":157,"line":276},[155,35470,217],{"emptyLinePlaceholder":216},[155,35472,35473],{"class":157,"line":297},[155,35474,35475],{"class":161},"    \u002F\u002F获取年龄 \n",[155,35477,35478,35480,35483],{"class":157,"line":302},[155,35479,21872],{"class":167},[155,35481,35482],{"class":226}," getAge",[155,35484,30681],{"class":171},[155,35486,35487,35489],{"class":157,"line":308},[155,35488,709],{"class":167},[155,35490,35491],{"class":171}," m_Age;\n",[155,35493,35494],{"class":157,"line":366},[155,35495,22074],{"class":171},[155,35497,35498],{"class":157,"line":379},[155,35499,35500],{"class":161},"    \u002F\u002F设置年龄\n",[155,35502,35503,35505,35508,35510,35512,35515],{"class":157,"line":385},[155,35504,34734],{"class":167},[155,35506,35507],{"class":226}," setAge",[155,35509,230],{"class":171},[155,35511,15239],{"class":167},[155,35513,35514],{"class":323}," age",[155,35516,32269],{"class":171},[155,35518,35519,35521,35524,35526,35528,35530,35533,35535,35538],{"class":157,"line":415},[155,35520,2803],{"class":167},[155,35522,35523],{"class":171}," (age ",[155,35525,20959],{"class":167},[155,35527,1151],{"class":263},[155,35529,23127],{"class":167},[155,35531,35532],{"class":171}," age ",[155,35534,1148],{"class":167},[155,35536,35537],{"class":263}," 150",[155,35539,32269],{"class":171},[155,35541,35542,35544,35546,35549,35551],{"class":157,"line":452},[155,35543,29566],{"class":171},[155,35545,21089],{"class":167},[155,35547,35548],{"class":732}," \"你个老妖精!\"",[155,35550,21357],{"class":167},[155,35552,28689],{"class":171},[155,35554,35555,35558],{"class":157,"line":480},[155,35556,35557],{"class":167},"            return",[155,35559,21206],{"class":171},[155,35561,35562],{"class":157,"line":486},[155,35563,22414],{"class":171},[155,35565,35566,35569,35571],{"class":157,"line":499},[155,35567,35568],{"class":171},"        m_Age ",[155,35570,317],{"class":167},[155,35572,27656],{"class":171},[155,35574,35575],{"class":157,"line":505},[155,35576,22074],{"class":171},[155,35578,35579],{"class":157,"line":528},[155,35580,217],{"emptyLinePlaceholder":216},[155,35582,35583],{"class":157,"line":549},[155,35584,35585],{"class":161},"    \u002F\u002F情人设置为只写\n",[155,35587,35588,35590,35593,35595,35597,35600],{"class":157,"line":570},[155,35589,34734],{"class":167},[155,35591,35592],{"class":226}," setLover",[155,35594,230],{"class":171},[155,35596,34742],{"class":226},[155,35598,35599],{"class":323}," lover",[155,35601,32269],{"class":171},[155,35603,35604,35607,35609],{"class":157,"line":575},[155,35605,35606],{"class":171},"        m_Lover ",[155,35608,317],{"class":167},[155,35610,35611],{"class":171}," lover;\n",[155,35613,35614],{"class":157,"line":581},[155,35615,22074],{"class":171},[155,35617,35618],{"class":157,"line":592},[155,35619,217],{"emptyLinePlaceholder":216},[155,35621,35622],{"class":157,"line":610},[155,35623,35047],{"class":167},[155,35625,35626,35629],{"class":157,"line":622},[155,35627,35628],{"class":171},"    string m_Name;",[155,35630,35631],{"class":161}," \u002F\u002F可读可写  姓名\n",[155,35633,35634],{"class":157,"line":638},[155,35635,33037],{"class":171},[155,35637,35638,35640,35643],{"class":157,"line":650},[155,35639,21872],{"class":167},[155,35641,35642],{"class":171}," m_Age;",[155,35644,35645],{"class":161}," \u002F\u002F只读  年龄\n",[155,35647,35648],{"class":157,"line":662},[155,35649,217],{"emptyLinePlaceholder":216},[155,35651,35652,35655],{"class":157,"line":678},[155,35653,35654],{"class":171},"    string m_Lover;",[155,35656,35657],{"class":161}," \u002F\u002F只写  情人\n",[155,35659,35660],{"class":157,"line":694},[155,35661,23863],{"class":171},[155,35663,35664],{"class":157,"line":706},[155,35665,217],{"emptyLinePlaceholder":216},[155,35667,35668,35670,35672],{"class":157,"line":715},[155,35669,15239],{"class":167},[155,35671,21861],{"class":226},[155,35673,30681],{"class":171},[155,35675,35676],{"class":157,"line":720},[155,35677,217],{"emptyLinePlaceholder":216},[155,35679,35680],{"class":157,"line":739},[155,35681,35138],{"class":171},[155,35683,35684],{"class":157,"line":745},[155,35685,35686],{"class":161},"    \u002F\u002F姓名设置\n",[155,35688,35689,35692,35694,35696,35698],{"class":157,"line":773},[155,35690,35691],{"class":171},"    p.",[155,35693,34891],{"class":226},[155,35695,230],{"class":171},[155,35697,27775],{"class":732},[155,35699,22596],{"class":171},[155,35701,35702,35704,35706,35709,35711,35714,35717,35719,35721],{"class":157,"line":779},[155,35703,26392],{"class":171},[155,35705,21089],{"class":167},[155,35707,35708],{"class":732}," \"姓名： \"",[155,35710,21357],{"class":167},[155,35712,35713],{"class":171}," p.",[155,35715,35716],{"class":226},"getName",[155,35718,32877],{"class":171},[155,35720,21089],{"class":167},[155,35722,28689],{"class":171},[155,35724,35725],{"class":157,"line":785},[155,35726,217],{"emptyLinePlaceholder":216},[155,35728,35729],{"class":157,"line":791},[155,35730,35731],{"class":161},"    \u002F\u002F年龄设置\n",[155,35733,35734,35736,35739,35741,35743],{"class":157,"line":796},[155,35735,35691],{"class":171},[155,35737,35738],{"class":226},"setAge",[155,35740,230],{"class":171},[155,35742,20715],{"class":263},[155,35744,22596],{"class":171},[155,35746,35747,35749,35751,35754,35756,35758,35761,35763,35765],{"class":157,"line":802},[155,35748,26392],{"class":171},[155,35750,21089],{"class":167},[155,35752,35753],{"class":732}," \"年龄： \"",[155,35755,21357],{"class":167},[155,35757,35713],{"class":171},[155,35759,35760],{"class":226},"getAge",[155,35762,32877],{"class":171},[155,35764,21089],{"class":167},[155,35766,28689],{"class":171},[155,35768,35769],{"class":157,"line":808},[155,35770,217],{"emptyLinePlaceholder":216},[155,35772,35773],{"class":157,"line":819},[155,35774,35775],{"class":161},"    \u002F\u002F情人设置\n",[155,35777,35778,35780,35783,35785,35788],{"class":157,"line":1832},[155,35779,35691],{"class":171},[155,35781,35782],{"class":226},"setLover",[155,35784,230],{"class":171},[155,35786,35787],{"class":732},"\"苍井\"",[155,35789,22596],{"class":171},[155,35791,35792,35795],{"class":157,"line":1838},[155,35793,35794],{"class":161},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[155,35796,35797],{"class":161},"  \u002F\u002F只写属性，不可以读取\n",[155,35799,35800],{"class":157,"line":1844},[155,35801,217],{"emptyLinePlaceholder":216},[155,35803,35804,35806,35808,35810],{"class":157,"line":1850},[155,35805,22190],{"class":226},[155,35807,230],{"class":171},[155,35809,22195],{"class":732},[155,35811,22596],{"class":171},[155,35813,35814],{"class":157,"line":1861},[155,35815,217],{"emptyLinePlaceholder":216},[155,35817,35818,35820,35822],{"class":157,"line":1866},[155,35819,1692],{"class":167},[155,35821,1151],{"class":263},[155,35823,21206],{"class":171},[155,35825,35826],{"class":157,"line":1871},[155,35827,21475],{"class":171},[14,35829,35831],{"id":35830},"_814封装案例","8.1.4封装案例",[28,35833,35834],{},[31,35835,35836,35839],{},[20234,35837,35838],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[21052,35841,35842,35845],{},[31,35843,35844],{},"求出立方体的面积和体积",[31,35846,35847],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[146,35849,35851],{"className":20084,"code":35850,"language":20086,"meta":39,"style":39},"#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",[152,35852,35853,35859,35869,35876,35880,35884,35889,35919,35923,35933,35943,35953,35957,35966,35970,36006,36010,36019,36023,36039,36043,36048,36057,36061,36068,36072,36081,36085,36092,36096,36105,36109,36116,36120,36125,36142,36146,36192,36196,36205,36209,36213,36217,36226,36230,36234,36239,36243,36249,36255,36261,36265,36269,36274,36296,36300,36354,36358,36366,36370,36375,36380,36393,36400,36416,36427,36432,36454,36459,36481,36494,36513,36518,36528,36550,36571,36575,36580,36593,36605,36609,36622,36626,36631,36635,36648,36652,36656,36669,36680,36684,36696,36700,36704,36708,36720,36724],{"__ignoreMap":39},[155,35854,35855,35857],{"class":157,"line":158},[155,35856,21838],{"class":167},[155,35858,21841],{"class":732},[155,35860,35861,35863,35865,35867],{"class":157,"line":46},[155,35862,21846],{"class":167},[155,35864,21849],{"class":167},[155,35866,21852],{"class":226},[155,35868,21206],{"class":171},[155,35870,35871,35873],{"class":157,"line":121},[155,35872,223],{"class":167},[155,35874,35875],{"class":226}," Cube\n",[155,35877,35878],{"class":157,"line":180},[155,35879,3008],{"class":171},[155,35881,35882],{"class":157,"line":194},[155,35883,34542],{"class":167},[155,35885,35886],{"class":157,"line":200},[155,35887,35888],{"class":161},"    \u002F\u002F输入长宽高\n",[155,35890,35891,35893,35896,35898,35900,35903,35905,35907,35910,35912,35914,35917],{"class":157,"line":213},[155,35892,34734],{"class":167},[155,35894,35895],{"class":226}," setLwh",[155,35897,230],{"class":171},[155,35899,15239],{"class":167},[155,35901,35902],{"class":323}," l",[155,35904,332],{"class":171},[155,35906,15239],{"class":167},[155,35908,35909],{"class":323}," w",[155,35911,332],{"class":171},[155,35913,15239],{"class":167},[155,35915,35916],{"class":323}," h",[155,35918,363],{"class":171},[155,35920,35921],{"class":157,"line":220},[155,35922,21917],{"class":171},[155,35924,35925,35928,35930],{"class":157,"line":245},[155,35926,35927],{"class":171},"        m_L",[155,35929,317],{"class":167},[155,35931,35932],{"class":171},"l;\n",[155,35934,35935,35938,35940],{"class":157,"line":251},[155,35936,35937],{"class":171},"        m_W",[155,35939,317],{"class":167},[155,35941,35942],{"class":171},"w;\n",[155,35944,35945,35948,35950],{"class":157,"line":257},[155,35946,35947],{"class":171},"        m_H",[155,35949,317],{"class":167},[155,35951,35952],{"class":171},"h;\n",[155,35954,35955],{"class":157,"line":270},[155,35956,22074],{"class":171},[155,35958,35959,35961,35964],{"class":157,"line":276},[155,35960,21872],{"class":167},[155,35962,35963],{"class":226}," mianji",[155,35965,294],{"class":171},[155,35967,35968],{"class":157,"line":297},[155,35969,21917],{"class":171},[155,35971,35972,35974,35976,35978,35981,35983,35986,35988,35991,35993,35996,35998,36001,36003],{"class":157,"line":302},[155,35973,709],{"class":167},[155,35975,34580],{"class":263},[155,35977,1563],{"class":167},[155,35979,35980],{"class":171},"(m_L",[155,35982,1563],{"class":167},[155,35984,35985],{"class":171},"m_W ",[155,35987,1274],{"class":167},[155,35989,35990],{"class":171}," m_L",[155,35992,1563],{"class":167},[155,35994,35995],{"class":171},"m_H ",[155,35997,1274],{"class":167},[155,35999,36000],{"class":171}," m_W",[155,36002,1563],{"class":167},[155,36004,36005],{"class":171},"m_H);\n",[155,36007,36008],{"class":157,"line":308},[155,36009,22074],{"class":171},[155,36011,36012,36014,36017],{"class":157,"line":366},[155,36013,21872],{"class":167},[155,36015,36016],{"class":226}," tiji",[155,36018,294],{"class":171},[155,36020,36021],{"class":157,"line":379},[155,36022,21917],{"class":171},[155,36024,36025,36027,36029,36031,36034,36036],{"class":157,"line":385},[155,36026,709],{"class":167},[155,36028,35990],{"class":171},[155,36030,1563],{"class":167},[155,36032,36033],{"class":171},"m_W",[155,36035,1563],{"class":167},[155,36037,36038],{"class":171},"m_H;\n",[155,36040,36041],{"class":157,"line":415},[155,36042,22074],{"class":171},[155,36044,36045],{"class":157,"line":452},[155,36046,36047],{"class":161},"    \u002F\u002F获取长宽高\n",[155,36049,36050,36052,36055],{"class":157,"line":480},[155,36051,21872],{"class":167},[155,36053,36054],{"class":226}," getLength",[155,36056,294],{"class":171},[155,36058,36059],{"class":157,"line":486},[155,36060,21917],{"class":171},[155,36062,36063,36065],{"class":157,"line":499},[155,36064,709],{"class":167},[155,36066,36067],{"class":171}," m_L;\n",[155,36069,36070],{"class":157,"line":505},[155,36071,22074],{"class":171},[155,36073,36074,36076,36079],{"class":157,"line":528},[155,36075,21872],{"class":167},[155,36077,36078],{"class":226}," getWidth",[155,36080,294],{"class":171},[155,36082,36083],{"class":157,"line":549},[155,36084,21917],{"class":171},[155,36086,36087,36089],{"class":157,"line":570},[155,36088,709],{"class":167},[155,36090,36091],{"class":171}," m_W;\n",[155,36093,36094],{"class":157,"line":575},[155,36095,22074],{"class":171},[155,36097,36098,36100,36103],{"class":157,"line":581},[155,36099,21872],{"class":167},[155,36101,36102],{"class":226}," getHeight",[155,36104,294],{"class":171},[155,36106,36107],{"class":157,"line":592},[155,36108,21917],{"class":171},[155,36110,36111,36113],{"class":157,"line":610},[155,36112,709],{"class":167},[155,36114,36115],{"class":171}," m_H;\n",[155,36117,36118],{"class":157,"line":622},[155,36119,22074],{"class":171},[155,36121,36122],{"class":157,"line":638},[155,36123,36124],{"class":161},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[155,36126,36127,36130,36133,36135,36138,36140],{"class":157,"line":650},[155,36128,36129],{"class":167},"    bool",[155,36131,36132],{"class":226}," isEqual",[155,36134,230],{"class":171},[155,36136,36137],{"class":226},"Cube",[155,36139,22726],{"class":323},[155,36141,363],{"class":171},[155,36143,36144],{"class":157,"line":662},[155,36145,21917],{"class":171},[155,36147,36148,36150,36153,36156,36158,36160,36163,36165,36168,36171,36173,36175,36178,36180,36182,36185,36187,36189],{"class":157,"line":678},[155,36149,2803],{"class":167},[155,36151,36152],{"class":171}," (c.",[155,36154,36155],{"class":226},"getLength",[155,36157,32877],{"class":171},[155,36159,729],{"class":167},[155,36161,36162],{"class":171}," m_L ",[155,36164,21612],{"class":167},[155,36166,36167],{"class":171}," c.",[155,36169,36170],{"class":226},"getWidth",[155,36172,32877],{"class":171},[155,36174,729],{"class":167},[155,36176,36177],{"class":171}," m_W ",[155,36179,21612],{"class":167},[155,36181,36167],{"class":171},[155,36183,36184],{"class":226},"getHeight",[155,36186,32877],{"class":171},[155,36188,729],{"class":167},[155,36190,36191],{"class":171}," m_H)\n",[155,36193,36194],{"class":157,"line":694},[155,36195,22395],{"class":171},[155,36197,36198,36200,36203],{"class":157,"line":706},[155,36199,35557],{"class":167},[155,36201,36202],{"class":263}," true",[155,36204,21206],{"class":171},[155,36206,36207],{"class":157,"line":715},[155,36208,22414],{"class":171},[155,36210,36211],{"class":157,"line":720},[155,36212,22454],{"class":167},[155,36214,36215],{"class":157,"line":739},[155,36216,22395],{"class":171},[155,36218,36219,36221,36224],{"class":157,"line":745},[155,36220,35557],{"class":167},[155,36222,36223],{"class":263}," false",[155,36225,21206],{"class":171},[155,36227,36228],{"class":157,"line":773},[155,36229,22414],{"class":171},[155,36231,36232],{"class":157,"line":779},[155,36233,22074],{"class":171},[155,36235,36236],{"class":157,"line":785},[155,36237,36238],{"class":161},"    \u002F\u002F私有属性\n",[155,36240,36241],{"class":157,"line":791},[155,36242,35047],{"class":167},[155,36244,36245,36247],{"class":157,"line":796},[155,36246,21872],{"class":167},[155,36248,36067],{"class":171},[155,36250,36251,36253],{"class":157,"line":802},[155,36252,21872],{"class":167},[155,36254,36091],{"class":171},[155,36256,36257,36259],{"class":157,"line":808},[155,36258,21872],{"class":167},[155,36260,36115],{"class":171},[155,36262,36263],{"class":157,"line":819},[155,36264,217],{"emptyLinePlaceholder":216},[155,36266,36267],{"class":157,"line":1832},[155,36268,23863],{"class":171},[155,36270,36271],{"class":157,"line":1838},[155,36272,36273],{"class":161},"\u002F\u002F全局函数判断两个立方体是否相等\n",[155,36275,36276,36278,36280,36282,36284,36287,36289,36291,36294],{"class":157,"line":1844},[155,36277,21267],{"class":167},[155,36279,36132],{"class":226},[155,36281,230],{"class":171},[155,36283,36137],{"class":226},[155,36285,36286],{"class":323}," c1",[155,36288,332],{"class":171},[155,36290,36137],{"class":226},[155,36292,36293],{"class":323}," c2",[155,36295,363],{"class":171},[155,36297,36298],{"class":157,"line":1850},[155,36299,3008],{"class":171},[155,36301,36302,36304,36307,36309,36311,36313,36316,36318,36321,36323,36325,36327,36329,36331,36333,36335,36337,36339,36341,36343,36345,36347,36349,36351],{"class":157,"line":1861},[155,36303,1692],{"class":167},[155,36305,36306],{"class":171}," (c1.",[155,36308,36155],{"class":226},[155,36310,32877],{"class":171},[155,36312,729],{"class":167},[155,36314,36315],{"class":171}," c2.",[155,36317,36155],{"class":226},[155,36319,36320],{"class":171},"()) ",[155,36322,21612],{"class":167},[155,36324,36306],{"class":171},[155,36326,36170],{"class":226},[155,36328,32877],{"class":171},[155,36330,729],{"class":167},[155,36332,36315],{"class":171},[155,36334,36170],{"class":226},[155,36336,36320],{"class":171},[155,36338,21612],{"class":167},[155,36340,36306],{"class":171},[155,36342,36184],{"class":226},[155,36344,32877],{"class":171},[155,36346,729],{"class":167},[155,36348,36315],{"class":171},[155,36350,36184],{"class":226},[155,36352,36353],{"class":171},"());\n",[155,36355,36356],{"class":157,"line":1866},[155,36357,21475],{"class":171},[155,36359,36360,36362,36364],{"class":157,"line":1871},[155,36361,15239],{"class":167},[155,36363,21861],{"class":226},[155,36365,294],{"class":171},[155,36367,36368],{"class":157,"line":1877},[155,36369,3008],{"class":171},[155,36371,36372],{"class":157,"line":1883},[155,36373,36374],{"class":171},"    Cube c1;\n",[155,36376,36377],{"class":157,"line":1894},[155,36378,36379],{"class":161},"    \u002F\u002F输入立方体的长宽高\n",[155,36381,36382,36384,36386,36389,36391],{"class":157,"line":1900},[155,36383,21461],{"class":171},[155,36385,21089],{"class":167},[155,36387,36388],{"class":732},"\"请输入第一个立方体的长、宽、高：\"",[155,36390,21089],{"class":167},[155,36392,21111],{"class":171},[155,36394,36395,36397],{"class":157,"line":1911},[155,36396,21872],{"class":167},[155,36398,36399],{"class":171}," l,w,h,l1,w1,h1;\n",[155,36401,36402,36404,36406,36408,36410,36412,36414],{"class":157,"line":1917},[155,36403,21899],{"class":171},[155,36405,21342],{"class":167},[155,36407,20584],{"class":171},[155,36409,21342],{"class":167},[155,36411,20851],{"class":171},[155,36413,21342],{"class":167},[155,36415,35952],{"class":171},[155,36417,36418,36421,36424],{"class":157,"line":1927},[155,36419,36420],{"class":171},"    c1.",[155,36422,36423],{"class":226},"setLwh",[155,36425,36426],{"class":171},"(l,w,h);\n",[155,36428,36429],{"class":157,"line":1933},[155,36430,36431],{"class":161},"    \u002F\u002F面积\n",[155,36433,36434,36436,36438,36441,36443,36445,36448,36450,36452],{"class":157,"line":1943},[155,36435,21461],{"class":171},[155,36437,21089],{"class":167},[155,36439,36440],{"class":732},"\"立方体的表面积为：\"",[155,36442,21089],{"class":167},[155,36444,34655],{"class":171},[155,36446,36447],{"class":226},"mianji",[155,36449,22313],{"class":171},[155,36451,21089],{"class":167},[155,36453,21111],{"class":171},[155,36455,36456],{"class":157,"line":1949},[155,36457,36458],{"class":161},"    \u002F\u002F体积\n",[155,36460,36461,36463,36465,36468,36470,36472,36475,36477,36479],{"class":157,"line":1959},[155,36462,21461],{"class":171},[155,36464,21089],{"class":167},[155,36466,36467],{"class":732},"\"立方体的体积为：\"",[155,36469,21089],{"class":167},[155,36471,34655],{"class":171},[155,36473,36474],{"class":226},"tiji",[155,36476,22313],{"class":171},[155,36478,21089],{"class":167},[155,36480,21111],{"class":171},[155,36482,36483,36485,36487,36490,36492],{"class":157,"line":1964},[155,36484,21461],{"class":171},[155,36486,21089],{"class":167},[155,36488,36489],{"class":732},"\"请输入第二个立方体的长、宽、高：\"",[155,36491,21089],{"class":167},[155,36493,21111],{"class":171},[155,36495,36496,36498,36500,36503,36505,36508,36510],{"class":157,"line":1970},[155,36497,21899],{"class":171},[155,36499,21342],{"class":167},[155,36501,36502],{"class":171},"l1",[155,36504,21342],{"class":167},[155,36506,36507],{"class":171},"w1",[155,36509,21342],{"class":167},[155,36511,36512],{"class":171},"h1;\n",[155,36514,36515],{"class":157,"line":1981},[155,36516,36517],{"class":171},"    Cube c2;\n",[155,36519,36520,36523,36525],{"class":157,"line":1986},[155,36521,36522],{"class":171},"    c2.",[155,36524,36423],{"class":226},[155,36526,36527],{"class":171},"(l1,w1,h1);\n",[155,36529,36530,36532,36534,36537,36539,36542,36544,36546,36548],{"class":157,"line":1991},[155,36531,21461],{"class":171},[155,36533,21089],{"class":167},[155,36535,36536],{"class":732},"\"第二个立方体的表面积为：\"",[155,36538,21089],{"class":167},[155,36540,36541],{"class":171},"c2.",[155,36543,36447],{"class":226},[155,36545,22313],{"class":171},[155,36547,21089],{"class":167},[155,36549,21111],{"class":171},[155,36551,36552,36554,36556,36559,36561,36563,36565,36567,36569],{"class":157,"line":1997},[155,36553,21461],{"class":171},[155,36555,21089],{"class":167},[155,36557,36558],{"class":732},"\"第二个立方体的体积为：\"",[155,36560,21089],{"class":167},[155,36562,36541],{"class":171},[155,36564,36474],{"class":226},[155,36566,22313],{"class":171},[155,36568,21089],{"class":167},[155,36570,21111],{"class":171},[155,36572,36573],{"class":157,"line":2014},[155,36574,217],{"emptyLinePlaceholder":216},[155,36576,36577],{"class":157,"line":2046},[155,36578,36579],{"class":161},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[155,36581,36582,36584,36586,36589,36591],{"class":157,"line":2062},[155,36583,21461],{"class":171},[155,36585,21089],{"class":167},[155,36587,36588],{"class":732},"\"内部函数判断结果：\"",[155,36590,21089],{"class":167},[155,36592,21111],{"class":171},[155,36594,36595,36597,36599,36602],{"class":157,"line":2067},[155,36596,1142],{"class":167},[155,36598,36306],{"class":171},[155,36600,36601],{"class":226},"isEqual",[155,36603,36604],{"class":171},"(c2))\n",[155,36606,36607],{"class":157,"line":2073},[155,36608,21917],{"class":171},[155,36610,36611,36613,36615,36618,36620],{"class":157,"line":2079},[155,36612,23322],{"class":171},[155,36614,21089],{"class":167},[155,36616,36617],{"class":732},"\"两个立方体相等\"",[155,36619,21089],{"class":167},[155,36621,21111],{"class":171},[155,36623,36624],{"class":157,"line":2089},[155,36625,22074],{"class":171},[155,36627,36628],{"class":157,"line":2095},[155,36629,36630],{"class":167},"    else\n",[155,36632,36633],{"class":157,"line":2106},[155,36634,21917],{"class":171},[155,36636,36637,36639,36641,36644,36646],{"class":157,"line":2112},[155,36638,23322],{"class":171},[155,36640,21089],{"class":167},[155,36642,36643],{"class":732},"\"两个立方体不相等\"",[155,36645,21089],{"class":167},[155,36647,21111],{"class":171},[155,36649,36650],{"class":157,"line":2122},[155,36651,22074],{"class":171},[155,36653,36654],{"class":157,"line":2128},[155,36655,217],{"emptyLinePlaceholder":216},[155,36657,36658,36660,36662,36665,36667],{"class":157,"line":2138},[155,36659,21461],{"class":171},[155,36661,21089],{"class":167},[155,36663,36664],{"class":732},"\"全局函数判断结果：\"",[155,36666,21089],{"class":167},[155,36668,21111],{"class":171},[155,36670,36671,36673,36675,36677],{"class":157,"line":2144},[155,36672,1142],{"class":167},[155,36674,21561],{"class":171},[155,36676,36601],{"class":226},[155,36678,36679],{"class":171},"(c1, c2))\n",[155,36681,36682],{"class":157,"line":2154},[155,36683,21917],{"class":171},[155,36685,36686,36688,36690,36692,36694],{"class":157,"line":2160},[155,36687,23322],{"class":171},[155,36689,21089],{"class":167},[155,36691,36617],{"class":732},[155,36693,21089],{"class":167},[155,36695,21111],{"class":171},[155,36697,36698],{"class":157,"line":2170},[155,36699,22074],{"class":171},[155,36701,36702],{"class":157,"line":2176},[155,36703,36630],{"class":167},[155,36705,36706],{"class":157,"line":2191},[155,36707,21917],{"class":171},[155,36709,36710,36712,36714,36716,36718],{"class":157,"line":2197},[155,36711,23322],{"class":171},[155,36713,21089],{"class":167},[155,36715,36643],{"class":732},[155,36717,21089],{"class":167},[155,36719,21111],{"class":171},[155,36721,36722],{"class":157,"line":2208},[155,36723,22074],{"class":171},[155,36725,36726],{"class":157,"line":2214},[155,36727,21475],{"class":171},[28,36729,36730],{"start":46},[31,36731,36732],{},[20234,36733,36734],{},"练习案例2：点和圆的关系",[21052,36736,36737],{},[31,36738,36739],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[146,36741,36743],{"className":20084,"code":36742,"language":20086,"meta":39,"style":39},"#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",[152,36744,36745,36751,36761,36768,36775,36779,36783,36788,36822,36827,36843,36857,36861,36865,36872,36879,36883,36889,36893,36897,36901,36923,36946,36951,36965,36980,36984,36988,36994,36999,37004,37008,37034,37038,37068,37096,37124,37141,37145,37158,37162,37166,37170,37183,37187,37191,37199,37203,37207,37211,37216,37220,37231,37238,37247,37257,37268,37275,37288,37299,37309,37320,37327,37341,37346,37356,37364],{"__ignoreMap":39},[155,36746,36747,36749],{"class":157,"line":158},[155,36748,21838],{"class":167},[155,36750,21841],{"class":732},[155,36752,36753,36755,36757,36759],{"class":157,"line":46},[155,36754,21846],{"class":167},[155,36756,21849],{"class":167},[155,36758,21852],{"class":226},[155,36760,21206],{"class":171},[155,36762,36763,36765],{"class":157,"line":121},[155,36764,21838],{"class":167},[155,36766,36767],{"class":732},"\u003Ccmath>\n",[155,36769,36770,36772],{"class":157,"line":180},[155,36771,223],{"class":167},[155,36773,36774],{"class":226}," Point\n",[155,36776,36777],{"class":157,"line":194},[155,36778,3008],{"class":171},[155,36780,36781],{"class":157,"line":200},[155,36782,34542],{"class":167},[155,36784,36785],{"class":157,"line":213},[155,36786,36787],{"class":161},"    \u002F\u002F赋值\n",[155,36789,36790,36792,36795,36797,36799,36802,36804,36806,36809,36812,36814,36817,36819],{"class":157,"line":220},[155,36791,34734],{"class":167},[155,36793,36794],{"class":226}," setPoint",[155,36796,230],{"class":171},[155,36798,33864],{"class":167},[155,36800,36801],{"class":323}," x",[155,36803,7589],{"class":171},[155,36805,33864],{"class":167},[155,36807,36808],{"class":323}," y",[155,36810,36811],{"class":171},") { m_x ",[155,36813,317],{"class":167},[155,36815,36816],{"class":171}," x; m_y ",[155,36818,317],{"class":167},[155,36820,36821],{"class":171}," y; }\n",[155,36823,36824],{"class":157,"line":245},[155,36825,36826],{"class":161},"    \u002F\u002F获取坐标\n",[155,36828,36829,36831,36834,36837,36840],{"class":157,"line":251},[155,36830,34564],{"class":167},[155,36832,36833],{"class":226}," getX",[155,36835,36836],{"class":171},"() { ",[155,36838,36839],{"class":167},"return",[155,36841,36842],{"class":171}," m_x; }\n",[155,36844,36845,36847,36850,36852,36854],{"class":157,"line":257},[155,36846,34564],{"class":167},[155,36848,36849],{"class":226}," getY",[155,36851,36836],{"class":171},[155,36853,36839],{"class":167},[155,36855,36856],{"class":171}," m_y; }\n",[155,36858,36859],{"class":157,"line":270},[155,36860,217],{"emptyLinePlaceholder":216},[155,36862,36863],{"class":157,"line":276},[155,36864,35047],{"class":167},[155,36866,36867,36869],{"class":157,"line":297},[155,36868,34564],{"class":167},[155,36870,36871],{"class":171}," m_x;\n",[155,36873,36874,36876],{"class":157,"line":302},[155,36875,34564],{"class":167},[155,36877,36878],{"class":171}," m_y;\n",[155,36880,36881],{"class":157,"line":308},[155,36882,23863],{"class":171},[155,36884,36885,36887],{"class":157,"line":366},[155,36886,223],{"class":167},[155,36888,34523],{"class":226},[155,36890,36891],{"class":157,"line":379},[155,36892,3008],{"class":171},[155,36894,36895],{"class":157,"line":385},[155,36896,34542],{"class":167},[155,36898,36899],{"class":157,"line":415},[155,36900,36787],{"class":161},[155,36902,36903,36905,36908,36910,36912,36915,36918,36920],{"class":157,"line":452},[155,36904,34734],{"class":167},[155,36906,36907],{"class":226}," setRadius",[155,36909,230],{"class":171},[155,36911,33864],{"class":167},[155,36913,36914],{"class":323}," r",[155,36916,36917],{"class":171},") { m_r ",[155,36919,317],{"class":167},[155,36921,36922],{"class":171}," r; }\n",[155,36924,36925,36927,36930,36932,36935,36938,36941,36943],{"class":157,"line":480},[155,36926,34734],{"class":167},[155,36928,36929],{"class":226}," setCenter",[155,36931,230],{"class":171},[155,36933,36934],{"class":226},"Point",[155,36936,36937],{"class":323}," center",[155,36939,36940],{"class":171},") { m_center ",[155,36942,317],{"class":167},[155,36944,36945],{"class":171}," center; }\n",[155,36947,36948],{"class":157,"line":486},[155,36949,36950],{"class":161},"    \u002F\u002F获取属性\n",[155,36952,36953,36955,36958,36960,36962],{"class":157,"line":499},[155,36954,34564],{"class":167},[155,36956,36957],{"class":226}," getRadius",[155,36959,36836],{"class":171},[155,36961,36839],{"class":167},[155,36963,36964],{"class":171}," m_r; }\n",[155,36966,36967,36970,36973,36975,36977],{"class":157,"line":505},[155,36968,36969],{"class":226},"    Point",[155,36971,36972],{"class":226}," getCenter",[155,36974,36836],{"class":171},[155,36976,36839],{"class":167},[155,36978,36979],{"class":171}," m_center; }\n",[155,36981,36982],{"class":157,"line":528},[155,36983,217],{"emptyLinePlaceholder":216},[155,36985,36986],{"class":157,"line":549},[155,36987,35047],{"class":167},[155,36989,36990,36992],{"class":157,"line":570},[155,36991,34564],{"class":167},[155,36993,34554],{"class":171},[155,36995,36996],{"class":157,"line":575},[155,36997,36998],{"class":161},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[155,37000,37001],{"class":157,"line":581},[155,37002,37003],{"class":171},"    Point m_center;\n",[155,37005,37006],{"class":157,"line":592},[155,37007,23863],{"class":171},[155,37009,37010,37012,37015,37017,37020,37022,37024,37026,37028,37030,37032],{"class":157,"line":610},[155,37011,25227],{"class":167},[155,37013,37014],{"class":226}," isInCircle",[155,37016,230],{"class":171},[155,37018,37019],{"class":226},"Circle",[155,37021,30413],{"class":167},[155,37023,20367],{"class":323},[155,37025,332],{"class":171},[155,37027,36934],{"class":226},[155,37029,30413],{"class":167},[155,37031,24],{"class":323},[155,37033,363],{"class":171},[155,37035,37036],{"class":157,"line":622},[155,37037,3008],{"class":171},[155,37039,37040,37042,37045,37047,37049,37052,37055,37058,37060,37062,37064,37066],{"class":157,"line":638},[155,37041,34564],{"class":167},[155,37043,37044],{"class":171}," dx ",[155,37046,317],{"class":167},[155,37048,36167],{"class":171},[155,37050,37051],{"class":226},"getCenter",[155,37053,37054],{"class":171},"().",[155,37056,37057],{"class":226},"getX",[155,37059,32877],{"class":171},[155,37061,2039],{"class":167},[155,37063,35713],{"class":171},[155,37065,37057],{"class":226},[155,37067,25499],{"class":171},[155,37069,37070,37072,37075,37077,37079,37081,37083,37086,37088,37090,37092,37094],{"class":157,"line":650},[155,37071,34564],{"class":167},[155,37073,37074],{"class":171}," dy ",[155,37076,317],{"class":167},[155,37078,36167],{"class":171},[155,37080,37051],{"class":226},[155,37082,37054],{"class":171},[155,37084,37085],{"class":226},"getY",[155,37087,32877],{"class":171},[155,37089,2039],{"class":167},[155,37091,35713],{"class":171},[155,37093,37085],{"class":226},[155,37095,25499],{"class":171},[155,37097,37098,37100,37103,37105,37108,37111,37113,37115,37117,37119,37121],{"class":157,"line":662},[155,37099,34564],{"class":167},[155,37101,37102],{"class":171}," distance ",[155,37104,317],{"class":167},[155,37106,37107],{"class":226}," sqrt",[155,37109,37110],{"class":171},"(dx ",[155,37112,1563],{"class":167},[155,37114,37044],{"class":171},[155,37116,1274],{"class":167},[155,37118,37074],{"class":171},[155,37120,1563],{"class":167},[155,37122,37123],{"class":171}," dy);\n",[155,37125,37126,37128,37131,37133,37135,37138],{"class":157,"line":678},[155,37127,1142],{"class":167},[155,37129,37130],{"class":171}," (distance ",[155,37132,20959],{"class":167},[155,37134,36167],{"class":171},[155,37136,37137],{"class":226},"getRadius",[155,37139,37140],{"class":171},"())\n",[155,37142,37143],{"class":157,"line":694},[155,37144,21917],{"class":171},[155,37146,37147,37149,37151,37154,37156],{"class":157,"line":706},[155,37148,29517],{"class":171},[155,37150,21089],{"class":167},[155,37152,37153],{"class":732}," \"点在圆内\"",[155,37155,21357],{"class":167},[155,37157,28689],{"class":171},[155,37159,37160],{"class":157,"line":715},[155,37161,22074],{"class":171},[155,37163,37164],{"class":157,"line":720},[155,37165,36630],{"class":167},[155,37167,37168],{"class":157,"line":739},[155,37169,21917],{"class":171},[155,37171,37172,37174,37176,37179,37181],{"class":157,"line":745},[155,37173,29517],{"class":171},[155,37175,21089],{"class":167},[155,37177,37178],{"class":732}," \"点在圆外\"",[155,37180,21357],{"class":167},[155,37182,28689],{"class":171},[155,37184,37185],{"class":157,"line":773},[155,37186,22074],{"class":171},[155,37188,37189],{"class":157,"line":779},[155,37190,21475],{"class":171},[155,37192,37193,37195,37197],{"class":157,"line":785},[155,37194,15239],{"class":167},[155,37196,21861],{"class":226},[155,37198,294],{"class":171},[155,37200,37201],{"class":157,"line":791},[155,37202,3008],{"class":171},[155,37204,37205],{"class":157,"line":796},[155,37206,34878],{"class":161},[155,37208,37209],{"class":157,"line":802},[155,37210,34625],{"class":171},[155,37212,37213],{"class":157,"line":808},[155,37214,37215],{"class":171},"    Point p1;\n",[155,37217,37218],{"class":157,"line":819},[155,37219,36787],{"class":161},[155,37221,37222,37224,37226,37229],{"class":157,"line":1832},[155,37223,21461],{"class":171},[155,37225,21089],{"class":167},[155,37227,37228],{"class":732},"\"请输入圆的半径：\"",[155,37230,21206],{"class":171},[155,37232,37233,37235],{"class":157,"line":1838},[155,37234,34564],{"class":167},[155,37236,37237],{"class":171}," r;\n",[155,37239,37240,37242,37244],{"class":157,"line":1844},[155,37241,21899],{"class":171},[155,37243,21342],{"class":167},[155,37245,37246],{"class":171},"r;\n",[155,37248,37249,37251,37254],{"class":157,"line":1850},[155,37250,36420],{"class":171},[155,37252,37253],{"class":226},"setRadius",[155,37255,37256],{"class":171},"(r);\n",[155,37258,37259,37261,37263,37266],{"class":157,"line":1861},[155,37260,21461],{"class":171},[155,37262,21089],{"class":167},[155,37264,37265],{"class":732},"\"请输入圆心坐标：\"",[155,37267,21206],{"class":171},[155,37269,37270,37272],{"class":157,"line":1866},[155,37271,34564],{"class":167},[155,37273,37274],{"class":171}," x, y;\n",[155,37276,37277,37279,37281,37283,37285],{"class":157,"line":1871},[155,37278,21899],{"class":171},[155,37280,21342],{"class":167},[155,37282,20874],{"class":171},[155,37284,21342],{"class":167},[155,37286,37287],{"class":171},"y;\n",[155,37289,37290,37293,37296],{"class":157,"line":1877},[155,37291,37292],{"class":171},"    p1.",[155,37294,37295],{"class":226},"setPoint",[155,37297,37298],{"class":171},"(x, y);\n",[155,37300,37301,37303,37306],{"class":157,"line":1883},[155,37302,36420],{"class":171},[155,37304,37305],{"class":226},"setCenter",[155,37307,37308],{"class":171},"(p1);\n",[155,37310,37311,37313,37315,37318],{"class":157,"line":1894},[155,37312,21461],{"class":171},[155,37314,21089],{"class":167},[155,37316,37317],{"class":732},"\"请输入测试点坐标：\"",[155,37319,21206],{"class":171},[155,37321,37322,37324],{"class":157,"line":1900},[155,37323,34564],{"class":167},[155,37325,37326],{"class":171}," x1, y1;\n",[155,37328,37329,37331,37333,37336,37338],{"class":157,"line":1911},[155,37330,21899],{"class":171},[155,37332,21342],{"class":167},[155,37334,37335],{"class":171},"x1",[155,37337,21342],{"class":167},[155,37339,37340],{"class":171},"y1;\n",[155,37342,37343],{"class":157,"line":1917},[155,37344,37345],{"class":171},"    Point p2;\n",[155,37347,37348,37351,37353],{"class":157,"line":1927},[155,37349,37350],{"class":171},"    p2.",[155,37352,37295],{"class":226},[155,37354,37355],{"class":171},"(x1, y1);\n",[155,37357,37358,37361],{"class":157,"line":1933},[155,37359,37360],{"class":226},"    isInCircle",[155,37362,37363],{"class":171},"(c1, p2);\n",[155,37365,37366],{"class":157,"line":1943},[155,37367,21475],{"class":171},[24,37369,37370],{},"在类中可以让另一个类作为本来的成员",[24,37372,37373],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[24,37375,37376],{},"创建point.h",[146,37378,37380],{"className":20084,"code":37379,"language":20086,"meta":39,"style":39},"#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",[152,37381,37382,37393,37399,37409,37415,37419,37424,37428,37432,37452,37456,37464,37472,37476,37480,37486,37492],{"__ignoreMap":39},[155,37383,37384,37387,37390],{"class":157,"line":158},[155,37385,37386],{"class":167},"#pragma",[155,37388,37389],{"class":226}," once",[155,37391,37392],{"class":161}," \u002F\u002F防止头文件重复包含\n",[155,37394,37395,37397],{"class":157,"line":46},[155,37396,21838],{"class":167},[155,37398,21841],{"class":732},[155,37400,37401,37403,37405,37407],{"class":157,"line":121},[155,37402,21846],{"class":167},[155,37404,21849],{"class":167},[155,37406,21852],{"class":226},[155,37408,21206],{"class":171},[155,37410,37411,37413],{"class":157,"line":180},[155,37412,223],{"class":167},[155,37414,36774],{"class":226},[155,37416,37417],{"class":157,"line":194},[155,37418,3008],{"class":171},[155,37420,37421],{"class":157,"line":200},[155,37422,37423],{"class":161},"\u002F\u002F做好声明与变量定义就可以\n",[155,37425,37426],{"class":157,"line":213},[155,37427,34542],{"class":167},[155,37429,37430],{"class":157,"line":220},[155,37431,36787],{"class":161},[155,37433,37434,37436,37438,37440,37442,37444,37446,37448,37450],{"class":157,"line":245},[155,37435,34734],{"class":167},[155,37437,36794],{"class":226},[155,37439,230],{"class":171},[155,37441,33864],{"class":167},[155,37443,36801],{"class":323},[155,37445,7589],{"class":171},[155,37447,33864],{"class":167},[155,37449,36808],{"class":323},[155,37451,22596],{"class":171},[155,37453,37454],{"class":157,"line":251},[155,37455,36826],{"class":161},[155,37457,37458,37460,37462],{"class":157,"line":257},[155,37459,34564],{"class":167},[155,37461,36833],{"class":226},[155,37463,25499],{"class":171},[155,37465,37466,37468,37470],{"class":157,"line":270},[155,37467,34564],{"class":167},[155,37469,36849],{"class":226},[155,37471,25499],{"class":171},[155,37473,37474],{"class":157,"line":276},[155,37475,217],{"emptyLinePlaceholder":216},[155,37477,37478],{"class":157,"line":297},[155,37479,35047],{"class":167},[155,37481,37482,37484],{"class":157,"line":302},[155,37483,34564],{"class":167},[155,37485,36871],{"class":171},[155,37487,37488,37490],{"class":157,"line":308},[155,37489,34564],{"class":167},[155,37491,36878],{"class":171},[155,37493,37494],{"class":157,"line":366},[155,37495,23863],{"class":171},[24,37497,37498],{},"创建point.cpp",[146,37500,37502],{"className":20084,"code":37501,"language":20086,"meta":39,"style":39},"#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",[152,37503,37504,37511,37516,37550,37554,37570],{"__ignoreMap":39},[155,37505,37506,37508],{"class":157,"line":158},[155,37507,21838],{"class":167},[155,37509,37510],{"class":732},"\u003Cpoint.h>\n",[155,37512,37513],{"class":157,"line":46},[155,37514,37515],{"class":161},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[155,37517,37518,37520,37523,37526,37528,37530,37532,37534,37536,37538,37540,37542,37544,37546,37548],{"class":157,"line":121},[155,37519,34734],{"class":167},[155,37521,37522],{"class":226}," Point",[155,37524,37525],{"class":171},"::",[155,37527,37295],{"class":226},[155,37529,230],{"class":171},[155,37531,33864],{"class":167},[155,37533,36801],{"class":323},[155,37535,7589],{"class":171},[155,37537,33864],{"class":167},[155,37539,36808],{"class":323},[155,37541,36811],{"class":171},[155,37543,317],{"class":167},[155,37545,36816],{"class":171},[155,37547,317],{"class":167},[155,37549,36821],{"class":171},[155,37551,37552],{"class":157,"line":180},[155,37553,36826],{"class":161},[155,37555,37556,37558,37560,37562,37564,37566,37568],{"class":157,"line":194},[155,37557,34564],{"class":167},[155,37559,37522],{"class":226},[155,37561,37525],{"class":171},[155,37563,37057],{"class":226},[155,37565,36836],{"class":171},[155,37567,36839],{"class":167},[155,37569,36842],{"class":171},[155,37571,37572,37574,37576,37578,37580,37582,37584],{"class":157,"line":200},[155,37573,34564],{"class":167},[155,37575,37522],{"class":226},[155,37577,37525],{"class":171},[155,37579,37085],{"class":226},[155,37581,36836],{"class":171},[155,37583,36839],{"class":167},[155,37585,36856],{"class":171},[24,37587,37588],{},"创建circle.h",[146,37590,37592],{"className":20084,"code":37591,"language":20086,"meta":39,"style":39},"#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",[152,37593,37594,37601,37607,37617,37623,37629,37633,37637,37641,37655,37669,37673,37681,37689,37693,37697,37703,37707,37711],{"__ignoreMap":39},[155,37595,37596,37598],{"class":157,"line":158},[155,37597,37386],{"class":167},[155,37599,37600],{"class":226}," once\n",[155,37602,37603,37605],{"class":157,"line":46},[155,37604,21838],{"class":167},[155,37606,21841],{"class":732},[155,37608,37609,37611,37613,37615],{"class":157,"line":121},[155,37610,21846],{"class":167},[155,37612,21849],{"class":167},[155,37614,21852],{"class":226},[155,37616,21206],{"class":171},[155,37618,37619,37621],{"class":157,"line":180},[155,37620,21838],{"class":167},[155,37622,37510],{"class":732},[155,37624,37625,37627],{"class":157,"line":194},[155,37626,223],{"class":167},[155,37628,34523],{"class":226},[155,37630,37631],{"class":157,"line":200},[155,37632,3008],{"class":171},[155,37634,37635],{"class":157,"line":213},[155,37636,34542],{"class":167},[155,37638,37639],{"class":157,"line":220},[155,37640,36787],{"class":161},[155,37642,37643,37645,37647,37649,37651,37653],{"class":157,"line":245},[155,37644,34734],{"class":167},[155,37646,36907],{"class":226},[155,37648,230],{"class":171},[155,37650,33864],{"class":167},[155,37652,36914],{"class":323},[155,37654,22596],{"class":171},[155,37656,37657,37659,37661,37663,37665,37667],{"class":157,"line":251},[155,37658,34734],{"class":167},[155,37660,36929],{"class":226},[155,37662,230],{"class":171},[155,37664,36934],{"class":226},[155,37666,36937],{"class":323},[155,37668,22596],{"class":171},[155,37670,37671],{"class":157,"line":257},[155,37672,36950],{"class":161},[155,37674,37675,37677,37679],{"class":157,"line":270},[155,37676,34564],{"class":167},[155,37678,36957],{"class":226},[155,37680,25499],{"class":171},[155,37682,37683,37685,37687],{"class":157,"line":276},[155,37684,36969],{"class":226},[155,37686,36972],{"class":226},[155,37688,25499],{"class":171},[155,37690,37691],{"class":157,"line":297},[155,37692,217],{"emptyLinePlaceholder":216},[155,37694,37695],{"class":157,"line":302},[155,37696,35047],{"class":167},[155,37698,37699,37701],{"class":157,"line":308},[155,37700,34564],{"class":167},[155,37702,34554],{"class":171},[155,37704,37705],{"class":157,"line":366},[155,37706,36998],{"class":161},[155,37708,37709],{"class":157,"line":379},[155,37710,37003],{"class":171},[155,37712,37713],{"class":157,"line":385},[155,37714,23863],{"class":171},[24,37716,37717],{},"创建circle.cpp",[146,37719,37721],{"className":20084,"code":37720,"language":20086,"meta":39,"style":39},"#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",[152,37722,37723,37730,37753,37775,37780,37796],{"__ignoreMap":39},[155,37724,37725,37727],{"class":157,"line":158},[155,37726,21838],{"class":167},[155,37728,37729],{"class":732},"\u003Ccircle.h>\n",[155,37731,37732,37734,37737,37739,37741,37743,37745,37747,37749,37751],{"class":157,"line":46},[155,37733,25227],{"class":167},[155,37735,37736],{"class":226}," Circle",[155,37738,37525],{"class":171},[155,37740,37253],{"class":226},[155,37742,230],{"class":171},[155,37744,33864],{"class":167},[155,37746,36914],{"class":323},[155,37748,36917],{"class":171},[155,37750,317],{"class":167},[155,37752,36922],{"class":171},[155,37754,37755,37757,37759,37761,37763,37765,37767,37769,37771,37773],{"class":157,"line":121},[155,37756,25227],{"class":167},[155,37758,37736],{"class":226},[155,37760,37525],{"class":171},[155,37762,37305],{"class":226},[155,37764,230],{"class":171},[155,37766,36934],{"class":226},[155,37768,36937],{"class":323},[155,37770,36940],{"class":171},[155,37772,317],{"class":167},[155,37774,36945],{"class":171},[155,37776,37777],{"class":157,"line":180},[155,37778,37779],{"class":161},"\u002F\u002F获取属性\n",[155,37781,37782,37784,37786,37788,37790,37792,37794],{"class":157,"line":194},[155,37783,33864],{"class":167},[155,37785,37736],{"class":226},[155,37787,37525],{"class":171},[155,37789,37137],{"class":226},[155,37791,36836],{"class":171},[155,37793,36839],{"class":167},[155,37795,36964],{"class":171},[155,37797,37798,37800,37802,37804,37806,37808,37810],{"class":157,"line":200},[155,37799,36934],{"class":226},[155,37801,37736],{"class":226},[155,37803,37525],{"class":171},[155,37805,37051],{"class":226},[155,37807,36836],{"class":171},[155,37809,36839],{"class":167},[155,37811,36979],{"class":171},[24,37813,37814],{},"使用封装的类",[146,37816,37818],{"className":20084,"code":37817,"language":20086,"meta":39,"style":39},"#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",[152,37819,37820,37826,37836,37842,37848,37872,37876,37902,37928,37952,37966,37970,37982,37986,37990,37994,38006,38010,38014,38022,38026,38030,38034,38038,38042,38052,38058,38066,38074,38084,38090,38102,38110,38118,38128,38134,38146,38150,38158,38164],{"__ignoreMap":39},[155,37821,37822,37824],{"class":157,"line":158},[155,37823,21838],{"class":167},[155,37825,21841],{"class":732},[155,37827,37828,37830,37832,37834],{"class":157,"line":46},[155,37829,21846],{"class":167},[155,37831,21849],{"class":167},[155,37833,21852],{"class":226},[155,37835,21206],{"class":171},[155,37837,37838,37840],{"class":157,"line":121},[155,37839,21838],{"class":167},[155,37841,37729],{"class":732},[155,37843,37844,37846],{"class":157,"line":180},[155,37845,21838],{"class":167},[155,37847,37510],{"class":732},[155,37849,37850,37852,37854,37856,37858,37860,37862,37864,37866,37868,37870],{"class":157,"line":194},[155,37851,25227],{"class":167},[155,37853,37014],{"class":226},[155,37855,230],{"class":171},[155,37857,37019],{"class":226},[155,37859,30413],{"class":167},[155,37861,20367],{"class":323},[155,37863,332],{"class":171},[155,37865,36934],{"class":226},[155,37867,30413],{"class":167},[155,37869,24],{"class":323},[155,37871,363],{"class":171},[155,37873,37874],{"class":157,"line":200},[155,37875,3008],{"class":171},[155,37877,37878,37880,37882,37884,37886,37888,37890,37892,37894,37896,37898,37900],{"class":157,"line":213},[155,37879,34564],{"class":167},[155,37881,37044],{"class":171},[155,37883,317],{"class":167},[155,37885,36167],{"class":171},[155,37887,37051],{"class":226},[155,37889,37054],{"class":171},[155,37891,37057],{"class":226},[155,37893,32877],{"class":171},[155,37895,2039],{"class":167},[155,37897,35713],{"class":171},[155,37899,37057],{"class":226},[155,37901,25499],{"class":171},[155,37903,37904,37906,37908,37910,37912,37914,37916,37918,37920,37922,37924,37926],{"class":157,"line":220},[155,37905,34564],{"class":167},[155,37907,37074],{"class":171},[155,37909,317],{"class":167},[155,37911,36167],{"class":171},[155,37913,37051],{"class":226},[155,37915,37054],{"class":171},[155,37917,37085],{"class":226},[155,37919,32877],{"class":171},[155,37921,2039],{"class":167},[155,37923,35713],{"class":171},[155,37925,37085],{"class":226},[155,37927,25499],{"class":171},[155,37929,37930,37932,37934,37936,37938,37940,37942,37944,37946,37948,37950],{"class":157,"line":245},[155,37931,34564],{"class":167},[155,37933,37102],{"class":171},[155,37935,317],{"class":167},[155,37937,37107],{"class":226},[155,37939,37110],{"class":171},[155,37941,1563],{"class":167},[155,37943,37044],{"class":171},[155,37945,1274],{"class":167},[155,37947,37074],{"class":171},[155,37949,1563],{"class":167},[155,37951,37123],{"class":171},[155,37953,37954,37956,37958,37960,37962,37964],{"class":157,"line":251},[155,37955,1142],{"class":167},[155,37957,37130],{"class":171},[155,37959,20959],{"class":167},[155,37961,36167],{"class":171},[155,37963,37137],{"class":226},[155,37965,37140],{"class":171},[155,37967,37968],{"class":157,"line":257},[155,37969,21917],{"class":171},[155,37971,37972,37974,37976,37978,37980],{"class":157,"line":270},[155,37973,29517],{"class":171},[155,37975,21089],{"class":167},[155,37977,37153],{"class":732},[155,37979,21357],{"class":167},[155,37981,28689],{"class":171},[155,37983,37984],{"class":157,"line":276},[155,37985,22074],{"class":171},[155,37987,37988],{"class":157,"line":297},[155,37989,36630],{"class":167},[155,37991,37992],{"class":157,"line":302},[155,37993,21917],{"class":171},[155,37995,37996,37998,38000,38002,38004],{"class":157,"line":308},[155,37997,29517],{"class":171},[155,37999,21089],{"class":167},[155,38001,37178],{"class":732},[155,38003,21357],{"class":167},[155,38005,28689],{"class":171},[155,38007,38008],{"class":157,"line":366},[155,38009,22074],{"class":171},[155,38011,38012],{"class":157,"line":379},[155,38013,21475],{"class":171},[155,38015,38016,38018,38020],{"class":157,"line":385},[155,38017,15239],{"class":167},[155,38019,21861],{"class":226},[155,38021,294],{"class":171},[155,38023,38024],{"class":157,"line":415},[155,38025,3008],{"class":171},[155,38027,38028],{"class":157,"line":452},[155,38029,34878],{"class":161},[155,38031,38032],{"class":157,"line":480},[155,38033,34625],{"class":171},[155,38035,38036],{"class":157,"line":486},[155,38037,37215],{"class":171},[155,38039,38040],{"class":157,"line":499},[155,38041,36787],{"class":161},[155,38043,38044,38046,38048,38050],{"class":157,"line":505},[155,38045,21461],{"class":171},[155,38047,21089],{"class":167},[155,38049,37228],{"class":732},[155,38051,21206],{"class":171},[155,38053,38054,38056],{"class":157,"line":528},[155,38055,34564],{"class":167},[155,38057,37237],{"class":171},[155,38059,38060,38062,38064],{"class":157,"line":549},[155,38061,21899],{"class":171},[155,38063,21342],{"class":167},[155,38065,37246],{"class":171},[155,38067,38068,38070,38072],{"class":157,"line":570},[155,38069,36420],{"class":171},[155,38071,37253],{"class":226},[155,38073,37256],{"class":171},[155,38075,38076,38078,38080,38082],{"class":157,"line":575},[155,38077,21461],{"class":171},[155,38079,21089],{"class":167},[155,38081,37265],{"class":732},[155,38083,21206],{"class":171},[155,38085,38086,38088],{"class":157,"line":581},[155,38087,34564],{"class":167},[155,38089,37274],{"class":171},[155,38091,38092,38094,38096,38098,38100],{"class":157,"line":592},[155,38093,21899],{"class":171},[155,38095,21342],{"class":167},[155,38097,20874],{"class":171},[155,38099,21342],{"class":167},[155,38101,37287],{"class":171},[155,38103,38104,38106,38108],{"class":157,"line":610},[155,38105,37292],{"class":171},[155,38107,37295],{"class":226},[155,38109,37298],{"class":171},[155,38111,38112,38114,38116],{"class":157,"line":622},[155,38113,36420],{"class":171},[155,38115,37305],{"class":226},[155,38117,37308],{"class":171},[155,38119,38120,38122,38124,38126],{"class":157,"line":638},[155,38121,21461],{"class":171},[155,38123,21089],{"class":167},[155,38125,37317],{"class":732},[155,38127,21206],{"class":171},[155,38129,38130,38132],{"class":157,"line":650},[155,38131,34564],{"class":167},[155,38133,37326],{"class":171},[155,38135,38136,38138,38140,38142,38144],{"class":157,"line":662},[155,38137,21899],{"class":171},[155,38139,21342],{"class":167},[155,38141,37335],{"class":171},[155,38143,21342],{"class":167},[155,38145,37340],{"class":171},[155,38147,38148],{"class":157,"line":678},[155,38149,37345],{"class":171},[155,38151,38152,38154,38156],{"class":157,"line":694},[155,38153,37350],{"class":171},[155,38155,37295],{"class":226},[155,38157,37355],{"class":171},[155,38159,38160,38162],{"class":157,"line":706},[155,38161,37360],{"class":226},[155,38163,37363],{"class":171},[155,38165,38166],{"class":157,"line":715},[155,38167,21475],{"class":171},[20037,38169,38171],{"id":38170},"_82对象的初始化清理","8.2对象的初始化清理",[21052,38173,38174,38177],{},[31,38175,38176],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[31,38178,38179],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[14,38181,38183],{"id":38182},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[24,38185,38186,38187,38190],{},"对象的",[20234,38188,38189],{},"初始化和清理","也是两个非常重要的安全问题",[24,38192,38193],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[24,38195,38196],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[24,38198,38199,38200,38203,38204,38207],{},"c++利用了",[20234,38201,38202],{},"构造函数","和",[20234,38205,38206],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[24,38209,38210,38211],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[20234,38212,38213],{},"我们不提供构造和析构，编译器会提供",[24,38215,38216],{},[20234,38217,38218],{},"编译器提供的构造函数和析构函数是空实现。",[21052,38220,38221,38224],{},[31,38222,38223],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[31,38225,38226,38227,38230],{},"析构函数：主要作用在于对象",[20234,38228,38229],{},"销毁前","系统自动调用，执行一些清理工作。",[24,38232,38233,38236],{},[20234,38234,38235],{},"构造函数语法：",[152,38237,38238],{},"类名(){}",[28,38240,38241,38244,38247,38250,38253],{},[31,38242,38243],{},"构造函数，没有返回值也不写void",[31,38245,38246],{},"函数名称与类名相同",[31,38248,38249],{},"构造函数可以有参数，因此可以发生重载",[31,38251,38252],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[31,38254,38255,38256,20501],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[152,38257,38258],{},"Person(){}",[24,38260,38261,33622,38264],{},[20234,38262,38263],{},"析构函数语法：",[152,38265,38266],{},"~类名(){}",[28,38268,38269,38272,38275,38281],{},[31,38270,38271],{},"析构函数，没有返回值也不写void",[31,38273,38274],{},"函数名称与类名相同,在名称前加上符号  ~",[31,38276,38277,38278],{},"析构函数不可以有参数，因此",[20234,38279,38280],{},"不可以发生重载",[31,38282,38283],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[146,38285,38287],{"className":20084,"code":38286,"language":20086,"meta":39,"style":39},"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",[152,38288,38289,38295,38299,38303,38308,38315,38319,38332,38336,38341,38348,38352,38365,38369,38373,38377,38381,38389,38393,38401,38405,38409,38417,38421,38426,38430,38437,38441,38454,38458,38466],{"__ignoreMap":39},[155,38290,38291,38293],{"class":157,"line":158},[155,38292,223],{"class":167},[155,38294,34996],{"class":226},[155,38296,38297],{"class":157,"line":46},[155,38298,3008],{"class":171},[155,38300,38301],{"class":157,"line":121},[155,38302,34542],{"class":167},[155,38304,38305],{"class":157,"line":180},[155,38306,38307],{"class":161},"    \u002F\u002F构造函数\n",[155,38309,38310,38313],{"class":157,"line":194},[155,38311,38312],{"class":226},"    Person",[155,38314,294],{"class":171},[155,38316,38317],{"class":157,"line":200},[155,38318,21917],{"class":171},[155,38320,38321,38323,38325,38328,38330],{"class":157,"line":213},[155,38322,29517],{"class":171},[155,38324,21089],{"class":167},[155,38326,38327],{"class":732}," \"Person的构造函数调用\"",[155,38329,21357],{"class":167},[155,38331,28689],{"class":171},[155,38333,38334],{"class":157,"line":220},[155,38335,22074],{"class":171},[155,38337,38338],{"class":157,"line":245},[155,38339,38340],{"class":161},"    \u002F\u002F析构函数\n",[155,38342,38343,38346],{"class":157,"line":251},[155,38344,38345],{"class":226},"    ~Person",[155,38347,294],{"class":171},[155,38349,38350],{"class":157,"line":257},[155,38351,21917],{"class":171},[155,38353,38354,38356,38358,38361,38363],{"class":157,"line":270},[155,38355,29517],{"class":171},[155,38357,21089],{"class":167},[155,38359,38360],{"class":732}," \"Person的析构函数调用\"",[155,38362,21357],{"class":167},[155,38364,28689],{"class":171},[155,38366,38367],{"class":157,"line":276},[155,38368,22074],{"class":171},[155,38370,38371],{"class":157,"line":297},[155,38372,217],{"emptyLinePlaceholder":216},[155,38374,38375],{"class":157,"line":302},[155,38376,23863],{"class":171},[155,38378,38379],{"class":157,"line":308},[155,38380,217],{"emptyLinePlaceholder":216},[155,38382,38383,38385,38387],{"class":157,"line":366},[155,38384,25227],{"class":167},[155,38386,25451],{"class":226},[155,38388,294],{"class":171},[155,38390,38391],{"class":157,"line":379},[155,38392,3008],{"class":171},[155,38394,38395,38398],{"class":157,"line":385},[155,38396,38397],{"class":171},"    Person p;",[155,38399,38400],{"class":161},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[155,38402,38403],{"class":157,"line":415},[155,38404,21475],{"class":171},[155,38406,38407],{"class":157,"line":452},[155,38408,217],{"emptyLinePlaceholder":216},[155,38410,38411,38413,38415],{"class":157,"line":480},[155,38412,15239],{"class":167},[155,38414,21861],{"class":226},[155,38416,30681],{"class":171},[155,38418,38419],{"class":157,"line":486},[155,38420,33037],{"class":171},[155,38422,38423],{"class":157,"line":499},[155,38424,38425],{"class":161},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[155,38427,38428],{"class":157,"line":505},[155,38429,217],{"emptyLinePlaceholder":216},[155,38431,38432,38434],{"class":157,"line":528},[155,38433,38397],{"class":171},[155,38435,38436],{"class":161},"\u002F\u002F只有构造函数\n",[155,38438,38439],{"class":157,"line":549},[155,38440,217],{"emptyLinePlaceholder":216},[155,38442,38443,38445,38447,38449,38451],{"class":157,"line":570},[155,38444,22190],{"class":226},[155,38446,230],{"class":171},[155,38448,22195],{"class":732},[155,38450,25829],{"class":171},[155,38452,38453],{"class":161},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[155,38455,38456],{"class":157,"line":575},[155,38457,217],{"emptyLinePlaceholder":216},[155,38459,38460,38462,38464],{"class":157,"line":581},[155,38461,1692],{"class":167},[155,38463,1151],{"class":263},[155,38465,21206],{"class":171},[155,38467,38468],{"class":157,"line":592},[155,38469,21475],{"class":171},[24,38471,38472],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[14,38474,38476],{"id":38475},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[24,38478,38479],{},"两种分类方式：",[24,38481,38482],{},"​\t按参数分为： 有参构造和无参构造",[24,38484,38485],{},"​\t按类型分为： 普通构造和拷贝构造",[24,38487,38488],{},"三种调用方式：",[24,38490,38491],{},"​\t括号法",[24,38493,38494],{},"​\t显示法",[24,38496,38497],{},"​\t隐式转换法",[146,38499,38501],{"className":20084,"code":38500,"language":20086,"meta":39,"style":39},"#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",[152,38502,38503,38509,38519,38524,38529,38534,38539,38543,38551,38555,38559,38563,38569,38573,38586,38590,38602,38606,38615,38628,38632,38636,38642,38646,38659,38663,38668,38684,38688,38693,38702,38715,38719,38725,38729,38734,38742,38746,38751,38755,38763,38767,38772,38777,38782,38787,38792,38796,38801,38806,38811,38816,38820,38825,38830,38846,38858,38863,38867,38872,38877,38882,38886,38891,38905,38918,38922,38930,38934,38940,38946,38954],{"__ignoreMap":39},[155,38504,38505,38507],{"class":157,"line":158},[155,38506,21838],{"class":167},[155,38508,21841],{"class":732},[155,38510,38511,38513,38515,38517],{"class":157,"line":46},[155,38512,21846],{"class":167},[155,38514,21849],{"class":167},[155,38516,21852],{"class":226},[155,38518,21206],{"class":171},[155,38520,38521],{"class":157,"line":121},[155,38522,38523],{"class":161},"\u002F\u002F1.构造函数的分类及调用\n",[155,38525,38526],{"class":157,"line":180},[155,38527,38528],{"class":161},"\u002F\u002F分类\n",[155,38530,38531],{"class":157,"line":194},[155,38532,38533],{"class":161},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[155,38535,38536],{"class":157,"line":200},[155,38537,38538],{"class":161},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[155,38540,38541],{"class":157,"line":213},[155,38542,217],{"emptyLinePlaceholder":216},[155,38544,38545,38547,38549],{"class":157,"line":220},[155,38546,223],{"class":167},[155,38548,35394],{"class":226},[155,38550,22551],{"class":171},[155,38552,38553],{"class":157,"line":245},[155,38554,3008],{"class":171},[155,38556,38557],{"class":157,"line":251},[155,38558,34542],{"class":167},[155,38560,38561],{"class":157,"line":257},[155,38562,38307],{"class":161},[155,38564,38565,38567],{"class":157,"line":270},[155,38566,38312],{"class":226},[155,38568,294],{"class":171},[155,38570,38571],{"class":157,"line":276},[155,38572,21917],{"class":171},[155,38574,38575,38577,38579,38582,38584],{"class":157,"line":297},[155,38576,23322],{"class":171},[155,38578,21089],{"class":167},[155,38580,38581],{"class":732},"\"Person构造函数无参构造\"",[155,38583,21089],{"class":167},[155,38585,21111],{"class":171},[155,38587,38588],{"class":157,"line":302},[155,38589,22074],{"class":171},[155,38591,38592,38594,38596,38598,38600],{"class":157,"line":308},[155,38593,38312],{"class":226},[155,38595,230],{"class":171},[155,38597,15239],{"class":167},[155,38599,21311],{"class":323},[155,38601,363],{"class":171},[155,38603,38604],{"class":157,"line":366},[155,38605,21917],{"class":171},[155,38607,38608,38611,38613],{"class":157,"line":379},[155,38609,38610],{"class":171},"        age",[155,38612,317],{"class":167},[155,38614,26060],{"class":171},[155,38616,38617,38619,38621,38624,38626],{"class":157,"line":385},[155,38618,23322],{"class":171},[155,38620,21089],{"class":167},[155,38622,38623],{"class":732},"\"Person构造函数有参构造\"",[155,38625,21089],{"class":167},[155,38627,21111],{"class":171},[155,38629,38630],{"class":157,"line":415},[155,38631,22074],{"class":171},[155,38633,38634],{"class":157,"line":452},[155,38635,38340],{"class":161},[155,38637,38638,38640],{"class":157,"line":480},[155,38639,38345],{"class":226},[155,38641,294],{"class":171},[155,38643,38644],{"class":157,"line":486},[155,38645,21917],{"class":171},[155,38647,38648,38650,38652,38655,38657],{"class":157,"line":499},[155,38649,23322],{"class":171},[155,38651,21089],{"class":167},[155,38653,38654],{"class":732},"\"Person析构函数被调用\"",[155,38656,21089],{"class":167},[155,38658,21111],{"class":171},[155,38660,38661],{"class":157,"line":505},[155,38662,22074],{"class":171},[155,38664,38665],{"class":157,"line":528},[155,38666,38667],{"class":161},"    \u002F\u002F拷贝构造函数\n",[155,38669,38670,38672,38674,38676,38678,38680,38682],{"class":157,"line":549},[155,38671,38312],{"class":226},[155,38673,230],{"class":171},[155,38675,26655],{"class":167},[155,38677,35394],{"class":226},[155,38679,30413],{"class":167},[155,38681,24],{"class":323},[155,38683,363],{"class":171},[155,38685,38686],{"class":157,"line":570},[155,38687,21917],{"class":171},[155,38689,38690],{"class":157,"line":575},[155,38691,38692],{"class":161},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[155,38694,38695,38697,38699],{"class":157,"line":581},[155,38696,38610],{"class":171},[155,38698,317],{"class":167},[155,38700,38701],{"class":171},"p.age;\n",[155,38703,38704,38706,38708,38711,38713],{"class":157,"line":592},[155,38705,23322],{"class":171},[155,38707,21089],{"class":167},[155,38709,38710],{"class":732},"\"Person拷贝构造函数被调用\"",[155,38712,21089],{"class":167},[155,38714,21111],{"class":171},[155,38716,38717],{"class":157,"line":610},[155,38718,22074],{"class":171},[155,38720,38721,38723],{"class":157,"line":622},[155,38722,21872],{"class":167},[155,38724,27656],{"class":171},[155,38726,38727],{"class":157,"line":638},[155,38728,23863],{"class":171},[155,38730,38731],{"class":157,"line":650},[155,38732,38733],{"class":161},"\u002F\u002F调用\n",[155,38735,38736,38738,38740],{"class":157,"line":662},[155,38737,25227],{"class":167},[155,38739,25451],{"class":226},[155,38741,294],{"class":171},[155,38743,38744],{"class":157,"line":678},[155,38745,3008],{"class":171},[155,38747,38748],{"class":157,"line":694},[155,38749,38750],{"class":161},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[155,38752,38753],{"class":157,"line":706},[155,38754,21475],{"class":171},[155,38756,38757,38759,38761],{"class":157,"line":715},[155,38758,25227],{"class":167},[155,38760,25520],{"class":226},[155,38762,294],{"class":171},[155,38764,38765],{"class":157,"line":720},[155,38766,3008],{"class":171},[155,38768,38769],{"class":157,"line":739},[155,38770,38771],{"class":161},"    \u002F\u002F1.括号法\n",[155,38773,38774],{"class":157,"line":745},[155,38775,38776],{"class":161},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[155,38778,38779],{"class":157,"line":773},[155,38780,38781],{"class":161},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[155,38783,38784],{"class":157,"line":779},[155,38785,38786],{"class":161},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[155,38788,38789],{"class":157,"line":785},[155,38790,38791],{"class":161},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[155,38793,38794],{"class":157,"line":791},[155,38795,217],{"emptyLinePlaceholder":216},[155,38797,38798],{"class":157,"line":796},[155,38799,38800],{"class":161},"    \u002F\u002F注意事项\n",[155,38802,38803],{"class":157,"line":802},[155,38804,38805],{"class":161},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[155,38807,38808],{"class":157,"line":808},[155,38809,38810],{"class":161},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[155,38812,38813],{"class":157,"line":819},[155,38814,38815],{"class":161},"    \u002F\u002F Person p4();\n",[155,38817,38818],{"class":157,"line":1832},[155,38819,217],{"emptyLinePlaceholder":216},[155,38821,38822],{"class":157,"line":1838},[155,38823,38824],{"class":161},"    \u002F\u002F2.显示法\n",[155,38826,38827],{"class":157,"line":1844},[155,38828,38829],{"class":171},"    Person p1;\n",[155,38831,38832,38835,38837,38840,38842,38844],{"class":157,"line":1850},[155,38833,38834],{"class":171},"    Person p2",[155,38836,317],{"class":167},[155,38838,38839],{"class":226},"Person",[155,38841,230],{"class":171},[155,38843,565],{"class":263},[155,38845,22596],{"class":171},[155,38847,38848,38851,38853,38855],{"class":157,"line":1861},[155,38849,38850],{"class":171},"    Person p3",[155,38852,317],{"class":167},[155,38854,38839],{"class":226},[155,38856,38857],{"class":171},"(p2);\n",[155,38859,38860],{"class":157,"line":1866},[155,38861,38862],{"class":161},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[155,38864,38865],{"class":157,"line":1871},[155,38866,217],{"emptyLinePlaceholder":216},[155,38868,38869],{"class":157,"line":1877},[155,38870,38871],{"class":161},"    \u002F\u002F 注意事项2\n",[155,38873,38874],{"class":157,"line":1883},[155,38875,38876],{"class":161},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[155,38878,38879],{"class":157,"line":1894},[155,38880,38881],{"class":161},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[155,38883,38884],{"class":157,"line":1900},[155,38885,217],{"emptyLinePlaceholder":216},[155,38887,38888],{"class":157,"line":1911},[155,38889,38890],{"class":161},"    \u002F\u002F3.隐士转换法\n",[155,38892,38893,38896,38898,38900,38902],{"class":157,"line":1917},[155,38894,38895],{"class":171},"    Person p4",[155,38897,317],{"class":167},[155,38899,565],{"class":263},[155,38901,20144],{"class":171},[155,38903,38904],{"class":161},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[155,38906,38907,38910,38912,38915],{"class":157,"line":1927},[155,38908,38909],{"class":171},"    Person p5",[155,38911,317],{"class":167},[155,38913,38914],{"class":171},"p4;",[155,38916,38917],{"class":161}," \u002F\u002F 这里会调用拷贝构造函数\n",[155,38919,38920],{"class":157,"line":1933},[155,38921,21475],{"class":171},[155,38923,38924,38926,38928],{"class":157,"line":1943},[155,38925,15239],{"class":167},[155,38927,21861],{"class":226},[155,38929,294],{"class":171},[155,38931,38932],{"class":157,"line":1949},[155,38933,3008],{"class":171},[155,38935,38936,38938],{"class":157,"line":1959},[155,38937,25496],{"class":226},[155,38939,25499],{"class":171},[155,38941,38942,38944],{"class":157,"line":1964},[155,38943,25565],{"class":226},[155,38945,25499],{"class":171},[155,38947,38948,38950,38952],{"class":157,"line":1970},[155,38949,1692],{"class":167},[155,38951,1151],{"class":263},[155,38953,21206],{"class":171},[155,38955,38956],{"class":157,"line":1981},[155,38957,21475],{"class":171},[24,38959,38960,38963],{},[20234,38961,38962],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[14,38965,38967],{"id":38966},"_823拷贝构造函数","8.2.3拷贝构造函数",[24,38969,38970],{},"C++中拷贝构造函数调用时机通常有三种情况",[21052,38972,38973,38976,38979],{},[31,38974,38975],{},"使用一个已经创建完毕的对象来初始化一个新对象",[31,38977,38978],{},"值传递的方式给函数参数传值",[31,38980,38981],{},"以值方式返回局部对象",[146,38983,38985],{"className":20084,"code":38984,"language":20086,"meta":39,"style":39},"#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",[152,38986,38987,38993,39003,39007,39012,39016,39021,39026,39031,39037,39041,39045,39051,39055,39068,39072,39077,39089,39093,39101,39114,39118,39122,39138,39142,39151,39164,39168,39174,39178,39190,39194,39200,39204,39208,39216,39220,39233,39241,39259,39263,39268,39273,39288,39292,39305,39309,39317,39321,39325,39333,39337,39342,39351,39355,39359,39384,39394,39398,39406,39410,39421,39446,39450,39454,39458,39466,39470,39475,39480,39487,39492,39497,39502,39507,39511,39516,39520,39525,39529,39534,39539,39543,39547,39552,39557,39565],{"__ignoreMap":39},[155,38988,38989,38991],{"class":157,"line":158},[155,38990,21838],{"class":167},[155,38992,21841],{"class":732},[155,38994,38995,38997,38999,39001],{"class":157,"line":46},[155,38996,21846],{"class":167},[155,38998,21849],{"class":167},[155,39000,21852],{"class":226},[155,39002,21206],{"class":171},[155,39004,39005],{"class":157,"line":121},[155,39006,217],{"emptyLinePlaceholder":216},[155,39008,39009],{"class":157,"line":180},[155,39010,39011],{"class":161},"\u002F\u002F拷贝构造函数调用时机\n",[155,39013,39014],{"class":157,"line":194},[155,39015,217],{"emptyLinePlaceholder":216},[155,39017,39018],{"class":157,"line":200},[155,39019,39020],{"class":161},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[155,39022,39023],{"class":157,"line":213},[155,39024,39025],{"class":161},"\u002F\u002F2.值传递的方式给函数参数传值\n",[155,39027,39028],{"class":157,"line":220},[155,39029,39030],{"class":161},"\u002F\u002F3.以值方式返回局部对象\n",[155,39032,39033,39035],{"class":157,"line":245},[155,39034,223],{"class":167},[155,39036,34996],{"class":226},[155,39038,39039],{"class":157,"line":251},[155,39040,3008],{"class":171},[155,39042,39043],{"class":157,"line":257},[155,39044,34542],{"class":167},[155,39046,39047,39049],{"class":157,"line":270},[155,39048,38312],{"class":226},[155,39050,294],{"class":171},[155,39052,39053],{"class":157,"line":276},[155,39054,21917],{"class":171},[155,39056,39057,39059,39061,39064,39066],{"class":157,"line":297},[155,39058,29517],{"class":171},[155,39060,21089],{"class":167},[155,39062,39063],{"class":732}," \"Person的默认构造函数调用\"",[155,39065,21357],{"class":167},[155,39067,28689],{"class":171},[155,39069,39070],{"class":157,"line":302},[155,39071,22074],{"class":171},[155,39073,39074],{"class":157,"line":308},[155,39075,39076],{"class":161},"    \u002F\u002F有参构造\n",[155,39078,39079,39081,39083,39085,39087],{"class":157,"line":366},[155,39080,38312],{"class":226},[155,39082,230],{"class":171},[155,39084,15239],{"class":167},[155,39086,35514],{"class":323},[155,39088,363],{"class":171},[155,39090,39091],{"class":157,"line":379},[155,39092,21917],{"class":171},[155,39094,39095,39097,39099],{"class":157,"line":385},[155,39096,35568],{"class":171},[155,39098,317],{"class":167},[155,39100,27656],{"class":171},[155,39102,39103,39105,39107,39110,39112],{"class":157,"line":415},[155,39104,29517],{"class":171},[155,39106,21089],{"class":167},[155,39108,39109],{"class":732}," \"Person的有参构造函数调用\"",[155,39111,21357],{"class":167},[155,39113,28689],{"class":171},[155,39115,39116],{"class":157,"line":452},[155,39117,22074],{"class":171},[155,39119,39120],{"class":157,"line":480},[155,39121,38667],{"class":161},[155,39123,39124,39126,39128,39130,39132,39134,39136],{"class":157,"line":486},[155,39125,38312],{"class":226},[155,39127,230],{"class":171},[155,39129,26655],{"class":167},[155,39131,35394],{"class":226},[155,39133,30413],{"class":167},[155,39135,24],{"class":323},[155,39137,363],{"class":171},[155,39139,39140],{"class":157,"line":499},[155,39141,21917],{"class":171},[155,39143,39144,39146,39148],{"class":157,"line":505},[155,39145,35568],{"class":171},[155,39147,317],{"class":167},[155,39149,39150],{"class":171}," p.m_Age;\n",[155,39152,39153,39155,39157,39160,39162],{"class":157,"line":528},[155,39154,29517],{"class":171},[155,39156,21089],{"class":167},[155,39158,39159],{"class":732}," \"Person的拷贝构造函数调用\"",[155,39161,21357],{"class":167},[155,39163,28689],{"class":171},[155,39165,39166],{"class":157,"line":549},[155,39167,22074],{"class":171},[155,39169,39170,39172],{"class":157,"line":570},[155,39171,38345],{"class":226},[155,39173,294],{"class":171},[155,39175,39176],{"class":157,"line":575},[155,39177,21917],{"class":171},[155,39179,39180,39182,39184,39186,39188],{"class":157,"line":581},[155,39181,29517],{"class":171},[155,39183,21089],{"class":167},[155,39185,38360],{"class":732},[155,39187,21357],{"class":167},[155,39189,28689],{"class":171},[155,39191,39192],{"class":157,"line":592},[155,39193,22074],{"class":171},[155,39195,39196,39198],{"class":157,"line":610},[155,39197,21872],{"class":167},[155,39199,35491],{"class":171},[155,39201,39202],{"class":157,"line":622},[155,39203,23863],{"class":171},[155,39205,39206],{"class":157,"line":638},[155,39207,39020],{"class":161},[155,39209,39210,39212,39214],{"class":157,"line":650},[155,39211,25227],{"class":167},[155,39213,25451],{"class":226},[155,39215,294],{"class":171},[155,39217,39218],{"class":157,"line":662},[155,39219,3008],{"class":171},[155,39221,39222,39225,39227,39229,39231],{"class":157,"line":678},[155,39223,39224],{"class":171},"    Person ",[155,39226,26992],{"class":226},[155,39228,230],{"class":171},[155,39230,3458],{"class":263},[155,39232,22596],{"class":171},[155,39234,39235,39237,39239],{"class":157,"line":694},[155,39236,39224],{"class":171},[155,39238,26896],{"class":226},[155,39240,37308],{"class":171},[155,39242,39243,39245,39247,39250,39252,39255,39257],{"class":157,"line":706},[155,39244,21461],{"class":171},[155,39246,21089],{"class":167},[155,39248,39249],{"class":732},"\"P2的年龄为：\"",[155,39251,21089],{"class":167},[155,39253,39254],{"class":171},"p2.m_Age",[155,39256,21089],{"class":167},[155,39258,21111],{"class":171},[155,39260,39261],{"class":157,"line":715},[155,39262,21475],{"class":171},[155,39264,39265],{"class":157,"line":720},[155,39266,39267],{"class":161},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[155,39269,39270],{"class":157,"line":739},[155,39271,39272],{"class":161},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[155,39274,39275,39277,39280,39282,39284,39286],{"class":157,"line":745},[155,39276,25227],{"class":167},[155,39278,39279],{"class":226}," doWork",[155,39281,230],{"class":171},[155,39283,38839],{"class":226},[155,39285,26688],{"class":323},[155,39287,363],{"class":171},[155,39289,39290],{"class":157,"line":773},[155,39291,3008],{"class":171},[155,39293,39294,39296,39298,39301,39303],{"class":157,"line":779},[155,39295,26392],{"class":171},[155,39297,21089],{"class":167},[155,39299,39300],{"class":732}," \"doWork函数调用\"",[155,39302,21357],{"class":167},[155,39304,28689],{"class":171},[155,39306,39307],{"class":157,"line":785},[155,39308,21475],{"class":171},[155,39310,39311,39313,39315],{"class":157,"line":791},[155,39312,25227],{"class":167},[155,39314,25520],{"class":226},[155,39316,294],{"class":171},[155,39318,39319],{"class":157,"line":796},[155,39320,3008],{"class":171},[155,39322,39323],{"class":157,"line":802},[155,39324,35138],{"class":171},[155,39326,39327,39330],{"class":157,"line":808},[155,39328,39329],{"class":226},"    doWork",[155,39331,39332],{"class":171},"(p);\n",[155,39334,39335],{"class":157,"line":819},[155,39336,21475],{"class":171},[155,39338,39339],{"class":157,"line":1832},[155,39340,39341],{"class":161},"\u002F\u002F 3.以值方式返回局部对象\n",[155,39343,39344,39346,39349],{"class":157,"line":1838},[155,39345,38839],{"class":226},[155,39347,39348],{"class":226}," doWork2",[155,39350,294],{"class":171},[155,39352,39353],{"class":157,"line":1844},[155,39354,3008],{"class":171},[155,39356,39357],{"class":157,"line":1850},[155,39358,38829],{"class":171},[155,39360,39361,39363,39365,39367,39369,39371,39373,39375,39377,39379,39381],{"class":157,"line":1861},[155,39362,21461],{"class":171},[155,39364,21089],{"class":167},[155,39366,230],{"class":171},[155,39368,15239],{"class":167},[155,39370,26381],{"class":167},[155,39372,20501],{"class":171},[155,39374,20428],{"class":167},[155,39376,26992],{"class":171},[155,39378,21089],{"class":167},[155,39380,21154],{"class":171},[155,39382,39383],{"class":161},"\u002F\u002F打印p1的地址\n",[155,39385,39386,39388,39391],{"class":157,"line":1866},[155,39387,1692],{"class":167},[155,39389,39390],{"class":171}," p1;",[155,39392,39393],{"class":161},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[155,39395,39396],{"class":157,"line":1871},[155,39397,21475],{"class":171},[155,39399,39400,39402,39404],{"class":157,"line":1877},[155,39401,25227],{"class":167},[155,39403,25592],{"class":226},[155,39405,294],{"class":171},[155,39407,39408],{"class":157,"line":1883},[155,39409,3008],{"class":171},[155,39411,39412,39415,39417,39419],{"class":157,"line":1894},[155,39413,39414],{"class":171},"    Person p ",[155,39416,317],{"class":167},[155,39418,39348],{"class":226},[155,39420,25499],{"class":171},[155,39422,39423,39425,39427,39429,39431,39433,39435,39437,39439,39441,39443],{"class":157,"line":1900},[155,39424,21461],{"class":171},[155,39426,21089],{"class":167},[155,39428,230],{"class":171},[155,39430,15239],{"class":167},[155,39432,26381],{"class":167},[155,39434,20501],{"class":171},[155,39436,20428],{"class":167},[155,39438,24],{"class":171},[155,39440,21089],{"class":167},[155,39442,21154],{"class":171},[155,39444,39445],{"class":161},"\u002F\u002F打印p的地址\n",[155,39447,39448],{"class":157,"line":1911},[155,39449,21475],{"class":171},[155,39451,39452],{"class":157,"line":1917},[155,39453,217],{"emptyLinePlaceholder":216},[155,39455,39456],{"class":157,"line":1927},[155,39457,217],{"emptyLinePlaceholder":216},[155,39459,39460,39462,39464],{"class":157,"line":1933},[155,39461,15239],{"class":167},[155,39463,21861],{"class":226},[155,39465,294],{"class":171},[155,39467,39468],{"class":157,"line":1943},[155,39469,3008],{"class":171},[155,39471,39472],{"class":157,"line":1949},[155,39473,39474],{"class":161},"    \u002F\u002F test01();\n",[155,39476,39477],{"class":157,"line":1959},[155,39478,39479],{"class":161},"    \u002F\u002F test02();\n",[155,39481,39482,39485],{"class":157,"line":1964},[155,39483,39484],{"class":226},"    test03",[155,39486,25499],{"class":171},[155,39488,39489],{"class":157,"line":1970},[155,39490,39491],{"class":161},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[155,39493,39494],{"class":157,"line":1981},[155,39495,39496],{"class":161},"\u002F\u002F 输出结果如下：\n",[155,39498,39499],{"class":157,"line":1986},[155,39500,39501],{"class":161},"\u002F\u002F Person的默认构造函数调用\n",[155,39503,39504],{"class":157,"line":1991},[155,39505,39506],{"class":161},"\u002F\u002F 0x7fffffffceec\n",[155,39508,39509],{"class":157,"line":1997},[155,39510,39506],{"class":161},[155,39512,39513],{"class":157,"line":2014},[155,39514,39515],{"class":161},"\u002F\u002F Person的析构函数调用\n",[155,39517,39518],{"class":157,"line":2046},[155,39519,217],{"emptyLinePlaceholder":216},[155,39521,39522],{"class":157,"line":2062},[155,39523,39524],{"class":161},"\u002F\u002F 之前的输出结果如下：\n",[155,39526,39527],{"class":157,"line":2067},[155,39528,39501],{"class":161},[155,39530,39531],{"class":157,"line":2073},[155,39532,39533],{"class":161},"\u002F\u002F 地址\n",[155,39535,39536],{"class":157,"line":2079},[155,39537,39538],{"class":161},"\u002F\u002F Person的拷贝构造函数调用\n",[155,39540,39541],{"class":157,"line":2089},[155,39542,39515],{"class":161},[155,39544,39545],{"class":157,"line":2095},[155,39546,39533],{"class":161},[155,39548,39549],{"class":157,"line":2106},[155,39550,39551],{"class":161},"\u002F\u002F (这两次输出的地址也是不同的) \n",[155,39553,39554],{"class":157,"line":2112},[155,39555,39556],{"class":161},"\u002F\u002F Person的析构函数调用     \n",[155,39558,39559,39561,39563],{"class":157,"line":2122},[155,39560,1692],{"class":167},[155,39562,1151],{"class":263},[155,39564,21206],{"class":171},[155,39566,39567],{"class":157,"line":2128},[155,39568,21475],{"class":171},[24,39570,39571],{},"简化版理解",[146,39573,39575],{"className":20084,"code":39574,"language":20086,"meta":39,"style":39},"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",[152,39576,39577,39585,39589,39595,39608,39619,39623,39635,39648,39656,39660,39676,39689,39698,39702,39707,39713,39726,39730,39734,39741,39745,39749,39754,39762,39766,39782,39795,39808,39812,39817,39825,39829,39833,39838,39843,39859,39867,39874,39880,39884,39888,39893,39901,39905,39909,39932,39939,39943,39947,39955,39959,39969,39991,39995,39999,40003,40011,40015,40020,40025,40031,40035,40045,40049,40057],{"__ignoreMap":39},[155,39578,39579,39581,39583],{"class":157,"line":158},[155,39580,223],{"class":167},[155,39582,35394],{"class":226},[155,39584,35397],{"class":171},[155,39586,39587],{"class":157,"line":46},[155,39588,34542],{"class":167},[155,39590,39591,39593],{"class":157,"line":121},[155,39592,38312],{"class":226},[155,39594,30681],{"class":171},[155,39596,39597,39599,39601,39604,39606],{"class":157,"line":180},[155,39598,29517],{"class":171},[155,39600,21089],{"class":167},[155,39602,39603],{"class":732}," \"无参构造函数!\"",[155,39605,21357],{"class":167},[155,39607,28689],{"class":171},[155,39609,39610,39613,39615,39617],{"class":157,"line":194},[155,39611,39612],{"class":171},"        mAge ",[155,39614,317],{"class":167},[155,39616,1151],{"class":263},[155,39618,21206],{"class":171},[155,39620,39621],{"class":157,"line":200},[155,39622,22074],{"class":171},[155,39624,39625,39627,39629,39631,39633],{"class":157,"line":213},[155,39626,38312],{"class":226},[155,39628,230],{"class":171},[155,39630,15239],{"class":167},[155,39632,35514],{"class":323},[155,39634,32269],{"class":171},[155,39636,39637,39639,39641,39644,39646],{"class":157,"line":220},[155,39638,29517],{"class":171},[155,39640,21089],{"class":167},[155,39642,39643],{"class":732}," \"有参构造函数!\"",[155,39645,21357],{"class":167},[155,39647,28689],{"class":171},[155,39649,39650,39652,39654],{"class":157,"line":245},[155,39651,39612],{"class":171},[155,39653,317],{"class":167},[155,39655,27656],{"class":171},[155,39657,39658],{"class":157,"line":251},[155,39659,22074],{"class":171},[155,39661,39662,39664,39666,39668,39670,39672,39674],{"class":157,"line":257},[155,39663,38312],{"class":226},[155,39665,230],{"class":171},[155,39667,26655],{"class":167},[155,39669,35394],{"class":226},[155,39671,20428],{"class":167},[155,39673,26688],{"class":323},[155,39675,32269],{"class":171},[155,39677,39678,39680,39682,39685,39687],{"class":157,"line":270},[155,39679,29517],{"class":171},[155,39681,21089],{"class":167},[155,39683,39684],{"class":732}," \"拷贝构造函数!\"",[155,39686,21357],{"class":167},[155,39688,28689],{"class":171},[155,39690,39691,39693,39695],{"class":157,"line":276},[155,39692,39612],{"class":171},[155,39694,317],{"class":167},[155,39696,39697],{"class":171}," p.mAge;\n",[155,39699,39700],{"class":157,"line":297},[155,39701,22074],{"class":171},[155,39703,39704],{"class":157,"line":302},[155,39705,39706],{"class":161},"    \u002F\u002F析构函数在释放内存之前调用\n",[155,39708,39709,39711],{"class":157,"line":308},[155,39710,38345],{"class":226},[155,39712,30681],{"class":171},[155,39714,39715,39717,39719,39722,39724],{"class":157,"line":366},[155,39716,29517],{"class":171},[155,39718,21089],{"class":167},[155,39720,39721],{"class":732}," \"析构函数!\"",[155,39723,21357],{"class":167},[155,39725,28689],{"class":171},[155,39727,39728],{"class":157,"line":379},[155,39729,22074],{"class":171},[155,39731,39732],{"class":157,"line":385},[155,39733,34542],{"class":167},[155,39735,39736,39738],{"class":157,"line":415},[155,39737,21872],{"class":167},[155,39739,39740],{"class":171}," mAge;\n",[155,39742,39743],{"class":157,"line":452},[155,39744,23863],{"class":171},[155,39746,39747],{"class":157,"line":480},[155,39748,217],{"emptyLinePlaceholder":216},[155,39750,39751],{"class":157,"line":486},[155,39752,39753],{"class":161},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[155,39755,39756,39758,39760],{"class":157,"line":499},[155,39757,25227],{"class":167},[155,39759,25451],{"class":226},[155,39761,30681],{"class":171},[155,39763,39764],{"class":157,"line":505},[155,39765,217],{"emptyLinePlaceholder":216},[155,39767,39768,39770,39773,39775,39777,39779],{"class":157,"line":528},[155,39769,39224],{"class":171},[155,39771,39772],{"class":226},"man",[155,39774,230],{"class":171},[155,39776,20389],{"class":263},[155,39778,25829],{"class":171},[155,39780,39781],{"class":161}," \u002F\u002Fp对象已经创建完毕\n",[155,39783,39784,39786,39789,39792],{"class":157,"line":549},[155,39785,39224],{"class":171},[155,39787,39788],{"class":226},"newman",[155,39790,39791],{"class":171},"(man);",[155,39793,39794],{"class":161}," \u002F\u002F调用拷贝构造函数\n",[155,39796,39797,39800,39802,39805],{"class":157,"line":570},[155,39798,39799],{"class":171},"    Person newman2 ",[155,39801,317],{"class":167},[155,39803,39804],{"class":171}," man;",[155,39806,39807],{"class":161}," \u002F\u002F拷贝构造\n",[155,39809,39810],{"class":157,"line":575},[155,39811,217],{"emptyLinePlaceholder":216},[155,39813,39814],{"class":157,"line":581},[155,39815,39816],{"class":161},"    \u002F\u002FPerson newman3;\n",[155,39818,39819,39822],{"class":157,"line":592},[155,39820,39821],{"class":161},"    \u002F\u002Fnewman3 = man;",[155,39823,39824],{"class":161}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[155,39826,39827],{"class":157,"line":610},[155,39828,21475],{"class":171},[155,39830,39831],{"class":157,"line":622},[155,39832,217],{"emptyLinePlaceholder":216},[155,39834,39835],{"class":157,"line":638},[155,39836,39837],{"class":161},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[155,39839,39840],{"class":157,"line":650},[155,39841,39842],{"class":161},"\u002F\u002F相当于Person p1 = p;\n",[155,39844,39845,39847,39849,39851,39853,39856],{"class":157,"line":662},[155,39846,25227],{"class":167},[155,39848,39279],{"class":226},[155,39850,230],{"class":171},[155,39852,38839],{"class":226},[155,39854,39855],{"class":323}," p1",[155,39857,39858],{"class":171},") {}\n",[155,39860,39861,39863,39865],{"class":157,"line":678},[155,39862,25227],{"class":167},[155,39864,25520],{"class":226},[155,39866,30681],{"class":171},[155,39868,39869,39871],{"class":157,"line":694},[155,39870,38397],{"class":171},[155,39872,39873],{"class":161}," \u002F\u002F无参构造函数\n",[155,39875,39876,39878],{"class":157,"line":706},[155,39877,39329],{"class":226},[155,39879,39332],{"class":171},[155,39881,39882],{"class":157,"line":715},[155,39883,21475],{"class":171},[155,39885,39886],{"class":157,"line":720},[155,39887,217],{"emptyLinePlaceholder":216},[155,39889,39890],{"class":157,"line":739},[155,39891,39892],{"class":161},"\u002F\u002F3. 以值方式返回局部对象\n",[155,39894,39895,39897,39899],{"class":157,"line":745},[155,39896,38839],{"class":226},[155,39898,39348],{"class":226},[155,39900,294],{"class":171},[155,39902,39903],{"class":157,"line":773},[155,39904,3008],{"class":171},[155,39906,39907],{"class":157,"line":779},[155,39908,38829],{"class":171},[155,39910,39911,39913,39915,39917,39919,39921,39923,39925,39928,39930],{"class":157,"line":785},[155,39912,26392],{"class":171},[155,39914,21089],{"class":167},[155,39916,21561],{"class":171},[155,39918,15239],{"class":167},[155,39920,26381],{"class":167},[155,39922,20501],{"class":171},[155,39924,20428],{"class":167},[155,39926,39927],{"class":171},"p1 ",[155,39929,21089],{"class":167},[155,39931,28689],{"class":171},[155,39933,39934,39936],{"class":157,"line":791},[155,39935,1692],{"class":167},[155,39937,39938],{"class":171}," p1;\n",[155,39940,39941],{"class":157,"line":796},[155,39942,21475],{"class":171},[155,39944,39945],{"class":157,"line":802},[155,39946,217],{"emptyLinePlaceholder":216},[155,39948,39949,39951,39953],{"class":157,"line":808},[155,39950,25227],{"class":167},[155,39952,25592],{"class":226},[155,39954,294],{"class":171},[155,39956,39957],{"class":157,"line":819},[155,39958,3008],{"class":171},[155,39960,39961,39963,39965,39967],{"class":157,"line":1832},[155,39962,39414],{"class":171},[155,39964,317],{"class":167},[155,39966,39348],{"class":226},[155,39968,25499],{"class":171},[155,39970,39971,39973,39975,39977,39979,39981,39983,39985,39987,39989],{"class":157,"line":1838},[155,39972,26392],{"class":171},[155,39974,21089],{"class":167},[155,39976,21561],{"class":171},[155,39978,15239],{"class":167},[155,39980,26381],{"class":167},[155,39982,20501],{"class":171},[155,39984,20428],{"class":167},[155,39986,31276],{"class":171},[155,39988,21089],{"class":167},[155,39990,28689],{"class":171},[155,39992,39993],{"class":157,"line":1844},[155,39994,21475],{"class":171},[155,39996,39997],{"class":157,"line":1850},[155,39998,217],{"emptyLinePlaceholder":216},[155,40000,40001],{"class":157,"line":1861},[155,40002,217],{"emptyLinePlaceholder":216},[155,40004,40005,40007,40009],{"class":157,"line":1866},[155,40006,15239],{"class":167},[155,40008,21861],{"class":226},[155,40010,30681],{"class":171},[155,40012,40013],{"class":157,"line":1871},[155,40014,217],{"emptyLinePlaceholder":216},[155,40016,40017],{"class":157,"line":1877},[155,40018,40019],{"class":161},"    \u002F\u002Ftest01();\n",[155,40021,40022],{"class":157,"line":1883},[155,40023,40024],{"class":161},"    \u002F\u002Ftest02();\n",[155,40026,40027,40029],{"class":157,"line":1894},[155,40028,39484],{"class":226},[155,40030,25499],{"class":171},[155,40032,40033],{"class":157,"line":1900},[155,40034,217],{"emptyLinePlaceholder":216},[155,40036,40037,40039,40041,40043],{"class":157,"line":1911},[155,40038,22190],{"class":226},[155,40040,230],{"class":171},[155,40042,22195],{"class":732},[155,40044,22596],{"class":171},[155,40046,40047],{"class":157,"line":1917},[155,40048,217],{"emptyLinePlaceholder":216},[155,40050,40051,40053,40055],{"class":157,"line":1927},[155,40052,1692],{"class":167},[155,40054,1151],{"class":263},[155,40056,21206],{"class":171},[155,40058,40059],{"class":157,"line":1933},[155,40060,21475],{"class":171},[14,40062,40064],{"id":40063},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[24,40066,40067],{},"默认情况下，c++编译器至少给一个类添加3个函数",[24,40069,40070],{},"1．默认构造函数(无参，函数体为空)",[24,40072,40073],{},"2．默认析构函数(无参，函数体为空)",[24,40075,40076],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[24,40078,40079],{},"构造函数调用规则如下：",[21052,40081,40082,40085],{},[31,40083,40084],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[31,40086,40087],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[146,40089,40091],{"className":20084,"code":40090,"language":20086,"meta":39,"style":39},"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",[152,40092,40093,40101,40105,40110,40116,40128,40132,40137,40149,40158,40170,40174,40178,40194,40203,40215,40219,40223,40229,40241,40245,40249,40255,40259,40263,40271,40275,40287,40292,40300,40304,40322,40326,40330,40338,40342,40347,40355,40370,40383,40387,40392,40399,40415,40428,40432,40436,40444,40448,40454,40458,40468,40472,40480],{"__ignoreMap":39},[155,40094,40095,40097,40099],{"class":157,"line":158},[155,40096,223],{"class":167},[155,40098,35394],{"class":226},[155,40100,35397],{"class":171},[155,40102,40103],{"class":157,"line":46},[155,40104,34542],{"class":167},[155,40106,40107],{"class":157,"line":121},[155,40108,40109],{"class":161},"    \u002F\u002F无参（默认）构造函数\n",[155,40111,40112,40114],{"class":157,"line":180},[155,40113,38312],{"class":226},[155,40115,30681],{"class":171},[155,40117,40118,40120,40122,40124,40126],{"class":157,"line":194},[155,40119,29517],{"class":171},[155,40121,21089],{"class":167},[155,40123,39603],{"class":732},[155,40125,21357],{"class":167},[155,40127,28689],{"class":171},[155,40129,40130],{"class":157,"line":200},[155,40131,22074],{"class":171},[155,40133,40134],{"class":157,"line":213},[155,40135,40136],{"class":161},"    \u002F\u002F有参构造函数\n",[155,40138,40139,40141,40143,40145,40147],{"class":157,"line":220},[155,40140,38312],{"class":226},[155,40142,230],{"class":171},[155,40144,15239],{"class":167},[155,40146,21311],{"class":323},[155,40148,32269],{"class":171},[155,40150,40151,40154,40156],{"class":157,"line":245},[155,40152,40153],{"class":171},"        age ",[155,40155,317],{"class":167},[155,40157,21345],{"class":171},[155,40159,40160,40162,40164,40166,40168],{"class":157,"line":251},[155,40161,29517],{"class":171},[155,40163,21089],{"class":167},[155,40165,39643],{"class":732},[155,40167,21357],{"class":167},[155,40169,28689],{"class":171},[155,40171,40172],{"class":157,"line":257},[155,40173,22074],{"class":171},[155,40175,40176],{"class":157,"line":270},[155,40177,38667],{"class":161},[155,40179,40180,40182,40184,40186,40188,40190,40192],{"class":157,"line":276},[155,40181,38312],{"class":226},[155,40183,230],{"class":171},[155,40185,26655],{"class":167},[155,40187,35394],{"class":226},[155,40189,20428],{"class":167},[155,40191,26688],{"class":323},[155,40193,32269],{"class":171},[155,40195,40196,40198,40200],{"class":157,"line":297},[155,40197,40153],{"class":171},[155,40199,317],{"class":167},[155,40201,40202],{"class":171}," p.age;\n",[155,40204,40205,40207,40209,40211,40213],{"class":157,"line":302},[155,40206,29517],{"class":171},[155,40208,21089],{"class":167},[155,40210,39684],{"class":732},[155,40212,21357],{"class":167},[155,40214,28689],{"class":171},[155,40216,40217],{"class":157,"line":308},[155,40218,22074],{"class":171},[155,40220,40221],{"class":157,"line":366},[155,40222,38340],{"class":161},[155,40224,40225,40227],{"class":157,"line":379},[155,40226,38345],{"class":226},[155,40228,30681],{"class":171},[155,40230,40231,40233,40235,40237,40239],{"class":157,"line":385},[155,40232,29517],{"class":171},[155,40234,21089],{"class":167},[155,40236,39721],{"class":732},[155,40238,21357],{"class":167},[155,40240,28689],{"class":171},[155,40242,40243],{"class":157,"line":415},[155,40244,22074],{"class":171},[155,40246,40247],{"class":157,"line":452},[155,40248,34542],{"class":167},[155,40250,40251,40253],{"class":157,"line":480},[155,40252,21872],{"class":167},[155,40254,27656],{"class":171},[155,40256,40257],{"class":157,"line":486},[155,40258,23863],{"class":171},[155,40260,40261],{"class":157,"line":499},[155,40262,217],{"emptyLinePlaceholder":216},[155,40264,40265,40267,40269],{"class":157,"line":505},[155,40266,25227],{"class":167},[155,40268,25451],{"class":226},[155,40270,294],{"class":171},[155,40272,40273],{"class":157,"line":528},[155,40274,3008],{"class":171},[155,40276,40277,40279,40281,40283,40285],{"class":157,"line":549},[155,40278,39224],{"class":171},[155,40280,26992],{"class":226},[155,40282,230],{"class":171},[155,40284,20709],{"class":263},[155,40286,22596],{"class":171},[155,40288,40289],{"class":157,"line":570},[155,40290,40291],{"class":161},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[155,40293,40294,40296,40298],{"class":157,"line":575},[155,40295,39224],{"class":171},[155,40297,26896],{"class":226},[155,40299,37308],{"class":171},[155,40301,40302],{"class":157,"line":581},[155,40303,217],{"emptyLinePlaceholder":216},[155,40305,40306,40308,40310,40313,40315,40318,40320],{"class":157,"line":592},[155,40307,26392],{"class":171},[155,40309,21089],{"class":167},[155,40311,40312],{"class":732}," \"p2的年龄为： \"",[155,40314,21357],{"class":167},[155,40316,40317],{"class":171}," p2.age ",[155,40319,21089],{"class":167},[155,40321,28689],{"class":171},[155,40323,40324],{"class":157,"line":610},[155,40325,21475],{"class":171},[155,40327,40328],{"class":157,"line":622},[155,40329,217],{"emptyLinePlaceholder":216},[155,40331,40332,40334,40336],{"class":157,"line":638},[155,40333,25227],{"class":167},[155,40335,25520],{"class":226},[155,40337,294],{"class":171},[155,40339,40340],{"class":157,"line":650},[155,40341,3008],{"class":171},[155,40343,40344],{"class":157,"line":662},[155,40345,40346],{"class":161},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[155,40348,40349,40352],{"class":157,"line":678},[155,40350,40351],{"class":171},"    Person p1;",[155,40353,40354],{"class":161}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[155,40356,40357,40359,40361,40363,40365,40367],{"class":157,"line":694},[155,40358,39224],{"class":171},[155,40360,26896],{"class":226},[155,40362,230],{"class":171},[155,40364,565],{"class":263},[155,40366,25829],{"class":171},[155,40368,40369],{"class":161}," \u002F\u002F用户提供的有参\n",[155,40371,40372,40374,40377,40380],{"class":157,"line":706},[155,40373,39224],{"class":171},[155,40375,40376],{"class":226},"p3",[155,40378,40379],{"class":171},"(p2);",[155,40381,40382],{"class":161}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[155,40384,40385],{"class":157,"line":715},[155,40386,217],{"emptyLinePlaceholder":216},[155,40388,40389],{"class":157,"line":720},[155,40390,40391],{"class":161},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[155,40393,40394,40397],{"class":157,"line":739},[155,40395,40396],{"class":171},"    Person p4;",[155,40398,40354],{"class":161},[155,40400,40401,40403,40406,40408,40410,40412],{"class":157,"line":745},[155,40402,39224],{"class":171},[155,40404,40405],{"class":226},"p5",[155,40407,230],{"class":171},[155,40409,565],{"class":263},[155,40411,25829],{"class":171},[155,40413,40414],{"class":161}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[155,40416,40417,40419,40422,40425],{"class":157,"line":773},[155,40418,39224],{"class":171},[155,40420,40421],{"class":226},"p6",[155,40423,40424],{"class":171},"(p5);",[155,40426,40427],{"class":161}," \u002F\u002F用户自己提供拷贝构造\n",[155,40429,40430],{"class":157,"line":779},[155,40431,21475],{"class":171},[155,40433,40434],{"class":157,"line":785},[155,40435,217],{"emptyLinePlaceholder":216},[155,40437,40438,40440,40442],{"class":157,"line":791},[155,40439,15239],{"class":167},[155,40441,21861],{"class":226},[155,40443,30681],{"class":171},[155,40445,40446],{"class":157,"line":796},[155,40447,217],{"emptyLinePlaceholder":216},[155,40449,40450,40452],{"class":157,"line":802},[155,40451,25496],{"class":226},[155,40453,25499],{"class":171},[155,40455,40456],{"class":157,"line":808},[155,40457,217],{"emptyLinePlaceholder":216},[155,40459,40460,40462,40464,40466],{"class":157,"line":819},[155,40461,22190],{"class":226},[155,40463,230],{"class":171},[155,40465,22195],{"class":732},[155,40467,22596],{"class":171},[155,40469,40470],{"class":157,"line":1832},[155,40471,217],{"emptyLinePlaceholder":216},[155,40473,40474,40476,40478],{"class":157,"line":1838},[155,40475,1692],{"class":167},[155,40477,1151],{"class":263},[155,40479,21206],{"class":171},[155,40481,40482],{"class":157,"line":1844},[155,40483,21475],{"class":171},[14,40485,40487],{"id":40486},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[24,40489,40490],{},"浅拷贝：简单的赋值拷贝操作",[24,40492,40493],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[146,40495,40497],{"className":20084,"code":40496,"language":20086,"meta":39,"style":39},"#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",[152,40498,40499,40505,40515,40521,40525,40529,40534,40540,40544,40557,40561,40565,40572,40576,40586,40601,40614,40618,40623,40628,40644,40648,40661,40666,40671,40676,40685,40690,40705,40709,40713,40717,40723,40727,40732,40747,40751,40762,40776,40780,40789,40793,40799,40811,40815,40823,40827,40843,40874,40882,40910,40914,40918,40926,40930,40936],{"__ignoreMap":39},[155,40500,40501,40503],{"class":157,"line":158},[155,40502,21838],{"class":167},[155,40504,21841],{"class":732},[155,40506,40507,40509,40511,40513],{"class":157,"line":46},[155,40508,21846],{"class":167},[155,40510,21849],{"class":167},[155,40512,21852],{"class":226},[155,40514,21206],{"class":171},[155,40516,40517,40519],{"class":157,"line":121},[155,40518,223],{"class":167},[155,40520,34996],{"class":226},[155,40522,40523],{"class":157,"line":180},[155,40524,3008],{"class":171},[155,40526,40527],{"class":157,"line":194},[155,40528,34542],{"class":167},[155,40530,40531],{"class":157,"line":200},[155,40532,40533],{"class":161},"    \u002F\u002F默认构造函数\n",[155,40535,40536,40538],{"class":157,"line":213},[155,40537,38312],{"class":226},[155,40539,294],{"class":171},[155,40541,40542],{"class":157,"line":220},[155,40543,21917],{"class":171},[155,40545,40546,40548,40550,40553,40555],{"class":157,"line":245},[155,40547,23322],{"class":171},[155,40549,21089],{"class":167},[155,40551,40552],{"class":732},"\"默认构造函数\"",[155,40554,21089],{"class":167},[155,40556,21111],{"class":171},[155,40558,40559],{"class":157,"line":251},[155,40560,22074],{"class":171},[155,40562,40563],{"class":157,"line":257},[155,40564,40136],{"class":161},[155,40566,40567,40569],{"class":157,"line":270},[155,40568,38345],{"class":226},[155,40570,40571],{"class":171},"(int age,int height)\n",[155,40573,40574],{"class":157,"line":276},[155,40575,21917],{"class":171},[155,40577,40578,40581,40583],{"class":157,"line":297},[155,40579,40580],{"class":171},"        m_Age",[155,40582,317],{"class":167},[155,40584,40585],{"class":171},"age;\n",[155,40587,40588,40591,40593,40595,40598],{"class":157,"line":302},[155,40589,40590],{"class":171},"        m_Height",[155,40592,31545],{"class":167},[155,40594,22269],{"class":167},[155,40596,40597],{"class":171},"(height);",[155,40599,40600],{"class":161},"\u002F\u002F放到堆区\n",[155,40602,40603,40605,40607,40610,40612],{"class":157,"line":308},[155,40604,23322],{"class":171},[155,40606,21089],{"class":167},[155,40608,40609],{"class":732},"\"有参构造函数\"",[155,40611,21089],{"class":167},[155,40613,21111],{"class":171},[155,40615,40616],{"class":157,"line":366},[155,40617,22074],{"class":171},[155,40619,40620],{"class":157,"line":379},[155,40621,40622],{"class":161},"    \u002F\u002F深拷贝解决上述问题\n",[155,40624,40625],{"class":157,"line":385},[155,40626,40627],{"class":161},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[155,40629,40630,40632,40634,40636,40638,40640,40642],{"class":157,"line":415},[155,40631,38312],{"class":226},[155,40633,230],{"class":171},[155,40635,26655],{"class":167},[155,40637,35394],{"class":226},[155,40639,30413],{"class":167},[155,40641,24],{"class":323},[155,40643,363],{"class":171},[155,40645,40646],{"class":157,"line":452},[155,40647,21917],{"class":171},[155,40649,40650,40652,40654,40657,40659],{"class":157,"line":480},[155,40651,23322],{"class":171},[155,40653,21089],{"class":167},[155,40655,40656],{"class":732},"\"拷贝构造函数\"",[155,40658,21089],{"class":167},[155,40660,21111],{"class":171},[155,40662,40663],{"class":157,"line":486},[155,40664,40665],{"class":161},"        \u002F\u002F编译器默认的写如下注释部分\n",[155,40667,40668],{"class":157,"line":499},[155,40669,40670],{"class":161},"        \u002F\u002Fm_Age=p.m_Age;\n",[155,40672,40673],{"class":157,"line":505},[155,40674,40675],{"class":161},"        \u002F\u002Fm_Height=p.m_Height;\n",[155,40677,40678,40680,40682],{"class":157,"line":528},[155,40679,40580],{"class":171},[155,40681,317],{"class":167},[155,40683,40684],{"class":171},"p.m_Age;\n",[155,40686,40687],{"class":157,"line":549},[155,40688,40689],{"class":161},"        \u002F\u002F深拷贝操作\n",[155,40691,40692,40694,40696,40698,40700,40702],{"class":157,"line":570},[155,40693,40590],{"class":171},[155,40695,31545],{"class":167},[155,40697,22269],{"class":167},[155,40699,230],{"class":171},[155,40701,1563],{"class":167},[155,40703,40704],{"class":171},"p.m_Height);\n",[155,40706,40707],{"class":157,"line":575},[155,40708,22074],{"class":171},[155,40710,40711],{"class":157,"line":581},[155,40712,217],{"emptyLinePlaceholder":216},[155,40714,40715],{"class":157,"line":592},[155,40716,38340],{"class":161},[155,40718,40719,40721],{"class":157,"line":610},[155,40720,38345],{"class":226},[155,40722,294],{"class":171},[155,40724,40725],{"class":157,"line":622},[155,40726,21917],{"class":171},[155,40728,40729],{"class":157,"line":638},[155,40730,40731],{"class":161},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[155,40733,40734,40736,40739,40742,40745],{"class":157,"line":650},[155,40735,2803],{"class":167},[155,40737,40738],{"class":171},"(m_Height ",[155,40740,40741],{"class":167},"!=",[155,40743,40744],{"class":263}," NULL",[155,40746,363],{"class":171},[155,40748,40749],{"class":157,"line":662},[155,40750,22395],{"class":171},[155,40752,40753,40756,40759],{"class":157,"line":678},[155,40754,40755],{"class":167},"            delete",[155,40757,40758],{"class":171}," m_Height;",[155,40760,40761],{"class":161}," \u002F\u002F释放堆区内存\n",[155,40763,40764,40767,40769,40771,40773],{"class":157,"line":694},[155,40765,40766],{"class":171},"            m_Height",[155,40768,317],{"class":167},[155,40770,22279],{"class":263},[155,40772,20144],{"class":171},[155,40774,40775],{"class":161}," \u002F\u002F防止野指针\n",[155,40777,40778],{"class":157,"line":706},[155,40779,22414],{"class":171},[155,40781,40782,40784,40786],{"class":157,"line":715},[155,40783,23322],{"class":171},[155,40785,21089],{"class":167},[155,40787,40788],{"class":732},"\"Person的析构函数调用\"\n",[155,40790,40791],{"class":157,"line":720},[155,40792,22074],{"class":171},[155,40794,40795,40797],{"class":157,"line":739},[155,40796,21872],{"class":167},[155,40798,35491],{"class":171},[155,40800,40801,40803,40805,40808],{"class":157,"line":745},[155,40802,21872],{"class":167},[155,40804,26381],{"class":167},[155,40806,40807],{"class":171},"m_Height;",[155,40809,40810],{"class":161}," \u002F\u002F定义一个指针，指向身高\n",[155,40812,40813],{"class":157,"line":773},[155,40814,23863],{"class":171},[155,40816,40817,40819,40821],{"class":157,"line":779},[155,40818,25227],{"class":167},[155,40820,25451],{"class":226},[155,40822,294],{"class":171},[155,40824,40825],{"class":157,"line":785},[155,40826,3008],{"class":171},[155,40828,40829,40831,40833,40835,40837,40839,40841],{"class":157,"line":791},[155,40830,39224],{"class":171},[155,40832,26992],{"class":226},[155,40834,230],{"class":171},[155,40836,20709],{"class":263},[155,40838,332],{"class":171},[155,40840,11996],{"class":263},[155,40842,22596],{"class":171},[155,40844,40845,40847,40849,40852,40854,40857,40859,40862,40864,40867,40869,40871],{"class":157,"line":796},[155,40846,21461],{"class":171},[155,40848,21089],{"class":167},[155,40850,40851],{"class":732},"\"p1的年龄为:\"",[155,40853,21089],{"class":167},[155,40855,40856],{"class":171},"p1.m_Age",[155,40858,21089],{"class":167},[155,40860,40861],{"class":732},"\"身高为：\"",[155,40863,26282],{"class":167},[155,40865,40866],{"class":171},"p1.m_Height",[155,40868,21089],{"class":167},[155,40870,21154],{"class":171},[155,40872,40873],{"class":161},"  \u002F\u002F18\n",[155,40875,40876,40878,40880],{"class":157,"line":802},[155,40877,39224],{"class":171},[155,40879,26896],{"class":226},[155,40881,37308],{"class":171},[155,40883,40884,40886,40888,40891,40893,40895,40897,40899,40901,40904,40906,40908],{"class":157,"line":808},[155,40885,21461],{"class":171},[155,40887,21089],{"class":167},[155,40889,40890],{"class":732},"\"p2的年龄为：\"",[155,40892,21089],{"class":167},[155,40894,39254],{"class":171},[155,40896,21089],{"class":167},[155,40898,40861],{"class":732},[155,40900,26282],{"class":167},[155,40902,40903],{"class":171},"p2.m_Height",[155,40905,21089],{"class":167},[155,40907,21154],{"class":171},[155,40909,40873],{"class":161},[155,40911,40912],{"class":157,"line":819},[155,40913,33037],{"class":171},[155,40915,40916],{"class":157,"line":1832},[155,40917,21475],{"class":171},[155,40919,40920,40922,40924],{"class":157,"line":1838},[155,40921,15239],{"class":167},[155,40923,21861],{"class":226},[155,40925,294],{"class":171},[155,40927,40928],{"class":157,"line":1844},[155,40929,3008],{"class":171},[155,40931,40932,40934],{"class":157,"line":1850},[155,40933,25496],{"class":226},[155,40935,25499],{"class":171},[155,40937,40938],{"class":157,"line":1861},[155,40939,21475],{"class":171},[24,40941,40942],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[24,40944,40945],{},"浅拷贝带来的问题是堆区的内存重复释放",[24,40947,40948],{},[37,40949],{"alt":39,"src":40950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[24,40952,40953],{},"浅拷贝问题要使用深拷贝来解决",[24,40955,40956],{},[37,40957],{"alt":39,"src":40958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[24,40960,40961],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[14,40963,40965],{"id":40964},"_826初始化列表","8.2.6初始化列表",[24,40967,40968],{},"作用：初始化属性",[24,40970,25045],{},[146,40972,40975],{"className":40973,"code":40974,"language":25051},[25049],"构造函数():属性1(值1),属性2(值2).....{}\n",[152,40976,40974],{"__ignoreMap":39},[24,40978,40979],{},"例子",[146,40981,40983],{"className":20084,"code":40982,"language":20086,"meta":39,"style":39},"#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",[152,40984,40985,40991,41001,41007,41011,41016,41020,41025,41030,41035,41040,41045,41050,41054,41059,41064,41107,41116,41134,41152,41170,41174,41178,41185,41192,41199,41203,41207,41215,41219,41223,41243,41252,41256,41260,41270,41274,41282],{"__ignoreMap":39},[155,40986,40987,40989],{"class":157,"line":158},[155,40988,21838],{"class":167},[155,40990,21841],{"class":732},[155,40992,40993,40995,40997,40999],{"class":157,"line":46},[155,40994,21846],{"class":167},[155,40996,21849],{"class":167},[155,40998,21852],{"class":226},[155,41000,21206],{"class":171},[155,41002,41003,41005],{"class":157,"line":121},[155,41004,223],{"class":167},[155,41006,34996],{"class":226},[155,41008,41009],{"class":157,"line":180},[155,41010,3008],{"class":171},[155,41012,41013],{"class":157,"line":194},[155,41014,41015],{"class":167},"    public:\n",[155,41017,41018],{"class":157,"line":200},[155,41019,217],{"emptyLinePlaceholder":216},[155,41021,41022],{"class":157,"line":213},[155,41023,41024],{"class":161},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[155,41026,41027],{"class":157,"line":220},[155,41028,41029],{"class":161},"    \u002F\u002FPerson(int a, int b, int c) {\n",[155,41031,41032],{"class":157,"line":245},[155,41033,41034],{"class":161},"    \u002F\u002F  m_A = a;\n",[155,41036,41037],{"class":157,"line":251},[155,41038,41039],{"class":161},"    \u002F\u002F  m_B = b;\n",[155,41041,41042],{"class":157,"line":257},[155,41043,41044],{"class":161},"    \u002F\u002F  m_C = c;\n",[155,41046,41047],{"class":157,"line":270},[155,41048,41049],{"class":161},"    \u002F\u002F}\n",[155,41051,41052],{"class":157,"line":276},[155,41053,217],{"emptyLinePlaceholder":216},[155,41055,41056],{"class":157,"line":297},[155,41057,41058],{"class":161},"    \u002F\u002F初始化列表方式初始化\n",[155,41060,41061],{"class":157,"line":302},[155,41062,41063],{"class":161},"    \u002F\u002F使用有参构造函数\n",[155,41065,41066,41068,41070,41072,41074,41076,41078,41080,41082,41084,41086,41089,41092,41095,41098,41101,41104],{"class":157,"line":308},[155,41067,38312],{"class":226},[155,41069,230],{"class":171},[155,41071,15239],{"class":167},[155,41073,21311],{"class":323},[155,41075,7589],{"class":171},[155,41077,15239],{"class":167},[155,41079,22710],{"class":323},[155,41081,7589],{"class":171},[155,41083,15239],{"class":167},[155,41085,22726],{"class":323},[155,41087,41088],{"class":171},") :",[155,41090,41091],{"class":226},"m_A",[155,41093,41094],{"class":171},"(a), ",[155,41096,41097],{"class":226},"m_B",[155,41099,41100],{"class":171},"(b), ",[155,41102,41103],{"class":226},"m_C",[155,41105,41106],{"class":171},"(c) {}\n",[155,41108,41109,41111,41114],{"class":157,"line":366},[155,41110,34734],{"class":167},[155,41112,41113],{"class":226}," PrintPerson",[155,41115,30681],{"class":171},[155,41117,41118,41120,41122,41125,41127,41130,41132],{"class":157,"line":379},[155,41119,29517],{"class":171},[155,41121,21089],{"class":167},[155,41123,41124],{"class":732}," \"mA:\"",[155,41126,21357],{"class":167},[155,41128,41129],{"class":171}," m_A ",[155,41131,21089],{"class":167},[155,41133,28689],{"class":171},[155,41135,41136,41138,41140,41143,41145,41148,41150],{"class":157,"line":385},[155,41137,29517],{"class":171},[155,41139,21089],{"class":167},[155,41141,41142],{"class":732}," \"mB:\"",[155,41144,21357],{"class":167},[155,41146,41147],{"class":171}," m_B ",[155,41149,21089],{"class":167},[155,41151,28689],{"class":171},[155,41153,41154,41156,41158,41161,41163,41166,41168],{"class":157,"line":415},[155,41155,29517],{"class":171},[155,41157,21089],{"class":167},[155,41159,41160],{"class":732}," \"mC:\"",[155,41162,21357],{"class":167},[155,41164,41165],{"class":171}," m_C ",[155,41167,21089],{"class":167},[155,41169,28689],{"class":171},[155,41171,41172],{"class":157,"line":452},[155,41173,22074],{"class":171},[155,41175,41176],{"class":157,"line":480},[155,41177,35047],{"class":167},[155,41179,41180,41182],{"class":157,"line":486},[155,41181,21872],{"class":167},[155,41183,41184],{"class":171}," m_A;\n",[155,41186,41187,41189],{"class":157,"line":499},[155,41188,21872],{"class":167},[155,41190,41191],{"class":171}," m_B;\n",[155,41193,41194,41196],{"class":157,"line":505},[155,41195,21872],{"class":167},[155,41197,41198],{"class":171}," m_C;\n",[155,41200,41201],{"class":157,"line":528},[155,41202,23863],{"class":171},[155,41204,41205],{"class":157,"line":549},[155,41206,217],{"emptyLinePlaceholder":216},[155,41208,41209,41211,41213],{"class":157,"line":570},[155,41210,15239],{"class":167},[155,41212,21861],{"class":226},[155,41214,25841],{"class":171},[155,41216,41217],{"class":157,"line":575},[155,41218,3008],{"class":171},[155,41220,41221],{"class":157,"line":581},[155,41222,217],{"emptyLinePlaceholder":216},[155,41224,41225,41227,41229,41231,41233,41235,41237,41239,41241],{"class":157,"line":592},[155,41226,39224],{"class":171},[155,41228,24],{"class":226},[155,41230,230],{"class":171},[155,41232,329],{"class":263},[155,41234,7589],{"class":171},[155,41236,360],{"class":263},[155,41238,7589],{"class":171},[155,41240,4444],{"class":263},[155,41242,22596],{"class":171},[155,41244,41245,41247,41250],{"class":157,"line":610},[155,41246,35691],{"class":171},[155,41248,41249],{"class":226},"PrintPerson",[155,41251,25499],{"class":171},[155,41253,41254],{"class":157,"line":622},[155,41255,217],{"emptyLinePlaceholder":216},[155,41257,41258],{"class":157,"line":638},[155,41259,217],{"emptyLinePlaceholder":216},[155,41261,41262,41264,41266,41268],{"class":157,"line":650},[155,41263,22190],{"class":226},[155,41265,230],{"class":171},[155,41267,22195],{"class":732},[155,41269,22596],{"class":171},[155,41271,41272],{"class":157,"line":662},[155,41273,217],{"emptyLinePlaceholder":216},[155,41275,41276,41278,41280],{"class":157,"line":678},[155,41277,1692],{"class":167},[155,41279,1151],{"class":263},[155,41281,21206],{"class":171},[155,41283,41284],{"class":157,"line":694},[155,41285,21475],{"class":171},[24,41287,41288,41289,41292,41293],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[20234,41290,41291],{},"参数名就是定义的对象属性","，",[20234,41294,41295],{},"属性后面的值为有参构造函数的形参",[146,41297,41299],{"className":20084,"code":41298,"language":20086,"meta":39,"style":39},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[152,41300,41301],{"__ignoreMap":39},[155,41302,41303,41305,41307,41309,41312,41314,41317,41319,41322,41324,41327,41329,41332,41334],{"class":157,"line":158},[155,41304,38839],{"class":226},[155,41306,230],{"class":171},[155,41308,15239],{"class":167},[155,41310,41311],{"class":171}," a.",[155,41313,15239],{"class":167},[155,41315,41316],{"class":171}," b,",[155,41318,15239],{"class":167},[155,41320,41321],{"class":171}," b):",[155,41323,41091],{"class":226},[155,41325,41326],{"class":171},"(a),",[155,41328,41097],{"class":226},[155,41330,41331],{"class":171},"(c),",[155,41333,41103],{"class":226},[155,41335,41336],{"class":171},"(b) {}\n",[14,41338,41340],{"id":41339},"_827类对象作为类成员","8.2.7类对象作为类成员",[24,41342,41343],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[24,41345,34460],{},[146,41347,41349],{"className":20084,"code":41348,"language":20086,"meta":39,"style":39},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[152,41350,41351,41356,41361,41365,41370,41374],{"__ignoreMap":39},[155,41352,41353],{"class":157,"line":158},[155,41354,41355],{"class":171},"A{};\n",[155,41357,41358],{"class":157,"line":46},[155,41359,41360],{"class":171},"B\n",[155,41362,41363],{"class":157,"line":121},[155,41364,3008],{"class":171},[155,41366,41367],{"class":157,"line":180},[155,41368,41369],{"class":171},"    A a;\n",[155,41371,41372],{"class":157,"line":194},[155,41373,21475],{"class":171},[155,41375,41376],{"class":157,"line":200},[155,41377,41378],{"class":161},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[24,41380,41381],{},"案例",[146,41383,41385],{"className":20084,"code":41384,"language":20086,"meta":39,"style":39},"\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",[152,41386,41387,41392,41399,41403,41408,41413,41427,41431,41441,41452,41456,41463,41467,41480,41484,41489,41494,41498,41504,41508,41512,41516,41547,41551,41562,41566,41572,41576,41589,41593,41597,41601,41606,41611,41615,41623,41627,41644,41663,41667,41675,41679,41685],{"__ignoreMap":39},[155,41388,41389],{"class":157,"line":158},[155,41390,41391],{"class":161},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[155,41393,41394,41396],{"class":157,"line":46},[155,41395,223],{"class":167},[155,41397,41398],{"class":226}," Phone\n",[155,41400,41401],{"class":157,"line":121},[155,41402,3008],{"class":171},[155,41404,41405],{"class":157,"line":180},[155,41406,41407],{"class":171},"public：\n",[155,41409,41410],{"class":157,"line":194},[155,41411,41412],{"class":161},"    \u002F\u002F 赋值(构造函数)\n",[155,41414,41415,41418,41420,41422,41425],{"class":157,"line":200},[155,41416,41417],{"class":226},"    Phone",[155,41419,230],{"class":171},[155,41421,34742],{"class":226},[155,41423,41424],{"class":323}," pName",[155,41426,363],{"class":171},[155,41428,41429],{"class":157,"line":213},[155,41430,21917],{"class":171},[155,41432,41433,41436,41438],{"class":157,"line":220},[155,41434,41435],{"class":171},"        m_pName",[155,41437,317],{"class":167},[155,41439,41440],{"class":171},"pName;\n",[155,41442,41443,41445,41447,41450],{"class":157,"line":245},[155,41444,23322],{"class":171},[155,41446,21089],{"class":167},[155,41448,41449],{"class":732},"\"Phone的构造函数调用\"",[155,41451,21206],{"class":171},[155,41453,41454],{"class":157,"line":251},[155,41455,22074],{"class":171},[155,41457,41458,41461],{"class":157,"line":257},[155,41459,41460],{"class":226},"    ~Phone",[155,41462,294],{"class":171},[155,41464,41465],{"class":157,"line":270},[155,41466,21917],{"class":171},[155,41468,41469,41471,41473,41476,41478],{"class":157,"line":276},[155,41470,23322],{"class":171},[155,41472,21089],{"class":167},[155,41474,41475],{"class":732},"\"Phone析构函数调用\"",[155,41477,21089],{"class":167},[155,41479,21111],{"class":171},[155,41481,41482],{"class":157,"line":297},[155,41483,22074],{"class":171},[155,41485,41486],{"class":157,"line":302},[155,41487,41488],{"class":161},"    \u002F\u002F\n",[155,41490,41491],{"class":157,"line":308},[155,41492,41493],{"class":171},"    string m_PName;\n",[155,41495,41496],{"class":157,"line":366},[155,41497,23863],{"class":171},[155,41499,41500,41502],{"class":157,"line":379},[155,41501,223],{"class":167},[155,41503,34996],{"class":226},[155,41505,41506],{"class":157,"line":385},[155,41507,3008],{"class":171},[155,41509,41510],{"class":157,"line":415},[155,41511,34542],{"class":167},[155,41513,41514],{"class":157,"line":452},[155,41515,36787],{"class":161},[155,41517,41518,41520,41522,41524,41526,41528,41530,41533,41536,41538,41541,41544],{"class":157,"line":480},[155,41519,38312],{"class":226},[155,41521,230],{"class":171},[155,41523,34742],{"class":226},[155,41525,34745],{"class":323},[155,41527,332],{"class":171},[155,41529,34742],{"class":226},[155,41531,41532],{"class":323}," pname",[155,41534,41535],{"class":171},"):",[155,41537,34835],{"class":226},[155,41539,41540],{"class":171},"(name),m_phone.",[155,41542,41543],{"class":226},"m_PName",[155,41545,41546],{"class":171},"(pname) \n",[155,41548,41549],{"class":157,"line":486},[155,41550,21917],{"class":171},[155,41552,41553,41555,41557,41560],{"class":157,"line":499},[155,41554,23322],{"class":171},[155,41556,21089],{"class":167},[155,41558,41559],{"class":732},"\"Person的构造函数调用\"",[155,41561,21206],{"class":171},[155,41563,41564],{"class":157,"line":505},[155,41565,22074],{"class":171},[155,41567,41568,41570],{"class":157,"line":528},[155,41569,38345],{"class":226},[155,41571,294],{"class":171},[155,41573,41574],{"class":157,"line":549},[155,41575,21917],{"class":171},[155,41577,41578,41580,41582,41585,41587],{"class":157,"line":570},[155,41579,23322],{"class":171},[155,41581,21089],{"class":167},[155,41583,41584],{"class":732},"\"Person析构函数调用\"",[155,41586,21089],{"class":167},[155,41588,21111],{"class":171},[155,41590,41591],{"class":157,"line":575},[155,41592,22074],{"class":171},[155,41594,41595],{"class":157,"line":581},[155,41596,27639],{"class":161},[155,41598,41599],{"class":157,"line":592},[155,41600,34717],{"class":171},[155,41602,41603],{"class":157,"line":610},[155,41604,41605],{"class":161},"    \u002F\u002F手机\n",[155,41607,41608],{"class":157,"line":622},[155,41609,41610],{"class":171},"    Phone m_Phone;\n",[155,41612,41613],{"class":157,"line":638},[155,41614,23863],{"class":171},[155,41616,41617,41619,41621],{"class":157,"line":650},[155,41618,25227],{"class":167},[155,41620,25451],{"class":226},[155,41622,294],{"class":171},[155,41624,41625],{"class":157,"line":662},[155,41626,3008],{"class":171},[155,41628,41629,41631,41633,41635,41637,41639,41642],{"class":157,"line":678},[155,41630,39224],{"class":171},[155,41632,24],{"class":226},[155,41634,230],{"class":171},[155,41636,27775],{"class":732},[155,41638,332],{"class":171},[155,41640,41641],{"class":732},"\"安卓\"",[155,41643,22596],{"class":171},[155,41645,41646,41648,41650,41653,41655,41658,41660],{"class":157,"line":694},[155,41647,21461],{"class":171},[155,41649,21089],{"class":167},[155,41651,41652],{"class":171},"p.Name",[155,41654,21089],{"class":167},[155,41656,41657],{"class":732},"\"拿着：\"",[155,41659,21089],{"class":167},[155,41661,41662],{"class":171},"p.m_phone.m_PName;\n",[155,41664,41665],{"class":157,"line":706},[155,41666,21475],{"class":171},[155,41668,41669,41671,41673],{"class":157,"line":715},[155,41670,15239],{"class":167},[155,41672,21861],{"class":226},[155,41674,294],{"class":171},[155,41676,41677],{"class":157,"line":720},[155,41678,3008],{"class":171},[155,41680,41681,41683],{"class":157,"line":739},[155,41682,25496],{"class":226},[155,41684,25499],{"class":171},[155,41686,41687],{"class":157,"line":745},[155,41688,21475],{"class":171},[24,41690,28874],{},[146,41692,41694],{"className":20084,"code":41693,"language":20086,"meta":39,"style":39},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[152,41695,41696,41701],{"__ignoreMap":39},[155,41697,41698],{"class":157,"line":158},[155,41699,41700],{"class":161},"    \u002F\u002F不需要写这个：\n",[155,41702,41703],{"class":157,"line":46},[155,41704,41705],{"class":161},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[24,41707,41708],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[146,41710,41712],{"className":20084,"code":41711,"language":20086,"meta":39,"style":39},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[152,41713,41714],{"__ignoreMap":39},[155,41715,41716,41718,41721,41723,41726,41729],{"class":157,"line":158},[155,41717,38839],{"class":226},[155,41719,41720],{"class":171},"(string name.string pname):",[155,41722,34835],{"class":226},[155,41724,41725],{"class":171},"(name),",[155,41727,41728],{"class":226},"m_phone",[155,41730,41731],{"class":171},"(pname) {}\n",[24,41733,41734,41735,317,41738],{},"采用的是隐式转换法，实际为如下：\n",[152,41736,41737],{},"m_phone(pname)",[152,41739,41740],{},"Phone m_phone=pname",[24,41742,41743,41746],{},[20234,41744,41745],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[24,41748,41749],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[14,41751,41753],{"id":41752},"_828静态对象","8.2.8静态对象",[24,41755,41756],{},"静态对象在成员对象前static，称为静态对象",[24,41758,41759],{},"静态对象分为两类：",[28,41761,41762],{},[31,41763,41764],{},"静态成员变量",[21052,41766,41767,41770,41773],{},[31,41768,41769],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[31,41771,41772],{},"②在编译阶段分配内存",[31,41774,41775],{},"③类内声明，类外初始化",[28,41777,41778],{"start":46},[31,41779,41780],{},"静态成员函数",[21052,41782,41783,41786],{},[31,41784,41785],{},"①所有对象共享同一个函数",[31,41787,41788],{},"②静态成员函数只能访问静态成员变量",[19,41790,41792],{"id":41791},"_8281静态成员变量","8.2.8.1静态成员变量",[146,41794,41796],{"className":20084,"code":41795,"language":20086,"meta":39,"style":39},"#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",[152,41797,41798,41804,41814,41820,41824,41828,41833,41838,41843,41851,41855,41859,41863,41871,41875,41879,41884,41897,41901,41909,41913,41919],{"__ignoreMap":39},[155,41799,41800,41802],{"class":157,"line":158},[155,41801,21838],{"class":167},[155,41803,21841],{"class":732},[155,41805,41806,41808,41810,41812],{"class":157,"line":46},[155,41807,21846],{"class":167},[155,41809,21849],{"class":167},[155,41811,21852],{"class":226},[155,41813,21206],{"class":171},[155,41815,41816,41818],{"class":157,"line":121},[155,41817,223],{"class":167},[155,41819,34996],{"class":226},[155,41821,41822],{"class":157,"line":180},[155,41823,3008],{"class":171},[155,41825,41826],{"class":157,"line":194},[155,41827,34542],{"class":167},[155,41829,41830],{"class":157,"line":200},[155,41831,41832],{"class":161},"    \u002F\u002F非静态成员变量\n",[155,41834,41835],{"class":157,"line":213},[155,41836,41837],{"class":161},"    \u002F\u002F int m_A;\n",[155,41839,41840],{"class":157,"line":220},[155,41841,41842],{"class":161},"    \u002F\u002F定义静态成员变量\n",[155,41844,41845,41847,41849],{"class":157,"line":245},[155,41846,30848],{"class":167},[155,41848,22269],{"class":167},[155,41850,41184],{"class":171},[155,41852,41853],{"class":157,"line":251},[155,41854,217],{"emptyLinePlaceholder":216},[155,41856,41857],{"class":157,"line":257},[155,41858,217],{"emptyLinePlaceholder":216},[155,41860,41861],{"class":157,"line":270},[155,41862,23863],{"class":171},[155,41864,41865,41867,41869],{"class":157,"line":276},[155,41866,25227],{"class":167},[155,41868,25451],{"class":226},[155,41870,294],{"class":171},[155,41872,41873],{"class":157,"line":297},[155,41874,3008],{"class":171},[155,41876,41877],{"class":157,"line":302},[155,41878,35138],{"class":171},[155,41880,41881],{"class":157,"line":308},[155,41882,41883],{"class":161},"    \u002F\u002F输出类成员变量这块内存\n",[155,41885,41886,41888,41890,41893,41895],{"class":157,"line":366},[155,41887,21461],{"class":171},[155,41889,21089],{"class":167},[155,41891,41892],{"class":171},"p.m_A",[155,41894,21089],{"class":167},[155,41896,21111],{"class":171},[155,41898,41899],{"class":157,"line":379},[155,41900,21475],{"class":171},[155,41902,41903,41905,41907],{"class":157,"line":385},[155,41904,15239],{"class":167},[155,41906,21861],{"class":226},[155,41908,294],{"class":171},[155,41910,41911],{"class":157,"line":415},[155,41912,3008],{"class":171},[155,41914,41915,41917],{"class":157,"line":452},[155,41916,25496],{"class":226},[155,41918,294],{"class":171},[155,41920,41921],{"class":157,"line":480},[155,41922,21475],{"class":171},[24,41924,41925],{},"此时输出是报错的：无法解析外部命令",[24,41927,41928],{},"解决这一问题：必须用到类内声明，类外初始化操作",[146,41930,41932],{"className":20084,"code":41931,"language":20086,"meta":39,"style":39},"#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",[152,41933,41934,41940,41950,41956,41960,41964,41969,41977,41981,41986,42001,42009,42013,42017,42022,42027,42039,42044,42055,42060,42065,42078,42082,42090,42094,42100],{"__ignoreMap":39},[155,41935,41936,41938],{"class":157,"line":158},[155,41937,21838],{"class":167},[155,41939,21841],{"class":732},[155,41941,41942,41944,41946,41948],{"class":157,"line":46},[155,41943,21846],{"class":167},[155,41945,21849],{"class":167},[155,41947,21852],{"class":226},[155,41949,21206],{"class":171},[155,41951,41952,41954],{"class":157,"line":121},[155,41953,223],{"class":167},[155,41955,34996],{"class":226},[155,41957,41958],{"class":157,"line":180},[155,41959,3008],{"class":171},[155,41961,41962],{"class":157,"line":194},[155,41963,34542],{"class":167},[155,41965,41966],{"class":157,"line":200},[155,41967,41968],{"class":161},"    \u002F\u002F类内声明\n",[155,41970,41971,41973,41975],{"class":157,"line":213},[155,41972,30848],{"class":167},[155,41974,22269],{"class":167},[155,41976,41184],{"class":171},[155,41978,41979],{"class":157,"line":220},[155,41980,23863],{"class":171},[155,41982,41983],{"class":157,"line":245},[155,41984,41985],{"class":161},"\u002F\u002F类外初始化\n",[155,41987,41988,41990,41992,41995,41997,41999],{"class":157,"line":251},[155,41989,15239],{"class":167},[155,41991,35394],{"class":226},[155,41993,41994],{"class":171},"::m_A",[155,41996,317],{"class":167},[155,41998,565],{"class":263},[155,42000,21206],{"class":171},[155,42002,42003,42005,42007],{"class":157,"line":257},[155,42004,25227],{"class":167},[155,42006,25451],{"class":226},[155,42008,294],{"class":171},[155,42010,42011],{"class":157,"line":270},[155,42012,3008],{"class":171},[155,42014,42015],{"class":157,"line":276},[155,42016,35138],{"class":171},[155,42018,42019],{"class":157,"line":297},[155,42020,42021],{"class":161},"    \u002F\u002F访问变量的原内存空间\n",[155,42023,42024],{"class":157,"line":302},[155,42025,42026],{"class":161},"    \u002F\u002F100\n",[155,42028,42029,42031,42033,42035,42037],{"class":157,"line":308},[155,42030,21461],{"class":171},[155,42032,21089],{"class":167},[155,42034,41892],{"class":171},[155,42036,21089],{"class":167},[155,42038,21111],{"class":171},[155,42040,42041],{"class":157,"line":366},[155,42042,42043],{"class":171},"    Person p2;\n",[155,42045,42046,42049,42051,42053],{"class":157,"line":379},[155,42047,42048],{"class":171},"    p2.m_A",[155,42050,317],{"class":167},[155,42052,21619],{"class":263},[155,42054,21206],{"class":171},[155,42056,42057],{"class":157,"line":385},[155,42058,42059],{"class":161},"    \u002F\u002F继续访问这片空间\n",[155,42061,42062],{"class":157,"line":415},[155,42063,42064],{"class":161},"    \u002F\u002F200\n",[155,42066,42067,42069,42071,42074,42076],{"class":157,"line":452},[155,42068,21461],{"class":171},[155,42070,21089],{"class":167},[155,42072,42073],{"class":171},"p2.m_A",[155,42075,21089],{"class":167},[155,42077,21111],{"class":171},[155,42079,42080],{"class":157,"line":480},[155,42081,21475],{"class":171},[155,42083,42084,42086,42088],{"class":157,"line":486},[155,42085,15239],{"class":167},[155,42087,21861],{"class":226},[155,42089,294],{"class":171},[155,42091,42092],{"class":157,"line":499},[155,42093,3008],{"class":171},[155,42095,42096,42098],{"class":157,"line":505},[155,42097,25496],{"class":226},[155,42099,25499],{"class":171},[155,42101,42102],{"class":157,"line":528},[155,42103,21475],{"class":171},[24,42105,42106],{},[20234,42107,42108],{},"静态变量的访问",[146,42110,42112],{"className":20084,"code":42111,"language":20086,"meta":39,"style":39},"#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",[152,42113,42114,42120,42130,42136,42140,42144,42148,42156,42160,42165,42173,42177,42181,42195,42210,42218,42222,42227,42232,42237,42242,42254,42259,42264,42278,42295,42299,42307,42311,42317],{"__ignoreMap":39},[155,42115,42116,42118],{"class":157,"line":158},[155,42117,21838],{"class":167},[155,42119,21841],{"class":732},[155,42121,42122,42124,42126,42128],{"class":157,"line":46},[155,42123,21846],{"class":167},[155,42125,21849],{"class":167},[155,42127,21852],{"class":226},[155,42129,21206],{"class":171},[155,42131,42132,42134],{"class":157,"line":121},[155,42133,223],{"class":167},[155,42135,34996],{"class":226},[155,42137,42138],{"class":157,"line":180},[155,42139,3008],{"class":171},[155,42141,42142],{"class":157,"line":194},[155,42143,34542],{"class":167},[155,42145,42146],{"class":157,"line":200},[155,42147,41968],{"class":161},[155,42149,42150,42152,42154],{"class":157,"line":213},[155,42151,30848],{"class":167},[155,42153,22269],{"class":167},[155,42155,41184],{"class":171},[155,42157,42158],{"class":157,"line":220},[155,42159,35047],{"class":167},[155,42161,42162],{"class":157,"line":245},[155,42163,42164],{"class":161},"    \u002F\u002F静态成员变量也是有访问权限的\n",[155,42166,42167,42169,42171],{"class":157,"line":251},[155,42168,30848],{"class":167},[155,42170,22269],{"class":167},[155,42172,41191],{"class":171},[155,42174,42175],{"class":157,"line":257},[155,42176,23863],{"class":171},[155,42178,42179],{"class":157,"line":270},[155,42180,41985],{"class":161},[155,42182,42183,42185,42187,42189,42191,42193],{"class":157,"line":276},[155,42184,15239],{"class":167},[155,42186,35394],{"class":226},[155,42188,41994],{"class":171},[155,42190,317],{"class":167},[155,42192,565],{"class":263},[155,42194,21206],{"class":171},[155,42196,42197,42199,42201,42204,42206,42208],{"class":157,"line":297},[155,42198,15239],{"class":167},[155,42200,35394],{"class":226},[155,42202,42203],{"class":171},"::m_B",[155,42205,317],{"class":167},[155,42207,3458],{"class":263},[155,42209,21206],{"class":171},[155,42211,42212,42214,42216],{"class":157,"line":302},[155,42213,25227],{"class":167},[155,42215,25520],{"class":226},[155,42217,294],{"class":171},[155,42219,42220],{"class":157,"line":308},[155,42221,3008],{"class":171},[155,42223,42224],{"class":157,"line":366},[155,42225,42226],{"class":161},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[155,42228,42229],{"class":157,"line":379},[155,42230,42231],{"class":161},"    \u002F\u002F静态成员变量有两种访问方式：\n",[155,42233,42234],{"class":157,"line":385},[155,42235,42236],{"class":161},"    \u002F\u002F1.通过对象进行访问\n",[155,42238,42239],{"class":157,"line":415},[155,42240,42241],{"class":171},"    Person p;  \n",[155,42243,42244,42246,42248,42250,42252],{"class":157,"line":452},[155,42245,21461],{"class":171},[155,42247,21089],{"class":167},[155,42249,41892],{"class":171},[155,42251,21089],{"class":167},[155,42253,21111],{"class":171},[155,42255,42256],{"class":157,"line":480},[155,42257,42258],{"class":161},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[155,42260,42261],{"class":157,"line":486},[155,42262,42263],{"class":161},"    \u002F\u002F2.通过类名进行访问\n",[155,42265,42266,42268,42270,42272,42274,42276],{"class":157,"line":499},[155,42267,21461],{"class":171},[155,42269,21089],{"class":167},[155,42271,38839],{"class":226},[155,42273,41994],{"class":171},[155,42275,21089],{"class":167},[155,42277,21111],{"class":171},[155,42279,42280,42282,42284,42286,42288,42290,42292],{"class":157,"line":505},[155,42281,21461],{"class":171},[155,42283,21089],{"class":167},[155,42285,38839],{"class":226},[155,42287,42203],{"class":171},[155,42289,21089],{"class":167},[155,42291,21154],{"class":171},[155,42293,42294],{"class":161}," \u002F\u002F没有访问权限，报错\n",[155,42296,42297],{"class":157,"line":528},[155,42298,21475],{"class":171},[155,42300,42301,42303,42305],{"class":157,"line":549},[155,42302,15239],{"class":167},[155,42304,21861],{"class":226},[155,42306,294],{"class":171},[155,42308,42309],{"class":157,"line":570},[155,42310,3008],{"class":171},[155,42312,42313,42315],{"class":157,"line":575},[155,42314,25565],{"class":226},[155,42316,25499],{"class":171},[155,42318,42319],{"class":157,"line":581},[155,42320,21475],{"class":171},[19,42322,42324],{"id":42323},"_8282静态成员函数","8.2.8.2静态成员函数",[24,42326,42327],{},"1.静态成员函数定义与访问",[146,42329,42331],{"className":20084,"code":42330,"language":20086,"meta":39,"style":39},"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",[152,42332,42333,42339,42343,42347,42352,42363,42367,42381,42385,42389,42397,42401,42406,42411,42415,42423,42428,42438],{"__ignoreMap":39},[155,42334,42335,42337],{"class":157,"line":158},[155,42336,223],{"class":167},[155,42338,34996],{"class":226},[155,42340,42341],{"class":157,"line":46},[155,42342,3008],{"class":171},[155,42344,42345],{"class":157,"line":121},[155,42346,34542],{"class":167},[155,42348,42349],{"class":157,"line":180},[155,42350,42351],{"class":161},"    \u002F\u002F在公共权限下定义静态成员函数\n",[155,42353,42354,42356,42359,42361],{"class":157,"line":194},[155,42355,30848],{"class":167},[155,42357,42358],{"class":167}," void",[155,42360,31213],{"class":226},[155,42362,294],{"class":171},[155,42364,42365],{"class":157,"line":200},[155,42366,21917],{"class":171},[155,42368,42369,42372,42374,42377,42379],{"class":157,"line":213},[155,42370,42371],{"class":171},"        coout",[155,42373,21089],{"class":167},[155,42375,42376],{"class":732},"\"静态成员函数的调用\"",[155,42378,21089],{"class":167},[155,42380,21111],{"class":171},[155,42382,42383],{"class":157,"line":220},[155,42384,22074],{"class":171},[155,42386,42387],{"class":157,"line":245},[155,42388,23863],{"class":171},[155,42390,42391,42393,42395],{"class":157,"line":251},[155,42392,25227],{"class":167},[155,42394,25451],{"class":226},[155,42396,294],{"class":171},[155,42398,42399],{"class":157,"line":257},[155,42400,3008],{"class":171},[155,42402,42403],{"class":157,"line":270},[155,42404,42405],{"class":161},"    \u002F\u002F静态成员函数的调用方式:\n",[155,42407,42408],{"class":157,"line":276},[155,42409,42410],{"class":161},"    \u002F\u002F1.通过对象访问\n",[155,42412,42413],{"class":157,"line":297},[155,42414,35138],{"class":171},[155,42416,42417,42419,42421],{"class":157,"line":302},[155,42418,35691],{"class":171},[155,42420,31379],{"class":226},[155,42422,25499],{"class":171},[155,42424,42425],{"class":157,"line":308},[155,42426,42427],{"class":161},"    \u002F\u002F2.通过类名访问\n",[155,42429,42430,42432,42434,42436],{"class":157,"line":366},[155,42431,38312],{"class":226},[155,42433,37525],{"class":171},[155,42435,31379],{"class":226},[155,42437,25499],{"class":171},[155,42439,42440],{"class":157,"line":379},[155,42441,21475],{"class":171},[28,42443,42444],{"start":46},[31,42445,42446],{},"静态成员函数只能访问静态成员变量",[146,42448,42450],{"className":20084,"code":42449,"language":20086,"meta":39,"style":39},"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",[152,42451,42452,42458,42462,42466,42470,42480,42484,42498,42503,42515,42519,42530,42540,42544,42548,42552,42562,42566,42579,42583,42587,42591,42595,42609,42617,42621,42625,42629,42633,42641,42645,42655,42660,42664,42672,42676,42682],{"__ignoreMap":39},[155,42453,42454,42456],{"class":157,"line":158},[155,42455,223],{"class":167},[155,42457,34996],{"class":226},[155,42459,42460],{"class":157,"line":46},[155,42461,3008],{"class":171},[155,42463,42464],{"class":157,"line":121},[155,42465,34542],{"class":167},[155,42467,42468],{"class":157,"line":180},[155,42469,42351],{"class":161},[155,42471,42472,42474,42476,42478],{"class":157,"line":194},[155,42473,30848],{"class":167},[155,42475,42358],{"class":167},[155,42477,31213],{"class":226},[155,42479,294],{"class":171},[155,42481,42482],{"class":157,"line":200},[155,42483,21917],{"class":171},[155,42485,42486,42489,42491,42493,42495],{"class":157,"line":213},[155,42487,42488],{"class":171},"        m_A",[155,42490,317],{"class":167},[155,42492,20389],{"class":263},[155,42494,20144],{"class":171},[155,42496,42497],{"class":161}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[155,42499,42500],{"class":157,"line":220},[155,42501,42502],{"class":161},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[155,42504,42505,42507,42509,42511,42513],{"class":157,"line":245},[155,42506,42371],{"class":171},[155,42508,21089],{"class":167},[155,42510,42376],{"class":732},[155,42512,21089],{"class":167},[155,42514,21111],{"class":171},[155,42516,42517],{"class":157,"line":251},[155,42518,22074],{"class":171},[155,42520,42521,42523,42525,42527],{"class":157,"line":257},[155,42522,30848],{"class":167},[155,42524,22269],{"class":167},[155,42526,35273],{"class":171},[155,42528,42529],{"class":161}," \u002F\u002F静态成员变量\n",[155,42531,42532,42534,42537],{"class":157,"line":270},[155,42533,21872],{"class":167},[155,42535,42536],{"class":171}," m_B;",[155,42538,42539],{"class":161}," \u002F\u002F非静态成员变量\n",[155,42541,42542],{"class":157,"line":276},[155,42543,217],{"emptyLinePlaceholder":216},[155,42545,42546],{"class":157,"line":297},[155,42547,35047],{"class":167},[155,42549,42550],{"class":157,"line":302},[155,42551,42164],{"class":161},[155,42553,42554,42556,42558,42560],{"class":157,"line":308},[155,42555,30848],{"class":167},[155,42557,42358],{"class":167},[155,42559,33445],{"class":226},[155,42561,294],{"class":171},[155,42563,42564],{"class":157,"line":366},[155,42565,21917],{"class":171},[155,42567,42568,42570,42572,42575,42577],{"class":157,"line":379},[155,42569,23322],{"class":171},[155,42571,21089],{"class":167},[155,42573,42574],{"class":732},"\"这是私有权限下的静态函数调用\"",[155,42576,21089],{"class":167},[155,42578,21111],{"class":171},[155,42580,42581],{"class":157,"line":385},[155,42582,22074],{"class":171},[155,42584,42585],{"class":157,"line":415},[155,42586,217],{"emptyLinePlaceholder":216},[155,42588,42589],{"class":157,"line":452},[155,42590,217],{"emptyLinePlaceholder":216},[155,42592,42593],{"class":157,"line":480},[155,42594,23863],{"class":171},[155,42596,42597,42599,42601,42603,42605,42607],{"class":157,"line":486},[155,42598,15239],{"class":167},[155,42600,35394],{"class":226},[155,42602,41994],{"class":171},[155,42604,317],{"class":167},[155,42606,1109],{"class":263},[155,42608,21206],{"class":171},[155,42610,42611,42613,42615],{"class":157,"line":499},[155,42612,25227],{"class":167},[155,42614,25451],{"class":226},[155,42616,294],{"class":171},[155,42618,42619],{"class":157,"line":505},[155,42620,3008],{"class":171},[155,42622,42623],{"class":157,"line":528},[155,42624,42405],{"class":161},[155,42626,42627],{"class":157,"line":549},[155,42628,42410],{"class":161},[155,42630,42631],{"class":157,"line":570},[155,42632,35138],{"class":171},[155,42634,42635,42637,42639],{"class":157,"line":575},[155,42636,35691],{"class":171},[155,42638,31379],{"class":226},[155,42640,25499],{"class":171},[155,42642,42643],{"class":157,"line":581},[155,42644,42427],{"class":161},[155,42646,42647,42649,42651,42653],{"class":157,"line":592},[155,42648,38312],{"class":226},[155,42650,37525],{"class":171},[155,42652,31379],{"class":226},[155,42654,25499],{"class":171},[155,42656,42657],{"class":157,"line":610},[155,42658,42659],{"class":161},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[155,42661,42662],{"class":157,"line":622},[155,42663,21475],{"class":171},[155,42665,42666,42668,42670],{"class":157,"line":638},[155,42667,15239],{"class":167},[155,42669,21861],{"class":226},[155,42671,294],{"class":171},[155,42673,42674],{"class":157,"line":650},[155,42675,3008],{"class":171},[155,42677,42678,42680],{"class":157,"line":662},[155,42679,25496],{"class":226},[155,42681,25499],{"class":171},[155,42683,42684],{"class":157,"line":678},[155,42685,21475],{"class":171},[14,42687,42689],{"id":42688},"_83c对象模型和this指针","8.3C++对象模型和this指针",[19,42691,42693],{"id":42692},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[24,42695,42696],{},"在c++中，类内的成员变量和成员函数分开存储",[24,42698,42699],{},"只有非静态成员变量才属于类的对象上",[42701,42702,42704],"h5",{"id":42703},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[146,42706,42708],{"className":20084,"code":42707,"language":20086,"meta":39,"style":39},"#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",[152,42709,42710,42717,42727,42733,42737,42741,42745,42753,42757,42761,42784,42788,42796,42800,42806],{"__ignoreMap":39},[155,42711,42712,42714],{"class":157,"line":158},[155,42713,21838],{"class":167},[155,42715,42716],{"class":732},"\u003Ciostraem>\n",[155,42718,42719,42721,42723,42725],{"class":157,"line":46},[155,42720,21846],{"class":167},[155,42722,21849],{"class":167},[155,42724,21852],{"class":226},[155,42726,21206],{"class":171},[155,42728,42729,42731],{"class":157,"line":121},[155,42730,223],{"class":167},[155,42732,34996],{"class":226},[155,42734,42735],{"class":157,"line":180},[155,42736,3008],{"class":171},[155,42738,42739],{"class":157,"line":194},[155,42740,217],{"emptyLinePlaceholder":216},[155,42742,42743],{"class":157,"line":200},[155,42744,23863],{"class":171},[155,42746,42747,42749,42751],{"class":157,"line":213},[155,42748,25227],{"class":167},[155,42750,25451],{"class":226},[155,42752,294],{"class":171},[155,42754,42755],{"class":157,"line":220},[155,42756,3008],{"class":171},[155,42758,42759],{"class":157,"line":245},[155,42760,35138],{"class":171},[155,42762,42763,42765,42767,42770,42772,42775,42777,42779,42781],{"class":157,"line":251},[155,42764,21461],{"class":171},[155,42766,21089],{"class":167},[155,42768,42769],{"class":732},"\"size of p=\"",[155,42771,21089],{"class":167},[155,42773,42774],{"class":226},"sizeoif",[155,42776,26402],{"class":171},[155,42778,21089],{"class":167},[155,42780,21154],{"class":171},[155,42782,42783],{"class":161}," \u002F\u002F查看这个空类的占用的内存空间\n",[155,42785,42786],{"class":157,"line":257},[155,42787,21475],{"class":171},[155,42789,42790,42792,42794],{"class":157,"line":270},[155,42791,15239],{"class":167},[155,42793,21861],{"class":226},[155,42795,294],{"class":171},[155,42797,42798],{"class":157,"line":276},[155,42799,3008],{"class":171},[155,42801,42802,42804],{"class":157,"line":297},[155,42803,25496],{"class":226},[155,42805,25499],{"class":171},[155,42807,42808],{"class":157,"line":302},[155,42809,21475],{"class":171},[24,42811,42812],{},"输出结果为：size of p=1",[24,42814,42815],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[24,42817,42818],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[42701,42820,42822],{"id":42821},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[146,42824,42826],{"className":20084,"code":42825,"language":20086,"meta":39,"style":39},"#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",[152,42827,42828,42834,42844,42852,42856,42865,42869,42877,42881,42885,42904,42908,42912,42920,42924,42930],{"__ignoreMap":39},[155,42829,42830,42832],{"class":157,"line":158},[155,42831,21838],{"class":167},[155,42833,21841],{"class":732},[155,42835,42836,42838,42840,42842],{"class":157,"line":46},[155,42837,21846],{"class":167},[155,42839,21849],{"class":167},[155,42841,21852],{"class":226},[155,42843,21206],{"class":171},[155,42845,42846,42848,42850],{"class":157,"line":121},[155,42847,223],{"class":167},[155,42849,35394],{"class":226},[155,42851,22551],{"class":171},[155,42853,42854],{"class":157,"line":180},[155,42855,3008],{"class":171},[155,42857,42858,42860,42862],{"class":157,"line":194},[155,42859,21872],{"class":167},[155,42861,35273],{"class":171},[155,42863,42864],{"class":161},"\u002F\u002F非静态成员变量\n",[155,42866,42867],{"class":157,"line":200},[155,42868,23863],{"class":171},[155,42870,42871,42873,42875],{"class":157,"line":213},[155,42872,25227],{"class":167},[155,42874,25451],{"class":226},[155,42876,294],{"class":171},[155,42878,42879],{"class":157,"line":220},[155,42880,3008],{"class":171},[155,42882,42883],{"class":157,"line":245},[155,42884,35138],{"class":171},[155,42886,42887,42889,42891,42893,42895,42897,42899,42901],{"class":157,"line":251},[155,42888,21461],{"class":171},[155,42890,21089],{"class":167},[155,42892,42769],{"class":732},[155,42894,21285],{"class":167},[155,42896,26402],{"class":171},[155,42898,21089],{"class":167},[155,42900,21154],{"class":171},[155,42902,42903],{"class":161}," \u002F\u002F查看不是空对象时占用多少内存\n",[155,42905,42906],{"class":157,"line":257},[155,42907,217],{"emptyLinePlaceholder":216},[155,42909,42910],{"class":157,"line":270},[155,42911,21475],{"class":171},[155,42913,42914,42916,42918],{"class":157,"line":276},[155,42915,15239],{"class":167},[155,42917,21861],{"class":226},[155,42919,294],{"class":171},[155,42921,42922],{"class":157,"line":297},[155,42923,3008],{"class":171},[155,42925,42926,42928],{"class":157,"line":302},[155,42927,25496],{"class":226},[155,42929,25499],{"class":171},[155,42931,42932],{"class":157,"line":308},[155,42933,21475],{"class":171},[24,42935,42936],{},"输出结果：size of p=4",[24,42938,42939],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[28,42941,42942],{},[31,42943,42944],{},"如果加上非静态成员变量，Person类修改如下",[146,42946,42948],{"className":20084,"code":42947,"language":20086,"meta":39,"style":39},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[152,42949,42950,42956,42960,42966,42974,42978,42983],{"__ignoreMap":39},[155,42951,42952,42954],{"class":157,"line":158},[155,42953,223],{"class":167},[155,42955,34996],{"class":226},[155,42957,42958],{"class":157,"line":46},[155,42959,3008],{"class":171},[155,42961,42962,42964],{"class":157,"line":121},[155,42963,21872],{"class":167},[155,42965,41184],{"class":171},[155,42967,42968,42970,42972],{"class":157,"line":180},[155,42969,30848],{"class":167},[155,42971,22269],{"class":167},[155,42973,41191],{"class":171},[155,42975,42976],{"class":157,"line":194},[155,42977,23863],{"class":171},[155,42979,42980],{"class":157,"line":200},[155,42981,42982],{"class":161},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[155,42984,42985,42987,42989,42991,42993,42995],{"class":157,"line":213},[155,42986,15239],{"class":167},[155,42988,35394],{"class":226},[155,42990,42203],{"class":171},[155,42992,317],{"class":167},[155,42994,1109],{"class":263},[155,42996,21206],{"class":171},[24,42998,42999],{},"输出结果：4",[24,43001,43002],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[28,43004,43005],{"start":46},[31,43006,43007],{},"加上非静态成员函数",[146,43009,43011],{"className":20084,"code":43010,"language":20086,"meta":39,"style":39},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[152,43012,43013,43020,43024,43030,43038,43042,43046,43050],{"__ignoreMap":39},[155,43014,43015,43017],{"class":157,"line":158},[155,43016,223],{"class":167},[155,43018,43019],{"class":226},"  Person\n",[155,43021,43022],{"class":157,"line":46},[155,43023,3008],{"class":171},[155,43025,43026,43028],{"class":157,"line":121},[155,43027,21872],{"class":167},[155,43029,41184],{"class":171},[155,43031,43032,43034,43036],{"class":157,"line":180},[155,43033,34734],{"class":167},[155,43035,31213],{"class":226},[155,43037,294],{"class":171},[155,43039,43040],{"class":157,"line":194},[155,43041,21917],{"class":171},[155,43043,43044],{"class":157,"line":200},[155,43045,217],{"emptyLinePlaceholder":216},[155,43047,43048],{"class":157,"line":213},[155,43049,22074],{"class":171},[155,43051,43052],{"class":157,"line":220},[155,43053,23863],{"class":171},[24,43055,43056],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[28,43058,43059],{"start":121},[31,43060,43061],{},"加上静态成员函数",[146,43063,43065],{"className":20084,"code":43064,"language":20086,"meta":39,"style":39},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[152,43066,43067,43073,43077,43083,43091,43095,43099,43103,43114,43118,43122,43126],{"__ignoreMap":39},[155,43068,43069,43071],{"class":157,"line":158},[155,43070,223],{"class":167},[155,43072,43019],{"class":226},[155,43074,43075],{"class":157,"line":46},[155,43076,3008],{"class":171},[155,43078,43079,43081],{"class":157,"line":121},[155,43080,21872],{"class":167},[155,43082,41184],{"class":171},[155,43084,43085,43087,43089],{"class":157,"line":180},[155,43086,34734],{"class":167},[155,43088,31213],{"class":226},[155,43090,294],{"class":171},[155,43092,43093],{"class":157,"line":194},[155,43094,21917],{"class":171},[155,43096,43097],{"class":157,"line":200},[155,43098,217],{"emptyLinePlaceholder":216},[155,43100,43101],{"class":157,"line":213},[155,43102,22074],{"class":171},[155,43104,43105,43107,43109,43112],{"class":157,"line":220},[155,43106,30848],{"class":167},[155,43108,42358],{"class":167},[155,43110,43111],{"class":226}," func1",[155,43113,294],{"class":171},[155,43115,43116],{"class":157,"line":245},[155,43117,21917],{"class":171},[155,43119,43120],{"class":157,"line":251},[155,43121,217],{"emptyLinePlaceholder":216},[155,43123,43124],{"class":157,"line":257},[155,43125,22074],{"class":171},[155,43127,43128],{"class":157,"line":270},[155,43129,23863],{"class":171},[24,43131,42999],{},[24,43133,43134],{},"解释：静态成员函数也不属于类上",[20011,43136,27533],{},{"title":39,"searchDepth":46,"depth":46,"links":43138},[43139,43145],{"id":34472,"depth":46,"text":34473,"children":43140},[43141,43142,43143,43144],{"id":34476,"depth":121,"text":34477},{"id":35199,"depth":121,"text":35200},{"id":35371,"depth":121,"text":35372},{"id":35830,"depth":121,"text":35831},{"id":38170,"depth":46,"text":38171,"children":43146},[43147,43148,43149,43150,43151,43152,43153,43154,43155],{"id":38182,"depth":121,"text":38183},{"id":38475,"depth":121,"text":38476},{"id":38966,"depth":121,"text":38967},{"id":40063,"depth":121,"text":40064},{"id":40486,"depth":121,"text":40487},{"id":40964,"depth":121,"text":40965},{"id":41339,"depth":121,"text":41340},{"id":41752,"depth":121,"text":41753},{"id":42688,"depth":121,"text":42689},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":34437,"description":43156},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":43163,"title":20086,"body":43164,"description":20020,"extension":20021,"meta":43168,"navigation":216,"path":43170,"seo":43171,"stem":43172,"__hash__":43173},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":43165,"toc":43166},[],{"title":39,"searchDepth":46,"depth":46,"links":43167},[],{"category":43169},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":20086,"description":20020},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":43175,"title":43176,"body":43177,"description":39,"extension":20021,"meta":43768,"navigation":216,"path":43769,"seo":43770,"stem":43771,"__hash__":43772},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":43178,"toc":43750},[43179,43182,43186,43189,43192,43195,43213,43218,43221,43224,43227,43230,43235,43238,43243,43246,43249,43253,43256,43259,43265,43268,43286,43290,43294,43297,43302,43305,43309,43312,43325,43328,43332,43335,43338,43341,43366,43369,43378,43389,43404,43436,43440,43447,43455,43459,43462,43465,43470,43474,43477,43480,43485,43488,43492,43495,43498,43503,43506,43510,43515,43519,43586,43590,43593,43596,43599,43602,43605,43611,43632,43635,43649,43658,43662,43665,43668,43673,43676,43681,43686,43689,43692,43697,43702,43705,43710,43715,43718,43723,43728,43731,43734,43739,43742,43747],[10,43180,43176],{"id":43181},"_1强化学习基本认识",[20037,43183,43185],{"id":43184},"_11什么是强化学习","1.1.什么是强化学习",[24,43187,43188],{},"强化学习有两部分组成：智能体和环境；",[24,43190,43191],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[24,43193,43194],{},"强化学习与监督学习的区别:",[28,43196,43197,43200,43203,43206],{},[31,43198,43199],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[31,43201,43202],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[31,43204,43205],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[31,43207,43208,43209,43212],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[20234,43210,43211],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[24,43214,43215],{},[37,43216],{"alt":39,"src":43217},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[24,43219,43220],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[24,43222,43223],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[24,43225,43226],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[24,43228,43229],{},"获取奖励",[24,43231,43232],{},[37,43233],{"alt":39,"src":43234},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[24,43236,43237],{},"强化学习可以分成标准强化学习和深度强化学习",[24,43239,43240],{},[37,43241],{"alt":39,"src":43242},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[24,43244,43245],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[24,43247,43248],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[20037,43250,43252],{"id":43251},"_12强化学习应用场景","1.2.强化学习应用场景",[24,43254,43255],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[24,43257,43258],{},"具身智能中的应用",[24,43260,43261,43264],{},[20234,43262,43263],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[24,43266,43267],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[24,43269,43270,43271,43274,43275,43278,43279,43282,43283],{},"机器人是",[20234,43272,43273],{},"躯体","，深度学习是",[20234,43276,43277],{},"神经元****网络","，VLA是",[20234,43280,43281],{},"通用的行为逻辑","，而强化学习是",[20234,43284,43285],{},"教练",[20037,43287,43289],{"id":43288},"_13序列决策","1.3.序列决策",[14,43291,43293],{"id":43292},"_131智能体与环境","1.3.1.智能体与环境",[24,43295,43296],{},"强化学习研究的问题是智能体agent与环境交互的问题",[24,43298,43299],{},[37,43300],{"alt":39,"src":43301},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[24,43303,43304],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[14,43306,43308],{"id":43307},"_132奖励","1.3.2.奖励",[24,43310,43311],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[24,43313,43314,43315,43324],{},"取某个策略的表现如何。强化学习的目的就是",[20234,43316,43317,43318,43323],{},"最大化",[20234,43319,43320],{},[20234,43321,43322],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[24,43326,43327],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[14,43329,43331],{"id":43330},"_133序列决策","1.3.3.序列决策",[24,43333,43334],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[24,43336,43337],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[24,43339,43340],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[24,43342,43343,43347,43348,43350,43351,43353,43354,43356,43357,33622,43360,33622,43363],{},[43344,43345,43346],"em",{},"Ht"," = ",[43344,43349,20658],{},"1*, a",[43344,43352,329],{},", r",[43344,43355,329],{},", . . . ,* ",[43344,43358,43359],{},"ot",[43344,43361,43362],{},", at ,",[43344,43364,43365],{},"rt",[24,43367,43368],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[24,43370,43371,43347,43374,21561,43376,20501],{},[43344,43372,43373],{},"st",[43344,43375,17391],{},[43344,43377,43346],{},[24,43379,43380,43381,43384,43385,43388],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[20234,43382,43383],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[20234,43386,43387],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[24,43390,43391,43392,43395,43396,43399,43400,43403],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[20234,43393,43394],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[20234,43397,43398],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[43344,43401,43402],{},"S, A, T, R, Ω, O, γ",")。",[24,43405,43406,43407,43409,43410,43412,43413,230,43415,43418,43419,43421,43422,230,43425,43428,43429,43431,43432,43435],{},"其中 ",[43344,43408,20747],{}," 表示状态空间，为隐变量，",[43344,43411,20312],{}," 为动作空间，",[43344,43414,20770],{},[43344,43416,43417],{},"s ′ |s, a",") 为状态转移概率，",[43344,43420,20723],{}," 为奖励函数，",[43344,43423,43424],{},"Ω",[43344,43426,43427],{},"o|s, a",") 为观测概率，",[43344,43430,20652],{}," 为观测空间，",[43344,43433,43434],{},"γ"," 为折扣因子。",[20037,43437,43439],{"id":43438},"_14动作空间","1.4.动作空间",[24,43441,43442,43443,43446],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[20234,43444,43445],{},"动作空间"," ，动作空间分为:",[28,43448,43449,43452],{},[31,43450,43451],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[31,43453,43454],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[20037,43456,43458],{"id":43457},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[24,43460,43461],{},"由策略、价值函数、模型三部分组成",[24,43463,43464],{},"这三者组成马尔可夫决策过程",[24,43466,43467],{},[37,43468],{"alt":39,"src":43469},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[14,43471,43473],{"id":43472},"_151策略","1.5.1.策略",[24,43475,43476],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[24,43478,43479],{},"策略可分为两种：",[24,43481,43482],{},[37,43483],{"alt":39,"src":43484},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[24,43486,43487],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[14,43489,43491],{"id":43490},"_152价值函数","1.5.2.价值函数",[24,43493,43494],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[24,43496,43497],{},"价值函数中有一个折扣因子，类似于存款利息",[24,43499,43500],{},[37,43501],{"alt":39,"src":43502},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[24,43504,43505],{},"进入某个状态采取的最优动作可以通过Q函数得到",[14,43507,43509],{"id":43508},"_153模型","1.5.3.模型",[24,43511,43512],{},[37,43513],{"alt":39,"src":43514},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[20037,43516,43518],{"id":43517},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[20222,43520,43521,43532],{},[20225,43522,43523],{},[20228,43524,43525,43529],{},[20231,43526,43528],{"align":43527},"left","类型",[20231,43530,43531],{"align":43527},"特点",[20269,43533,43534,43544,43554,43564,43576],{},[20228,43535,43536,43541],{},[20274,43537,43538],{"align":43527},[20234,43539,43540],{},"基于价值的智能体",[20274,43542,43543],{"align":43527},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[20228,43545,43546,43551],{},[20274,43547,43548],{"align":43527},[20234,43549,43550],{},"基于策略的智能体",[20274,43552,43553],{"align":43527},"直接学习策略，没有学习价值函数",[20228,43555,43556,43561],{},[20274,43557,43558],{"align":43527},[20234,43559,43560],{},"演员-评论员智能体",[20274,43562,43563],{"align":43527},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[20228,43565,43566,43571],{},[20274,43567,43568],{"align":43527},[20234,43569,43570],{},"有模型强化学习智能体",[20274,43572,43573],{"align":43527},[37,43574],{"alt":39,"src":43575},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[20228,43577,43578,43583],{},[20274,43579,43580],{"align":43527},[20234,43581,43582],{},"免模型强化学习智能体",[20274,43584,43585],{"align":43527},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[20037,43587,43589],{"id":43588},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[24,43591,43592],{},"学习和规划是序列决策的两个基本问题",[24,43594,43595],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[24,43597,43598],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[24,43600,43601],{},"强化学习用到的库：Gym",[24,43603,43604],{},"Gym可以检验强化学习算法的优劣",[24,43606,43607,43610],{},[20234,43608,43609],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[146,43612,43616],{"className":43613,"code":43614,"language":43615,"meta":39,"style":39},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[152,43617,43618],{"__ignoreMap":39},[155,43619,43620,43623,43626,43629],{"class":157,"line":158},[155,43621,43622],{"class":226},"pip",[155,43624,43625],{"class":732}," install",[155,43627,43628],{"class":732}," gym==",[155,43630,43631],{"class":263},"0.25.2\n",[24,43633,43634],{},"显示图形界面需要",[146,43636,43638],{"className":43613,"code":43637,"language":43615,"meta":39,"style":39},"pip install pygame\n",[152,43639,43640],{"__ignoreMap":39},[155,43641,43642,43644,43646],{"class":157,"line":158},[155,43643,43622],{"class":226},[155,43645,43625],{"class":732},[155,43647,43648],{"class":732}," pygame\n",[24,43650,43651,43652],{},"有关Gym库的相关文档介绍：",[20318,43653,43657],{"href":43654,"rel":43655},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[43656],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[20037,43659,43661],{"id":43660},"_18一些补充基础概念","1.8.一些补充基础概念",[24,43663,43664],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[24,43666,43667],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[24,43669,43670],{},[37,43671],{"alt":39,"src":43672},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[24,43674,43675],{},"折扣率需要自己来设定",[24,43677,43678],{},[37,43679],{"alt":39,"src":43680},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[28,43682,43683],{},[31,43684,43685],{},"状态转移函数：",[24,43687,43688],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[24,43690,43691],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[24,43693,43694],{},[37,43695],{"alt":39,"src":43696},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[28,43698,43699],{"start":46},[31,43700,43701],{},"动作价值函数：",[24,43703,43704],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[24,43706,43707],{},[37,43708],{"alt":39,"src":43709},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[28,43711,43712],{"start":121},[31,43713,43714],{},"最优动作价值函数：",[24,43716,43717],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[24,43719,43720],{},[37,43721],{"alt":39,"src":43722},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[28,43724,43725],{"start":180},[31,43726,43727],{},"状态价值函数:",[24,43729,43730],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[24,43732,43733],{},"它衡量的是“一个具体动作”的长期价值",[24,43735,43736],{},[37,43737],{"alt":39,"src":43738},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[24,43740,43741],{},"几个价值函数之间的比较：",[24,43743,43744],{},[37,43745],{"alt":39,"src":43746},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[20011,43748,43749],{},"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":39,"searchDepth":46,"depth":46,"links":43751},[43752,43753,43754,43759,43760,43765,43766,43767],{"id":43184,"depth":46,"text":43185},{"id":43251,"depth":46,"text":43252},{"id":43288,"depth":46,"text":43289,"children":43755},[43756,43757,43758],{"id":43292,"depth":121,"text":43293},{"id":43307,"depth":121,"text":43308},{"id":43330,"depth":121,"text":43331},{"id":43438,"depth":46,"text":43439},{"id":43457,"depth":46,"text":43458,"children":43761},[43762,43763,43764],{"id":43472,"depth":121,"text":43473},{"id":43490,"depth":121,"text":43491},{"id":43508,"depth":121,"text":43509},{"id":43517,"depth":46,"text":43518},{"id":43588,"depth":46,"text":43589},{"id":43660,"depth":46,"text":43661},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":43176,"description":39},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":43774,"title":43775,"body":43776,"description":43783,"extension":20021,"meta":43794,"navigation":216,"path":43795,"seo":43796,"stem":43797,"__hash__":43798},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":43777,"toc":43792},[43778,43781,43784,43789],[10,43779,43775],{"id":43780},"_2马尔可夫决策过程",[24,43782,43783],{},"这是强化学习的基本框架",[24,43785,43786],{},[37,43787],{"alt":39,"src":43788},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[24,43790,43791],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":39,"searchDepth":46,"depth":46,"links":43793},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":43775,"description":43783},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":43800,"title":43801,"body":43802,"description":39,"extension":20021,"meta":43918,"navigation":216,"path":43919,"seo":43920,"stem":43921,"__hash__":43922},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":43803,"toc":43913},[43804,43807,43811,43814,43819,43824,43827,43832,43835,43840,43843,43847,43852,43855,43860,43865,43870,43873,43877,43882,43885,43890,43895,43900,43905,43908],[10,43805,43801],{"id":43806},"_3动作价值函数",[20037,43808,43810],{"id":43809},"_31dqn","3.1.DQN",[24,43812,43813],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[24,43815,43816],{},[37,43817],{"alt":39,"src":43818},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[24,43820,43821],{},[37,43822],{"alt":39,"src":43823},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[24,43825,43826],{},"DQN算法的描述：",[24,43828,43829],{},[37,43830],{"alt":39,"src":43831},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[24,43833,43834],{},"这里的Dense指的是全连接层",[24,43836,43837],{},[37,43838],{"alt":39,"src":43839},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[24,43841,43842],{},"当前观测的状态为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算法",[20037,43844,43846],{"id":43845},"_32dqn的举例","3.2.DQN的举例",[24,43848,43849],{},[37,43850],{"alt":39,"src":43851},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[24,43853,43854],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[24,43856,43857],{},[37,43858],{"alt":39,"src":43859},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[24,43861,43862],{},[37,43863],{"alt":39,"src":43864},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[24,43866,43867],{},[37,43868],{"alt":39,"src":43869},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[24,43871,43872],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[20037,43874,43876],{"id":43875},"_33td算法","3.3.TD算法",[24,43878,43879],{},[37,43880],{"alt":39,"src":43881},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[24,43883,43884],{},"强化学习TD算法公式的粗略解释：",[24,43886,43887],{},[37,43888],{"alt":39,"src":43889},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[24,43891,43892],{},[37,43893],{"alt":39,"src":43894},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[24,43896,43897],{},[37,43898],{"alt":39,"src":43899},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[24,43901,43902],{},[37,43903],{"alt":39,"src":43904},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[24,43906,43907],{},"TD算法总结：",[24,43909,43910],{},[37,43911],{"alt":39,"src":43912},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":39,"searchDepth":46,"depth":46,"links":43914},[43915,43916,43917],{"id":43809,"depth":46,"text":43810},{"id":43845,"depth":46,"text":43846},{"id":43875,"depth":46,"text":43876},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":43801,"description":39},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":43924,"title":43925,"body":43926,"description":39,"extension":20021,"meta":44159,"navigation":216,"path":44160,"seo":44161,"stem":44162,"__hash__":44163},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":43927,"toc":44155},[43928,43931,43935,43938,43941,43946,43951,43954,43959,43964,43967,43972,43975,43980,43983,43988,43991,43996,43999,44004,44009,44012,44017,44020,44023,44028,44031,44036,44041,44045,44048,44051,44056,44061,44064,44069,44074,44077,44082,44085,44088,44093,44096,44101,44104,44109,44114,44117,44122,44127,44130,44135,44138,44143,44146],[10,43929,43925],{"id":43930},"_4策略学习",[20037,43932,43934],{"id":43933},"_41概念描述","4.1.概念描述",[24,43936,43937],{},"用神经网络（策略网络）近似策略函数",[24,43939,43940],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[24,43942,43943],{},[37,43944],{"alt":39,"src":43945},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[24,43947,43948],{},[37,43949],{"alt":39,"src":43950},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[24,43952,43953],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[24,43955,43956],{},[37,43957],{"alt":39,"src":43958},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[24,43960,43961],{},[37,43962],{"alt":39,"src":43963},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[24,43965,43966],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[24,43968,43969],{},[37,43970],{"alt":39,"src":43971},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[24,43973,43974],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[24,43976,43977],{},[37,43978],{"alt":39,"src":43979},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[24,43981,43982],{},"改进theta要用到策略梯度算法",[24,43984,43985],{},[37,43986],{"alt":39,"src":43987},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[24,43989,43990],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[24,43992,43993],{},[37,43994],{"alt":39,"src":43995},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[24,43997,43998],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[24,44000,44001],{},[37,44002],{"alt":39,"src":44003},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[24,44005,44006],{},[37,44007],{"alt":39,"src":44008},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[24,44010,44011],{},"梯度公式总结：",[24,44013,44014],{},[37,44015],{"alt":39,"src":44016},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[24,44018,44019],{},"两个公式的分别应用场景：",[24,44021,44022],{},"对于离散的动作：",[24,44024,44025],{},[37,44026],{"alt":39,"src":44027},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[24,44029,44030],{},"对于连续的动作：",[24,44032,44033],{},[37,44034],{"alt":39,"src":44035},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[24,44037,44038],{},[37,44039],{"alt":39,"src":44040},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[20037,44042,44044],{"id":44043},"_42概率梯度算法总结","4.2.概率梯度算法总结",[24,44046,44047],{},"使用蒙特卡洛来近似计算策略梯度",[24,44049,44050],{},"蒙特卡洛法的解释如下：",[24,44052,44053],{},[37,44054],{"alt":39,"src":44055},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[24,44057,44058],{},[37,44059],{"alt":39,"src":44060},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[24,44062,44063],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[28,44065,44066],{},[31,44067,44068],{},"方法一：reinforce算法",[24,44070,44071],{},[37,44072],{"alt":39,"src":44073},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[24,44075,44076],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[28,44078,44079],{"start":46},[31,44080,44081],{},"方法二：actor-critic算法",[24,44083,44084],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[24,44086,44087],{},"两个网络的构建：",[24,44089,44090],{},[37,44091],{"alt":39,"src":44092},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[24,44094,44095],{},"actor网路：",[24,44097,44098],{},[37,44099],{"alt":39,"src":44100},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[24,44102,44103],{},"critic网络",[24,44105,44106],{},[37,44107],{"alt":39,"src":44108},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[28,44110,44111],{"start":121},[31,44112,44113],{},"网络的训练",[24,44115,44116],{},"网络描述",[24,44118,44119],{},[37,44120],{"alt":39,"src":44121},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[24,44123,44124],{},[37,44125],{"alt":39,"src":44126},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[24,44128,44129],{},"TD算法更新梯度：",[24,44131,44132],{},[37,44133],{"alt":39,"src":44134},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[24,44136,44137],{},"策略网络更新梯度：",[24,44139,44140],{},[37,44141],{"alt":39,"src":44142},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[24,44144,44145],{},"训练整个流程的具体描述：",[24,44147,44148,44151,44152],{},[37,44149],{"alt":39,"src":44150},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[37,44153],{"alt":39,"src":44154},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":39,"searchDepth":46,"depth":46,"links":44156},[44157,44158],{"id":43933,"depth":46,"text":43934},{"id":44043,"depth":46,"text":44044},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":43925,"description":39},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":44165,"title":44166,"body":44167,"description":44174,"extension":20021,"meta":44224,"navigation":216,"path":44225,"seo":44226,"stem":44227,"__hash__":44228},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":44168,"toc":44220},[44169,44172,44175,44179,44182,44187,44191,44194,44199,44202,44207,44212,44215],[10,44170,44166],{"id":44171},"_5alphago算法",[24,44173,44174],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[20037,44176,44178],{"id":44177},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[24,44180,44181],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[24,44183,44184],{},[37,44185],{"alt":39,"src":44186},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[20037,44188,44190],{"id":44189},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[24,44192,44193],{},"采用强化学习的方式训练策略网络",[24,44195,44196],{},[37,44197],{"alt":39,"src":44198},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[24,44200,44201],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[24,44203,44204],{},[37,44205],{"alt":39,"src":44206},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[24,44208,44209],{},[37,44210],{"alt":39,"src":44211},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[24,44213,44214],{},"强化学习训练策略网络的总结：",[24,44216,44217],{},[37,44218],{"alt":39,"src":44219},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":39,"searchDepth":46,"depth":46,"links":44221},[44222,44223],{"id":44177,"depth":46,"text":44178},{"id":44189,"depth":46,"text":44190},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":44166,"description":44174},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":44230,"title":44231,"body":44232,"description":44239,"extension":20021,"meta":44242,"navigation":216,"path":44243,"seo":44244,"stem":44245,"__hash__":44246},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":44233,"toc":44240},[44234,44237],[10,44235,44231],{"id":44236},"_6价值网络",[24,44238,44239],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":39,"searchDepth":46,"depth":46,"links":44241},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":44231,"description":44239},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":44248,"title":44249,"body":44250,"description":44254,"extension":20021,"meta":44255,"navigation":216,"path":44256,"seo":44257,"stem":44258,"__hash__":44259},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":44251,"toc":44252},[],{"title":39,"searchDepth":46,"depth":46,"links":44253},[],"记录自己的强化学习笔记。",{"category":43169},"\u002Fwiki\u002F2025-12-04",{"title":44249,"description":44254},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":44261,"title":44262,"body":44263,"description":20020,"extension":20021,"meta":44302,"navigation":216,"path":44303,"seo":44304,"stem":44305,"__hash__":44306},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":44264,"toc":44300},[44265,44268,44271,44277,44280,44286,44289,44294,44297],[10,44266,44262],{"id":44267},"_1-项目概览与官方资源",[24,44269,44270],{},"官方文档：",[24,44272,44273],{},[20318,44274,44275],{"href":44275,"rel":44276},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[43656],[24,44278,44279],{},"官方代码仓库：",[24,44281,44282],{},[20318,44283,44284],{"href":44284,"rel":44285},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[43656],[24,44287,44288],{},"复现大体流程：",[24,44290,44291],{},[37,44292],{"alt":39,"src":44293},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[24,44295,44296],{},"本教程的目标是打通这条链路：",[24,44298,44299],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":39,"searchDepth":46,"depth":46,"links":44301},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":44262,"description":20020},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":44308,"title":44309,"body":44310,"description":20020,"extension":20021,"meta":44426,"navigation":216,"path":44427,"seo":44428,"stem":44429,"__hash__":44430},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":44311,"toc":44421},[44312,44315,44319,44322,44329,44333,44336,44345,44355,44359,44389,44392,44418],[10,44313,44309],{"id":44314},"_2-环境准备与设备连接",[20037,44316,44318],{"id":44317},"_21-系统与环境","2.1 系统与环境",[24,44320,44321],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[24,44323,44324,44325,44328],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[152,44326,44327],{},"lerobot"," 依赖。",[20037,44330,44332],{"id":44331},"_22-机械臂串口识别","2.2 机械臂串口识别",[24,44334,44335],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[146,44337,44339],{"className":43613,"code":44338,"language":43615,"meta":39,"style":39},"lerobot-find-out\n",[152,44340,44341],{"__ignoreMap":39},[155,44342,44343],{"class":157,"line":158},[155,44344,44338],{"class":226},[24,44346,44347,44348,20293,44351,44354],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[152,44349,44350],{},"\u002Fdev\u002FttyACM0",[152,44352,44353],{},"\u002Fdev\u002FttyACM1","）。",[20037,44356,44358],{"id":44357},"_23-串口授权","2.3 串口授权",[146,44360,44362],{"className":43613,"code":44361,"language":43615,"meta":39,"style":39},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[152,44363,44364,44378],{"__ignoreMap":39},[155,44365,44366,44369,44372,44375],{"class":157,"line":158},[155,44367,44368],{"class":226},"sudo",[155,44370,44371],{"class":732}," chmod",[155,44373,44374],{"class":263}," 666",[155,44376,44377],{"class":732}," \u002Fdev\u002FttyACM0\n",[155,44379,44380,44382,44384,44386],{"class":157,"line":46},[155,44381,44368],{"class":226},[155,44383,44371],{"class":732},[155,44385,44374],{"class":263},[155,44387,44388],{"class":732}," \u002Fdev\u002FttyACM1\n",[24,44390,44391],{},"说明：",[21052,44393,44394,44399,44405,44415],{},[31,44395,44396,44398],{},[152,44397,44368],{},"：以 root 权限执行命令。",[31,44400,44401,44404],{},[152,44402,44403],{},"chmod","：修改设备节点权限。",[31,44406,44407,44410,44411,44414],{},[152,44408,44409],{},"666","：",[152,44412,44413],{},"rw-rw-rw-","，所有用户可读写。",[31,44416,44417],{},"串口号必须替换为你机器上的真实端口。",[20011,44419,44420],{},"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":39,"searchDepth":46,"depth":46,"links":44422},[44423,44424,44425],{"id":44317,"depth":46,"text":44318},{"id":44331,"depth":46,"text":44332},{"id":44357,"depth":46,"text":44358},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":44309,"description":20020},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":44432,"title":44433,"body":44434,"description":20020,"extension":20021,"meta":44595,"navigation":216,"path":44596,"seo":44597,"stem":44598,"__hash__":44599},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":44435,"toc":44591},[44436,44440,44444,44450,44453,44510,44513,44517,44520,44588],[10,44437,44439],{"id":44438},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[20037,44441,44443],{"id":44442},"_31-配置电机-id","3.1 配置电机 ID",[24,44445,44446,44447,44449],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[152,44448,329],{},"，需要改成机械臂链路里不冲突的编号。",[24,44451,44452],{},"方式一：用 LeRobot 命令逐步写入。",[146,44454,44456],{"className":43613,"code":44455,"language":43615,"meta":39,"style":39},"# 主臂舵机配置 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",[152,44457,44458,44463,44471,44478,44483,44487,44492,44498,44505],{"__ignoreMap":39},[155,44459,44460],{"class":157,"line":158},[155,44461,44462],{"class":161},"# 主臂舵机配置 ID\n",[155,44464,44465,44468],{"class":157,"line":46},[155,44466,44467],{"class":226},"lerobot-setup-motors",[155,44469,44470],{"class":263}," \\\n",[155,44472,44473,44476],{"class":157,"line":121},[155,44474,44475],{"class":263},"  --teleop.type=so101_leader",[155,44477,44470],{"class":263},[155,44479,44480],{"class":157,"line":180},[155,44481,44482],{"class":263},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[155,44484,44485],{"class":157,"line":194},[155,44486,217],{"emptyLinePlaceholder":216},[155,44488,44489],{"class":157,"line":200},[155,44490,44491],{"class":161},"# 从臂舵机配置 ID\n",[155,44493,44494,44496],{"class":157,"line":213},[155,44495,44467],{"class":226},[155,44497,44470],{"class":263},[155,44499,44500,44503],{"class":157,"line":220},[155,44501,44502],{"class":263},"  --robot.type=so101_follower",[155,44504,44470],{"class":263},[155,44506,44507],{"class":157,"line":245},[155,44508,44509],{"class":263},"  --robot.port=\u002Fdev\u002FttyACM1\n",[24,44511,44512],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[20037,44514,44516],{"id":44515},"_32-机械臂校准","3.2 机械臂校准",[24,44518,44519],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[146,44521,44523],{"className":43613,"code":44522,"language":43615,"meta":39,"style":39},"# 主臂校准\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",[152,44524,44525,44530,44537,44543,44550,44555,44559,44564,44570,44576,44583],{"__ignoreMap":39},[155,44526,44527],{"class":157,"line":158},[155,44528,44529],{"class":161},"# 主臂校准\n",[155,44531,44532,44535],{"class":157,"line":46},[155,44533,44534],{"class":226},"lerobot-calibrate",[155,44536,44470],{"class":263},[155,44538,44539,44541],{"class":157,"line":121},[155,44540,44475],{"class":263},[155,44542,44470],{"class":263},[155,44544,44545,44548],{"class":157,"line":180},[155,44546,44547],{"class":263},"  --teleop.port=\u002Fdev\u002FttyACM0",[155,44549,44470],{"class":263},[155,44551,44552],{"class":157,"line":194},[155,44553,44554],{"class":263},"  --teleop.id=my_awesome_leader_arm\n",[155,44556,44557],{"class":157,"line":200},[155,44558,217],{"emptyLinePlaceholder":216},[155,44560,44561],{"class":157,"line":213},[155,44562,44563],{"class":161},"# 从臂校准\n",[155,44565,44566,44568],{"class":157,"line":220},[155,44567,44534],{"class":226},[155,44569,44470],{"class":263},[155,44571,44572,44574],{"class":157,"line":245},[155,44573,44502],{"class":263},[155,44575,44470],{"class":263},[155,44577,44578,44581],{"class":157,"line":251},[155,44579,44580],{"class":263},"  --robot.port=\u002Fdev\u002FttyACM1",[155,44582,44470],{"class":263},[155,44584,44585],{"class":157,"line":257},[155,44586,44587],{"class":263},"  --robot.id=my_awesome_follower_arm\n",[20011,44589,44590],{},"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":39,"searchDepth":46,"depth":46,"links":44592},[44593,44594],{"id":44442,"depth":46,"text":44443},{"id":44515,"depth":46,"text":44516},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":44433,"description":20020},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":44601,"title":44602,"body":44603,"description":20020,"extension":20021,"meta":44794,"navigation":216,"path":44795,"seo":44796,"stem":44797,"__hash__":44798},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":44604,"toc":44790},[44605,44608,44612,44659,44663,44676,44739,44742,44787],[10,44606,44602],{"id":44607},"_4-遥操与相机接入",[20037,44609,44611],{"id":44610},"_41-不带相机遥操","4.1 不带相机遥操",[146,44613,44615],{"className":43613,"code":44614,"language":43615,"meta":39,"style":39},"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",[152,44616,44617,44624,44630,44636,44643,44649,44655],{"__ignoreMap":39},[155,44618,44619,44622],{"class":157,"line":158},[155,44620,44621],{"class":226},"lerobot-teleoperate",[155,44623,44470],{"class":263},[155,44625,44626,44628],{"class":157,"line":46},[155,44627,44502],{"class":263},[155,44629,44470],{"class":263},[155,44631,44632,44634],{"class":157,"line":121},[155,44633,44580],{"class":263},[155,44635,44470],{"class":263},[155,44637,44638,44641],{"class":157,"line":180},[155,44639,44640],{"class":263},"  --robot.id=my_awesome_follower_arm",[155,44642,44470],{"class":263},[155,44644,44645,44647],{"class":157,"line":194},[155,44646,44475],{"class":263},[155,44648,44470],{"class":263},[155,44650,44651,44653],{"class":157,"line":200},[155,44652,44547],{"class":263},[155,44654,44470],{"class":263},[155,44656,44657],{"class":157,"line":213},[155,44658,44554],{"class":263},[20037,44660,44662],{"id":44661},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[146,44664,44666],{"className":43613,"code":44665,"language":43615,"meta":39,"style":39},"lerobot-find-cameras opencv\n",[152,44667,44668],{"__ignoreMap":39},[155,44669,44670,44673],{"class":157,"line":158},[155,44671,44672],{"class":226},"lerobot-find-cameras",[155,44674,44675],{"class":732}," opencv\n",[146,44677,44679],{"className":43613,"code":44678,"language":43615,"meta":39,"style":39},"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",[152,44680,44681,44687,44693,44699,44705,44715,44721,44727,44734],{"__ignoreMap":39},[155,44682,44683,44685],{"class":157,"line":158},[155,44684,44621],{"class":226},[155,44686,44470],{"class":263},[155,44688,44689,44691],{"class":157,"line":46},[155,44690,44502],{"class":263},[155,44692,44470],{"class":263},[155,44694,44695,44697],{"class":157,"line":121},[155,44696,44580],{"class":263},[155,44698,44470],{"class":263},[155,44700,44701,44703],{"class":157,"line":180},[155,44702,44640],{"class":263},[155,44704,44470],{"class":263},[155,44706,44707,44710,44713],{"class":157,"line":194},[155,44708,44709],{"class":263},"  --robot.cameras=",[155,44711,44712],{"class":732},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[155,44714,44470],{"class":263},[155,44716,44717,44719],{"class":157,"line":200},[155,44718,44475],{"class":263},[155,44720,44470],{"class":263},[155,44722,44723,44725],{"class":157,"line":213},[155,44724,44547],{"class":263},[155,44726,44470],{"class":263},[155,44728,44729,44732],{"class":157,"line":220},[155,44730,44731],{"class":263},"  --teleop.id=my_awesome_leader_arm",[155,44733,44470],{"class":263},[155,44735,44736],{"class":157,"line":245},[155,44737,44738],{"class":263},"  --display_data=true\n",[24,44740,44741],{},"相机参数说明：",[21052,44743,44744,44750,44756,44765,44775,44781],{},[31,44745,44746,44749],{},[152,44747,44748],{},"front","：相机名称。",[31,44751,44752,44755],{},[152,44753,44754],{},"type: opencv","：相机驱动类型。",[31,44757,44758,44761,44762,44354],{},[152,44759,44760],{},"index_or_path","：设备编号或设备路径（如 ",[152,44763,44764],{},"\u002Fdev\u002Fvideo4",[31,44766,44767,44770,44771,44774],{},[152,44768,44769],{},"width"," \u002F ",[152,44772,44773],{},"height","：图像分辨率。",[31,44776,44777,44780],{},[152,44778,44779],{},"fps","：采样帧率。",[31,44782,44783,44786],{},[152,44784,44785],{},"--display_data=true","：启用实时可视化。",[20011,44788,44789],{},"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":39,"searchDepth":46,"depth":46,"links":44791},[44792,44793],{"id":44610,"depth":46,"text":44611},{"id":44661,"depth":46,"text":44662},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":44602,"description":20020},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":44800,"title":44801,"body":44802,"description":20020,"extension":20021,"meta":44972,"navigation":216,"path":44973,"seo":44974,"stem":44975,"__hash__":44976},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":44803,"toc":44967},[44804,44808,44812,44817,44822,44825,44867,44873,44877,44924,44929,44933,44936,44944,44949,44954,44959,44964],[10,44805,44807],{"id":44806},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[20037,44809,44811],{"id":44810},"_51-生成访问令牌","5.1 生成访问令牌",[24,44813,44814],{},[37,44815],{"alt":39,"src":44816},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[24,44818,44819],{},[37,44820],{"alt":39,"src":44821},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[24,44823,44824],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[146,44826,44828],{"className":43613,"code":44827,"language":43615,"meta":39,"style":39},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[152,44829,44830,44843],{"__ignoreMap":39},[155,44831,44832,44835,44838,44840],{"class":157,"line":158},[155,44833,44834],{"class":167},"export",[155,44836,44837],{"class":171}," HF_TOKEN",[155,44839,317],{"class":167},[155,44841,44842],{"class":732},"\"your_huggingface_token\"\n",[155,44844,44845,44848,44851,44854,44857,44859,44862,44864],{"class":157,"line":46},[155,44846,44847],{"class":226},"hf",[155,44849,44850],{"class":732}," auth",[155,44852,44853],{"class":732}," login",[155,44855,44856],{"class":263}," --token",[155,44858,29571],{"class":732},[155,44860,44861],{"class":171},"$HF_TOKEN",[155,44863,2033],{"class":732},[155,44865,44866],{"class":263}," --add-to-git-credential\n",[24,44868,44869,44872],{},[152,44870,44871],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[20037,44874,44876],{"id":44875},"_52-验证登录","5.2 验证登录",[146,44878,44880],{"className":43613,"code":44879,"language":43615,"meta":39,"style":39},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[152,44881,44882,44912],{"__ignoreMap":39},[155,44883,44884,44887,44889,44892,44894,44896,44899,44902,44905,44908,44910],{"class":157,"line":158},[155,44885,44886],{"class":171},"HF_USER",[155,44888,317],{"class":167},[155,44890,44891],{"class":171},"$(",[155,44893,44847],{"class":226},[155,44895,44850],{"class":732},[155,44897,44898],{"class":732}," whoami",[155,44900,44901],{"class":167}," |",[155,44903,44904],{"class":226}," head",[155,44906,44907],{"class":263}," -n",[155,44909,1277],{"class":263},[155,44911,363],{"class":171},[155,44913,44914,44917,44919,44922],{"class":157,"line":46},[155,44915,44916],{"class":263},"echo",[155,44918,29571],{"class":732},[155,44920,44921],{"class":171},"$HF_USER",[155,44923,17610],{"class":732},[24,44925,44926],{},[37,44927],{"alt":39,"src":44928},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[20037,44930,44932],{"id":44931},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[24,44934,44935],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[21052,44937,44938,44941],{},[31,44939,44940],{},"Dataset Repo（用于上传演示数据）",[31,44942,44943],{},"Model Repo（用于上传训练后的 ACT 权重）",[24,44945,44946],{},[37,44947],{"alt":39,"src":44948},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[24,44950,44951],{},[37,44952],{"alt":39,"src":44953},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[24,44955,44956],{},[37,44957],{"alt":39,"src":44958},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[24,44960,44961],{},[37,44962],{"alt":39,"src":44963},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[20011,44965,44966],{},"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":39,"searchDepth":46,"depth":46,"links":44968},[44969,44970,44971],{"id":44810,"depth":46,"text":44811},{"id":44875,"depth":46,"text":44876},{"id":44931,"depth":46,"text":44932},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":44801,"description":20020},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":44978,"title":44979,"body":44980,"description":20020,"extension":20021,"meta":45177,"navigation":216,"path":45178,"seo":45179,"stem":45180,"__hash__":45181},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":44981,"toc":45172},[44982,44986,44990,45086,45094,45099,45103,45119,45122,45126,45169],[10,44983,44985],{"id":44984},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[20037,44987,44989],{"id":44988},"_61-录制示教数据","6.1 录制示教数据",[146,44991,44993],{"className":43613,"code":44992,"language":43615,"meta":39,"style":39},"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",[152,44994,44995,45002,45008,45014,45020,45029,45035,45041,45047,45054,45064,45071,45081],{"__ignoreMap":39},[155,44996,44997,45000],{"class":157,"line":158},[155,44998,44999],{"class":226},"lerobot-record",[155,45001,44470],{"class":263},[155,45003,45004,45006],{"class":157,"line":46},[155,45005,44502],{"class":263},[155,45007,44470],{"class":263},[155,45009,45010,45012],{"class":157,"line":121},[155,45011,44580],{"class":263},[155,45013,44470],{"class":263},[155,45015,45016,45018],{"class":157,"line":180},[155,45017,44640],{"class":263},[155,45019,44470],{"class":263},[155,45021,45022,45024,45027],{"class":157,"line":194},[155,45023,44709],{"class":263},[155,45025,45026],{"class":732},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[155,45028,44470],{"class":263},[155,45030,45031,45033],{"class":157,"line":200},[155,45032,44475],{"class":263},[155,45034,44470],{"class":263},[155,45036,45037,45039],{"class":157,"line":213},[155,45038,44547],{"class":263},[155,45040,44470],{"class":263},[155,45042,45043,45045],{"class":157,"line":220},[155,45044,44731],{"class":263},[155,45046,44470],{"class":263},[155,45048,45049,45052],{"class":157,"line":245},[155,45050,45051],{"class":263},"  --display_data=true",[155,45053,44470],{"class":263},[155,45055,45056,45059,45062],{"class":157,"line":251},[155,45057,45058],{"class":263},"  --dataset.repo_id=",[155,45060,45061],{"class":732},"\"Embodied-AI-6\u002Fso101_test\"",[155,45063,44470],{"class":263},[155,45065,45066,45069],{"class":157,"line":257},[155,45067,45068],{"class":263},"  --dataset.num_episodes=10",[155,45070,44470],{"class":263},[155,45072,45073,45076,45079],{"class":157,"line":270},[155,45074,45075],{"class":263},"  --dataset.single_task=",[155,45077,45078],{"class":732},"\"Grab the green cube\"",[155,45080,44470],{"class":263},[155,45082,45083],{"class":157,"line":276},[155,45084,45085],{"class":263},"  --resume=true\n",[21052,45087,45088],{},[31,45089,45090,45093],{},[152,45091,45092],{},"--resume=true","：已有同一数据集时继续追加 episode。",[24,45095,45096],{},[37,45097],{"alt":39,"src":45098},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[20037,45100,45102],{"id":45101},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[146,45104,45106],{"className":43613,"code":45105,"language":43615,"meta":39,"style":39},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[152,45107,45108],{"__ignoreMap":39},[155,45109,45110,45113,45116],{"class":157,"line":158},[155,45111,45112],{"class":226},"rm",[155,45114,45115],{"class":263}," -rf",[155,45117,45118],{"class":732}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[24,45120,45121],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[20037,45123,45125],{"id":45124},"_63-回放指定-episode","6.3 回放指定 episode",[146,45127,45129],{"className":43613,"code":45128,"language":43615,"meta":39,"style":39},"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",[152,45130,45131,45138,45144,45150,45156,45164],{"__ignoreMap":39},[155,45132,45133,45136],{"class":157,"line":158},[155,45134,45135],{"class":226},"lerobot-replay",[155,45137,44470],{"class":263},[155,45139,45140,45142],{"class":157,"line":46},[155,45141,44502],{"class":263},[155,45143,44470],{"class":263},[155,45145,45146,45148],{"class":157,"line":121},[155,45147,44580],{"class":263},[155,45149,44470],{"class":263},[155,45151,45152,45154],{"class":157,"line":180},[155,45153,44640],{"class":263},[155,45155,44470],{"class":263},[155,45157,45158,45160,45162],{"class":157,"line":194},[155,45159,45058],{"class":263},[155,45161,45061],{"class":732},[155,45163,44470],{"class":263},[155,45165,45166],{"class":157,"line":200},[155,45167,45168],{"class":263},"  --dataset.episode=0\n",[20011,45170,45171],{},"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":39,"searchDepth":46,"depth":46,"links":45173},[45174,45175,45176],{"id":44988,"depth":46,"text":44989},{"id":45101,"depth":46,"text":45102},{"id":45124,"depth":46,"text":45125},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":44979,"description":20020},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":45183,"title":45184,"body":45185,"description":20020,"extension":20021,"meta":45313,"navigation":216,"path":45314,"seo":45315,"stem":45316,"__hash__":45317},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":45186,"toc":45311},[45187,45191,45254,45257,45304,45309],[10,45188,45190],{"id":45189},"_7-act-模型训练","7. ACT 模型训练",[146,45192,45194],{"className":43613,"code":45193,"language":43615,"meta":39,"style":39},"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",[152,45195,45196,45203,45211,45218,45225,45232,45239,45246],{"__ignoreMap":39},[155,45197,45198,45201],{"class":157,"line":158},[155,45199,45200],{"class":226},"lerobot-train",[155,45202,44470],{"class":263},[155,45204,45205,45207,45209],{"class":157,"line":46},[155,45206,45058],{"class":263},[155,45208,45061],{"class":732},[155,45210,44470],{"class":263},[155,45212,45213,45216],{"class":157,"line":121},[155,45214,45215],{"class":263},"  --policy.type=act",[155,45217,44470],{"class":263},[155,45219,45220,45223],{"class":157,"line":180},[155,45221,45222],{"class":263},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[155,45224,44470],{"class":263},[155,45226,45227,45230],{"class":157,"line":194},[155,45228,45229],{"class":263},"  --job_name=act_so101_test",[155,45231,44470],{"class":263},[155,45233,45234,45237],{"class":157,"line":200},[155,45235,45236],{"class":263},"  --policy.device=cuda",[155,45238,44470],{"class":263},[155,45240,45241,45244],{"class":157,"line":213},[155,45242,45243],{"class":263},"  --wandb.enable=false",[155,45245,44470],{"class":263},[155,45247,45248,45251],{"class":157,"line":220},[155,45249,45250],{"class":263},"  --policy.repo_id=",[155,45252,45253],{"class":732},"\"Embodied-AI-6\u002Flerobot_new\"\n",[24,45255,45256],{},"参数说明：",[21052,45258,45259,45265,45271,45277,45283,45292,45298],{},[31,45260,45261,45264],{},[152,45262,45263],{},"--dataset.repo_id","：训练数据集仓库。",[31,45266,45267,45270],{},[152,45268,45269],{},"--policy.type=act","：策略模型类型为 ACT。",[31,45272,45273,45276],{},[152,45274,45275],{},"--output_dir","：本地训练输出目录。",[31,45278,45279,45282],{},[152,45280,45281],{},"--job_name","：训练任务名称。",[31,45284,45285,45288,45289,44354],{},[152,45286,45287],{},"--policy.device","：训练设备（如 ",[152,45290,45291],{},"cuda",[31,45293,45294,45297],{},[152,45295,45296],{},"--wandb.enable","：是否启用 WandB 可视化。",[31,45299,45300,45303],{},[152,45301,45302],{},"--policy.repo_id","：训练后模型推送目标仓库。",[24,45305,45306],{},[37,45307],{"alt":39,"src":45308},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[20011,45310,45171],{},{"title":39,"searchDepth":46,"depth":46,"links":45312},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":45184,"description":20020},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":45319,"title":45320,"body":45321,"description":20020,"extension":20021,"meta":45408,"navigation":216,"path":45409,"seo":45410,"stem":45411,"__hash__":45412},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":45322,"toc":45406},[45323,45326,45329,45396,45404],[10,45324,45320],{"id":45325},"_8-策略部署与自动采集",[24,45327,45328],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[146,45330,45332],{"className":43613,"code":45331,"language":43615,"meta":39,"style":39},"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",[152,45333,45334,45340,45346,45352,45360,45366,45373,45381,45389],{"__ignoreMap":39},[155,45335,45336,45338],{"class":157,"line":158},[155,45337,44999],{"class":226},[155,45339,44470],{"class":263},[155,45341,45342,45344],{"class":157,"line":46},[155,45343,44502],{"class":263},[155,45345,44470],{"class":263},[155,45347,45348,45350],{"class":157,"line":121},[155,45349,44580],{"class":263},[155,45351,44470],{"class":263},[155,45353,45354,45356,45358],{"class":157,"line":180},[155,45355,44709],{"class":263},[155,45357,45026],{"class":732},[155,45359,44470],{"class":263},[155,45361,45362,45364],{"class":157,"line":194},[155,45363,44640],{"class":263},[155,45365,44470],{"class":263},[155,45367,45368,45371],{"class":157,"line":200},[155,45369,45370],{"class":263},"  --display_data=false",[155,45372,44470],{"class":263},[155,45374,45375,45377,45379],{"class":157,"line":213},[155,45376,45058],{"class":263},[155,45378,45061],{"class":732},[155,45380,44470],{"class":263},[155,45382,45383,45385,45387],{"class":157,"line":220},[155,45384,45075],{"class":263},[155,45386,45078],{"class":732},[155,45388,44470],{"class":263},[155,45390,45391,45394],{"class":157,"line":245},[155,45392,45393],{"class":263},"  --policy.path=",[155,45395,45253],{"class":732},[21052,45397,45398],{},[31,45399,45400,45403],{},[152,45401,45402],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[20011,45405,45171],{},{"title":39,"searchDepth":46,"depth":46,"links":45407},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":45320,"description":20020},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":45414,"title":45415,"body":45416,"description":20020,"extension":20021,"meta":45445,"navigation":216,"path":45446,"seo":45447,"stem":45448,"__hash__":45449},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":45417,"toc":45443},[45418,45422,45425,45431,45434,45440],[10,45419,45421],{"id":45420},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[24,45423,45424],{},"项目地址：",[24,45426,45427],{},[20318,45428,45429],{"href":45429,"rel":45430},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[43656],[24,45432,45433],{},"参考教程：",[24,45435,45436],{},[20318,45437,45438],{"href":45438,"rel":45439},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[43656],[24,45441,45442],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":39,"searchDepth":46,"depth":46,"links":45444},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":45415,"description":20020},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":45451,"title":45452,"body":45453,"description":45457,"extension":20021,"meta":45458,"navigation":216,"path":45459,"seo":45460,"stem":45461,"__hash__":45462},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":45454,"toc":45455},[],{"title":39,"searchDepth":46,"depth":46,"links":45456},[],"act复现",{"category":43169},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":45452,"description":45457},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":45464,"title":45465,"body":45466,"description":39,"extension":20021,"meta":45768,"navigation":216,"path":45769,"seo":45770,"stem":45771,"__hash__":45772},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":45467,"toc":45760},[45468,45471,45475,45485,45492,45499,45502,45509,45512,45515,45519,45531,45535,45581,45584,45587,45590,45593,45596,45600,45638,45644,45648,45702,45707,45710,45713,45718,45721,45726,45729,45732,45736,45739,45742,45746],[10,45469,45465],{"id":45470},"_1简介",[14,45472,45474],{"id":45473},"_11什么是-docker","1.1什么是 Docker？",[24,45476,45477,45478,45481,45482],{},"Docker 是一个开源的 ",[20234,45479,45480],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[20234,45483,45484],{},"一次构建，到处运行。",[24,45486,45487,45488,45491],{},"“ ",[20234,45489,45490],{},"一次构建，到处运行"," ”也就是说：",[28,45493,45494],{},[31,45495,45496],{},[20234,45497,45498],{},"之前：",[24,45500,45501],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[28,45503,45504],{},[31,45505,45506],{},[20234,45507,45508],{},"使用docker后：",[24,45510,45511],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[24,45513,45514],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[14,45516,45518],{"id":45517},"_12它是怎么工作的","1.2.它是怎么工作的？",[21052,45520,45521,45524],{},[31,45522,45523],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[31,45525,45526,45527,45530],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[20234,45528,45529],{},"无论在哪运行都一样稳定"," 。",[14,45532,45534],{"id":45533},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[20222,45536,45537,45547],{},[20225,45538,45539],{},[20228,45540,45541,45544],{},[20231,45542,45543],{"align":43527},"概念",[20231,45545,45546],{"align":43527},"解释",[20269,45548,45549,45557,45565,45573],{},[20228,45550,45551,45554],{},[20274,45552,45553],{"align":43527},"镜像",[20274,45555,45556],{"align":43527},"Image，运行容器的模板，像是一个应用快照",[20228,45558,45559,45562],{},[20274,45560,45561],{"align":43527},"容器",[20274,45563,45564],{"align":43527},"Container，运行中的镜像实例，有自己的文件系统、网络等",[20228,45566,45567,45570],{},[20274,45568,45569],{"align":43527},"Dockerfile",[20274,45571,45572],{"align":43527},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[20228,45574,45575,45578],{},[20274,45576,45577],{"align":43527},"仓库",[20274,45579,45580],{"align":43527},"Registry，存放镜像的地方，比如 Docker Hub",[24,45582,45583],{},"抽象化理解:",[24,45585,45586],{},"Docker镜像≈C++类",[24,45588,45589],{},"Docker容器≈C++类实例(即对象)",[24,45591,45592],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[24,45594,45595],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[14,45597,45599],{"id":45598},"_14类比理解","1.4.类比理解",[20222,45601,45602,45612],{},[20225,45603,45604],{},[20228,45605,45606,45609],{},[20231,45607,45608],{"align":43527},"传统部署",[20231,45610,45611],{"align":43527},"Docker部署",[20269,45613,45614,45622,45630],{},[20228,45615,45616,45619],{},[20274,45617,45618],{"align":43527},"手动安装依赖、调试版本不一致问题",[20274,45620,45621],{"align":43527},"一次打包环境和代码",[20228,45623,45624,45627],{},[20274,45625,45626],{"align":43527},"程序“裸奔”跑在系统上",[20274,45628,45629],{"align":43527},"程序“穿着容器”隔离运行",[20228,45631,45632,45635],{},[20274,45633,45634],{"align":43527},"容易“在我电脑上能跑”",[20274,45636,45637],{"align":43527},"保证“无论在哪都能跑”",[24,45639,45640,45641],{},"就像快递包裹： ",[20234,45642,45643],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[14,45645,45647],{"id":45646},"_15docker-的核心优势","1.5.Docker 的核心优势",[20222,45649,45650,45660],{},[20225,45651,45652],{},[20228,45653,45654,45657],{},[20231,45655,45656],{"align":43527},"优势",[20231,45658,45659],{"align":43527},"说明",[20269,45661,45662,45670,45678,45686,45694],{},[20228,45663,45664,45667],{},[20274,45665,45666],{"align":43527},"轻量级",[20274,45668,45669],{"align":43527},"基于系统内核共享，启动速度快，占资源少",[20228,45671,45672,45675],{},[20274,45673,45674],{"align":43527},"跨平台",[20274,45676,45677],{"align":43527},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[20228,45679,45680,45683],{},[20274,45681,45682],{"align":43527},"易于迁移部署",[20274,45684,45685],{"align":43527},"应用和环境一起封装，不怕依赖不一致",[20228,45687,45688,45691],{},[20274,45689,45690],{"align":43527},"易于版本控制",[20274,45692,45693],{"align":43527},"镜像版本可控，支持回滚",[20228,45695,45696,45699],{},[20274,45697,45698],{"align":43527},"生态丰富",[20274,45700,45701],{"align":43527},"Docker Hub 上有成千上万的现成镜像可用",[28,45703,45704],{},[31,45705,45706],{},"在Linux上可以几乎实现无性能损失。",[24,45708,45709],{},"docker里的发行版和本机共用Linux内核。",[24,45711,45712],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[28,45714,45715],{},[31,45716,45717],{},"可以快速部署在绝大多数Linux发行版",[24,45719,45720],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[28,45722,45723],{},[31,45724,45725],{},"配置环境简单",[24,45727,45728],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[24,45730,45731],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[28,45733,45734],{},[31,45735,45698],{},[24,45737,45738],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[24,45740,45741],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[14,45743,45745],{"id":45744},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[21052,45747,45748,45751,45754,45757],{},[31,45749,45750],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[31,45752,45753],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[31,45755,45756],{},"微服务架构：每个服务一个容器，灵活组合",[31,45758,45759],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":39,"searchDepth":46,"depth":46,"links":45761},[45762,45763,45764,45765,45766,45767],{"id":45473,"depth":121,"text":45474},{"id":45517,"depth":121,"text":45518},{"id":45533,"depth":121,"text":45534},{"id":45598,"depth":121,"text":45599},{"id":45646,"depth":121,"text":45647},{"id":45744,"depth":121,"text":45745},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":45465,"description":39},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":45774,"title":45775,"body":45776,"description":39,"extension":20021,"meta":46508,"navigation":216,"path":46509,"seo":46510,"stem":46511,"__hash__":46512},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":45777,"toc":46503},[45778,45781,45785,45788,45791,45797,45803,45807,45816,45819,45875,45878,45929,45932,46015,46018,46055,46059,46070,46083,46090,46093,46173,46176,46226,46229,46252,46256,46263,46266,46282,46288,46291,46307,46313,46316,46332,46346,46352,46372,46378,46381,46393,46399,46402,46416,46422,46425,46445,46450,46453,46456,46460,46463,46466,46469,46476,46479,46482,46485,46490,46495,46500],[10,45779,45775],{"id":45780},"_2安装docker",[14,45782,45784],{"id":45783},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[24,45786,45787],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[24,45789,45790],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[24,45792,45793],{},[20318,45794,45795],{"href":45795,"rel":45796},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[43656],[24,45798,45799],{},[20318,45800,45801],{"href":45801,"rel":45802},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[43656],[19,45804,45806],{"id":45805},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[24,45808,45809,45810,45815],{},"以下内容根据 ",[20318,45811,45814],{"href":45812,"rel":45813},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[43656],"官方文档"," 修改而来。",[24,45817,45818],{},"如果你过去安装过 docker，先删掉：",[146,45820,45822],{"className":43613,"code":45821,"language":43615,"meta":39,"style":39},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[152,45823,45824],{"__ignoreMap":39},[155,45825,45826,45828,45831,45833,45836,45839,45842,45845,45848,45851,45854,45857,45860,45863,45866,45869,45872],{"class":157,"line":158},[155,45827,1125],{"class":167},[155,45829,45830],{"class":171}," pkg ",[155,45832,1131],{"class":167},[155,45834,45835],{"class":732}," docker.io",[155,45837,45838],{"class":732}," docker-doc",[155,45840,45841],{"class":732}," docker-compose",[155,45843,45844],{"class":732}," docker-compose-v2",[155,45846,45847],{"class":732}," podman-docker",[155,45849,45850],{"class":732}," containerd",[155,45852,45853],{"class":732}," runc",[155,45855,45856],{"class":171},"; ",[155,45858,45859],{"class":167},"do",[155,45861,45862],{"class":226}," sudo",[155,45864,45865],{"class":732}," apt-get",[155,45867,45868],{"class":732}," remove",[155,45870,45871],{"class":171}," $pkg; ",[155,45873,45874],{"class":167},"done\n",[24,45876,45877],{},"首先安装依赖和GPG：",[146,45879,45883],{"className":45880,"code":45881,"language":45882,"meta":39,"style":39},"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",[152,45884,45885,45890,45895,45900,45905,45910,45915,45919,45924],{"__ignoreMap":39},[155,45886,45887],{"class":157,"line":158},[155,45888,45889],{},"# Add Docker's official GPG key:\n",[155,45891,45892],{"class":157,"line":46},[155,45893,45894],{},"sudo apt-get update\n",[155,45896,45897],{"class":157,"line":121},[155,45898,45899],{},"sudo apt-get install ca-certificates curl\n",[155,45901,45902],{"class":157,"line":180},[155,45903,45904],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[155,45906,45907],{"class":157,"line":194},[155,45908,45909],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[155,45911,45912],{"class":157,"line":200},[155,45913,45914],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[155,45916,45917],{"class":157,"line":213},[155,45918,217],{"emptyLinePlaceholder":216},[155,45920,45921],{"class":157,"line":220},[155,45922,45923],{},"# 如果上面这行报错就弄下面这行\n",[155,45925,45926],{"class":157,"line":245},[155,45927,45928],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[24,45930,45931],{},"信任 Docker 的 GPG 公钥并添加仓库：",[146,45933,45935],{"className":43613,"code":45934,"language":43615,"meta":39,"style":39},"# 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",[152,45936,45937,45942,45948,45965,45998],{"__ignoreMap":39},[155,45938,45939],{"class":157,"line":158},[155,45940,45941],{"class":161},"# Add the repository to Apt sources:\n",[155,45943,45944,45946],{"class":157,"line":46},[155,45945,44916],{"class":263},[155,45947,44470],{"class":263},[155,45949,45950,45953,45956,45959,45962],{"class":157,"line":121},[155,45951,45952],{"class":732},"  \"deb [arch=$(",[155,45954,45955],{"class":226},"dpkg",[155,45957,45958],{"class":263}," --print-architecture",[155,45960,45961],{"class":732},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[155,45963,45964],{"class":263},"\\\n",[155,45966,45967,45970,45972,45974,45977,45980,45982,45984,45987,45989,45991,45994,45996],{"class":157,"line":180},[155,45968,45969],{"class":732},"  \"",[155,45971,44891],{"class":171},[155,45973,236],{"class":263},[155,45975,45976],{"class":732}," \u002Fetc\u002Fos-release",[155,45978,45979],{"class":171}," && ",[155,45981,44916],{"class":263},[155,45983,29571],{"class":732},[155,45985,45986],{"class":171},"$VERSION_CODENAME",[155,45988,2033],{"class":732},[155,45990,20501],{"class":171},[155,45992,45993],{"class":732},"\" stable\"",[155,45995,44901],{"class":167},[155,45997,44470],{"class":263},[155,45999,46000,46003,46006,46009,46012],{"class":157,"line":194},[155,46001,46002],{"class":226},"  sudo",[155,46004,46005],{"class":732}," tee",[155,46007,46008],{"class":732}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[155,46010,46011],{"class":167}," >",[155,46013,46014],{"class":732}," \u002Fdev\u002Fnull\n",[24,46016,46017],{},"最后安装",[146,46019,46021],{"className":43613,"code":46020,"language":43615,"meta":39,"style":39},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[152,46022,46023,46032],{"__ignoreMap":39},[155,46024,46025,46027,46029],{"class":157,"line":158},[155,46026,44368],{"class":226},[155,46028,45865],{"class":732},[155,46030,46031],{"class":732}," update\n",[155,46033,46034,46036,46038,46040,46043,46046,46049,46052],{"class":157,"line":46},[155,46035,44368],{"class":226},[155,46037,45865],{"class":732},[155,46039,43625],{"class":732},[155,46041,46042],{"class":732}," docker-ce",[155,46044,46045],{"class":732}," docker-ce-cli",[155,46047,46048],{"class":732}," containerd.io",[155,46050,46051],{"class":732}," docker-buildx-plugin",[155,46053,46054],{"class":732}," docker-compose-plugin\n",[19,46056,46058],{"id":46057},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[24,46060,46061,46062,46065,46066,46069],{},"查看自己自己包管理工具版本（dnf是 ",[20234,46063,46064],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[20234,46067,46068],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[146,46071,46073],{"className":43613,"code":46072,"language":43615,"meta":39,"style":39},"dnf --version\n",[152,46074,46075],{"__ignoreMap":39},[155,46076,46077,46080],{"class":157,"line":158},[155,46078,46079],{"class":226},"dnf",[155,46081,46082],{"class":263}," --version\n",[24,46084,45809,46085,46089],{},[20318,46086,45814],{"href":46087,"rel":46088},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[43656]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[24,46091,46092],{},"如果你之前安装过 docker，请先删掉",[146,46094,46096],{"className":43613,"code":46095,"language":43615,"meta":39,"style":39},"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",[152,46097,46098,46112,46119,46126,46133,46140,46147,46154,46161,46168],{"__ignoreMap":39},[155,46099,46100,46102,46105,46107,46110],{"class":157,"line":158},[155,46101,44368],{"class":226},[155,46103,46104],{"class":732}," dnf",[155,46106,45868],{"class":732},[155,46108,46109],{"class":732}," docker",[155,46111,44470],{"class":263},[155,46113,46114,46117],{"class":157,"line":46},[155,46115,46116],{"class":732},"                  docker-client",[155,46118,44470],{"class":263},[155,46120,46121,46124],{"class":157,"line":121},[155,46122,46123],{"class":732},"                  docker-client-latest",[155,46125,44470],{"class":263},[155,46127,46128,46131],{"class":157,"line":180},[155,46129,46130],{"class":732},"                  docker-common",[155,46132,44470],{"class":263},[155,46134,46135,46138],{"class":157,"line":194},[155,46136,46137],{"class":732},"                  docker-latest",[155,46139,44470],{"class":263},[155,46141,46142,46145],{"class":157,"line":200},[155,46143,46144],{"class":732},"                  docker-latest-logrotate",[155,46146,44470],{"class":263},[155,46148,46149,46152],{"class":157,"line":213},[155,46150,46151],{"class":732},"                  docker-logrotate",[155,46153,44470],{"class":263},[155,46155,46156,46159],{"class":157,"line":220},[155,46157,46158],{"class":732},"                  docker-selinux",[155,46160,44470],{"class":263},[155,46162,46163,46166],{"class":157,"line":245},[155,46164,46165],{"class":732},"                  docker-engine-selinux",[155,46167,44470],{"class":263},[155,46169,46170],{"class":157,"line":251},[155,46171,46172],{"class":732},"                  docker-engine\n",[24,46174,46175],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[146,46177,46179],{"className":43613,"code":46178,"language":43615,"meta":39,"style":39},"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",[152,46180,46181,46195,46210],{"__ignoreMap":39},[155,46182,46183,46185,46187,46190,46192],{"class":157,"line":158},[155,46184,44368],{"class":226},[155,46186,46104],{"class":732},[155,46188,46189],{"class":263}," -y",[155,46191,43625],{"class":732},[155,46193,46194],{"class":732}," dnf-plugins-core\n",[155,46196,46197,46199,46201,46204,46207],{"class":157,"line":46},[155,46198,44368],{"class":226},[155,46200,46104],{"class":732},[155,46202,46203],{"class":732}," config-manager",[155,46205,46206],{"class":732}," addrepo",[155,46208,46209],{"class":263}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[155,46211,46212,46214,46217,46220,46223],{"class":157,"line":121},[155,46213,44368],{"class":226},[155,46215,46216],{"class":732}," sed",[155,46218,46219],{"class":263}," -i",[155,46221,46222],{"class":732}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[155,46224,46225],{"class":732}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[24,46227,46228],{},"最后安装：",[146,46230,46232],{"className":43613,"code":46231,"language":43615,"meta":39,"style":39},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[152,46233,46234],{"__ignoreMap":39},[155,46235,46236,46238,46240,46242,46244,46246,46248,46250],{"class":157,"line":158},[155,46237,44368],{"class":226},[155,46239,46104],{"class":732},[155,46241,43625],{"class":732},[155,46243,46042],{"class":732},[155,46245,46045],{"class":732},[155,46247,46048],{"class":732},[155,46249,46051],{"class":732},[155,46251,46054],{"class":732},[14,46253,46255],{"id":46254},"_22配置环境","2.2.配置环境",[19,46257,46259,46262],{"id":46258},"_221检查-docker-服务状态",[20234,46260,46261],{},"2.2.1.检查 Docker 服务状态"," ：",[24,46264,46265],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[146,46267,46269],{"className":43613,"code":46268,"language":43615,"meta":39,"style":39},"systemctl status docker\n",[152,46270,46271],{"__ignoreMap":39},[155,46272,46273,46276,46279],{"class":157,"line":158},[155,46274,46275],{"class":226},"systemctl",[155,46277,46278],{"class":732}," status",[155,46280,46281],{"class":732}," docker\n",[19,46283,46285,46262],{"id":46284},"_222启动-docker-服务",[20234,46286,46287],{},"2.2.2.启动 Docker 服务",[24,46289,46290],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[146,46292,46294],{"className":43613,"code":46293,"language":43615,"meta":39,"style":39},"sudo systemctl start docker\n",[152,46295,46296],{"__ignoreMap":39},[155,46297,46298,46300,46303,46305],{"class":157,"line":158},[155,46299,44368],{"class":226},[155,46301,46302],{"class":732}," systemctl",[155,46304,24050],{"class":732},[155,46306,46281],{"class":732},[19,46308,46310,46262],{"id":46309},"_223设置-docker-开机自启",[20234,46311,46312],{},"2.2.3.设置 Docker 开机自启",[24,46314,46315],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[146,46317,46319],{"className":43613,"code":46318,"language":43615,"meta":39,"style":39},"sudo systemctl enable docker\n",[152,46320,46321],{"__ignoreMap":39},[155,46322,46323,46325,46327,46330],{"class":157,"line":158},[155,46324,44368],{"class":226},[155,46326,46302],{"class":732},[155,46328,46329],{"class":732}," enable",[155,46331,46281],{"class":732},[19,46333,46335,33622,46338,33622,46343,46262],{"id":46334},"_224将用户添加到-docker-组",[20234,46336,46337],{},"2.2.4.将用户添加到",[20234,46339,46340],{},[152,46341,46342],{},"docker",[20234,46344,46345],{},"组",[24,46347,46348,46349,46351],{},"使用以下命令将当前用户添加到 ",[152,46350,46342],{}," 组：",[146,46353,46355],{"className":43613,"code":46354,"language":43615,"meta":39,"style":39},"sudo usermod -aG docker $USER\n",[152,46356,46357],{"__ignoreMap":39},[155,46358,46359,46361,46364,46367,46369],{"class":157,"line":158},[155,46360,44368],{"class":226},[155,46362,46363],{"class":732}," usermod",[155,46365,46366],{"class":263}," -aG",[155,46368,46109],{"class":732},[155,46370,46371],{"class":171}," $USER\n",[19,46373,46375,46262],{"id":46374},"_225退出并重新登录",[20234,46376,46377],{},"2.2.5.退出并重新登录",[24,46379,46380],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[146,46382,46384],{"className":43613,"code":46383,"language":43615,"meta":39,"style":39},"newgrp docker\n",[152,46385,46386],{"__ignoreMap":39},[155,46387,46388,46391],{"class":157,"line":158},[155,46389,46390],{"class":226},"newgrp",[155,46392,46281],{"class":732},[19,46394,46396,46262],{"id":46395},"_226重新启动-docker-服务如果需要",[20234,46397,46398],{},"2.2.6.重新启动 Docker 服务（如果需要）",[24,46400,46401],{},"确保 Docker 服务正在运行，可以使用以下命令：",[146,46403,46404],{"className":43613,"code":46293,"language":43615,"meta":39,"style":39},[152,46405,46406],{"__ignoreMap":39},[155,46407,46408,46410,46412,46414],{"class":157,"line":158},[155,46409,44368],{"class":226},[155,46411,46302],{"class":732},[155,46413,24050],{"class":732},[155,46415,46281],{"class":732},[19,46417,46419,46262],{"id":46418},"_227重启电脑后检查-docker-服务状态",[20234,46420,46421],{},"2.2.7.重启电脑后检查 Docker 服务状态",[24,46423,46424],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[146,46426,46428],{"className":43613,"code":46427,"language":43615,"meta":39,"style":39},"sudo reboot\nsystemctl status docker\n",[152,46429,46430,46437],{"__ignoreMap":39},[155,46431,46432,46434],{"class":157,"line":158},[155,46433,44368],{"class":226},[155,46435,46436],{"class":732}," reboot\n",[155,46438,46439,46441,46443],{"class":157,"line":46},[155,46440,46275],{"class":226},[155,46442,46278],{"class":732},[155,46444,46281],{"class":732},[24,46446,46447],{},[37,46448],{"alt":39,"src":46449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[24,46451,46452],{},"第三行显示enabled说明开机自启动成功",[24,46454,46455],{},"按q退出",[14,46457,46459],{"id":46458},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[24,46461,46462],{},"优先使用linux来使用docker是比较好的",[24,46464,46465],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[24,46467,46468],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[24,46470,46471,46472],{},"官方下载安装:",[20318,46473,46474],{"href":46474,"rel":46475},"https:\u002F\u002Fwww.docker.com\u002F",[43656],[24,46477,46478],{},"Windows的Docker显卡直通与USB直通:",[24,46480,46481],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[24,46483,46484],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[24,46486,46487],{},[37,46488],{"alt":39,"src":46489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[24,46491,46492],{},[37,46493],{"alt":39,"src":46494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[24,46496,46497],{},[37,46498],{"alt":39,"src":46499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[20011,46501,46502],{},"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":39,"searchDepth":46,"depth":46,"links":46504},[46505,46506,46507],{"id":45783,"depth":121,"text":45784},{"id":46254,"depth":121,"text":46255},{"id":46458,"depth":121,"text":46459},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":45775,"description":39},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":46514,"title":46515,"body":46516,"description":46523,"extension":20021,"meta":47216,"navigation":216,"path":47217,"seo":47218,"stem":47219,"__hash__":47220},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":46517,"toc":47210},[46518,46521,46524,46528,46533,46538,46541,46569,46574,46583,46586,46591,46595,46602,46607,46613,46617,46620,46624,46629,46721,46726,46744,46749,46770,46775,46791,46795,46800,46829,46834,46880,46885,46929,46937,46954,46959,46975,46980,46994,46997,47000,47003,47006,47035,47038,47043,47047,47050,47053,47059,47062,47065,47068,47130,47137,47142,47145,47163,47167,47170,47187,47190,47193,47207],[10,46519,46515],{"id":46520},"_3docker直通",[24,46522,46523],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[14,46525,46527],{"id":46526},"_31usb直通","3.1.USB直通",[24,46529,46530],{},[37,46531],{"alt":39,"src":46532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[28,46534,46535],{},[31,46536,46537],{},"方法一(不是很推荐新手)：",[24,46539,46540],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[146,46542,46544],{"className":43613,"code":46543,"language":43615,"meta":39,"style":39},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[152,46545,46546,46554,46559],{"__ignoreMap":39},[155,46547,46548,46551],{"class":157,"line":158},[155,46549,46550],{"class":226},"ls",[155,46552,46553],{"class":732}," \u002Fdev\n",[155,46555,46556],{"class":157,"line":46},[155,46557,46558],{"class":161},"#例如\n",[155,46560,46561,46564,46566],{"class":157,"line":121},[155,46562,46563],{"class":171},"--device",[155,46565,317],{"class":167},[155,46567,46568],{"class":732},"\u002Fdev\u002Ftty_USB0\n",[28,46570,46571],{"start":46},[31,46572,46573],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[146,46575,46577],{"className":43613,"code":46576,"language":43615,"meta":39,"style":39},"--privileged\n",[152,46578,46579],{"__ignoreMap":39},[155,46580,46581],{"class":157,"line":158},[155,46582,46576],{"class":226},[24,46584,46585],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[24,46587,46588],{},[37,46589],{"alt":39,"src":46590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[14,46592,46594],{"id":46593},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[24,46596,46597,46598,46601],{},"NVIDIA Container Toolkit使用户 ",[20234,46599,46600],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[24,46603,46604],{},[37,46605],{"alt":39,"src":46606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[24,46608,46609],{},[20318,46610,46611],{"href":46611,"rel":46612},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[43656],[19,46614,46616],{"id":46615},"_321安装","3.2.1.安装",[24,46618,46619],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[42701,46621,46623],{"id":46622},"_3211ubuntu","3.2.1.1.Ubuntu",[28,46625,46626],{},[31,46627,46628],{},"配置存储库 并更新",[146,46630,46632],{"className":43613,"code":46631,"language":43615,"meta":39,"style":39},"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",[152,46633,46634,46663,46683,46695,46707,46713],{"__ignoreMap":39},[155,46635,46636,46639,46642,46645,46647,46649,46652,46655,46658,46661],{"class":157,"line":158},[155,46637,46638],{"class":226},"curl",[155,46640,46641],{"class":263}," -fsSL",[155,46643,46644],{"class":732}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[155,46646,44901],{"class":167},[155,46648,45862],{"class":226},[155,46650,46651],{"class":732}," gpg",[155,46653,46654],{"class":263}," --dearmor",[155,46656,46657],{"class":263}," -o",[155,46659,46660],{"class":732}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[155,46662,44470],{"class":263},[155,46664,46665,46668,46670,46673,46676,46679,46681],{"class":157,"line":46},[155,46666,46667],{"class":171},"  && ",[155,46669,46638],{"class":226},[155,46671,46672],{"class":263}," -s",[155,46674,46675],{"class":263}," -L",[155,46677,46678],{"class":732}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[155,46680,44901],{"class":167},[155,46682,44470],{"class":263},[155,46684,46685,46688,46691,46693],{"class":157,"line":121},[155,46686,46687],{"class":226},"    sed",[155,46689,46690],{"class":732}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[155,46692,44901],{"class":167},[155,46694,44470],{"class":263},[155,46696,46697,46700,46702,46705],{"class":157,"line":180},[155,46698,46699],{"class":226},"    sudo",[155,46701,46005],{"class":732},[155,46703,46704],{"class":732}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[155,46706,44470],{"class":263},[155,46708,46709,46711],{"class":157,"line":194},[155,46710,46667],{"class":171},[155,46712,45964],{"class":263},[155,46714,46715,46717,46719],{"class":157,"line":200},[155,46716,46699],{"class":226},[155,46718,45865],{"class":732},[155,46720,46031],{"class":732},[28,46722,46723],{"start":46},[31,46724,46725],{},"安装nvidia-docker2",[146,46727,46729],{"className":43613,"code":46728,"language":43615,"meta":39,"style":39},"sudo apt-get install -y nvidia-docker2\n",[152,46730,46731],{"__ignoreMap":39},[155,46732,46733,46735,46737,46739,46741],{"class":157,"line":158},[155,46734,44368],{"class":226},[155,46736,45865],{"class":732},[155,46738,43625],{"class":732},[155,46740,46189],{"class":263},[155,46742,46743],{"class":732}," nvidia-docker2\n",[28,46745,46746],{"start":121},[31,46747,46748],{},"使用nvidia-ctk命令配置container runtime",[146,46750,46752],{"className":43613,"code":46751,"language":43615,"meta":39,"style":39},"sudo nvidia-ctk runtime configure --runtime=docker\n",[152,46753,46754],{"__ignoreMap":39},[155,46755,46756,46758,46761,46764,46767],{"class":157,"line":158},[155,46757,44368],{"class":226},[155,46759,46760],{"class":732}," nvidia-ctk",[155,46762,46763],{"class":732}," runtime",[155,46765,46766],{"class":732}," configure",[155,46768,46769],{"class":263}," --runtime=docker\n",[28,46771,46772],{"start":180},[31,46773,46774],{},"重启docker服务:",[146,46776,46778],{"className":43613,"code":46777,"language":43615,"meta":39,"style":39},"sudo systemctl restart docker\n",[152,46779,46780],{"__ignoreMap":39},[155,46781,46782,46784,46786,46789],{"class":157,"line":158},[155,46783,44368],{"class":226},[155,46785,46302],{"class":732},[155,46787,46788],{"class":732}," restart",[155,46790,46281],{"class":732},[42701,46792,46794],{"id":46793},"_3212fedora","3.2.1.2.Fedora",[28,46796,46797],{},[31,46798,46799],{},"配置存储库",[146,46801,46803],{"className":43613,"code":46802,"language":43615,"meta":39,"style":39},"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",[152,46804,46805,46820],{"__ignoreMap":39},[155,46806,46807,46809,46811,46813,46816,46818],{"class":157,"line":158},[155,46808,46638],{"class":226},[155,46810,46672],{"class":263},[155,46812,46675],{"class":263},[155,46814,46815],{"class":732}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[155,46817,44901],{"class":167},[155,46819,44470],{"class":263},[155,46821,46822,46824,46826],{"class":157,"line":46},[155,46823,44368],{"class":226},[155,46825,46005],{"class":732},[155,46827,46828],{"class":732}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[28,46830,46831],{"start":46},[31,46832,46833],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[146,46835,46837],{"className":43613,"code":46836,"language":43615,"meta":39,"style":39},"# 如果是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",[152,46838,46839,46844,46858,46862,46867],{"__ignoreMap":39},[155,46840,46841],{"class":157,"line":158},[155,46842,46843],{"class":161},"# 如果是RHEL或者Rocky（DNF4）\n",[155,46845,46846,46848,46850,46852,46855],{"class":157,"line":46},[155,46847,44368],{"class":226},[155,46849,46104],{"class":732},[155,46851,46203],{"class":732},[155,46853,46854],{"class":263}," --add-repo",[155,46856,46857],{"class":732}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[155,46859,46860],{"class":157,"line":121},[155,46861,217],{"emptyLinePlaceholder":216},[155,46863,46864],{"class":157,"line":180},[155,46865,46866],{"class":161},"# 如果是Feodra41+（DNF5）\n",[155,46868,46869,46871,46873,46875,46877],{"class":157,"line":194},[155,46870,44368],{"class":226},[155,46872,46104],{"class":732},[155,46874,46203],{"class":732},[155,46876,46206],{"class":732},[155,46878,46879],{"class":263}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[28,46881,46882],{"start":121},[31,46883,46884],{},"安装NVIDIA Container Toolki包",[146,46886,46888],{"className":43613,"code":46887,"language":43615,"meta":39,"style":39},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[152,46889,46890,46895,46908,46912,46917],{"__ignoreMap":39},[155,46891,46892],{"class":157,"line":158},[155,46893,46894],{"class":161},"# 如果是RHEL或者Rocky\n",[155,46896,46897,46899,46901,46903,46905],{"class":157,"line":46},[155,46898,44368],{"class":226},[155,46900,46104],{"class":732},[155,46902,43625],{"class":732},[155,46904,46189],{"class":263},[155,46906,46907],{"class":732}," nvidia-container-toolkit\n",[155,46909,46910],{"class":157,"line":121},[155,46911,217],{"emptyLinePlaceholder":216},[155,46913,46914],{"class":157,"line":180},[155,46915,46916],{"class":161},"# 如果是Fedora\n",[155,46918,46919,46921,46923,46925,46927],{"class":157,"line":194},[155,46920,44368],{"class":226},[155,46922,46104],{"class":732},[155,46924,43625],{"class":732},[155,46926,46189],{"class":263},[155,46928,46907],{"class":732},[28,46930,46931],{"start":180},[31,46932,46933,46934,46936],{},"安装nvidia-docker2 ： 在Fedora上使用",[152,46935,46079],{},"进行安装",[146,46938,46940],{"className":43613,"code":46939,"language":43615,"meta":39,"style":39},"sudo dnf install -y nvidia-docker2\n",[152,46941,46942],{"__ignoreMap":39},[155,46943,46944,46946,46948,46950,46952],{"class":157,"line":158},[155,46945,44368],{"class":226},[155,46947,46104],{"class":732},[155,46949,43625],{"class":732},[155,46951,46189],{"class":263},[155,46953,46743],{"class":732},[28,46955,46956],{"start":194},[31,46957,46958],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[146,46960,46961],{"className":43613,"code":46751,"language":43615,"meta":39,"style":39},[152,46962,46963],{"__ignoreMap":39},[155,46964,46965,46967,46969,46971,46973],{"class":157,"line":158},[155,46966,44368],{"class":226},[155,46968,46760],{"class":732},[155,46970,46763],{"class":732},[155,46972,46766],{"class":732},[155,46974,46769],{"class":263},[28,46976,46977],{"start":200},[31,46978,46979],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[146,46981,46982],{"className":43613,"code":46777,"language":43615,"meta":39,"style":39},[152,46983,46984],{"__ignoreMap":39},[155,46985,46986,46988,46990,46992],{"class":157,"line":158},[155,46987,44368],{"class":226},[155,46989,46302],{"class":732},[155,46991,46788],{"class":732},[155,46993,46281],{"class":732},[24,46995,46996],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[24,46998,46999],{},"方法：",[24,47001,47002],{},"1️⃣nvidia-smi",[24,47004,47005],{},"2️⃣运行nvidia cuda 容器进行测试",[146,47007,47009],{"className":43613,"code":47008,"language":43615,"meta":39,"style":39},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[152,47010,47011],{"__ignoreMap":39},[155,47012,47013,47015,47017,47020,47023,47026,47029,47032],{"class":157,"line":158},[155,47014,44368],{"class":226},[155,47016,46109],{"class":732},[155,47018,47019],{"class":732}," run",[155,47021,47022],{"class":263}," --rm",[155,47024,47025],{"class":263}," --gpus",[155,47027,47028],{"class":732}," all",[155,47030,47031],{"class":732}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[155,47033,47034],{"class":732}," nvidia-smi\n",[24,47036,47037],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[24,47039,47040],{},[37,47041],{"alt":39,"src":47042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[14,47044,47046],{"id":47045},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[24,47048,47049],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[24,47051,47052],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[24,47054,47055],{},[20318,47056,47057],{"href":47057,"rel":47058},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[43656],[24,47060,47061],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[24,47063,47064],{},"我们只需要找到对应的Docker镜像当底包即可。",[24,47066,47067],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[20222,47069,47070,47086],{},[20225,47071,47072],{},[20228,47073,47074,47077,47080,47083],{},[20231,47075,47076],{"align":43527},"镜像类型",[20231,47078,47079],{"align":43527},"适用场景",[20231,47081,47082],{"align":43527},"示例标签",[20231,47084,47085],{"align":43527},"大小",[20269,47087,47088,47102,47116],{},[20228,47089,47090,47093,47096,47099],{},[20274,47091,47092],{"align":43527},"base",[20274,47094,47095],{"align":43527},"仅需 CUDA 运行时库",[20274,47097,47098],{"align":43527},"12.4.0-base-ubuntu22.04",[20274,47100,47101],{"align":43527},"~240MB",[20228,47103,47104,47107,47110,47113],{},[20274,47105,47106],{"align":43527},"runtime",[20274,47108,47109],{"align":43527},"部署编译后的应用（含数学库）",[20274,47111,47112],{"align":43527},"12.4.0-runtime-ubuntu22.04",[20274,47114,47115],{"align":43527},"~2GB",[20228,47117,47118,47121,47124,47127],{},[20274,47119,47120],{"align":43527},"devel",[20274,47122,47123],{"align":43527},"开发环境（含编译工具）",[20274,47125,47126],{"align":43527},"12.4.0-devel-ubuntu22.04",[20274,47128,47129],{"align":43527},"~3GB",[24,47131,47132,47133,47136],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[152,47134,47135],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[24,47138,47139],{},[37,47140],{"alt":39,"src":47141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[24,47143,47144],{},"在dockerfile里就可以开头这么写：",[146,47146,47148],{"className":43613,"code":47147,"language":43615,"meta":39,"style":39},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[152,47149,47150,47155],{"__ignoreMap":39},[155,47151,47152],{"class":157,"line":158},[155,47153,47154],{"class":161},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[155,47156,47157,47160],{"class":157,"line":46},[155,47158,47159],{"class":226},"FROM",[155,47161,47162],{"class":732}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[14,47164,47166],{"id":47165},"_34配置以太网","3.4.配置以太网",[24,47168,47169],{},"指定网络模式",[146,47171,47173],{"className":43613,"code":47172,"language":43615,"meta":39,"style":39},"--net=host \\\n",[152,47174,47175],{"__ignoreMap":39},[155,47176,47177,47180,47182,47185],{"class":157,"line":158},[155,47178,47179],{"class":171},"--net",[155,47181,317],{"class":167},[155,47183,47184],{"class":732},"host",[155,47186,44470],{"class":226},[24,47188,47189],{},"启动参数里加上这行即可。具体在下方",[24,47191,47192],{},"--net选项：指定网络模式，该选项有以下参数可选：",[21052,47194,47195,47198,47201,47204],{},[31,47196,47197],{},"--net=bridge:默认选项，表示连接到默认的网桥",[31,47199,47200],{},"--net=host:容器使用宿主机的网络",[31,47202,47203],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[31,47205,47206],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[20011,47208,47209],{},"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":39,"searchDepth":46,"depth":46,"links":47211},[47212,47213,47214,47215],{"id":46526,"depth":121,"text":46527},{"id":46593,"depth":121,"text":46594},{"id":47045,"depth":121,"text":47046},{"id":47165,"depth":121,"text":47166},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":46515,"description":46523},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":47222,"title":47223,"body":47224,"description":47231,"extension":20021,"meta":47237,"navigation":216,"path":47238,"seo":47239,"stem":47240,"__hash__":47241},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":47225,"toc":47235},[47226,47229,47232],[10,47227,47223],{"id":47228},"_4dockerhub换源",[24,47230,47231],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[24,47233,47234],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":39,"searchDepth":46,"depth":46,"links":47236},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":47223,"description":47231},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":47243,"title":47244,"body":47245,"description":39,"extension":20021,"meta":48257,"navigation":216,"path":48258,"seo":48259,"stem":48260,"__hash__":48261},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":47246,"toc":48252},[47247,47250,47254,47260,47264,47267,47607,47610,47613,47616,47621,47626,47629,47632,47635,47638,47657,47660,47671,47677,47859,47869,47885,48148,48150,48175,48190,48199,48249],[10,47248,47244],{"id":47249},"_5docker命令学习",[14,47251,47253],{"id":47252},"_51参考文档","5.1.参考文档",[24,47255,47256],{},[20318,47257,47258],{"href":47258,"rel":47259},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[43656],[14,47261,47263],{"id":47262},"_52常用命令","5.2.常用命令",[24,47265,47266],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[20222,47268,47269,47282],{},[20225,47270,47271],{},[20228,47272,47273,47276,47279],{},[20231,47274,47275],{"align":43527},"命令",[20231,47277,47278],{"align":43527},"描述",[20231,47280,47281],{"align":43527},"示例",[20269,47283,47284,47295,47306,47317,47328,47339,47350,47361,47371,47382,47393,47404,47414,47425,47436,47447,47457,47467,47477,47487,47498,47509,47520,47531,47542,47553,47563,47574,47585,47596],{},[20228,47285,47286,47289,47292],{},[20274,47287,47288],{"align":43527},"docker run",[20274,47290,47291],{"align":43527},"创建并启动一个新的容器。",[20274,47293,47294],{"align":43527},"docker run -it ubuntu bash",[20228,47296,47297,47300,47303],{},[20274,47298,47299],{"align":43527},"docker build",[20274,47301,47302],{"align":43527},"通过指定的 Dockerfile 创建一个新的镜像。",[20274,47304,47305],{"align":43527},"docker build -t myimage .",[20228,47307,47308,47311,47314],{},[20274,47309,47310],{"align":43527},"docker pull",[20274,47312,47313],{"align":43527},"从 Docker 仓库拉取镜像。",[20274,47315,47316],{"align":43527},"docker pull ubuntu",[20228,47318,47319,47322,47325],{},[20274,47320,47321],{"align":43527},"docker push",[20274,47323,47324],{"align":43527},"将本地镜像推送到 Docker 仓库。",[20274,47326,47327],{"align":43527},"docker push myimage",[20228,47329,47330,47333,47336],{},[20274,47331,47332],{"align":43527},"docker stop",[20274,47334,47335],{"align":43527},"停止一个正在运行的容器。",[20274,47337,47338],{"align":43527},"docker stop container_id",[20228,47340,47341,47344,47347],{},[20274,47342,47343],{"align":43527},"docker start",[20274,47345,47346],{"align":43527},"启动一个已经存在的容器。",[20274,47348,47349],{"align":43527},"docker start container_id",[20228,47351,47352,47355,47358],{},[20274,47353,47354],{"align":43527},"docker restart",[20274,47356,47357],{"align":43527},"重新启动容器。",[20274,47359,47360],{"align":43527},"docker restart container_id",[20228,47362,47363,47366,47369],{},[20274,47364,47365],{"align":43527},"docker ps",[20274,47367,47368],{"align":43527},"列出当前正在运行的容器。",[20274,47370,47365],{"align":43527},[20228,47372,47373,47376,47379],{},[20274,47374,47375],{"align":43527},"docker rm",[20274,47377,47378],{"align":43527},"删除一个或多个停止的容器。",[20274,47380,47381],{"align":43527},"docker rm container_id",[20228,47383,47384,47387,47390],{},[20274,47385,47386],{"align":43527},"docker exec",[20274,47388,47389],{"align":43527},"在一个正在运行的容器中执行命令。",[20274,47391,47392],{"align":43527},"docker exec -it container_id bash",[20228,47394,47395,47398,47401],{},[20274,47396,47397],{"align":43527},"docker logs",[20274,47399,47400],{"align":43527},"查看容器的日志输出。",[20274,47402,47403],{"align":43527},"docker logs container_id",[20228,47405,47406,47409,47412],{},[20274,47407,47408],{"align":43527},"docker images",[20274,47410,47411],{"align":43527},"列出本地所有镜像。",[20274,47413,47408],{"align":43527},[20228,47415,47416,47419,47422],{},[20274,47417,47418],{"align":43527},"docker rmi",[20274,47420,47421],{"align":43527},"删除一个或多个镜像。",[20274,47423,47424],{"align":43527},"docker rmi myimage",[20228,47426,47427,47430,47433],{},[20274,47428,47429],{"align":43527},"docker network",[20274,47431,47432],{"align":43527},"管理 Docker 网络。",[20274,47434,47435],{"align":43527},"docker network ls",[20228,47437,47438,47441,47444],{},[20274,47439,47440],{"align":43527},"docker volume",[20274,47442,47443],{"align":43527},"管理 Docker 数据卷。",[20274,47445,47446],{"align":43527},"docker volume ls",[20228,47448,47449,47452,47455],{},[20274,47450,47451],{"align":43527},"docker-compose up",[20274,47453,47454],{"align":43527},"启动 docker-compose.yml 中定义的所有服务。",[20274,47456,47451],{"align":43527},[20228,47458,47459,47462,47465],{},[20274,47460,47461],{"align":43527},"docker-compose down",[20274,47463,47464],{"align":43527},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[20274,47466,47461],{"align":43527},[20228,47468,47469,47472,47475],{},[20274,47470,47471],{"align":43527},"docker info",[20274,47473,47474],{"align":43527},"显示 Docker 系统的详细信息。",[20274,47476,47471],{"align":43527},[20228,47478,47479,47482,47485],{},[20274,47480,47481],{"align":43527},"docker stats",[20274,47483,47484],{"align":43527},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[20274,47486,47481],{"align":43527},[20228,47488,47489,47492,47495],{},[20274,47490,47491],{"align":43527},"docker inspect",[20274,47493,47494],{"align":43527},"查看容器或镜像的详细信息（JSON 格式）。",[20274,47496,47497],{"align":43527},"docker inspect container_id",[20228,47499,47500,47503,47506],{},[20274,47501,47502],{"align":43527},"docker save",[20274,47504,47505],{"align":43527},"将一个镜像保存为 tar 文件。",[20274,47507,47508],{"align":43527},"docker save -o myimage.tar myimage",[20228,47510,47511,47514,47517],{},[20274,47512,47513],{"align":43527},"docker load",[20274,47515,47516],{"align":43527},"从 tar 文件中加载镜像。",[20274,47518,47519],{"align":43527},"docker load -i myimage.tar",[20228,47521,47522,47525,47528],{},[20274,47523,47524],{"align":43527},"docker tag",[20274,47526,47527],{"align":43527},"为镜像添加标签（tag）。",[20274,47529,47530],{"align":43527},"docker tag myimage myimage:v1",[20228,47532,47533,47536,47539],{},[20274,47534,47535],{"align":43527},"docker buildx build",[20274,47537,47538],{"align":43527},"使用 Buildx 构建多架构镜像。",[20274,47540,47541],{"align":43527},"docker buildx build -t myimage .",[20228,47543,47544,47547,47550],{},[20274,47545,47546],{"align":43527},"docker buildx create",[20274,47548,47549],{"align":43527},"创建一个新的 Buildx 构建实例。",[20274,47551,47552],{"align":43527},"docker buildx create –use",[20228,47554,47555,47558,47561],{},[20274,47556,47557],{"align":43527},"docker buildx ls",[20274,47559,47560],{"align":43527},"列出所有可用的 Buildx 构建实例。",[20274,47562,47557],{"align":43527},[20228,47564,47565,47568,47571],{},[20274,47566,47567],{"align":43527},"docker buildx use",[20274,47569,47570],{"align":43527},"设置当前的 Buildx 构建实例。",[20274,47572,47573],{"align":43527},"docker buildx use mybuilder",[20228,47575,47576,47579,47582],{},[20274,47577,47578],{"align":43527},"docker buildx bake",[20274,47580,47581],{"align":43527},"使用 Bake 文件批量构建镜像。",[20274,47583,47584],{"align":43527},"docker buildx bake -f bake.hcl",[20228,47586,47587,47590,47593],{},[20274,47588,47589],{"align":43527},"docker buildx build –push",[20274,47591,47592],{"align":43527},"构建镜像并推送到镜像仓库。",[20274,47594,47595],{"align":43527},"docker buildx build –push -t myimage .",[20228,47597,47598,47601,47604],{},[20274,47599,47600],{"align":43527},"docker buildx build –platform",[20274,47602,47603],{"align":43527},"构建镜像并为多个平台生成支持。",[20274,47605,47606],{"align":43527},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[24,47608,47609],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[24,47611,47612],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[24,47614,47615],{},"docker images 可以查看已经下载的镜像",[24,47617,47618],{},[37,47619],{"alt":39,"src":47620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[24,47622,47623],{},[20234,47624,47625],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[24,47627,47628],{},"docker rmi $(docker images -q) 删除所有的镜像",[24,47630,47631],{},"docker container logs 查看容器日志",[24,47633,47634],{},"docker top 查看容器里的进程",[24,47636,47637],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[146,47639,47641],{"className":43613,"code":47640,"language":43615,"meta":39,"style":39},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[152,47642,47643],{"__ignoreMap":39},[155,47644,47645,47648,47651,47654],{"class":157,"line":158},[155,47646,47647],{"class":226},"如：docker",[155,47649,47650],{"class":732}," cp",[155,47652,47653],{"class":732}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[155,47655,47656],{"class":732}," \u002Fmydata\u002Fnginx\n",[24,47658,47659],{},"docker run时在启动容器的时候会有几个常用的选项：",[21052,47661,47662,47665,47668],{},[31,47663,47664],{},"-d选项：表示后台运行",[31,47666,47667],{},"-P选项：随机端口映射",[31,47669,47670],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[14,47672,47674],{"id":47673},"_53run命令的参数非常重要",[20234,47675,47676],{},"5.3.run命令的参数（非常重要）",[20222,47678,47679,47692],{},[20225,47680,47681],{},[20228,47682,47683,47686,47689],{},[20231,47684,47685],{"align":43527},"参数\u002F配置",[20231,47687,47688],{"align":43527},"功能说明",[20231,47690,47691],{"align":43527},"重要性与参考依据",[20269,47693,47694,47705,47716,47727,47738,47749,47760,47771,47782,47793,47804,47815,47826,47837,47848],{},[20228,47695,47696,47699,47702],{},[20274,47697,47698],{"align":43527},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[20274,47700,47701],{"align":43527},"指定容器名称，便于后续管理",[20274,47703,47704],{"align":43527},"替代随机生成的容器名。",[20228,47706,47707,47710,47713],{},[20274,47708,47709],{"align":43527},"–gpus all",[20274,47711,47712],{"align":43527},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[20274,47714,47715],{"align":43527},"用于CUDA加速等GPU依赖任务。",[20228,47717,47718,47721,47724],{},[20274,47719,47720],{"align":43527},"-e NVIDIA_DRIVER_CAPABILITIES=all",[20274,47722,47723],{"align":43527},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[20274,47725,47726],{"align":43527},"确保容器内GPU功能完整67。",[20228,47728,47729,47732,47735],{},[20274,47730,47731],{"align":43527},"-dit",[20274,47733,47734],{"align":43527},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[20274,47736,47737],{"align":43527},"允许容器在后台运行并支持交互操作。",[20228,47739,47740,47743,47746],{},[20274,47741,47742],{"align":43527},"–privileged",[20274,47744,47745],{"align":43527},"赋予容器完全主机权限（可访问设备、内核模块等）",[20274,47747,47748],{"align":43527},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[20228,47750,47751,47754,47757],{},[20274,47752,47753],{"align":43527},"–net=host",[20274,47755,47756],{"align":43527},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[20274,47758,47759],{"align":43527},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[20228,47761,47762,47765,47768],{},[20274,47763,47764],{"align":43527},"–group-add audio–group-add video–group-add dialout",[20274,47766,47767],{"align":43527},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[20274,47769,47770],{"align":43527},"避免权限问题（如避免无法调用摄像头、麦克风）。",[20228,47772,47773,47776,47779],{},[20274,47774,47775],{"align":43527},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[20274,47777,47778],{"align":43527},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[20274,47780,47781],{"align":43527},"支持容器内运行图形界面应用（如OpenCV可视化）。",[20228,47783,47784,47787,47790],{},[20274,47785,47786],{"align":43527},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[20274,47788,47789],{"align":43527},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[20274,47791,47792],{"align":43527},"实现容器内图形显示。",[20228,47794,47795,47798,47801],{},[20274,47796,47797],{"align":43527},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[20274,47799,47800],{"align":43527},"挂载X11认证文件（只读）",[20274,47802,47803],{"align":43527},"确保容器有权连接宿主机显示服务。",[20228,47805,47806,47809,47812],{},[20274,47807,47808],{"align":43527},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[20274,47810,47811],{"align":43527},"挂载Wayland显示协议相关目录",[20274,47813,47814],{"align":43527},"支持Wayland协议的图形显示。",[20228,47816,47817,47820,47823],{},[20274,47818,47819],{"align":43527},"–ulimit nofile=1024:524288",[20274,47821,47822],{"align":43527},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[20274,47824,47825],{"align":43527},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[20228,47827,47828,47831,47834],{},[20274,47829,47830],{"align":43527},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[20274,47832,47833],{"align":43527},"挂载宿主机用户目录到容器内同名路径",[20274,47835,47836],{"align":43527},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[20228,47838,47839,47842,47845],{},[20274,47840,47841],{"align":43527},"-w \u002Fhome\u002Ftungchiahui",[20274,47843,47844],{"align":43527},"设置容器启动后的默认工作目录",[20274,47846,47847],{"align":43527},"直接进入项目路径，方便执行命令2324。",[20228,47849,47850,47853,47856],{},[20274,47851,47852],{"align":43527},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[20274,47854,47855],{"align":43527},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[20274,47857,47858],{"align":43527},"提供预配置的深度学习与机器人开发环境。",[24,47860,47861,47862,47864,47865,47868],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[152,47863,44368],{},"加不加",[152,47866,47867],{},"sudo -E","都无所谓。",[24,47870,47871,47872,47874,47875,47877,47878,47881,47882,47884],{},"用户已经被加到docker组了，不用",[152,47873,44368],{},"也行跑，其次，",[152,47876,44368],{},"运行的话，你的",[152,47879,47880],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[152,47883,47880],{},"更不可能变了。",[146,47886,47888],{"className":43613,"code":47887,"language":43615,"meta":39,"style":39},"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",[152,47889,47890,47903,47913,47923,47935,47942,47949,47956,47966,47975,47984,47998,48010,48022,48031,48041,48050,48065,48098,48125,48136,48143],{"__ignoreMap":39},[155,47891,47892,47894,47896,47898,47901],{"class":157,"line":158},[155,47893,44368],{"class":226},[155,47895,46109],{"class":732},[155,47897,47019],{"class":732},[155,47899,47900],{"class":263}," --name=ros_opencv_cuda",[155,47902,44470],{"class":263},[155,47904,47905,47908,47911],{"class":157,"line":46},[155,47906,47907],{"class":171},"--gpus ",[155,47909,47910],{"class":732},"all",[155,47912,44470],{"class":263},[155,47914,47915,47918,47921],{"class":157,"line":121},[155,47916,47917],{"class":171},"-e ",[155,47919,47920],{"class":732},"NVIDIA_DRIVER_CAPABILITIES=all",[155,47922,44470],{"class":263},[155,47924,47925,47927,47930,47933],{"class":157,"line":180},[155,47926,47917],{"class":171},[155,47928,47929],{"class":732},"DISPLAY=",[155,47931,47932],{"class":171},"$DISPLAY ",[155,47934,45964],{"class":263},[155,47936,47937,47940],{"class":157,"line":194},[155,47938,47939],{"class":171},"-dit ",[155,47941,45964],{"class":263},[155,47943,47944,47947],{"class":157,"line":200},[155,47945,47946],{"class":171},"--privileged ",[155,47948,45964],{"class":263},[155,47950,47951,47954],{"class":157,"line":213},[155,47952,47953],{"class":171},"--net=host ",[155,47955,45964],{"class":263},[155,47957,47958,47961,47964],{"class":157,"line":220},[155,47959,47960],{"class":171},"--group-add ",[155,47962,47963],{"class":732},"audio",[155,47965,44470],{"class":263},[155,47967,47968,47970,47973],{"class":157,"line":245},[155,47969,47960],{"class":171},[155,47971,47972],{"class":732},"video",[155,47974,44470],{"class":263},[155,47976,47977,47979,47982],{"class":157,"line":251},[155,47978,47960],{"class":171},[155,47980,47981],{"class":732},"dialout",[155,47983,44470],{"class":263},[155,47985,47986,47988,47991,47993,47996],{"class":157,"line":257},[155,47987,47917],{"class":171},[155,47989,47990],{"class":732},"XAUTHORITY=",[155,47992,47880],{"class":171},[155,47994,47995],{"class":732},"\u002F.Xauthority",[155,47997,44470],{"class":263},[155,47999,48000,48002,48005,48008],{"class":157,"line":270},[155,48001,47917],{"class":171},[155,48003,48004],{"class":732},"WAYLAND_DISPLAY=",[155,48006,48007],{"class":171},"$WAYLAND_DISPLAY ",[155,48009,45964],{"class":263},[155,48011,48012,48014,48017,48020],{"class":157,"line":276},[155,48013,47917],{"class":171},[155,48015,48016],{"class":732},"XDG_RUNTIME_DIR=",[155,48018,48019],{"class":171},"$XDG_RUNTIME_DIR ",[155,48021,45964],{"class":263},[155,48023,48024,48026,48029],{"class":157,"line":297},[155,48025,47917],{"class":171},[155,48027,48028],{"class":732},"QT_QPA_PLATFORM=xcb",[155,48030,44470],{"class":263},[155,48032,48033,48036,48039],{"class":157,"line":302},[155,48034,48035],{"class":171},"-v ",[155,48037,48038],{"class":732},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[155,48040,44470],{"class":263},[155,48042,48043,48045,48048],{"class":157,"line":308},[155,48044,48035],{"class":171},[155,48046,48047],{"class":732},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[155,48049,44470],{"class":263},[155,48051,48052,48055,48058,48060,48063],{"class":157,"line":366},[155,48053,48054],{"class":171},"-v $HOME",[155,48056,48057],{"class":732},"\u002F.Xauthority:",[155,48059,47880],{"class":171},[155,48061,48062],{"class":732},"\u002F.Xauthority:ro",[155,48064,44470],{"class":263},[155,48066,48067,48069,48072,48074,48077,48080,48082,48085,48087,48089,48091,48093,48096],{"class":157,"line":379},[155,48068,48035],{"class":171},[155,48070,48071],{"class":732},"\u002Frun\u002Fuser\u002F",[155,48073,44891],{"class":171},[155,48075,48076],{"class":226},"id",[155,48078,48079],{"class":263}," -u",[155,48081,20501],{"class":171},[155,48083,48084],{"class":732},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[155,48086,44891],{"class":171},[155,48088,48076],{"class":226},[155,48090,48079],{"class":263},[155,48092,20501],{"class":171},[155,48094,48095],{"class":732},"\u002Fwayland-0",[155,48097,44470],{"class":263},[155,48099,48100,48102,48104,48106,48108,48110,48112,48115,48117,48119,48121,48123],{"class":157,"line":385},[155,48101,48035],{"class":171},[155,48103,48071],{"class":732},[155,48105,44891],{"class":171},[155,48107,48076],{"class":226},[155,48109,48079],{"class":263},[155,48111,20501],{"class":171},[155,48113,48114],{"class":732},":\u002Frun\u002Fuser\u002F",[155,48116,44891],{"class":171},[155,48118,48076],{"class":226},[155,48120,48079],{"class":263},[155,48122,33541],{"class":171},[155,48124,45964],{"class":263},[155,48126,48127,48129,48131,48134],{"class":157,"line":415},[155,48128,48054],{"class":171},[155,48130,3017],{"class":732},[155,48132,48133],{"class":171},"$HOME ",[155,48135,45964],{"class":263},[155,48137,48138,48141],{"class":157,"line":452},[155,48139,48140],{"class":171},"-w $HOME ",[155,48142,45964],{"class":263},[155,48144,48145],{"class":157,"line":480},[155,48146,48147],{"class":171},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[24,48149,28874],{},[28,48151,48152,48160,48163,48166],{},[31,48153,48154,33622,48156,48159],{},[152,48155,47920],{},[152,48157,48158],{},"--gpus all","没有英伟达显卡请注释。",[31,48161,48162],{},"--name后面请自己为容器起名。",[31,48164,48165],{},"最后一行仓库名称请你自己找对应的镜像填上。",[31,48167,48168,48169,48174],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[43344,48170,48171],{},[20234,48172,48173],{},"请不要加","。",[146,48176,48178],{"className":43613,"code":48177,"language":43615,"meta":39,"style":39},"--ulimit nofile=1024:524288 \\\n",[152,48179,48180],{"__ignoreMap":39},[155,48181,48182,48185,48188],{"class":157,"line":158},[155,48183,48184],{"class":226},"--ulimit",[155,48186,48187],{"class":732}," nofile=1024:524288",[155,48189,44470],{"class":263},[24,48191,48192,48193,48198],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[43344,48194,48195],{},[20234,48196,48197],{},"不建议","**.**",[146,48200,48202],{"className":43613,"code":48201,"language":43615,"meta":39,"style":39},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[152,48203,48204,48231,48240],{"__ignoreMap":39},[155,48205,48206,48209,48212,48214,48216,48218,48220,48222,48224,48227,48229],{"class":157,"line":158},[155,48207,48208],{"class":226},"--user",[155,48210,48211],{"class":171}," $(",[155,48213,48076],{"class":226},[155,48215,48079],{"class":263},[155,48217,20501],{"class":171},[155,48219,3017],{"class":732},[155,48221,44891],{"class":171},[155,48223,48076],{"class":226},[155,48225,48226],{"class":263}," -g",[155,48228,33541],{"class":171},[155,48230,45964],{"class":263},[155,48232,48233,48235,48238],{"class":157,"line":46},[155,48234,48035],{"class":171},[155,48236,48237],{"class":732},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[155,48239,44470],{"class":263},[155,48241,48242,48244,48247],{"class":157,"line":121},[155,48243,48035],{"class":171},[155,48245,48246],{"class":732},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[155,48248,44470],{"class":263},[20011,48250,48251],{},"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":39,"searchDepth":46,"depth":46,"links":48253},[48254,48255,48256],{"id":47252,"depth":121,"text":47253},{"id":47262,"depth":121,"text":47263},{"id":47673,"depth":121,"text":47676},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":47244,"description":39},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":48263,"title":48264,"body":48265,"description":39,"extension":20021,"meta":49888,"navigation":216,"path":49889,"seo":49890,"stem":49891,"__hash__":49892},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":48266,"toc":49883},[48267,48270,48274,48277,48499,48503,48507,48510,48616,48621,48624,48629,48632,48637,48640,48645,48648,48660,48663,48668,48675,48703,48710,48786,48791,48794,48817,48819,48894,48899,48902,48906,48914,48919,48924,48928,48939,48945,48948,48951,48975,48978,48981,49009,49012,49015,49480,49483,49488,49493,49497,49520,49525,49529,49533,49536,49539,49542,49569,49572,49575,49593,49596,49599,49621,49629,49634,49639,49643,49646,49649,49652,49655,49700,49703,49721,49724,49729,49732,49753,49756,49812,49815,49820,49824,49827,49834,49837,49840,49845,49848,49864,49867,49880],[10,48268,48264],{"id":48269},"_6手动创建docker镜像",[14,48271,48273],{"id":48272},"_61dockerfile","6.1.DockerFile",[24,48275,48276],{},"常用命令：",[20222,48278,48279,48290],{},[20225,48280,48281],{},[20228,48282,48283,48286,48288],{},[20231,48284,48285],{"align":43527},"指令",[20231,48287,45659],{"align":43527},[20231,48289,47281],{"align":43527},[20269,48291,48292,48302,48318,48329,48340,48351,48362,48373,48384,48398,48412,48423,48437,48448,48459,48473,48488],{},[20228,48293,48294,48296,48299],{},[20274,48295,47159],{"align":43527},[20274,48297,48298],{"align":43527},"指定基础镜像，是 Dockerfile 的起点",[20274,48300,48301],{"align":43527},"FROM ubuntu:22.04",[20228,48303,48304,48307,48310],{},[20274,48305,48306],{"align":43527},"LABEL",[20274,48308,48309],{"align":43527},"添加元数据（如作者、版本等）",[20274,48311,48312,48313,48317],{"align":43527},"LABEL maintainer=”",[20318,48314,48316],{"href":48315},"mailto:you@example.com","you@example.com","”",[20228,48319,48320,48323,48326],{},[20274,48321,48322],{"align":43527},"ENV",[20274,48324,48325],{"align":43527},"设置环境变量",[20274,48327,48328],{"align":43527},"ENV PORT=8080",[20228,48330,48331,48334,48337],{},[20274,48332,48333],{"align":43527},"ARG",[20274,48335,48336],{"align":43527},"构建参数，只在构建期间可用",[20274,48338,48339],{"align":43527},"ARG VERSION=1.0",[20228,48341,48342,48345,48348],{},[20274,48343,48344],{"align":43527},"RUN",[20274,48346,48347],{"align":43527},"构建镜像时运行命令",[20274,48349,48350],{"align":43527},"RUN apt-get update && apt-get install -y curl",[20228,48352,48353,48356,48359],{},[20274,48354,48355],{"align":43527},"COPY",[20274,48357,48358],{"align":43527},"复制文件到镜像中",[20274,48360,48361],{"align":43527},"COPY . \u002Fapp",[20228,48363,48364,48367,48370],{},[20274,48365,48366],{"align":43527},"ADD",[20274,48368,48369],{"align":43527},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[20274,48371,48372],{"align":43527},"ADD archive.tar.gz \u002Fdata\u002F",[20228,48374,48375,48378,48381],{},[20274,48376,48377],{"align":43527},"WORKDIR",[20274,48379,48380],{"align":43527},"设置工作目录",[20274,48382,48383],{"align":43527},"WORKDIR \u002Fopt",[20228,48385,48386,48389,48392],{},[20274,48387,48388],{"align":43527},"CMD",[20274,48390,48391],{"align":43527},"设置容器启动时默认命令（可被 docker run 覆盖）",[20274,48393,48394,48395],{"align":43527},"CMD ",[155,48396,48397],{},"“node”, “index.js”",[20228,48399,48400,48403,48406],{},[20274,48401,48402],{"align":43527},"ENTRYPOINT",[20274,48404,48405],{"align":43527},"设置容器启动时固定命令（通常用于 CLI 工具等）",[20274,48407,48408,48409],{"align":43527},"ENTRYPOINT ",[155,48410,48411],{},"“python3”",[20228,48413,48414,48417,48420],{},[20274,48415,48416],{"align":43527},"EXPOSE",[20274,48418,48419],{"align":43527},"声明镜像内服务监听的端口（不会自动映射）",[20274,48421,48422],{"align":43527},"EXPOSE 80",[20228,48424,48425,48428,48431],{},[20274,48426,48427],{"align":43527},"VOLUME",[20274,48429,48430],{"align":43527},"声明数据卷挂载点",[20274,48432,48433,48434],{"align":43527},"VOLUME ",[155,48435,48436],{},"“\u002Fdata”",[20228,48438,48439,48442,48445],{},[20274,48440,48441],{"align":43527},"USER",[20274,48443,48444],{"align":43527},"设置后续命令执行的用户",[20274,48446,48447],{"align":43527},"USER appuser",[20228,48449,48450,48453,48456],{},[20274,48451,48452],{"align":43527},"ONBUILD",[20274,48454,48455],{"align":43527},"当镜像作为其他镜像基础镜像时触发的构建指令",[20274,48457,48458],{"align":43527},"ONBUILD COPY . \u002Fsrc",[20228,48460,48461,48464,48467],{},[20274,48462,48463],{"align":43527},"SHELL",[20274,48465,48466],{"align":43527},"更改默认 shell，比如将 sh -c 改为 bash -c",[20274,48468,48469,48470],{"align":43527},"SHELL ",[155,48471,48472],{},"“\u002Fbin\u002Fbash”, “-c”",[20228,48474,48475,48478,48481],{},[20274,48476,48477],{"align":43527},"HEALTHCHECK",[20274,48479,48480],{"align":43527},"定义容器运行时的健康检查命令",[20274,48482,48483,48484],{"align":43527},"`HEALTHCHECK CMD curl –fail ",[20318,48485,48486],{"href":48486,"rel":48487},"http:\u002F\u002Flocalhost:8080",[43656],[20228,48489,48490,48493,48496],{},[20274,48491,48492],{"align":43527},"STOPSIGNAL",[20274,48494,48495],{"align":43527},"容器停止时发送的信号",[20274,48497,48498],{"align":43527},"STOPSIGNAL SIGKILL",[14,48500,48502],{"id":48501},"_62自己创建容器","6.2.自己创建容器",[19,48504,48506],{"id":48505},"_621手动创建","6.2.1.手动创建",[24,48508,48509],{},"在x86电脑上编译x86的：",[146,48511,48513],{"className":43613,"code":48512,"language":43615,"meta":39,"style":39},"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",[152,48514,48515,48531,48535,48548,48552,48565,48569,48582,48586,48599,48603],{"__ignoreMap":39},[155,48516,48517,48519,48522,48525,48528],{"class":157,"line":158},[155,48518,46342],{"class":226},[155,48520,48521],{"class":732}," build",[155,48523,48524],{"class":263}," -t",[155,48526,48527],{"class":732}," ros-melodic-cuda118-cudnn8-bionic:latest",[155,48529,48530],{"class":732}," .\n",[155,48532,48533],{"class":157,"line":46},[155,48534,217],{"emptyLinePlaceholder":216},[155,48536,48537,48539,48541,48543,48546],{"class":157,"line":121},[155,48538,46342],{"class":226},[155,48540,48521],{"class":732},[155,48542,48524],{"class":263},[155,48544,48545],{"class":732}," ros-noetic-focal:latest",[155,48547,48530],{"class":732},[155,48549,48550],{"class":157,"line":180},[155,48551,217],{"emptyLinePlaceholder":216},[155,48553,48554,48556,48558,48560,48563],{"class":157,"line":194},[155,48555,46342],{"class":226},[155,48557,48521],{"class":732},[155,48559,48524],{"class":263},[155,48561,48562],{"class":732}," ros-humble-jammy:latest",[155,48564,48530],{"class":732},[155,48566,48567],{"class":157,"line":200},[155,48568,217],{"emptyLinePlaceholder":216},[155,48570,48571,48573,48575,48577,48580],{"class":157,"line":213},[155,48572,46342],{"class":226},[155,48574,48521],{"class":732},[155,48576,48524],{"class":263},[155,48578,48579],{"class":732}," ros-jazzy-noble:latest",[155,48581,48530],{"class":732},[155,48583,48584],{"class":157,"line":220},[155,48585,217],{"emptyLinePlaceholder":216},[155,48587,48588,48590,48592,48594,48597],{"class":157,"line":245},[155,48589,46342],{"class":226},[155,48591,48521],{"class":732},[155,48593,48524],{"class":263},[155,48595,48596],{"class":732}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[155,48598,48530],{"class":732},[155,48600,48601],{"class":157,"line":251},[155,48602,217],{"emptyLinePlaceholder":216},[155,48604,48605,48607,48609,48611,48614],{"class":157,"line":257},[155,48606,46342],{"class":226},[155,48608,48521],{"class":732},[155,48610,48524],{"class":263},[155,48612,48613],{"class":732}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[155,48615,48530],{"class":732},[24,48617,48618],{},[37,48619],{"alt":39,"src":48620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[24,48622,48623],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[24,48625,48626],{},[37,48627],{"alt":39,"src":48628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[24,48630,48631],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[28,48633,48634],{},[31,48635,48636],{},"创建 Docker Hub 账户",[24,48638,48639],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[28,48641,48642],{"start":46},[31,48643,48644],{},"登录 Docker Hub",[24,48646,48647],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[146,48649,48651],{"className":43613,"code":48650,"language":43615,"meta":39,"style":39},"docker login\n",[152,48652,48653],{"__ignoreMap":39},[155,48654,48655,48657],{"class":157,"line":158},[155,48656,46342],{"class":226},[155,48658,48659],{"class":732}," login\n",[24,48661,48662],{},"输入你的 Docker Hub 用户名和密码进行验证。",[28,48664,48665],{},[31,48666,48667],{},"为你的镜像打标签",[24,48669,48670,48671,48674],{},"Docker Hub 使用 ",[152,48672,48673],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[146,48676,48678],{"className":43613,"code":48677,"language":43615,"meta":39,"style":39},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[152,48679,48680],{"__ignoreMap":39},[155,48681,48682,48684,48687,48689,48692,48695,48698,48700],{"class":157,"line":158},[155,48683,46342],{"class":226},[155,48685,48686],{"class":732}," tag",[155,48688,48579],{"class":732},[155,48690,48691],{"class":167}," \u003C",[155,48693,48694],{"class":732},"你的用户",[155,48696,48697],{"class":171},"名",[155,48699,1148],{"class":167},[155,48701,48702],{"class":732},"\u002Fros-jazzy-noble:latest\n",[24,48704,48705,48706,48709],{},"例如，如果你的 Docker Hub 用户名是 ",[152,48707,48708],{},"tungchiahui","，你应该执行：",[146,48711,48713],{"className":43613,"code":48712,"language":43615,"meta":39,"style":39},"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",[152,48714,48715,48726,48730,48741,48745,48756,48760,48771,48775],{"__ignoreMap":39},[155,48716,48717,48719,48721,48723],{"class":157,"line":158},[155,48718,46342],{"class":226},[155,48720,48686],{"class":732},[155,48722,48545],{"class":732},[155,48724,48725],{"class":732}," tungchiahui\u002Fros-noetic-focal:latest\n",[155,48727,48728],{"class":157,"line":46},[155,48729,217],{"emptyLinePlaceholder":216},[155,48731,48732,48734,48736,48738],{"class":157,"line":121},[155,48733,46342],{"class":226},[155,48735,48686],{"class":732},[155,48737,48562],{"class":732},[155,48739,48740],{"class":732}," tungchiahui\u002Fros-humble-jammy:latest\n",[155,48742,48743],{"class":157,"line":180},[155,48744,217],{"emptyLinePlaceholder":216},[155,48746,48747,48749,48751,48753],{"class":157,"line":194},[155,48748,46342],{"class":226},[155,48750,48686],{"class":732},[155,48752,48579],{"class":732},[155,48754,48755],{"class":732}," tungchiahui\u002Fros-jazzy-noble:latest\n",[155,48757,48758],{"class":157,"line":200},[155,48759,217],{"emptyLinePlaceholder":216},[155,48761,48762,48764,48766,48768],{"class":157,"line":213},[155,48763,46342],{"class":226},[155,48765,48686],{"class":732},[155,48767,48596],{"class":732},[155,48769,48770],{"class":732}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[155,48772,48773],{"class":157,"line":220},[155,48774,217],{"emptyLinePlaceholder":216},[155,48776,48777,48779,48781,48783],{"class":157,"line":245},[155,48778,46342],{"class":226},[155,48780,48686],{"class":732},[155,48782,48613],{"class":732},[155,48784,48785],{"class":732}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[28,48787,48788],{"start":46},[31,48789,48790],{},"推送镜像到 Docker Hub",[24,48792,48793],{},"使用以下命令将镜像推送到 Docker Hub：",[146,48795,48797],{"className":43613,"code":48796,"language":43615,"meta":39,"style":39},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[152,48798,48799],{"__ignoreMap":39},[155,48800,48801,48803,48806,48808,48810,48812,48814],{"class":157,"line":158},[155,48802,46342],{"class":226},[155,48804,48805],{"class":732}," push",[155,48807,48691],{"class":167},[155,48809,48694],{"class":732},[155,48811,48697],{"class":171},[155,48813,1148],{"class":167},[155,48815,48816],{"class":732},"\u002Fros-noetic-jazzy-noble:latest\n",[24,48818,34460],{},[146,48820,48822],{"className":43613,"code":48821,"language":43615,"meta":39,"style":39},"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",[152,48823,48824,48832,48836,48844,48848,48856,48860,48869,48873,48881,48885],{"__ignoreMap":39},[155,48825,48826,48828,48830],{"class":157,"line":158},[155,48827,46342],{"class":226},[155,48829,48805],{"class":732},[155,48831,48725],{"class":732},[155,48833,48834],{"class":157,"line":46},[155,48835,217],{"emptyLinePlaceholder":216},[155,48837,48838,48840,48842],{"class":157,"line":121},[155,48839,46342],{"class":226},[155,48841,48805],{"class":732},[155,48843,48740],{"class":732},[155,48845,48846],{"class":157,"line":180},[155,48847,217],{"emptyLinePlaceholder":216},[155,48849,48850,48852,48854],{"class":157,"line":194},[155,48851,46342],{"class":226},[155,48853,48805],{"class":732},[155,48855,48755],{"class":732},[155,48857,48858],{"class":157,"line":200},[155,48859,217],{"emptyLinePlaceholder":216},[155,48861,48862,48864,48866],{"class":157,"line":213},[155,48863,46342],{"class":226},[155,48865,48805],{"class":732},[155,48867,48868],{"class":732}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[155,48870,48871],{"class":157,"line":220},[155,48872,217],{"emptyLinePlaceholder":216},[155,48874,48875,48877,48879],{"class":157,"line":245},[155,48876,46342],{"class":226},[155,48878,48805],{"class":732},[155,48880,48785],{"class":732},[155,48882,48883],{"class":157,"line":251},[155,48884,217],{"emptyLinePlaceholder":216},[155,48886,48887,48889,48891],{"class":157,"line":257},[155,48888,46342],{"class":226},[155,48890,48805],{"class":732},[155,48892,48893],{"class":732}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[28,48895,48896],{"start":121},[31,48897,48898],{},"验证推送成功",[24,48900,48901],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[24,48903,48904],{},[20234,48905,23653],{},[21052,48907,48908,48911],{},[31,48909,48910],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[31,48912,48913],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[24,48915,48916],{},[37,48917],{"alt":39,"src":48918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[24,48920,48921],{},[37,48922],{"alt":39,"src":48923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[19,48925,48927],{"id":48926},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[24,48929,48930,48931,48934,48935,48938],{},"如果您想在 ",[20234,48932,48933],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[20234,48936,48937],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[24,48940,48941,48942],{},"1. ",[20234,48943,48944],{},"启用 Docker 跨平台构建",[24,48946,48947],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[24,48949,48950],{},"第一步：启用 buildx（只需执行一次）",[146,48952,48954],{"className":43613,"code":48953,"language":43615,"meta":39,"style":39},"docker buildx create --name multiarch_builder --use\n",[152,48955,48956],{"__ignoreMap":39},[155,48957,48958,48960,48963,48966,48969,48972],{"class":157,"line":158},[155,48959,46342],{"class":226},[155,48961,48962],{"class":732}," buildx",[155,48964,48965],{"class":732}," create",[155,48967,48968],{"class":263}," --name",[155,48970,48971],{"class":732}," multiarch_builder",[155,48973,48974],{"class":263}," --use\n",[24,48976,48977],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[24,48979,48980],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[146,48982,48984],{"className":43613,"code":48983,"language":43615,"meta":39,"style":39},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[152,48985,48986],{"__ignoreMap":39},[155,48987,48988,48990,48992,48994,48997,49000,49003,49006],{"class":157,"line":158},[155,48989,46342],{"class":226},[155,48991,47019],{"class":732},[155,48993,47022],{"class":263},[155,48995,48996],{"class":263}," --privileged",[155,48998,48999],{"class":732}," multiarch\u002Fqemu-user-static",[155,49001,49002],{"class":263}," --reset",[155,49004,49005],{"class":263}," -p",[155,49007,49008],{"class":732}," yes\n",[24,49010,49011],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[24,49013,49014],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[146,49016,49018],{"className":43613,"code":49017,"language":43615,"meta":39,"style":39},"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",[152,49019,49020,49062,49066,49071,49081,49091,49100,49106,49110,49114,49124,49132,49141,49147,49151,49155,49165,49173,49182,49188,49192,49196,49206,49214,49223,49229,49233,49237,49247,49255,49264,49270,49274,49278,49288,49296,49305,49311,49315,49319,49329,49337,49346,49352,49356,49360,49370,49378,49387,49393,49397,49401,49411,49419,49428,49434,49438,49442,49453,49461,49470,49476],{"__ignoreMap":39},[155,49021,49022,49024,49026,49028,49031,49034,49036,49038,49041,49043,49045,49047,49049,49052,49055,49057,49060],{"class":157,"line":158},[155,49023,46342],{"class":226},[155,49025,48962],{"class":732},[155,49027,48521],{"class":732},[155,49029,49030],{"class":263}," --platform",[155,49032,49033],{"class":732}," linux\u002Famd64,linux\u002Farm64",[155,49035,48524],{"class":263},[155,49037,48691],{"class":167},[155,49039,49040],{"class":732},"你的镜像",[155,49042,48697],{"class":171},[155,49044,1148],{"class":167},[155,49046,3017],{"class":732},[155,49048,20959],{"class":167},[155,49050,49051],{"class":732},"标",[155,49053,49054],{"class":171},"签",[155,49056,1148],{"class":167},[155,49058,49059],{"class":263}," --push",[155,49061,48530],{"class":732},[155,49063,49064],{"class":157,"line":46},[155,49065,217],{"emptyLinePlaceholder":216},[155,49067,49068],{"class":157,"line":121},[155,49069,49070],{"class":161},"# 例子：\n",[155,49072,49073,49075,49077,49079],{"class":157,"line":180},[155,49074,46342],{"class":226},[155,49076,48962],{"class":732},[155,49078,48521],{"class":732},[155,49080,44470],{"class":263},[155,49082,49083,49086,49089],{"class":157,"line":194},[155,49084,49085],{"class":171},"--platform ",[155,49087,49088],{"class":732},"linux\u002Famd64,linux\u002Farm64",[155,49090,44470],{"class":263},[155,49092,49093,49095,49098],{"class":157,"line":200},[155,49094,48524],{"class":263},[155,49096,49097],{"class":732}," tungchiahui\u002Fros:noetic-focal",[155,49099,44470],{"class":263},[155,49101,49102,49104],{"class":157,"line":213},[155,49103,49059],{"class":263},[155,49105,44470],{"class":263},[155,49107,49108],{"class":157,"line":220},[155,49109,48530],{"class":732},[155,49111,49112],{"class":157,"line":245},[155,49113,217],{"emptyLinePlaceholder":216},[155,49115,49116,49118,49120,49122],{"class":157,"line":251},[155,49117,46342],{"class":226},[155,49119,48962],{"class":732},[155,49121,48521],{"class":732},[155,49123,44470],{"class":263},[155,49125,49126,49128,49130],{"class":157,"line":257},[155,49127,49085],{"class":171},[155,49129,49088],{"class":732},[155,49131,44470],{"class":263},[155,49133,49134,49136,49139],{"class":157,"line":270},[155,49135,48524],{"class":263},[155,49137,49138],{"class":732}," tungchiahui\u002Fros:humble-jammy",[155,49140,44470],{"class":263},[155,49142,49143,49145],{"class":157,"line":276},[155,49144,49059],{"class":263},[155,49146,44470],{"class":263},[155,49148,49149],{"class":157,"line":297},[155,49150,48530],{"class":732},[155,49152,49153],{"class":157,"line":302},[155,49154,217],{"emptyLinePlaceholder":216},[155,49156,49157,49159,49161,49163],{"class":157,"line":308},[155,49158,46342],{"class":226},[155,49160,48962],{"class":732},[155,49162,48521],{"class":732},[155,49164,44470],{"class":263},[155,49166,49167,49169,49171],{"class":157,"line":366},[155,49168,49085],{"class":171},[155,49170,49088],{"class":732},[155,49172,44470],{"class":263},[155,49174,49175,49177,49180],{"class":157,"line":379},[155,49176,48524],{"class":263},[155,49178,49179],{"class":732}," tungchiahui\u002Fros:jazzy-noble",[155,49181,44470],{"class":263},[155,49183,49184,49186],{"class":157,"line":385},[155,49185,49059],{"class":263},[155,49187,44470],{"class":263},[155,49189,49190],{"class":157,"line":415},[155,49191,48530],{"class":732},[155,49193,49194],{"class":157,"line":452},[155,49195,217],{"emptyLinePlaceholder":216},[155,49197,49198,49200,49202,49204],{"class":157,"line":480},[155,49199,46109],{"class":226},[155,49201,48962],{"class":732},[155,49203,48521],{"class":732},[155,49205,44470],{"class":263},[155,49207,49208,49210,49212],{"class":157,"line":486},[155,49209,49085],{"class":171},[155,49211,49088],{"class":732},[155,49213,44470],{"class":263},[155,49215,49216,49218,49221],{"class":157,"line":499},[155,49217,48524],{"class":263},[155,49219,49220],{"class":732}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[155,49222,44470],{"class":263},[155,49224,49225,49227],{"class":157,"line":505},[155,49226,49059],{"class":263},[155,49228,44470],{"class":263},[155,49230,49231],{"class":157,"line":528},[155,49232,48530],{"class":732},[155,49234,49235],{"class":157,"line":549},[155,49236,217],{"emptyLinePlaceholder":216},[155,49238,49239,49241,49243,49245],{"class":157,"line":570},[155,49240,46342],{"class":226},[155,49242,48962],{"class":732},[155,49244,48521],{"class":732},[155,49246,44470],{"class":263},[155,49248,49249,49251,49253],{"class":157,"line":575},[155,49250,49085],{"class":171},[155,49252,49088],{"class":732},[155,49254,44470],{"class":263},[155,49256,49257,49259,49262],{"class":157,"line":581},[155,49258,48524],{"class":263},[155,49260,49261],{"class":732}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[155,49263,44470],{"class":263},[155,49265,49266,49268],{"class":157,"line":592},[155,49267,49059],{"class":263},[155,49269,44470],{"class":263},[155,49271,49272],{"class":157,"line":610},[155,49273,48530],{"class":732},[155,49275,49276],{"class":157,"line":622},[155,49277,217],{"emptyLinePlaceholder":216},[155,49279,49280,49282,49284,49286],{"class":157,"line":638},[155,49281,46109],{"class":226},[155,49283,48962],{"class":732},[155,49285,48521],{"class":732},[155,49287,44470],{"class":263},[155,49289,49290,49292,49294],{"class":157,"line":650},[155,49291,49085],{"class":171},[155,49293,49088],{"class":732},[155,49295,44470],{"class":263},[155,49297,49298,49300,49303],{"class":157,"line":662},[155,49299,48524],{"class":263},[155,49301,49302],{"class":732}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[155,49304,44470],{"class":263},[155,49306,49307,49309],{"class":157,"line":678},[155,49308,49059],{"class":263},[155,49310,44470],{"class":263},[155,49312,49313],{"class":157,"line":694},[155,49314,48530],{"class":732},[155,49316,49317],{"class":157,"line":706},[155,49318,217],{"emptyLinePlaceholder":216},[155,49320,49321,49323,49325,49327],{"class":157,"line":715},[155,49322,46342],{"class":226},[155,49324,48962],{"class":732},[155,49326,48521],{"class":732},[155,49328,44470],{"class":263},[155,49330,49331,49333,49335],{"class":157,"line":720},[155,49332,49085],{"class":171},[155,49334,49088],{"class":732},[155,49336,44470],{"class":263},[155,49338,49339,49341,49344],{"class":157,"line":739},[155,49340,48524],{"class":263},[155,49342,49343],{"class":732}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[155,49345,44470],{"class":263},[155,49347,49348,49350],{"class":157,"line":745},[155,49349,49059],{"class":263},[155,49351,44470],{"class":263},[155,49353,49354],{"class":157,"line":773},[155,49355,48530],{"class":732},[155,49357,49358],{"class":157,"line":779},[155,49359,217],{"emptyLinePlaceholder":216},[155,49361,49362,49364,49366,49368],{"class":157,"line":785},[155,49363,46342],{"class":226},[155,49365,48962],{"class":732},[155,49367,48521],{"class":732},[155,49369,44470],{"class":263},[155,49371,49372,49374,49376],{"class":157,"line":791},[155,49373,49085],{"class":171},[155,49375,49088],{"class":732},[155,49377,44470],{"class":263},[155,49379,49380,49382,49385],{"class":157,"line":796},[155,49381,48524],{"class":263},[155,49383,49384],{"class":732}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[155,49386,44470],{"class":263},[155,49388,49389,49391],{"class":157,"line":802},[155,49390,49059],{"class":263},[155,49392,44470],{"class":263},[155,49394,49395],{"class":157,"line":808},[155,49396,48530],{"class":732},[155,49398,49399],{"class":157,"line":819},[155,49400,217],{"emptyLinePlaceholder":216},[155,49402,49403,49405,49407,49409],{"class":157,"line":1832},[155,49404,46109],{"class":226},[155,49406,48962],{"class":732},[155,49408,48521],{"class":732},[155,49410,44470],{"class":263},[155,49412,49413,49415,49417],{"class":157,"line":1838},[155,49414,49085],{"class":171},[155,49416,49088],{"class":732},[155,49418,44470],{"class":263},[155,49420,49421,49423,49426],{"class":157,"line":1844},[155,49422,48524],{"class":263},[155,49424,49425],{"class":732}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[155,49427,44470],{"class":263},[155,49429,49430,49432],{"class":157,"line":1850},[155,49431,49059],{"class":263},[155,49433,44470],{"class":263},[155,49435,49436],{"class":157,"line":1861},[155,49437,48530],{"class":732},[155,49439,49440],{"class":157,"line":1866},[155,49441,217],{"emptyLinePlaceholder":216},[155,49443,49444,49447,49449,49451],{"class":157,"line":1871},[155,49445,49446],{"class":226},"  docker",[155,49448,48962],{"class":732},[155,49450,48521],{"class":732},[155,49452,44470],{"class":263},[155,49454,49455,49457,49459],{"class":157,"line":1877},[155,49456,49085],{"class":171},[155,49458,49088],{"class":732},[155,49460,44470],{"class":263},[155,49462,49463,49465,49468],{"class":157,"line":1883},[155,49464,48524],{"class":263},[155,49466,49467],{"class":732}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[155,49469,44470],{"class":263},[155,49471,49472,49474],{"class":157,"line":1894},[155,49473,49059],{"class":263},[155,49475,44470],{"class":263},[155,49477,49478],{"class":157,"line":1900},[155,49479,48530],{"class":732},[24,49481,49482],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[24,49484,49485],{},[37,49486],{"alt":39,"src":49487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[24,49489,49490],{},[37,49491],{"alt":39,"src":49492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[19,49494,49496],{"id":49495},"_623清除构建缓存","6.2.3.清除构建缓存",[146,49498,49500],{"className":43613,"code":49499,"language":43615,"meta":39,"style":39},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[152,49501,49502,49507],{"__ignoreMap":39},[155,49503,49504],{"class":157,"line":158},[155,49505,49506],{"class":161},"# 清理BuildKit构建缓存\n",[155,49508,49509,49511,49514,49517],{"class":157,"line":46},[155,49510,46342],{"class":226},[155,49512,49513],{"class":732}," builder",[155,49515,49516],{"class":732}," prune",[155,49518,49519],{"class":263}," -f\n",[24,49521,49522],{},[37,49523],{"alt":39,"src":49524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[14,49526,49528],{"id":49527},"_63补充","6.3.补充",[19,49530,49532],{"id":49531},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[24,49534,49535],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[24,49537,49538],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[24,49540,49541],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[146,49543,49545],{"className":43613,"code":49544,"language":43615,"meta":39,"style":39},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[152,49546,49547,49554],{"__ignoreMap":39},[155,49548,49549,49551],{"class":157,"line":158},[155,49550,47159],{"class":226},[155,49552,49553],{"class":732}," nginx\n",[155,49555,49556,49558,49561,49564,49566],{"class":157,"line":46},[155,49557,48344],{"class":226},[155,49559,49560],{"class":732}," echo",[155,49562,49563],{"class":732}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[155,49565,46011],{"class":167},[155,49567,49568],{"class":732}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[24,49570,49571],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[24,49573,49574],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[146,49576,49578],{"className":43613,"code":49577,"language":43615,"meta":39,"style":39},"docker build -t nginx:tuling .\n",[152,49579,49580],{"__ignoreMap":39},[155,49581,49582,49584,49586,49588,49591],{"class":157,"line":158},[155,49583,46342],{"class":226},[155,49585,48521],{"class":732},[155,49587,48524],{"class":263},[155,49589,49590],{"class":732}," nginx:tuling",[155,49592,48530],{"class":732},[24,49594,49595],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[24,49597,49598],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[146,49600,49602],{"className":43613,"code":49601,"language":43615,"meta":39,"style":39},"docker run -d -p 92:80 nginx:tuling\n",[152,49603,49604],{"__ignoreMap":39},[155,49605,49606,49608,49610,49613,49615,49618],{"class":157,"line":158},[155,49607,46342],{"class":226},[155,49609,47019],{"class":732},[155,49611,49612],{"class":263}," -d",[155,49614,49005],{"class":263},[155,49616,49617],{"class":732}," 92:80",[155,49619,49620],{"class":732}," nginx:tuling\n",[24,49622,49623,49624],{},"4、访问 ",[20318,49625,49628],{"href":49626,"rel":49627},"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",[43656],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[24,49630,49631],{},[37,49632],{"alt":39,"src":49633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[24,49635,49636],{},[37,49637],{"alt":39,"src":49638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[19,49640,49642],{"id":49641},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[24,49644,49645],{},"只需要知道大体流程即可",[24,49647,49648],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[24,49650,49651],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[24,49653,49654],{},"2、在Dockerfile中添加以下内容",[146,49656,49658],{"className":45880,"code":49657,"language":45882,"meta":39,"style":39},"# 基于哪个镜像\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",[152,49659,49660,49665,49670,49675,49680,49685,49690,49695],{"__ignoreMap":39},[155,49661,49662],{"class":157,"line":158},[155,49663,49664],{},"# 基于哪个镜像\n",[155,49666,49667],{"class":157,"line":46},[155,49668,49669],{},"From java:8\n",[155,49671,49672],{"class":157,"line":121},[155,49673,49674],{},"# 复制文件到容器\n",[155,49676,49677],{"class":157,"line":180},[155,49678,49679],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[155,49681,49682],{"class":157,"line":194},[155,49683,49684],{},"# 声明需要暴露的端口\n",[155,49686,49687],{"class":157,"line":200},[155,49688,49689],{},"EXPOSE 8877\n",[155,49691,49692],{"class":157,"line":213},[155,49693,49694],{},"# 配置容器启动后执行的命令\n",[155,49696,49697],{"class":157,"line":220},[155,49698,49699],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[24,49701,49702],{},"3、使用docker build命令构建镜像",[146,49704,49706],{"className":43613,"code":49705,"language":43615,"meta":39,"style":39},"docker build -t tulingmall-member:0.0.5 .\n",[152,49707,49708],{"__ignoreMap":39},[155,49709,49710,49712,49714,49716,49719],{"class":157,"line":158},[155,49711,46342],{"class":226},[155,49713,48521],{"class":732},[155,49715,48524],{"class":263},[155,49717,49718],{"class":732}," tulingmall-member:0.0.5",[155,49720,48530],{"class":732},[24,49722,49723],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[24,49725,49726],{},[37,49727],{"alt":39,"src":49728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[24,49730,49731],{},"4、启动镜像，加-d可在后台启动",[146,49733,49735],{"className":43613,"code":49734,"language":43615,"meta":39,"style":39},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[152,49736,49737],{"__ignoreMap":39},[155,49738,49739,49741,49743,49745,49747,49750],{"class":157,"line":158},[155,49740,46342],{"class":226},[155,49742,47019],{"class":732},[155,49744,49612],{"class":263},[155,49746,49005],{"class":263},[155,49748,49749],{"class":732}," 8877:8877",[155,49751,49752],{"class":732}," tulingmall-member:0.0.5\n",[24,49754,49755],{},"加上JVM参数：",[146,49757,49759],{"className":43613,"code":49758,"language":43615,"meta":39,"style":39},"# --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",[152,49760,49761,49766,49781,49791,49800,49807],{"__ignoreMap":39},[155,49762,49763],{"class":157,"line":158},[155,49764,49765],{"class":161},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[155,49767,49768,49770,49772,49775,49777,49779],{"class":157,"line":46},[155,49769,46342],{"class":226},[155,49771,47019],{"class":732},[155,49773,49774],{"class":263},"  -d",[155,49776,49005],{"class":263},[155,49778,49749],{"class":732},[155,49780,44470],{"class":263},[155,49782,49783,49785,49788],{"class":157,"line":121},[155,49784,47917],{"class":171},[155,49786,49787],{"class":732},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[155,49789,49790],{"class":263},"  \\\n",[155,49792,49793,49795,49798],{"class":157,"line":180},[155,49794,47917],{"class":171},[155,49796,49797],{"class":732},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[155,49799,49790],{"class":263},[155,49801,49802,49805],{"class":157,"line":194},[155,49803,49804],{"class":171},"--cap-add=SYS_PTRACE  ",[155,49806,45964],{"class":263},[155,49808,49809],{"class":157,"line":200},[155,49810,49811],{"class":171},"tulingmall-member:0.0.5\n",[24,49813,49814],{},"5、访问会员服务接口",[24,49816,49817],{},[37,49818],{"alt":39,"src":49819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[19,49821,49823],{"id":49822},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[24,49825,49826],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[24,49828,49829,49830],{},"阿里云docker镜像仓库：",[20318,49831,49832],{"href":49832,"rel":49833},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[43656],[24,49835,49836],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[24,49838,49839],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[24,49841,49842],{},[37,49843],{"alt":39,"src":49844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[24,49846,49847],{},"要把镜像推送到镜像仓库",[146,49849,49851],{"className":43613,"code":49850,"language":43615,"meta":39,"style":39},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[152,49852,49853],{"__ignoreMap":39},[155,49854,49855,49857,49859,49861],{"class":157,"line":158},[155,49856,46342],{"class":226},[155,49858,48686],{"class":732},[155,49860,49718],{"class":732},[155,49862,49863],{"class":732}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[24,49865,49866],{},"最后将镜像推送到远程仓库",[146,49868,49870],{"className":43613,"code":49869,"language":43615,"meta":39,"style":39},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[152,49871,49872],{"__ignoreMap":39},[155,49873,49874,49876,49878],{"class":157,"line":158},[155,49875,46342],{"class":226},[155,49877,48805],{"class":732},[155,49879,49863],{"class":732},[20011,49881,49882],{},"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":39,"searchDepth":46,"depth":46,"links":49884},[49885,49886,49887],{"id":48272,"depth":121,"text":48273},{"id":48501,"depth":121,"text":48502},{"id":49527,"depth":121,"text":49528},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":48264,"description":39},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":49894,"title":49895,"body":49896,"description":39,"extension":20021,"meta":50039,"navigation":216,"path":50040,"seo":50041,"stem":50042,"__hash__":50043},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":49897,"toc":50037},[49898,49901,49906,49911,49914,49919,49924,49927,49932,49937,49940,49945,49948,49951,49954,49957,49960,49963,49983,50005,50008,50011,50031,50034],[10,49899,49895],{"id":49900},"_7vscode远程开发",[28,49902,49903],{},[31,49904,49905],{},"插件1：微软Docker工具",[24,49907,49908],{},[37,49909],{"alt":39,"src":49910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[24,49912,49913],{},"docker扩展插件已经进化为container tools了，请安装container tools",[24,49915,49916],{},[37,49917],{"alt":39,"src":49918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[28,49920,49921],{"start":46},[31,49922,49923],{},"插件2：微软Docker远程开发工具",[24,49925,49926],{},"下面这是远程开发的插件。",[24,49928,49929],{},[37,49930],{"alt":39,"src":49931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[24,49933,49934],{},[37,49935],{"alt":39,"src":49936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[24,49938,49939],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[24,49941,49942],{},[37,49943],{"alt":39,"src":49944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[24,49946,49947],{},"安装完拓展之后，vscode进行链接：",[24,49949,49950],{},"1.按ctrl+shift+p",[24,49952,49953],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[24,49955,49956],{},"3.选择目前运行的容器",[24,49958,49959],{},"4.VS Code 会在新窗口中打开并连接到容器",[24,49961,49962],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[146,49964,49966],{"className":43613,"code":49965,"language":43615,"meta":39,"style":39},"docker run -v 主机目录:容器目录 image-name\n",[152,49967,49968],{"__ignoreMap":39},[155,49969,49970,49972,49974,49977,49980],{"class":157,"line":158},[155,49971,46342],{"class":226},[155,49973,47019],{"class":732},[155,49975,49976],{"class":263}," -v",[155,49978,49979],{"class":732}," 主机目录:容器目录",[155,49981,49982],{"class":732}," image-name\n",[146,49984,49986],{"className":43613,"code":49985,"language":43615,"meta":39,"style":39},"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",[152,49987,49988],{"__ignoreMap":39},[155,49989,49990,49992,49994,49997,49999,50002],{"class":157,"line":158},[155,49991,46342],{"class":226},[155,49993,47019],{"class":732},[155,49995,49996],{"class":263}," -it",[155,49998,49976],{"class":263},[155,50000,50001],{"class":732}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[155,50003,50004],{"class":732}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[24,50006,50007],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[24,50009,50010],{},"查看挂载情况：",[146,50012,50014],{"className":43613,"code":50013,"language":43615,"meta":39,"style":39},"mount | grep -i project\n",[152,50015,50016],{"__ignoreMap":39},[155,50017,50018,50021,50023,50026,50028],{"class":157,"line":158},[155,50019,50020],{"class":226},"mount",[155,50022,44901],{"class":167},[155,50024,50025],{"class":226}," grep",[155,50027,46219],{"class":263},[155,50029,50030],{"class":732}," project\n",[24,50032,50033],{},"也可以通过ls来进行查看",[20011,50035,50036],{},"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":39,"searchDepth":46,"depth":46,"links":50038},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":49895,"description":39},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":50045,"title":50046,"body":50047,"description":20020,"extension":20021,"meta":50051,"navigation":216,"path":50053,"seo":50054,"stem":50055,"__hash__":50056},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":50048,"toc":50049},[],{"title":39,"searchDepth":46,"depth":46,"links":50050},[],{"category":50052},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":50046,"description":20020},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":50058,"title":50059,"body":50060,"description":20020,"extension":20021,"meta":50064,"navigation":216,"path":50065,"seo":50066,"stem":50067,"__hash__":50068},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":50061,"toc":50062},[],{"title":39,"searchDepth":46,"depth":46,"links":50063},[],{"category":50052},"\u002Fwiki\u002F2025-11-10-k8s",{"title":50059,"description":20020},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":50070,"title":50071,"body":50072,"description":20020,"extension":20021,"meta":50356,"navigation":216,"path":50357,"seo":50358,"stem":50359,"__hash__":50360},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":50073,"toc":50354},[50074,50077,50085,50100,50105,50156,50159,50165,50343,50348,50351],[10,50075,50071],{"id":50076},"_1验证深度学习环境",[24,50078,50079,50080],{},"关于环境的安装，看",[20318,50081,50084],{"href":50082,"rel":50083},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[43656],"Pytorch-->深度学习",[24,50086,50087,50088,50091,50092,50095,50096,50099],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[152,50089,50090],{},"pytorch-cuda=12.4"," 是一个“ ",[20234,50093,50094],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[20234,50097,50098],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[24,50101,50102],{},[37,50103],{"alt":39,"src":50104},"\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",[146,50106,50108],{"className":43613,"code":50107,"language":43615,"meta":39,"style":39},"# 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",[152,50109,50110,50115],{"__ignoreMap":39},[155,50111,50112],{"class":157,"line":158},[155,50113,50114],{"class":161},"# CUDA 12.4\n",[155,50116,50117,50120,50122,50125,50128,50131,50134,50137,50139,50142,50145,50148,50151,50153],{"class":157,"line":46},[155,50118,50119],{"class":226},"conda",[155,50121,43625],{"class":732},[155,50123,50124],{"class":732}," pytorch==",[155,50126,50127],{"class":263},"2.5.1",[155,50129,50130],{"class":732}," torchvision==",[155,50132,50133],{"class":263},"0.20.1",[155,50135,50136],{"class":732}," torchaudio==",[155,50138,50127],{"class":263},[155,50140,50141],{"class":732}," pytorch-cuda=",[155,50143,50144],{"class":263},"12.4",[155,50146,50147],{"class":263}," -c",[155,50149,50150],{"class":732}," pytorch",[155,50152,50147],{"class":263},[155,50154,50155],{"class":732}," nvidia\n",[24,50157,50158],{},"）：",[24,50160,50161],{},[20318,50162,50163],{"href":50163,"rel":50164},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[43656],[146,50166,50168],{"className":148,"code":50167,"language":150,"meta":39,"style":39},"# 对深度学习环境进行测试\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",[152,50169,50170,50175,50181,50186,50196,50211,50216,50226,50261,50267,50278,50294,50299,50309,50321,50331],{"__ignoreMap":39},[155,50171,50172],{"class":157,"line":158},[155,50173,50174],{"class":161},"# 对深度学习环境进行测试\n",[155,50176,50177,50179],{"class":157,"line":46},[155,50178,168],{"class":167},[155,50180,172],{"class":171},[155,50182,50183],{"class":157,"line":121},[155,50184,50185],{"class":161},"# 查看cuda是否被激活\n",[155,50187,50188,50191,50193],{"class":157,"line":180},[155,50189,50190],{"class":171},"flag",[155,50192,317],{"class":167},[155,50194,50195],{"class":171},"torch.cuda.is_available()\n",[155,50197,50198,50200,50202,50205,50208],{"class":157,"line":194},[155,50199,15451],{"class":263},[155,50201,230],{"class":171},[155,50203,50204],{"class":732},"\"cuda:\"",[155,50206,50207],{"class":171},", flag)   ",[155,50209,50210],{"class":161},"#返回true的话说明被激活\n",[155,50212,50213],{"class":157,"line":200},[155,50214,50215],{"class":161},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[155,50217,50218,50221,50223],{"class":157,"line":213},[155,50219,50220],{"class":171},"ngpu",[155,50222,317],{"class":167},[155,50224,50225],{"class":263},"1\n",[155,50227,50228,50231,50233,50235,50238,50240,50243,50246,50249,50251,50253,50255,50257,50259],{"class":157,"line":220},[155,50229,50230],{"class":171},"device",[155,50232,317],{"class":167},[155,50234,753],{"class":171},[155,50236,50237],{"class":732},"\"cuda:0\"",[155,50239,759],{"class":167},[155,50241,50242],{"class":171},"(torch.cuda.is_available() ",[155,50244,50245],{"class":167},"and",[155,50247,50248],{"class":171}," ngpu",[155,50250,1148],{"class":167},[155,50252,1109],{"class":263},[155,50254,33541],{"class":171},[155,50256,765],{"class":167},[155,50258,768],{"class":732},[155,50260,363],{"class":171},[155,50262,50263,50265],{"class":157,"line":245},[155,50264,15451],{"class":263},[155,50266,8764],{"class":171},[155,50268,50269,50271,50274,50276],{"class":157,"line":251},[155,50270,15451],{"class":263},[155,50272,50273],{"class":171},"(torch.cuda.get_device_name(",[155,50275,1109],{"class":263},[155,50277,1238],{"class":171},[155,50279,50280,50282,50285,50287,50289,50291],{"class":157,"line":257},[155,50281,15451],{"class":263},[155,50283,50284],{"class":171},"(torch.rand(",[155,50286,4444],{"class":263},[155,50288,332],{"class":171},[155,50290,4444],{"class":263},[155,50292,50293],{"class":171},").cuda())\n",[155,50295,50296],{"class":157,"line":270},[155,50297,50298],{"class":161},"# 查看cuda和cudnn的版本\n",[155,50300,50301,50304,50306],{"class":157,"line":276},[155,50302,50303],{"class":171},"cuda_version",[155,50305,317],{"class":167},[155,50307,50308],{"class":171},"torch.version.cuda\n",[155,50310,50311,50313,50315,50318],{"class":157,"line":297},[155,50312,15451],{"class":263},[155,50314,230],{"class":171},[155,50316,50317],{"class":732},"\"cuda version\"",[155,50319,50320],{"class":171},",cuda_version)\n",[155,50322,50323,50326,50328],{"class":157,"line":302},[155,50324,50325],{"class":171},"cudnn_version",[155,50327,317],{"class":167},[155,50329,50330],{"class":171},"torch.backends.cudnn.version()\n",[155,50332,50333,50335,50337,50340],{"class":157,"line":308},[155,50334,15451],{"class":263},[155,50336,230],{"class":171},[155,50338,50339],{"class":732},"\"cudnn version\"",[155,50341,50342],{"class":171},",cudnn_version)\n",[24,50344,50345],{},[37,50346],{"alt":39,"src":50347},"\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",[24,50349,50350],{},"cuda:0 指的是一块显卡",[20011,50352,50353],{},"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":39,"searchDepth":46,"depth":46,"links":50355},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":50071,"description":20020},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":4,"title":5,"body":50362,"description":20020,"extension":20021,"meta":68954,"navigation":216,"path":20023,"seo":68955,"stem":20025,"__hash__":20026},{"type":7,"value":50363,"toc":68948},[50364,50366,50368,50370,50372,50376,50380,50382,50386,50390,50394,50396,50400,50404,50408,50412,50414,50418,50420,50422,50424,50426,50430,50432,50436,50440,50444,50448,50450,50452,50454,50458,50984,50988,50990,50994,50996,50998,51384,51386,51388,51390,51392,53046,53048,53052,53056,53754,53756,53760,54500,54504,56146,56150,56862,56864,56866,56870,56874,56878,56880,56884,56888,56892,56896,56900,56902,56906,58122,58126,58128,58130,58132,58272,58274,58276,59492,59496,60188,60190,60192,60196,60200,60202,60206,60210,60214,60218,60222,60226,60230,60234,60238,60242,60246,60250,60254,60258,60262,60266,60270,60274,60278,60282,60286,60290,60294,60298,60302,60306,60310,60314,60318,60322,60324,60328,60330,61730,61734,63376,63380,64072,64074,64076,64078,64542,64544,64546,64548,65944,65946,65948,66450,68188,68190,68192,68946],[10,50365,5],{"id":12},[14,50367,17],{"id":16},[19,50369,22],{"id":21},[24,50371,26],{},[28,50373,50374],{},[31,50375,33],{},[24,50377,50378],{},[37,50379],{"alt":39,"src":40},[24,50381,43],{},[28,50383,50384],{"start":46},[31,50385,49],{},[24,50387,50388],{},[37,50389],{"alt":39,"src":54},[24,50391,50392],{},[37,50393],{"alt":39,"src":59},[24,50395,62],{},[28,50397,50398],{},[31,50399,33],{},[24,50401,50402],{},[37,50403],{"alt":39,"src":71},[28,50405,50406],{"start":46},[31,50407,49],{},[24,50409,50410],{},[37,50411],{"alt":39,"src":80},[24,50413,83],{},[24,50415,50416],{},[37,50417],{"alt":39,"src":88},[24,50419,91],{},[24,50421,94],{},[24,50423,97],{},[24,50425,100],{},[24,50427,50428],{},[37,50429],{"alt":39,"src":105},[24,50431,108],{},[24,50433,50434],{},[37,50435],{"alt":39,"src":113},[24,50437,50438],{},[37,50439],{"alt":39,"src":118},[28,50441,50442],{"start":121},[31,50443,124],{},[24,50445,50446],{},[37,50447],{"alt":39,"src":129},[24,50449,132],{},[19,50451,136],{"id":135},[24,50453,139],{},[28,50455,50456],{},[31,50457,144],{},[146,50459,50460],{"className":148,"code":149,"language":150,"meta":39,"style":39},[152,50461,50462,50466,50472,50476,50486,50490,50500,50504,50520,50524,50528,50536,50540,50554,50558,50562,50604,50614,50618,50644,50678,50704,50708,50718,50722,50740,50758,50776,50780,50784,50792,50806,50816,50830,50840,50850,50864,50878,50888,50894,50898,50910,50914,50934,50938,50942,50946,50950,50954,50958,50966],{"__ignoreMap":39},[155,50463,50464],{"class":157,"line":158},[155,50465,162],{"class":161},[155,50467,50468,50470],{"class":157,"line":46},[155,50469,168],{"class":167},[155,50471,172],{"class":171},[155,50473,50474],{"class":157,"line":121},[155,50475,177],{"class":161},[155,50477,50478,50480,50482,50484],{"class":157,"line":180},[155,50479,183],{"class":167},[155,50481,186],{"class":171},[155,50483,168],{"class":167},[155,50485,191],{"class":171},[155,50487,50488],{"class":157,"line":194},[155,50489,197],{"class":161},[155,50491,50492,50494,50496,50498],{"class":157,"line":200},[155,50493,183],{"class":167},[155,50495,205],{"class":171},[155,50497,168],{"class":167},[155,50499,210],{"class":171},[155,50501,50502],{"class":157,"line":213},[155,50503,217],{"emptyLinePlaceholder":216},[155,50505,50506,50508,50510,50512,50514,50516,50518],{"class":157,"line":220},[155,50507,223],{"class":167},[155,50509,227],{"class":226},[155,50511,230],{"class":171},[155,50513,233],{"class":226},[155,50515,236],{"class":171},[155,50517,239],{"class":226},[155,50519,242],{"class":171},[155,50521,50522],{"class":157,"line":245},[155,50523,248],{"class":161},[155,50525,50526],{"class":157,"line":251},[155,50527,254],{"class":161},[155,50529,50530,50532,50534],{"class":157,"line":257},[155,50531,260],{"class":167},[155,50533,264],{"class":263},[155,50535,267],{"class":171},[155,50537,50538],{"class":157,"line":270},[155,50539,273],{"class":161},[155,50541,50542,50544,50546,50548,50550,50552],{"class":157,"line":276},[155,50543,279],{"class":263},[155,50545,282],{"class":171},[155,50547,285],{"class":263},[155,50549,288],{"class":171},[155,50551,291],{"class":263},[155,50553,294],{"class":171},[155,50555,50556],{"class":157,"line":297},[155,50557,217],{"emptyLinePlaceholder":216},[155,50559,50560],{"class":157,"line":302},[155,50561,305],{"class":161},[155,50563,50564,50566,50568,50570,50572,50574,50576,50578,50580,50582,50584,50586,50588,50590,50592,50594,50596,50598,50600,50602],{"class":157,"line":308},[155,50565,311],{"class":263},[155,50567,314],{"class":171},[155,50569,317],{"class":167},[155,50571,320],{"class":171},[155,50573,324],{"class":323},[155,50575,317],{"class":167},[155,50577,329],{"class":263},[155,50579,332],{"class":171},[155,50581,335],{"class":323},[155,50583,317],{"class":167},[155,50585,340],{"class":263},[155,50587,332],{"class":171},[155,50589,345],{"class":323},[155,50591,317],{"class":167},[155,50593,350],{"class":263},[155,50595,332],{"class":171},[155,50597,355],{"class":323},[155,50599,317],{"class":167},[155,50601,360],{"class":263},[155,50603,363],{"class":171},[155,50605,50606,50608,50610,50612],{"class":157,"line":366},[155,50607,311],{"class":263},[155,50609,371],{"class":171},[155,50611,317],{"class":167},[155,50613,376],{"class":171},[155,50615,50616],{"class":157,"line":379},[155,50617,382],{"class":161},[155,50619,50620,50622,50624,50626,50628,50630,50632,50634,50636,50638,50640,50642],{"class":157,"line":385},[155,50621,311],{"class":263},[155,50623,390],{"class":171},[155,50625,317],{"class":167},[155,50627,395],{"class":171},[155,50629,345],{"class":323},[155,50631,317],{"class":167},[155,50633,360],{"class":263},[155,50635,332],{"class":171},[155,50637,406],{"class":323},[155,50639,317],{"class":167},[155,50641,360],{"class":263},[155,50643,363],{"class":171},[155,50645,50646,50648,50650,50652,50654,50656,50658,50660,50662,50664,50666,50668,50670,50672,50674,50676],{"class":157,"line":415},[155,50647,311],{"class":263},[155,50649,420],{"class":171},[155,50651,317],{"class":167},[155,50653,320],{"class":171},[155,50655,324],{"class":323},[155,50657,317],{"class":167},[155,50659,340],{"class":263},[155,50661,332],{"class":171},[155,50663,335],{"class":323},[155,50665,317],{"class":167},[155,50667,439],{"class":263},[155,50669,332],{"class":171},[155,50671,345],{"class":323},[155,50673,317],{"class":167},[155,50675,350],{"class":263},[155,50677,363],{"class":171},[155,50679,50680,50682,50684,50686,50688,50690,50692,50694,50696,50698,50700,50702],{"class":157,"line":452},[155,50681,311],{"class":263},[155,50683,457],{"class":171},[155,50685,317],{"class":167},[155,50687,395],{"class":171},[155,50689,345],{"class":323},[155,50691,317],{"class":167},[155,50693,360],{"class":263},[155,50695,332],{"class":171},[155,50697,406],{"class":323},[155,50699,317],{"class":167},[155,50701,360],{"class":263},[155,50703,363],{"class":171},[155,50705,50706],{"class":157,"line":480},[155,50707,483],{"class":161},[155,50709,50710,50712,50714,50716],{"class":157,"line":486},[155,50711,311],{"class":263},[155,50713,491],{"class":171},[155,50715,317],{"class":167},[155,50717,496],{"class":171},[155,50719,50720],{"class":157,"line":499},[155,50721,502],{"class":161},[155,50723,50724,50726,50728,50730,50732,50734,50736,50738],{"class":157,"line":505},[155,50725,311],{"class":263},[155,50727,510],{"class":171},[155,50729,317],{"class":167},[155,50731,515],{"class":171},[155,50733,518],{"class":263},[155,50735,332],{"class":171},[155,50737,523],{"class":263},[155,50739,363],{"class":171},[155,50741,50742,50744,50746,50748,50750,50752,50754,50756],{"class":157,"line":528},[155,50743,311],{"class":263},[155,50745,533],{"class":171},[155,50747,317],{"class":167},[155,50749,515],{"class":171},[155,50751,523],{"class":263},[155,50753,332],{"class":171},[155,50755,544],{"class":263},[155,50757,363],{"class":171},[155,50759,50760,50762,50764,50766,50768,50770,50772,50774],{"class":157,"line":549},[155,50761,311],{"class":263},[155,50763,554],{"class":171},[155,50765,317],{"class":167},[155,50767,515],{"class":171},[155,50769,544],{"class":263},[155,50771,332],{"class":171},[155,50773,565],{"class":263},[155,50775,363],{"class":171},[155,50777,50778],{"class":157,"line":570},[155,50779,217],{"emptyLinePlaceholder":216},[155,50781,50782],{"class":157,"line":575},[155,50783,578],{"class":161},[155,50785,50786,50788,50790],{"class":157,"line":581},[155,50787,260],{"class":167},[155,50789,586],{"class":226},[155,50791,589],{"class":171},[155,50793,50794,50796,50798,50800,50802,50804],{"class":157,"line":592},[155,50795,595],{"class":171},[155,50797,317],{"class":167},[155,50799,285],{"class":263},[155,50801,602],{"class":171},[155,50803,285],{"class":263},[155,50805,607],{"class":171},[155,50807,50808,50810,50812,50814],{"class":157,"line":610},[155,50809,595],{"class":171},[155,50811,317],{"class":167},[155,50813,285],{"class":263},[155,50815,619],{"class":171},[155,50817,50818,50820,50822,50824,50826,50828],{"class":157,"line":622},[155,50819,595],{"class":171},[155,50821,317],{"class":167},[155,50823,285],{"class":263},[155,50825,602],{"class":171},[155,50827,285],{"class":263},[155,50829,635],{"class":171},[155,50831,50832,50834,50836,50838],{"class":157,"line":638},[155,50833,595],{"class":171},[155,50835,317],{"class":167},[155,50837,285],{"class":263},[155,50839,647],{"class":171},[155,50841,50842,50844,50846,50848],{"class":157,"line":650},[155,50843,595],{"class":171},[155,50845,317],{"class":167},[155,50847,285],{"class":263},[155,50849,659],{"class":171},[155,50851,50852,50854,50856,50858,50860,50862],{"class":157,"line":662},[155,50853,595],{"class":171},[155,50855,317],{"class":167},[155,50857,285],{"class":263},[155,50859,602],{"class":171},[155,50861,285],{"class":263},[155,50863,675],{"class":171},[155,50865,50866,50868,50870,50872,50874,50876],{"class":157,"line":678},[155,50867,595],{"class":171},[155,50869,317],{"class":167},[155,50871,285],{"class":263},[155,50873,602],{"class":171},[155,50875,285],{"class":263},[155,50877,691],{"class":171},[155,50879,50880,50882,50884,50886],{"class":157,"line":694},[155,50881,595],{"class":171},[155,50883,317],{"class":167},[155,50885,285],{"class":263},[155,50887,703],{"class":171},[155,50889,50890,50892],{"class":157,"line":706},[155,50891,709],{"class":167},[155,50893,712],{"class":171},[155,50895,50896],{"class":157,"line":715},[155,50897,217],{"emptyLinePlaceholder":216},[155,50899,50900,50902,50904,50906,50908],{"class":157,"line":720},[155,50901,723],{"class":167},[155,50903,726],{"class":263},[155,50905,729],{"class":167},[155,50907,733],{"class":732},[155,50909,736],{"class":171},[155,50911,50912],{"class":157,"line":739},[155,50913,742],{"class":161},[155,50915,50916,50918,50920,50922,50924,50926,50928,50930,50932],{"class":157,"line":745},[155,50917,748],{"class":171},[155,50919,317],{"class":167},[155,50921,753],{"class":171},[155,50923,756],{"class":732},[155,50925,759],{"class":167},[155,50927,762],{"class":171},[155,50929,765],{"class":167},[155,50931,768],{"class":732},[155,50933,363],{"class":171},[155,50935,50936],{"class":157,"line":773},[155,50937,776],{"class":161},[155,50939,50940],{"class":157,"line":779},[155,50941,782],{"class":161},[155,50943,50944],{"class":157,"line":785},[155,50945,788],{"class":161},[155,50947,50948],{"class":157,"line":791},[155,50949,217],{"emptyLinePlaceholder":216},[155,50951,50952],{"class":157,"line":796},[155,50953,799],{"class":161},[155,50955,50956],{"class":157,"line":802},[155,50957,805],{"class":161},[155,50959,50960,50962,50964],{"class":157,"line":808},[155,50961,811],{"class":171},[155,50963,317],{"class":167},[155,50965,816],{"class":171},[155,50967,50968,50970,50972,50974,50976,50978,50980,50982],{"class":157,"line":819},[155,50969,822],{"class":263},[155,50971,825],{"class":171},[155,50973,329],{"class":263},[155,50975,332],{"class":171},[155,50977,832],{"class":263},[155,50979,332],{"class":171},[155,50981,832],{"class":263},[155,50983,839],{"class":171},[24,50985,50986],{},[37,50987],{"alt":39,"src":844},[24,50989,847],{},[28,50991,50992],{"start":46},[31,50993,852],{},[24,50995,855],{},[24,50997,858],{},[146,50999,51000],{"className":148,"code":861,"language":150,"meta":39,"style":39},[152,51001,51002,51006,51010,51020,51030,51040,51044,51054,51058,51068,51072,51082,51086,51090,51106,51116,51120,51136,51146,51150,51154,51168,51178,51182,51192,51196,51206,51210,51214,51226,51238,51242,51246,51256,51266,51276,51280,51284,51288,51306,51320,51338,51348,51360,51368,51380],{"__ignoreMap":39},[155,51003,51004],{"class":157,"line":158},[155,51005,868],{"class":161},[155,51007,51008],{"class":157,"line":46},[155,51009,873],{"class":161},[155,51011,51012,51014,51016,51018],{"class":157,"line":121},[155,51013,183],{"class":167},[155,51015,880],{"class":171},[155,51017,168],{"class":167},[155,51019,885],{"class":171},[155,51021,51022,51024,51026,51028],{"class":157,"line":180},[155,51023,183],{"class":167},[155,51025,892],{"class":171},[155,51027,168],{"class":167},[155,51029,897],{"class":171},[155,51031,51032,51034,51036,51038],{"class":157,"line":194},[155,51033,168],{"class":167},[155,51035,904],{"class":171},[155,51037,907],{"class":167},[155,51039,910],{"class":171},[155,51041,51042],{"class":157,"line":200},[155,51043,915],{"class":161},[155,51045,51046,51048,51050,51052],{"class":157,"line":213},[155,51047,183],{"class":167},[155,51049,922],{"class":171},[155,51051,168],{"class":167},[155,51053,927],{"class":171},[155,51055,51056],{"class":157,"line":220},[155,51057,932],{"class":161},[155,51059,51060,51062,51064,51066],{"class":157,"line":245},[155,51061,168],{"class":167},[155,51063,939],{"class":171},[155,51065,907],{"class":167},[155,51067,944],{"class":171},[155,51069,51070],{"class":157,"line":251},[155,51071,949],{"class":161},[155,51073,51074,51076,51078,51080],{"class":157,"line":257},[155,51075,168],{"class":167},[155,51077,956],{"class":171},[155,51079,907],{"class":167},[155,51081,961],{"class":171},[155,51083,51084],{"class":157,"line":270},[155,51085,217],{"emptyLinePlaceholder":216},[155,51087,51088],{"class":157,"line":276},[155,51089,217],{"emptyLinePlaceholder":216},[155,51091,51092,51094,51096,51098,51100,51102,51104],{"class":157,"line":297},[155,51093,974],{"class":171},[155,51095,317],{"class":167},[155,51097,979],{"class":171},[155,51099,982],{"class":323},[155,51101,317],{"class":167},[155,51103,987],{"class":732},[155,51105,990],{"class":171},[155,51107,51108,51110,51112,51114],{"class":157,"line":302},[155,51109,995],{"class":323},[155,51111,317],{"class":167},[155,51113,1000],{"class":263},[155,51115,990],{"class":171},[155,51117,51118],{"class":157,"line":308},[155,51119,1007],{"class":161},[155,51121,51122,51124,51126,51128,51130,51132,51134],{"class":157,"line":366},[155,51123,1012],{"class":323},[155,51125,317],{"class":167},[155,51127,1017],{"class":171},[155,51129,1020],{"class":323},[155,51131,317],{"class":167},[155,51133,1025],{"class":263},[155,51135,1028],{"class":171},[155,51137,51138,51140,51142,51144],{"class":157,"line":379},[155,51139,1033],{"class":323},[155,51141,317],{"class":167},[155,51143,1000],{"class":263},[155,51145,363],{"class":171},[155,51147,51148],{"class":157,"line":385},[155,51149,217],{"emptyLinePlaceholder":216},[155,51151,51152],{"class":157,"line":415},[155,51153,1048],{"class":161},[155,51155,51156,51158,51160,51162,51164,51166],{"class":157,"line":452},[155,51157,1053],{"class":171},[155,51159,317],{"class":167},[155,51161,1058],{"class":171},[155,51163,1061],{"class":323},[155,51165,317],{"class":167},[155,51167,1066],{"class":171},[155,51169,51170,51172,51174,51176],{"class":157,"line":480},[155,51171,1071],{"class":323},[155,51173,317],{"class":167},[155,51175,1076],{"class":263},[155,51177,990],{"class":171},[155,51179,51180],{"class":157,"line":486},[155,51181,1083],{"class":161},[155,51183,51184,51186,51188,51190],{"class":157,"line":499},[155,51185,1088],{"class":323},[155,51187,317],{"class":167},[155,51189,1000],{"class":263},[155,51191,990],{"class":171},[155,51193,51194],{"class":157,"line":505},[155,51195,1099],{"class":161},[155,51197,51198,51200,51202,51204],{"class":157,"line":528},[155,51199,1104],{"class":323},[155,51201,317],{"class":167},[155,51203,1109],{"class":263},[155,51205,363],{"class":171},[155,51207,51208],{"class":157,"line":549},[155,51209,217],{"emptyLinePlaceholder":216},[155,51211,51212],{"class":157,"line":570},[155,51213,1120],{"class":161},[155,51215,51216,51218,51220,51222,51224],{"class":157,"line":575},[155,51217,1125],{"class":167},[155,51219,1128],{"class":171},[155,51221,1131],{"class":167},[155,51223,1134],{"class":263},[155,51225,1137],{"class":171},[155,51227,51228,51230,51232,51234,51236],{"class":157,"line":581},[155,51229,1142],{"class":167},[155,51231,1145],{"class":171},[155,51233,1148],{"class":167},[155,51235,1151],{"class":263},[155,51237,736],{"class":171},[155,51239,51240],{"class":157,"line":592},[155,51241,1158],{"class":167},[155,51243,51244],{"class":157,"line":610},[155,51245,1163],{"class":161},[155,51247,51248,51250,51252,51254],{"class":157,"line":622},[155,51249,1168],{"class":171},[155,51251,317],{"class":167},[155,51253,1173],{"class":171},[155,51255,1176],{"class":161},[155,51257,51258,51260,51262,51264],{"class":157,"line":638},[155,51259,1181],{"class":171},[155,51261,317],{"class":167},[155,51263,1186],{"class":171},[155,51265,1189],{"class":161},[155,51267,51268,51270,51272,51274],{"class":157,"line":650},[155,51269,1194],{"class":171},[155,51271,317],{"class":167},[155,51273,1199],{"class":171},[155,51275,1202],{"class":161},[155,51277,51278],{"class":157,"line":662},[155,51279,1207],{"class":161},[155,51281,51282],{"class":157,"line":678},[155,51283,217],{"emptyLinePlaceholder":216},[155,51285,51286],{"class":157,"line":694},[155,51287,1216],{"class":161},[155,51289,51290,51292,51294,51296,51298,51300,51302,51304],{"class":157,"line":706},[155,51291,1221],{"class":171},[155,51293,1224],{"class":323},[155,51295,317],{"class":167},[155,51297,230],{"class":171},[155,51299,1231],{"class":263},[155,51301,332],{"class":171},[155,51303,350],{"class":263},[155,51305,1238],{"class":171},[155,51307,51308,51310,51312,51314,51316,51318],{"class":157,"line":715},[155,51309,1125],{"class":167},[155,51311,1245],{"class":171},[155,51313,1131],{"class":167},[155,51315,1250],{"class":171},[155,51317,1253],{"class":263},[155,51319,1256],{"class":171},[155,51321,51322,51324,51326,51328,51330,51332,51334,51336],{"class":157,"line":720},[155,51323,1261],{"class":171},[155,51325,1264],{"class":263},[155,51327,332],{"class":171},[155,51329,439],{"class":263},[155,51331,1271],{"class":171},[155,51333,1274],{"class":167},[155,51335,1277],{"class":263},[155,51337,363],{"class":171},[155,51339,51340,51342,51344,51346],{"class":157,"line":739},[155,51341,1284],{"class":171},[155,51343,1287],{"class":323},[155,51345,317],{"class":167},[155,51347,1292],{"class":171},[155,51349,51350,51352,51354,51356,51358],{"class":157,"line":745},[155,51351,1297],{"class":171},[155,51353,1020],{"class":323},[155,51355,317],{"class":167},[155,51357,565],{"class":263},[155,51359,363],{"class":171},[155,51361,51362,51364,51366],{"class":157,"line":773},[155,51363,1310],{"class":171},[155,51365,1313],{"class":732},[155,51367,363],{"class":171},[155,51369,51370,51372,51374,51376,51378],{"class":157,"line":779},[155,51371,1320],{"class":171},[155,51373,1323],{"class":323},[155,51375,317],{"class":167},[155,51377,1328],{"class":263},[155,51379,363],{"class":171},[155,51381,51382],{"class":157,"line":785},[155,51383,1335],{"class":171},[24,51385,1338],{},[24,51387,1341],{},[24,51389,1344],{},[24,51391,1347],{},[146,51393,51394],{"className":148,"code":1350,"language":150,"meta":39,"style":39},[152,51395,51396,51402,51408,51412,51422,51428,51438,51448,51458,51468,51478,51482,51492,51502,51506,51510,51514,51522,51534,51544,51560,51570,51602,51616,51626,51636,51640,51650,51664,51674,51684,51694,51700,51704,51708,51712,51716,51720,51728,51748,51752,51756,51760,51764,51768,51784,51788,51792,51800,51804,51808,51816,51820,51824,51828,51836,51840,51844,51848,51852,51860,51864,51872,51876,51884,51888,51896,51900,51908,51912,51916,51924,51928,51932,51936,51948,51972,51986,51990,51994,51998,52006,52010,52018,52022,52030,52034,52042,52046,52054,52058,52066,52070,52082,52086,52094,52098,52106,52110,52114,52118,52122,52130,52134,52150,52154,52162,52166,52170,52174,52178,52182,52186,52190,52206,52210,52222,52226,52238,52242,52254,52258,52266,52270,52278,52282,52286,52292,52296,52304,52308,52324,52328,52336,52340,52356,52368,52372,52384,52388,52392,52400,52404,52408,52416,52420,52428,52432,52440,52444,52448,52490,52532,52536,52540,52556,52560,52576,52580,52584,52592,52596,52600,52612,52650,52654,52658,52662,52670,52674,52678,52682,52696,52706,52712,52718,52724,52730,52734,52738,52744,52748,52752,52760,52764,52782,52786,52790,52794,52810,52814,52818,52822,52826,52830,52850,52870,52874,52878,52882,52890,52898,52902,52918,52938,52958,52962,52966,52974,52982,52986,52990,52994,53006,53010,53018,53026,53042],{"__ignoreMap":39},[155,51397,51398,51400],{"class":157,"line":158},[155,51399,168],{"class":167},[155,51401,1359],{"class":171},[155,51403,51404,51406],{"class":157,"line":46},[155,51405,168],{"class":167},[155,51407,1366],{"class":171},[155,51409,51410],{"class":157,"line":121},[155,51411,217],{"emptyLinePlaceholder":216},[155,51413,51414,51416,51418,51420],{"class":157,"line":180},[155,51415,168],{"class":167},[155,51417,1377],{"class":171},[155,51419,907],{"class":167},[155,51421,1382],{"class":171},[155,51423,51424,51426],{"class":157,"line":194},[155,51425,168],{"class":167},[155,51427,172],{"class":171},[155,51429,51430,51432,51434,51436],{"class":157,"line":200},[155,51431,183],{"class":167},[155,51433,939],{"class":171},[155,51435,168],{"class":167},[155,51437,1399],{"class":171},[155,51439,51440,51442,51444,51446],{"class":157,"line":213},[155,51441,183],{"class":167},[155,51443,892],{"class":171},[155,51445,168],{"class":167},[155,51447,897],{"class":171},[155,51449,51450,51452,51454,51456],{"class":157,"line":220},[155,51451,183],{"class":167},[155,51453,922],{"class":171},[155,51455,168],{"class":167},[155,51457,927],{"class":171},[155,51459,51460,51462,51464,51466],{"class":157,"line":245},[155,51461,168],{"class":167},[155,51463,939],{"class":171},[155,51465,907],{"class":167},[155,51467,944],{"class":171},[155,51469,51470,51472,51474,51476],{"class":157,"line":251},[155,51471,168],{"class":167},[155,51473,956],{"class":171},[155,51475,907],{"class":167},[155,51477,961],{"class":171},[155,51479,51480],{"class":157,"line":257},[155,51481,1444],{"class":161},[155,51483,51484,51486,51488,51490],{"class":157,"line":270},[155,51485,183],{"class":167},[155,51487,1451],{"class":171},[155,51489,168],{"class":167},[155,51491,1456],{"class":171},[155,51493,51494,51496,51498,51500],{"class":157,"line":276},[155,51495,183],{"class":167},[155,51497,186],{"class":171},[155,51499,168],{"class":167},[155,51501,191],{"class":171},[155,51503,51504],{"class":157,"line":297},[155,51505,217],{"emptyLinePlaceholder":216},[155,51507,51508],{"class":157,"line":302},[155,51509,217],{"emptyLinePlaceholder":216},[155,51511,51512],{"class":157,"line":308},[155,51513,1479],{"class":161},[155,51515,51516,51518,51520],{"class":157,"line":366},[155,51517,1484],{"class":167},[155,51519,1487],{"class":226},[155,51521,1490],{"class":171},[155,51523,51524,51526,51528,51530,51532],{"class":157,"line":379},[155,51525,1495],{"class":171},[155,51527,317],{"class":167},[155,51529,979],{"class":171},[155,51531,987],{"class":732},[155,51533,990],{"class":171},[155,51535,51536,51538,51540,51542],{"class":157,"line":385},[155,51537,1508],{"class":323},[155,51539,317],{"class":167},[155,51541,1000],{"class":263},[155,51543,990],{"class":171},[155,51545,51546,51548,51550,51552,51554,51556,51558],{"class":157,"line":415},[155,51547,1519],{"class":323},[155,51549,317],{"class":167},[155,51551,1017],{"class":171},[155,51553,1020],{"class":323},[155,51555,317],{"class":167},[155,51557,832],{"class":263},[155,51559,1028],{"class":171},[155,51561,51562,51564,51566,51568],{"class":157,"line":452},[155,51563,1536],{"class":323},[155,51565,317],{"class":167},[155,51567,1000],{"class":263},[155,51569,363],{"class":171},[155,51571,51572,51574,51576,51578,51580,51582,51584,51586,51588,51590,51592,51594,51596,51598,51600],{"class":157,"line":480},[155,51573,1547],{"class":171},[155,51575,317],{"class":167},[155,51577,1552],{"class":171},[155,51579,1555],{"class":263},[155,51581,230],{"class":171},[155,51583,1560],{"class":263},[155,51585,1563],{"class":167},[155,51587,1253],{"class":263},[155,51589,1568],{"class":171},[155,51591,1555],{"class":263},[155,51593,230],{"class":171},[155,51595,1575],{"class":263},[155,51597,1563],{"class":167},[155,51599,1253],{"class":263},[155,51601,1582],{"class":171},[155,51603,51604,51606,51608,51610,51612,51614],{"class":157,"line":486},[155,51605,1587],{"class":171},[155,51607,317],{"class":167},[155,51609,1592],{"class":171},[155,51611,1061],{"class":323},[155,51613,317],{"class":167},[155,51615,1066],{"class":171},[155,51617,51618,51620,51622,51624],{"class":157,"line":499},[155,51619,1603],{"class":323},[155,51621,317],{"class":167},[155,51623,1608],{"class":263},[155,51625,990],{"class":171},[155,51627,51628,51630,51632,51634],{"class":157,"line":505},[155,51629,1615],{"class":323},[155,51631,317],{"class":167},[155,51633,1000],{"class":263},[155,51635,990],{"class":171},[155,51637,51638],{"class":157,"line":528},[155,51639,1626],{"class":161},[155,51641,51642,51644,51646,51648],{"class":157,"line":549},[155,51643,1631],{"class":323},[155,51645,317],{"class":167},[155,51647,1636],{"class":263},[155,51649,363],{"class":171},[155,51651,51652,51654,51656,51658,51660,51662],{"class":157,"line":570},[155,51653,1643],{"class":171},[155,51655,317],{"class":167},[155,51657,1058],{"class":171},[155,51659,1061],{"class":323},[155,51661,317],{"class":167},[155,51663,1654],{"class":171},[155,51665,51666,51668,51670,51672],{"class":157,"line":575},[155,51667,1659],{"class":323},[155,51669,317],{"class":167},[155,51671,1608],{"class":263},[155,51673,990],{"class":171},[155,51675,51676,51678,51680,51682],{"class":157,"line":581},[155,51677,1670],{"class":323},[155,51679,317],{"class":167},[155,51681,1000],{"class":263},[155,51683,990],{"class":171},[155,51685,51686,51688,51690,51692],{"class":157,"line":592},[155,51687,1681],{"class":323},[155,51689,317],{"class":167},[155,51691,1636],{"class":263},[155,51693,363],{"class":171},[155,51695,51696,51698],{"class":157,"line":610},[155,51697,1692],{"class":167},[155,51699,1695],{"class":171},[155,51701,51702],{"class":157,"line":622},[155,51703,217],{"emptyLinePlaceholder":216},[155,51705,51706],{"class":157,"line":638},[155,51707,1704],{"class":161},[155,51709,51710],{"class":157,"line":650},[155,51711,1709],{"class":161},[155,51713,51714],{"class":157,"line":662},[155,51715,217],{"emptyLinePlaceholder":216},[155,51717,51718],{"class":157,"line":678},[155,51719,1718],{"class":161},[155,51721,51722,51724,51726],{"class":157,"line":694},[155,51723,1484],{"class":167},[155,51725,1725],{"class":226},[155,51727,1728],{"class":171},[155,51729,51730,51732,51734,51736,51738,51740,51742,51744,51746],{"class":157,"line":706},[155,51731,748],{"class":171},[155,51733,317],{"class":167},[155,51735,753],{"class":171},[155,51737,756],{"class":732},[155,51739,759],{"class":167},[155,51741,762],{"class":171},[155,51743,765],{"class":167},[155,51745,1747],{"class":732},[155,51747,363],{"class":171},[155,51749,51750],{"class":157,"line":715},[155,51751,217],{"emptyLinePlaceholder":216},[155,51753,51754],{"class":157,"line":720},[155,51755,217],{"emptyLinePlaceholder":216},[155,51757,51758],{"class":157,"line":739},[155,51759,1762],{"class":161},[155,51761,51762],{"class":157,"line":745},[155,51763,1767],{"class":161},[155,51765,51766],{"class":157,"line":773},[155,51767,1772],{"class":161},[155,51769,51770,51772,51774,51776,51778,51780,51782],{"class":157,"line":779},[155,51771,1777],{"class":171},[155,51773,317],{"class":167},[155,51775,1782],{"class":171},[155,51777,1785],{"class":323},[155,51779,317],{"class":167},[155,51781,1790],{"class":263},[155,51783,363],{"class":171},[155,51785,51786],{"class":157,"line":785},[155,51787,217],{"emptyLinePlaceholder":216},[155,51789,51790],{"class":157,"line":791},[155,51791,1801],{"class":161},[155,51793,51794,51796,51798],{"class":157,"line":796},[155,51795,1806],{"class":171},[155,51797,317],{"class":167},[155,51799,1811],{"class":171},[155,51801,51802],{"class":157,"line":802},[155,51803,217],{"emptyLinePlaceholder":216},[155,51805,51806],{"class":157,"line":808},[155,51807,1820],{"class":161},[155,51809,51810,51812,51814],{"class":157,"line":819},[155,51811,811],{"class":171},[155,51813,317],{"class":167},[155,51815,1829],{"class":171},[155,51817,51818],{"class":157,"line":1832},[155,51819,1835],{"class":161},[155,51821,51822],{"class":157,"line":1838},[155,51823,1841],{"class":161},[155,51825,51826],{"class":157,"line":1844},[155,51827,1847],{"class":161},[155,51829,51830,51832,51834],{"class":157,"line":1850},[155,51831,1853],{"class":171},[155,51833,317],{"class":167},[155,51835,1858],{"class":171},[155,51837,51838],{"class":157,"line":1861},[155,51839,217],{"emptyLinePlaceholder":216},[155,51841,51842],{"class":157,"line":1866},[155,51843,217],{"emptyLinePlaceholder":216},[155,51845,51846],{"class":157,"line":1871},[155,51847,1874],{"class":161},[155,51849,51850],{"class":157,"line":1877},[155,51851,1880],{"class":161},[155,51853,51854,51856,51858],{"class":157,"line":1883},[155,51855,1886],{"class":171},[155,51857,317],{"class":167},[155,51859,1891],{"class":263},[155,51861,51862],{"class":157,"line":1894},[155,51863,1897],{"class":161},[155,51865,51866,51868,51870],{"class":157,"line":1900},[155,51867,1903],{"class":171},[155,51869,317],{"class":167},[155,51871,1908],{"class":171},[155,51873,51874],{"class":157,"line":1911},[155,51875,1914],{"class":161},[155,51877,51878,51880,51882],{"class":157,"line":1917},[155,51879,1920],{"class":171},[155,51881,317],{"class":167},[155,51883,1908],{"class":171},[155,51885,51886],{"class":157,"line":1927},[155,51887,1930],{"class":161},[155,51889,51890,51892,51894],{"class":157,"line":1933},[155,51891,1936],{"class":171},[155,51893,317],{"class":167},[155,51895,1908],{"class":171},[155,51897,51898],{"class":157,"line":1943},[155,51899,1946],{"class":161},[155,51901,51902,51904,51906],{"class":157,"line":1949},[155,51903,1952],{"class":171},[155,51905,317],{"class":167},[155,51907,1908],{"class":171},[155,51909,51910],{"class":157,"line":1959},[155,51911,217],{"emptyLinePlaceholder":216},[155,51913,51914],{"class":157,"line":1964},[155,51915,1967],{"class":161},[155,51917,51918,51920,51922],{"class":157,"line":1970},[155,51919,1973],{"class":171},[155,51921,317],{"class":167},[155,51923,1978],{"class":171},[155,51925,51926],{"class":157,"line":1981},[155,51927,217],{"emptyLinePlaceholder":216},[155,51929,51930],{"class":157,"line":1986},[155,51931,217],{"emptyLinePlaceholder":216},[155,51933,51934],{"class":157,"line":1991},[155,51935,1994],{"class":161},[155,51937,51938,51940,51942,51944,51946],{"class":157,"line":1997},[155,51939,2000],{"class":167},[155,51941,2003],{"class":171},[155,51943,1131],{"class":167},[155,51945,2008],{"class":263},[155,51947,2011],{"class":171},[155,51949,51950,51952,51954,51956,51958,51960,51962,51964,51966,51968,51970],{"class":157,"line":2014},[155,51951,2017],{"class":263},[155,51953,230],{"class":171},[155,51955,2022],{"class":732},[155,51957,2025],{"class":263},[155,51959,2028],{"class":732},[155,51961,2025],{"class":263},[155,51963,2033],{"class":732},[155,51965,2036],{"class":171},[155,51967,2039],{"class":167},[155,51969,329],{"class":263},[155,51971,1238],{"class":171},[155,51973,51974,51976,51978,51980,51982,51984],{"class":157,"line":2046},[155,51975,2017],{"class":263},[155,51977,230],{"class":171},[155,51979,2053],{"class":732},[155,51981,1563],{"class":167},[155,51983,565],{"class":263},[155,51985,363],{"class":171},[155,51987,51988],{"class":157,"line":2062},[155,51989,217],{"emptyLinePlaceholder":216},[155,51991,51992],{"class":157,"line":2067},[155,51993,2070],{"class":161},[155,51995,51996],{"class":157,"line":2073},[155,51997,2076],{"class":161},[155,51999,52000,52002,52004],{"class":157,"line":2079},[155,52001,2082],{"class":171},[155,52003,317],{"class":167},[155,52005,1891],{"class":263},[155,52007,52008],{"class":157,"line":2089},[155,52009,2092],{"class":161},[155,52011,52012,52014,52016],{"class":157,"line":2095},[155,52013,2098],{"class":171},[155,52015,317],{"class":167},[155,52017,2103],{"class":263},[155,52019,52020],{"class":157,"line":2106},[155,52021,2109],{"class":161},[155,52023,52024,52026,52028],{"class":157,"line":2112},[155,52025,2115],{"class":171},[155,52027,317],{"class":167},[155,52029,1891],{"class":263},[155,52031,52032],{"class":157,"line":2122},[155,52033,2125],{"class":161},[155,52035,52036,52038,52040],{"class":157,"line":2128},[155,52037,2131],{"class":171},[155,52039,317],{"class":167},[155,52041,2103],{"class":263},[155,52043,52044],{"class":157,"line":2138},[155,52045,2141],{"class":161},[155,52047,52048,52050,52052],{"class":157,"line":2144},[155,52049,2147],{"class":171},[155,52051,317],{"class":167},[155,52053,2103],{"class":263},[155,52055,52056],{"class":157,"line":2154},[155,52057,2157],{"class":161},[155,52059,52060,52062,52064],{"class":157,"line":2160},[155,52061,2163],{"class":171},[155,52063,317],{"class":167},[155,52065,2103],{"class":263},[155,52067,52068],{"class":157,"line":2170},[155,52069,2173],{"class":161},[155,52071,52072,52074,52076,52078,52080],{"class":157,"line":2176},[155,52073,2179],{"class":167},[155,52075,1128],{"class":171},[155,52077,1131],{"class":167},[155,52079,1134],{"class":263},[155,52081,2188],{"class":171},[155,52083,52084],{"class":157,"line":2191},[155,52085,2194],{"class":161},[155,52087,52088,52090,52092],{"class":157,"line":2197},[155,52089,2200],{"class":171},[155,52091,317],{"class":167},[155,52093,2205],{"class":171},[155,52095,52096],{"class":157,"line":2208},[155,52097,2211],{"class":161},[155,52099,52100,52102,52104],{"class":157,"line":2214},[155,52101,2217],{"class":171},[155,52103,317],{"class":167},[155,52105,2222],{"class":171},[155,52107,52108],{"class":157,"line":2225},[155,52109,2228],{"class":161},[155,52111,52112],{"class":157,"line":2231},[155,52113,2234],{"class":171},[155,52115,52116],{"class":157,"line":2237},[155,52117,2240],{"class":161},[155,52119,52120],{"class":157,"line":2243},[155,52121,2246],{"class":161},[155,52123,52124,52126,52128],{"class":157,"line":2249},[155,52125,2252],{"class":171},[155,52127,317],{"class":167},[155,52129,2257],{"class":171},[155,52131,52132],{"class":157,"line":2260},[155,52133,2263],{"class":161},[155,52135,52136,52138,52140,52142,52144,52146,52148],{"class":157,"line":2266},[155,52137,2269],{"class":171},[155,52139,317],{"class":167},[155,52141,2274],{"class":171},[155,52143,2277],{"class":323},[155,52145,317],{"class":167},[155,52147,329],{"class":263},[155,52149,363],{"class":171},[155,52151,52152],{"class":157,"line":2286},[155,52153,2289],{"class":161},[155,52155,52156,52158,52160],{"class":157,"line":2292},[155,52157,2295],{"class":171},[155,52159,317],{"class":167},[155,52161,2300],{"class":171},[155,52163,52164],{"class":157,"line":2303},[155,52165,2306],{"class":161},[155,52167,52168],{"class":157,"line":2309},[155,52169,2312],{"class":171},[155,52171,52172],{"class":157,"line":2315},[155,52173,2318],{"class":161},[155,52175,52176],{"class":157,"line":2321},[155,52177,2324],{"class":171},[155,52179,52180],{"class":157,"line":2327},[155,52181,2330],{"class":161},[155,52183,52184],{"class":157,"line":2333},[155,52185,2336],{"class":171},[155,52187,52188],{"class":157,"line":2339},[155,52189,2342],{"class":161},[155,52191,52192,52194,52196,52198,52200,52202,52204],{"class":157,"line":2345},[155,52193,2348],{"class":171},[155,52195,2351],{"class":167},[155,52197,2354],{"class":171},[155,52199,1563],{"class":167},[155,52201,2359],{"class":171},[155,52203,1109],{"class":263},[155,52205,363],{"class":171},[155,52207,52208],{"class":157,"line":2366},[155,52209,2369],{"class":161},[155,52211,52212,52214,52216,52218,52220],{"class":157,"line":2372},[155,52213,2375],{"class":171},[155,52215,2351],{"class":167},[155,52217,2380],{"class":171},[155,52219,729],{"class":167},[155,52221,2385],{"class":171},[155,52223,52224],{"class":157,"line":2388},[155,52225,2391],{"class":161},[155,52227,52228,52230,52232,52234,52236],{"class":157,"line":2394},[155,52229,2397],{"class":171},[155,52231,2351],{"class":167},[155,52233,2359],{"class":171},[155,52235,1109],{"class":263},[155,52237,363],{"class":171},[155,52239,52240],{"class":157,"line":2408},[155,52241,2411],{"class":161},[155,52243,52244,52246,52248,52250,52252],{"class":157,"line":2414},[155,52245,2179],{"class":167},[155,52247,2419],{"class":171},[155,52249,1131],{"class":167},[155,52251,1134],{"class":263},[155,52253,2426],{"class":171},[155,52255,52256],{"class":157,"line":2429},[155,52257,2432],{"class":161},[155,52259,52260,52262,52264],{"class":157,"line":2435},[155,52261,2200],{"class":171},[155,52263,317],{"class":167},[155,52265,2205],{"class":171},[155,52267,52268],{"class":157,"line":2444},[155,52269,2447],{"class":161},[155,52271,52272,52274,52276],{"class":157,"line":2450},[155,52273,2217],{"class":171},[155,52275,317],{"class":167},[155,52277,2222],{"class":171},[155,52279,52280],{"class":157,"line":2459},[155,52281,2462],{"class":161},[155,52283,52284],{"class":157,"line":2465},[155,52285,2468],{"class":171},[155,52287,52288,52290],{"class":157,"line":2471},[155,52289,2474],{"class":167},[155,52291,2477],{"class":171},[155,52293,52294],{"class":157,"line":2480},[155,52295,2483],{"class":161},[155,52297,52298,52300,52302],{"class":157,"line":2486},[155,52299,2489],{"class":171},[155,52301,317],{"class":167},[155,52303,2494],{"class":171},[155,52305,52306],{"class":157,"line":2497},[155,52307,2500],{"class":161},[155,52309,52310,52312,52314,52316,52318,52320,52322],{"class":157,"line":2503},[155,52311,2506],{"class":171},[155,52313,317],{"class":167},[155,52315,2511],{"class":171},[155,52317,2277],{"class":323},[155,52319,317],{"class":167},[155,52321,329],{"class":263},[155,52323,363],{"class":171},[155,52325,52326],{"class":157,"line":2522},[155,52327,2525],{"class":161},[155,52329,52330,52332,52334],{"class":157,"line":2528},[155,52331,2531],{"class":171},[155,52333,317],{"class":167},[155,52335,2536],{"class":171},[155,52337,52338],{"class":157,"line":2539},[155,52339,2542],{"class":161},[155,52341,52342,52344,52346,52348,52350,52352,52354],{"class":157,"line":2545},[155,52343,2548],{"class":171},[155,52345,2351],{"class":167},[155,52347,2553],{"class":171},[155,52349,1563],{"class":167},[155,52351,2558],{"class":171},[155,52353,1109],{"class":263},[155,52355,363],{"class":171},[155,52357,52358,52360,52362,52364,52366],{"class":157,"line":2565},[155,52359,2568],{"class":171},[155,52361,2351],{"class":167},[155,52363,2573],{"class":171},[155,52365,729],{"class":167},[155,52367,2578],{"class":171},[155,52369,52370],{"class":157,"line":2581},[155,52371,2584],{"class":161},[155,52373,52374,52376,52378,52380,52382],{"class":157,"line":2587},[155,52375,2590],{"class":171},[155,52377,2351],{"class":167},[155,52379,2558],{"class":171},[155,52381,1109],{"class":263},[155,52383,363],{"class":171},[155,52385,52386],{"class":157,"line":2601},[155,52387,2604],{"class":161},[155,52389,52390],{"class":157,"line":2607},[155,52391,2610],{"class":161},[155,52393,52394,52396,52398],{"class":157,"line":2613},[155,52395,2616],{"class":171},[155,52397,2028],{"class":167},[155,52399,2621],{"class":171},[155,52401,52402],{"class":157,"line":2624},[155,52403,2627],{"class":161},[155,52405,52406],{"class":157,"line":2630},[155,52407,2633],{"class":161},[155,52409,52410,52412,52414],{"class":157,"line":2636},[155,52411,2639],{"class":171},[155,52413,2028],{"class":167},[155,52415,2621],{"class":171},[155,52417,52418],{"class":157,"line":2646},[155,52419,2649],{"class":161},[155,52421,52422,52424,52426],{"class":157,"line":2652},[155,52423,2655],{"class":171},[155,52425,2028],{"class":167},[155,52427,2660],{"class":171},[155,52429,52430],{"class":157,"line":2663},[155,52431,2666],{"class":161},[155,52433,52434,52436,52438],{"class":157,"line":2669},[155,52435,2672],{"class":171},[155,52437,2028],{"class":167},[155,52439,2660],{"class":171},[155,52441,52442],{"class":157,"line":2679},[155,52443,217],{"emptyLinePlaceholder":216},[155,52445,52446],{"class":157,"line":2684},[155,52447,2687],{"class":161},[155,52449,52450,52452,52454,52456,52458,52460,52462,52464,52466,52468,52470,52472,52474,52476,52478,52480,52482,52484,52486,52488],{"class":157,"line":2690},[155,52451,2017],{"class":263},[155,52453,230],{"class":171},[155,52455,2697],{"class":732},[155,52457,2025],{"class":263},[155,52459,2702],{"class":732},[155,52461,2705],{"class":263},[155,52463,2708],{"class":167},[155,52465,2711],{"class":263},[155,52467,2714],{"class":732},[155,52469,2705],{"class":263},[155,52471,2708],{"class":167},[155,52473,2711],{"class":263},[155,52475,2697],{"class":732},[155,52477,2725],{"class":171},[155,52479,2039],{"class":167},[155,52481,329],{"class":263},[155,52483,2732],{"class":171},[155,52485,2039],{"class":167},[155,52487,329],{"class":263},[155,52489,2739],{"class":171},[155,52491,52492,52494,52496,52498,52500,52502,52504,52506,52508,52510,52512,52514,52516,52518,52520,52522,52524,52526,52528,52530],{"class":157,"line":2742},[155,52493,2017],{"class":263},[155,52495,230],{"class":171},[155,52497,2697],{"class":732},[155,52499,2025],{"class":263},[155,52501,2753],{"class":732},[155,52503,2705],{"class":263},[155,52505,2708],{"class":167},[155,52507,2711],{"class":263},[155,52509,2762],{"class":732},[155,52511,2705],{"class":263},[155,52513,2708],{"class":167},[155,52515,2711],{"class":263},[155,52517,2697],{"class":732},[155,52519,2773],{"class":171},[155,52521,2039],{"class":167},[155,52523,329],{"class":263},[155,52525,2780],{"class":171},[155,52527,2039],{"class":167},[155,52529,329],{"class":263},[155,52531,2739],{"class":171},[155,52533,52534],{"class":157,"line":2789},[155,52535,217],{"emptyLinePlaceholder":216},[155,52537,52538],{"class":157,"line":2794},[155,52539,2797],{"class":161},[155,52541,52542,52544,52546,52548,52550,52552,52554],{"class":157,"line":2800},[155,52543,2803],{"class":167},[155,52545,2806],{"class":171},[155,52547,2039],{"class":167},[155,52549,329],{"class":263},[155,52551,2813],{"class":171},[155,52553,1148],{"class":167},[155,52555,2818],{"class":171},[155,52557,52558],{"class":157,"line":2821},[155,52559,2824],{"class":161},[155,52561,52562,52564,52566,52568,52570,52572,52574],{"class":157,"line":2827},[155,52563,2830],{"class":171},[155,52565,2833],{"class":263},[155,52567,317],{"class":167},[155,52569,2838],{"class":171},[155,52571,2039],{"class":167},[155,52573,329],{"class":263},[155,52575,2845],{"class":171},[155,52577,52578],{"class":157,"line":2848},[155,52579,2851],{"class":161},[155,52581,52582],{"class":157,"line":2854},[155,52583,2857],{"class":161},[155,52585,52586,52588,52590],{"class":157,"line":2860},[155,52587,2863],{"class":171},[155,52589,317],{"class":167},[155,52591,1858],{"class":171},[155,52593,52594],{"class":157,"line":2870},[155,52595,217],{"emptyLinePlaceholder":216},[155,52597,52598],{"class":157,"line":2875},[155,52599,2878],{"class":161},[155,52601,52602,52604,52606,52608,52610],{"class":157,"line":2881},[155,52603,2884],{"class":171},[155,52605,317],{"class":167},[155,52607,2889],{"class":171},[155,52609,2039],{"class":167},[155,52611,2894],{"class":171},[155,52613,52614,52616,52618,52620,52622,52624,52626,52628,52630,52632,52634,52636,52638,52640,52642,52644,52646,52648],{"class":157,"line":2897},[155,52615,2017],{"class":263},[155,52617,230],{"class":171},[155,52619,2904],{"class":732},[155,52621,2705],{"class":263},[155,52623,2909],{"class":167},[155,52625,2711],{"class":263},[155,52627,2914],{"class":732},[155,52629,2705],{"class":263},[155,52631,2909],{"class":167},[155,52633,2711],{"class":263},[155,52635,2923],{"class":732},[155,52637,2926],{"class":171},[155,52639,2929],{"class":167},[155,52641,2932],{"class":263},[155,52643,2935],{"class":171},[155,52645,2938],{"class":167},[155,52647,2932],{"class":263},[155,52649,1238],{"class":171},[155,52651,52652],{"class":157,"line":2945},[155,52653,2948],{"class":161},[155,52655,52656],{"class":157,"line":2951},[155,52657,2954],{"class":161},[155,52659,52660],{"class":157,"line":2957},[155,52661,2960],{"class":161},[155,52663,52664,52666,52668],{"class":157,"line":2963},[155,52665,2966],{"class":171},[155,52667,2969],{"class":732},[155,52669,363],{"class":171},[155,52671,52672],{"class":157,"line":2974},[155,52673,2977],{"class":161},[155,52675,52676],{"class":157,"line":2980},[155,52677,2983],{"class":161},[155,52679,52680],{"class":157,"line":2986},[155,52681,2989],{"class":161},[155,52683,52684,52686,52688,52690,52692,52694],{"class":157,"line":2992},[155,52685,2995],{"class":171},[155,52687,317],{"class":167},[155,52689,3000],{"class":171},[155,52691,3003],{"class":323},[155,52693,317],{"class":167},[155,52695,3008],{"class":171},[155,52697,52698,52700,52702,52704],{"class":157,"line":3011},[155,52699,3014],{"class":732},[155,52701,3017],{"class":171},[155,52703,3020],{"class":263},[155,52705,3023],{"class":171},[155,52707,52708,52710],{"class":157,"line":3026},[155,52709,3029],{"class":732},[155,52711,3032],{"class":171},[155,52713,52714,52716],{"class":157,"line":3035},[155,52715,3038],{"class":732},[155,52717,3041],{"class":171},[155,52719,52720,52722],{"class":157,"line":3044},[155,52721,3047],{"class":732},[155,52723,3050],{"class":171},[155,52725,52726,52728],{"class":157,"line":3053},[155,52727,3056],{"class":732},[155,52729,3059],{"class":171},[155,52731,52732],{"class":157,"line":3062},[155,52733,3065],{"class":171},[155,52735,52736],{"class":157,"line":3068},[155,52737,3071],{"class":161},[155,52739,52740,52742],{"class":157,"line":3074},[155,52741,1692],{"class":167},[155,52743,3079],{"class":171},[155,52745,52746],{"class":157,"line":3082},[155,52747,217],{"emptyLinePlaceholder":216},[155,52749,52750],{"class":157,"line":3087},[155,52751,3090],{"class":161},[155,52753,52754,52756,52758],{"class":157,"line":3093},[155,52755,1484],{"class":167},[155,52757,3098],{"class":226},[155,52759,3101],{"class":171},[155,52761,52762],{"class":157,"line":3104},[155,52763,3107],{"class":161},[155,52765,52766,52768,52770,52772,52774,52776,52778,52780],{"class":157,"line":3110},[155,52767,3113],{"class":171},[155,52769,1224],{"class":323},[155,52771,317],{"class":167},[155,52773,230],{"class":171},[155,52775,1231],{"class":263},[155,52777,332],{"class":171},[155,52779,1264],{"class":263},[155,52781,1238],{"class":171},[155,52783,52784],{"class":157,"line":3130},[155,52785,3133],{"class":161},[155,52787,52788],{"class":157,"line":3136},[155,52789,3139],{"class":161},[155,52791,52792],{"class":157,"line":3142},[155,52793,3145],{"class":161},[155,52795,52796,52798,52800,52802,52804,52806,52808],{"class":157,"line":3148},[155,52797,1261],{"class":171},[155,52799,329],{"class":263},[155,52801,332],{"class":171},[155,52803,360],{"class":263},[155,52805,332],{"class":171},[155,52807,329],{"class":263},[155,52809,363],{"class":171},[155,52811,52812],{"class":157,"line":3165},[155,52813,3168],{"class":161},[155,52815,52816],{"class":157,"line":3171},[155,52817,3174],{"class":161},[155,52819,52820],{"class":157,"line":3177},[155,52821,3180],{"class":161},[155,52823,52824],{"class":157,"line":3183},[155,52825,3186],{"class":161},[155,52827,52828],{"class":157,"line":3189},[155,52829,3192],{"class":161},[155,52831,52832,52834,52836,52838,52840,52842,52844,52846,52848],{"class":157,"line":3195},[155,52833,3198],{"class":171},[155,52835,3201],{"class":732},[155,52837,3204],{"class":171},[155,52839,3207],{"class":732},[155,52841,332],{"class":171},[155,52843,3212],{"class":323},[155,52845,317],{"class":167},[155,52847,3217],{"class":732},[155,52849,363],{"class":171},[155,52851,52852,52854,52856,52858,52860,52862,52864,52866,52868],{"class":157,"line":3222},[155,52853,3198],{"class":171},[155,52855,3201],{"class":732},[155,52857,3229],{"class":171},[155,52859,3232],{"class":732},[155,52861,332],{"class":171},[155,52863,3212],{"class":323},[155,52865,317],{"class":167},[155,52867,3241],{"class":732},[155,52869,363],{"class":171},[155,52871,52872],{"class":157,"line":3246},[155,52873,3249],{"class":161},[155,52875,52876],{"class":157,"line":3252},[155,52877,3255],{"class":171},[155,52879,52880],{"class":157,"line":3258},[155,52881,3261],{"class":161},[155,52883,52884,52886,52888],{"class":157,"line":3264},[155,52885,3267],{"class":171},[155,52887,3270],{"class":732},[155,52889,363],{"class":171},[155,52891,52892,52894,52896],{"class":157,"line":3275},[155,52893,3278],{"class":171},[155,52895,3281],{"class":732},[155,52897,363],{"class":171},[155,52899,52900],{"class":157,"line":3286},[155,52901,3289],{"class":161},[155,52903,52904,52906,52908,52910,52912,52914,52916],{"class":157,"line":3292},[155,52905,1261],{"class":171},[155,52907,329],{"class":263},[155,52909,332],{"class":171},[155,52911,360],{"class":263},[155,52913,332],{"class":171},[155,52915,360],{"class":263},[155,52917,363],{"class":171},[155,52919,52920,52922,52924,52926,52928,52930,52932,52934,52936],{"class":157,"line":3309},[155,52921,3198],{"class":171},[155,52923,3201],{"class":732},[155,52925,3316],{"class":171},[155,52927,3207],{"class":732},[155,52929,332],{"class":171},[155,52931,3212],{"class":323},[155,52933,317],{"class":167},[155,52935,3327],{"class":732},[155,52937,363],{"class":171},[155,52939,52940,52942,52944,52946,52948,52950,52952,52954,52956],{"class":157,"line":3332},[155,52941,3198],{"class":171},[155,52943,3201],{"class":732},[155,52945,3339],{"class":171},[155,52947,3232],{"class":732},[155,52949,332],{"class":171},[155,52951,3212],{"class":323},[155,52953,317],{"class":167},[155,52955,3350],{"class":732},[155,52957,363],{"class":171},[155,52959,52960],{"class":157,"line":3355},[155,52961,3358],{"class":161},[155,52963,52964],{"class":157,"line":3361},[155,52965,3255],{"class":171},[155,52967,52968,52970,52972],{"class":157,"line":3366},[155,52969,3267],{"class":171},[155,52971,3201],{"class":732},[155,52973,363],{"class":171},[155,52975,52976,52978,52980],{"class":157,"line":3375},[155,52977,3278],{"class":171},[155,52979,3380],{"class":732},[155,52981,363],{"class":171},[155,52983,52984],{"class":157,"line":3385},[155,52985,3388],{"class":171},[155,52987,52988],{"class":157,"line":3391},[155,52989,217],{"emptyLinePlaceholder":216},[155,52991,52992],{"class":157,"line":3396},[155,52993,3399],{"class":161},[155,52995,52996,52998,53000,53002,53004],{"class":157,"line":3402},[155,52997,723],{"class":167},[155,52999,726],{"class":263},[155,53001,729],{"class":167},[155,53003,733],{"class":732},[155,53005,736],{"class":171},[155,53007,53008],{"class":157,"line":3415},[155,53009,3418],{"class":161},[155,53011,53012,53014,53016],{"class":157,"line":3421},[155,53013,3424],{"class":171},[155,53015,317],{"class":167},[155,53017,3429],{"class":171},[155,53019,53020,53022,53024],{"class":157,"line":3432},[155,53021,3435],{"class":171},[155,53023,317],{"class":167},[155,53025,3440],{"class":171},[155,53027,53028,53030,53032,53034,53036,53038,53040],{"class":157,"line":3443},[155,53029,2995],{"class":171},[155,53031,317],{"class":167},[155,53033,3450],{"class":171},[155,53035,3453],{"class":323},[155,53037,317],{"class":167},[155,53039,3458],{"class":263},[155,53041,363],{"class":171},[155,53043,53044],{"class":157,"line":3463},[155,53045,3466],{"class":171},[24,53047,3469],{},[24,53049,53050],{},[37,53051],{"alt":39,"src":3474},[28,53053,53054],{"start":121},[31,53055,3479],{},[146,53057,53058],{"className":148,"code":3482,"language":150,"meta":39,"style":39},[152,53059,53060,53066,53076,53086,53096,53100,53110,53120,53124,53128,53136,53152,53162,53178,53188,53202,53206,53216,53226,53236,53242,53246,53250,53258,53262,53278,53286,53290,53294,53302,53310,53314,53318,53322,53326,53332,53336,53346,53354,53362,53366,53370,53374,53382,53386,53402,53406,53410,53414,53426,53430,53442,53446,53450,53462,53466,53476,53480,53484,53496,53500,53508,53512,53516,53524,53528,53536,53540,53544,53548,53552,53556,53572,53580,53584,53588,53636,53642,53646,53656,53664,53672,53676,53680,53684,53688,53696,53700,53716,53720,53728,53736],{"__ignoreMap":39},[155,53061,53062,53064],{"class":157,"line":158},[155,53063,168],{"class":167},[155,53065,172],{"class":171},[155,53067,53068,53070,53072,53074],{"class":157,"line":46},[155,53069,168],{"class":167},[155,53071,939],{"class":171},[155,53073,907],{"class":167},[155,53075,944],{"class":171},[155,53077,53078,53080,53082,53084],{"class":157,"line":121},[155,53079,183],{"class":167},[155,53081,3507],{"class":171},[155,53083,168],{"class":167},[155,53085,3512],{"class":171},[155,53087,53088,53090,53092,53094],{"class":157,"line":180},[155,53089,183],{"class":167},[155,53091,922],{"class":171},[155,53093,168],{"class":167},[155,53095,927],{"class":171},[155,53097,53098],{"class":157,"line":194},[155,53099,3527],{"class":161},[155,53101,53102,53104,53106,53108],{"class":157,"line":200},[155,53103,183],{"class":167},[155,53105,892],{"class":171},[155,53107,168],{"class":167},[155,53109,897],{"class":171},[155,53111,53112,53114,53116,53118],{"class":157,"line":213},[155,53113,183],{"class":167},[155,53115,1451],{"class":171},[155,53117,168],{"class":167},[155,53119,1456],{"class":171},[155,53121,53122],{"class":157,"line":220},[155,53123,217],{"emptyLinePlaceholder":216},[155,53125,53126],{"class":157,"line":245},[155,53127,3556],{"class":161},[155,53129,53130,53132,53134],{"class":157,"line":251},[155,53131,1484],{"class":167},[155,53133,3563],{"class":226},[155,53135,1490],{"class":171},[155,53137,53138,53140,53142,53144,53146,53148,53150],{"class":157,"line":257},[155,53139,3570],{"class":171},[155,53141,317],{"class":167},[155,53143,979],{"class":171},[155,53145,982],{"class":323},[155,53147,317],{"class":167},[155,53149,987],{"class":732},[155,53151,990],{"class":171},[155,53153,53154,53156,53158,53160],{"class":157,"line":270},[155,53155,3587],{"class":323},[155,53157,317],{"class":167},[155,53159,3592],{"class":263},[155,53161,990],{"class":171},[155,53163,53164,53166,53168,53170,53172,53174,53176],{"class":157,"line":276},[155,53165,3599],{"class":323},[155,53167,317],{"class":167},[155,53169,1017],{"class":171},[155,53171,1020],{"class":323},[155,53173,317],{"class":167},[155,53175,832],{"class":263},[155,53177,1028],{"class":171},[155,53179,53180,53182,53184,53186],{"class":157,"line":297},[155,53181,3616],{"class":323},[155,53183,317],{"class":167},[155,53185,1000],{"class":263},[155,53187,363],{"class":171},[155,53189,53190,53192,53194,53196,53198,53200],{"class":157,"line":302},[155,53191,3627],{"class":171},[155,53193,317],{"class":167},[155,53195,1058],{"class":171},[155,53197,1061],{"class":323},[155,53199,317],{"class":167},[155,53201,3638],{"class":171},[155,53203,53204],{"class":157,"line":308},[155,53205,3643],{"class":161},[155,53207,53208,53210,53212,53214],{"class":157,"line":366},[155,53209,3648],{"class":323},[155,53211,317],{"class":167},[155,53213,329],{"class":263},[155,53215,990],{"class":171},[155,53217,53218,53220,53222,53224],{"class":157,"line":379},[155,53219,3659],{"class":323},[155,53221,317],{"class":167},[155,53223,1000],{"class":263},[155,53225,990],{"class":171},[155,53227,53228,53230,53232,53234],{"class":157,"line":385},[155,53229,3670],{"class":323},[155,53231,317],{"class":167},[155,53233,1109],{"class":263},[155,53235,363],{"class":171},[155,53237,53238,53240],{"class":157,"line":415},[155,53239,1692],{"class":167},[155,53241,3683],{"class":171},[155,53243,53244],{"class":157,"line":452},[155,53245,217],{"emptyLinePlaceholder":216},[155,53247,53248],{"class":157,"line":480},[155,53249,3692],{"class":161},[155,53251,53252,53254,53256],{"class":157,"line":486},[155,53253,1484],{"class":167},[155,53255,3699],{"class":226},[155,53257,3702],{"class":171},[155,53259,53260],{"class":157,"line":499},[155,53261,3707],{"class":161},[155,53263,53264,53266,53268,53270,53272,53274,53276],{"class":157,"line":505},[155,53265,748],{"class":171},[155,53267,317],{"class":167},[155,53269,756],{"class":732},[155,53271,759],{"class":167},[155,53273,762],{"class":171},[155,53275,765],{"class":167},[155,53277,3724],{"class":732},[155,53279,53280,53282,53284],{"class":157,"line":528},[155,53281,811],{"class":171},[155,53283,317],{"class":167},[155,53285,1829],{"class":171},[155,53287,53288],{"class":157,"line":549},[155,53289,217],{"emptyLinePlaceholder":216},[155,53291,53292],{"class":157,"line":570},[155,53293,3741],{"class":161},[155,53295,53296,53298,53300],{"class":157,"line":575},[155,53297,3746],{"class":171},[155,53299,317],{"class":167},[155,53301,1891],{"class":263},[155,53303,53304,53306,53308],{"class":157,"line":581},[155,53305,3755],{"class":171},[155,53307,317],{"class":167},[155,53309,2103],{"class":263},[155,53311,53312],{"class":157,"line":592},[155,53313,217],{"emptyLinePlaceholder":216},[155,53315,53316],{"class":157,"line":610},[155,53317,3768],{"class":161},[155,53319,53320],{"class":157,"line":622},[155,53321,3773],{"class":161},[155,53323,53324],{"class":157,"line":638},[155,53325,3778],{"class":161},[155,53327,53328,53330],{"class":157,"line":650},[155,53329,3783],{"class":167},[155,53331,2477],{"class":171},[155,53333,53334],{"class":157,"line":662},[155,53335,3790],{"class":161},[155,53337,53338,53340,53342,53344],{"class":157,"line":678},[155,53339,2179],{"class":167},[155,53341,3797],{"class":171},[155,53343,1131],{"class":167},[155,53345,3802],{"class":171},[155,53347,53348,53350,53352],{"class":157,"line":694},[155,53349,3807],{"class":171},[155,53351,317],{"class":167},[155,53353,3812],{"class":171},[155,53355,53356,53358,53360],{"class":157,"line":706},[155,53357,3817],{"class":171},[155,53359,317],{"class":167},[155,53361,3822],{"class":171},[155,53363,53364],{"class":157,"line":715},[155,53365,3827],{"class":161},[155,53367,53368],{"class":157,"line":720},[155,53369,2468],{"class":171},[155,53371,53372],{"class":157,"line":739},[155,53373,3836],{"class":161},[155,53375,53376,53378,53380],{"class":157,"line":745},[155,53377,2252],{"class":171},[155,53379,317],{"class":167},[155,53381,3845],{"class":171},[155,53383,53384],{"class":157,"line":773},[155,53385,3850],{"class":161},[155,53387,53388,53390,53392,53394,53396,53398,53400],{"class":157,"line":779},[155,53389,2269],{"class":171},[155,53391,317],{"class":167},[155,53393,2274],{"class":171},[155,53395,2277],{"class":323},[155,53397,317],{"class":167},[155,53399,329],{"class":263},[155,53401,363],{"class":171},[155,53403,53404],{"class":157,"line":785},[155,53405,3871],{"class":161},[155,53407,53408],{"class":157,"line":791},[155,53409,3876],{"class":161},[155,53411,53412],{"class":157,"line":796},[155,53413,3881],{"class":161},[155,53415,53416,53418,53420,53422,53424],{"class":157,"line":802},[155,53417,3886],{"class":171},[155,53419,2351],{"class":167},[155,53421,2380],{"class":171},[155,53423,729],{"class":167},[155,53425,3895],{"class":171},[155,53427,53428],{"class":157,"line":808},[155,53429,3900],{"class":161},[155,53431,53432,53434,53436,53438,53440],{"class":157,"line":819},[155,53433,3905],{"class":171},[155,53435,2351],{"class":167},[155,53437,3910],{"class":171},[155,53439,1109],{"class":263},[155,53441,363],{"class":171},[155,53443,53444],{"class":157,"line":1832},[155,53445,217],{"emptyLinePlaceholder":216},[155,53447,53448],{"class":157,"line":1838},[155,53449,3923],{"class":161},[155,53451,53452,53454,53456,53458,53460],{"class":157,"line":1844},[155,53453,3928],{"class":171},[155,53455,317],{"class":167},[155,53457,3933],{"class":171},[155,53459,2028],{"class":167},[155,53461,3938],{"class":171},[155,53463,53464],{"class":157,"line":1850},[155,53465,3943],{"class":161},[155,53467,53468,53470,53472,53474],{"class":157,"line":1861},[155,53469,2017],{"class":263},[155,53471,230],{"class":171},[155,53473,3952],{"class":732},[155,53475,3955],{"class":171},[155,53477,53478],{"class":157,"line":1866},[155,53479,217],{"emptyLinePlaceholder":216},[155,53481,53482],{"class":157,"line":1871},[155,53483,3964],{"class":161},[155,53485,53486,53488,53490,53492,53494],{"class":157,"line":1877},[155,53487,723],{"class":167},[155,53489,726],{"class":263},[155,53491,729],{"class":167},[155,53493,733],{"class":732},[155,53495,736],{"class":171},[155,53497,53498],{"class":157,"line":1883},[155,53499,3981],{"class":161},[155,53501,53502,53504,53506],{"class":157,"line":1894},[155,53503,811],{"class":171},[155,53505,317],{"class":167},[155,53507,3429],{"class":171},[155,53509,53510],{"class":157,"line":1900},[155,53511,3994],{"class":161},[155,53513,53514],{"class":157,"line":1911},[155,53515,3999],{"class":161},[155,53517,53518,53520,53522],{"class":157,"line":1917},[155,53519,4004],{"class":171},[155,53521,4007],{"class":732},[155,53523,1238],{"class":171},[155,53525,53526],{"class":157,"line":1927},[155,53527,4014],{"class":161},[155,53529,53530,53532,53534],{"class":157,"line":1933},[155,53531,3627],{"class":171},[155,53533,317],{"class":167},[155,53535,4023],{"class":171},[155,53537,53538],{"class":157,"line":1943},[155,53539,4028],{"class":161},[155,53541,53542],{"class":157,"line":1949},[155,53543,4033],{"class":171},[155,53545,53546],{"class":157,"line":1959},[155,53547,217],{"emptyLinePlaceholder":216},[155,53549,53550],{"class":157,"line":1964},[155,53551,4042],{"class":161},[155,53553,53554],{"class":157,"line":1970},[155,53555,4047],{"class":161},[155,53557,53558,53560,53562,53564,53566,53568,53570],{"class":157,"line":1981},[155,53559,748],{"class":171},[155,53561,317],{"class":167},[155,53563,756],{"class":732},[155,53565,759],{"class":167},[155,53567,762],{"class":171},[155,53569,765],{"class":167},[155,53571,3724],{"class":732},[155,53573,53574,53576,53578],{"class":157,"line":1986},[155,53575,811],{"class":171},[155,53577,317],{"class":167},[155,53579,1829],{"class":171},[155,53581,53582],{"class":157,"line":1991},[155,53583,4076],{"class":161},[155,53585,53586],{"class":157,"line":1997},[155,53587,4081],{"class":161},[155,53589,53590,53592,53594,53596,53598,53600,53602,53604,53606,53608,53610,53612,53614,53616,53618,53620,53622,53624,53626,53628,53630,53632,53634],{"class":157,"line":2014},[155,53591,4086],{"class":171},[155,53593,317],{"class":167},[155,53595,4091],{"class":171},[155,53597,4094],{"class":732},[155,53599,332],{"class":171},[155,53601,4099],{"class":732},[155,53603,332],{"class":171},[155,53605,4104],{"class":732},[155,53607,332],{"class":171},[155,53609,4109],{"class":732},[155,53611,332],{"class":171},[155,53613,4114],{"class":732},[155,53615,332],{"class":171},[155,53617,4119],{"class":732},[155,53619,332],{"class":171},[155,53621,4124],{"class":732},[155,53623,332],{"class":171},[155,53625,4129],{"class":732},[155,53627,332],{"class":171},[155,53629,4134],{"class":732},[155,53631,332],{"class":171},[155,53633,4139],{"class":732},[155,53635,2845],{"class":171},[155,53637,53638,53640],{"class":157,"line":2046},[155,53639,3783],{"class":167},[155,53641,2477],{"class":171},[155,53643,53644],{"class":157,"line":2062},[155,53645,4152],{"class":161},[155,53647,53648,53650,53652,53654],{"class":157,"line":2067},[155,53649,2179],{"class":167},[155,53651,4159],{"class":171},[155,53653,1131],{"class":167},[155,53655,3802],{"class":171},[155,53657,53658,53660,53662],{"class":157,"line":2073},[155,53659,2200],{"class":171},[155,53661,317],{"class":167},[155,53663,2205],{"class":171},[155,53665,53666,53668,53670],{"class":157,"line":2079},[155,53667,2217],{"class":171},[155,53669,317],{"class":167},[155,53671,2222],{"class":171},[155,53673,53674],{"class":157,"line":2089},[155,53675,217],{"emptyLinePlaceholder":216},[155,53677,53678],{"class":157,"line":2095},[155,53679,4188],{"class":161},[155,53681,53682],{"class":157,"line":2106},[155,53683,2468],{"class":171},[155,53685,53686],{"class":157,"line":2112},[155,53687,4197],{"class":161},[155,53689,53690,53692,53694],{"class":157,"line":2122},[155,53691,2252],{"class":171},[155,53693,317],{"class":167},[155,53695,2257],{"class":171},[155,53697,53698],{"class":157,"line":2128},[155,53699,4210],{"class":161},[155,53701,53702,53704,53706,53708,53710,53712,53714],{"class":157,"line":2138},[155,53703,2269],{"class":171},[155,53705,317],{"class":167},[155,53707,2274],{"class":171},[155,53709,2277],{"class":323},[155,53711,317],{"class":167},[155,53713,329],{"class":263},[155,53715,363],{"class":171},[155,53717,53718],{"class":157,"line":2144},[155,53719,4231],{"class":161},[155,53721,53722,53724,53726],{"class":157,"line":2154},[155,53723,4236],{"class":171},[155,53725,317],{"class":167},[155,53727,4241],{"class":171},[155,53729,53730,53732,53734],{"class":157,"line":2160},[155,53731,4246],{"class":171},[155,53733,317],{"class":167},[155,53735,4251],{"class":171},[155,53737,53738,53740,53742,53744,53746,53748,53750,53752],{"class":157,"line":2170},[155,53739,4256],{"class":263},[155,53741,230],{"class":171},[155,53743,4261],{"class":732},[155,53745,4264],{"class":171},[155,53747,4267],{"class":732},[155,53749,332],{"class":171},[155,53751,4272],{"class":732},[155,53753,4275],{"class":171},[24,53755,4278],{},[28,53757,53758],{},[31,53759,4283],{},[146,53761,53762],{"className":148,"code":4286,"language":150,"meta":39,"style":39},[152,53763,53764,53770,53780,53790,53800,53804,53820,53828,53842,53852,53894,53920,53962,53988,54030,54072,54114,54140,54144,54154,54158,54184,54202,54220,54224,54228,54236,54250,54260,54274,54284,54298,54312,54326,54336,54340,54344,54354,54368,54372,54384,54398,54410,54414,54424,54428,54434,54438,54450,54470,54474,54482],{"__ignoreMap":39},[155,53765,53766,53768],{"class":157,"line":158},[155,53767,168],{"class":167},[155,53769,172],{"class":171},[155,53771,53772,53774,53776,53778],{"class":157,"line":46},[155,53773,183],{"class":167},[155,53775,186],{"class":171},[155,53777,168],{"class":167},[155,53779,191],{"class":171},[155,53781,53782,53784,53786,53788],{"class":157,"line":121},[155,53783,183],{"class":167},[155,53785,205],{"class":171},[155,53787,168],{"class":167},[155,53789,210],{"class":171},[155,53791,53792,53794,53796,53798],{"class":157,"line":180},[155,53793,168],{"class":167},[155,53795,4321],{"class":171},[155,53797,907],{"class":167},[155,53799,4326],{"class":171},[155,53801,53802],{"class":157,"line":194},[155,53803,217],{"emptyLinePlaceholder":216},[155,53805,53806,53808,53810,53812,53814,53816,53818],{"class":157,"line":200},[155,53807,223],{"class":167},[155,53809,4337],{"class":226},[155,53811,230],{"class":171},[155,53813,233],{"class":226},[155,53815,236],{"class":171},[155,53817,239],{"class":226},[155,53819,242],{"class":171},[155,53821,53822,53824,53826],{"class":157,"line":213},[155,53823,260],{"class":167},[155,53825,264],{"class":263},[155,53827,267],{"class":171},[155,53829,53830,53832,53834,53836,53838,53840],{"class":157,"line":220},[155,53831,279],{"class":263},[155,53833,4362],{"class":171},[155,53835,285],{"class":263},[155,53837,288],{"class":171},[155,53839,291],{"class":263},[155,53841,294],{"class":171},[155,53843,53844,53846,53848,53850],{"class":157,"line":245},[155,53845,311],{"class":263},[155,53847,4377],{"class":171},[155,53849,317],{"class":167},[155,53851,4382],{"class":171},[155,53853,53854,53856,53858,53860,53862,53864,53866,53868,53870,53872,53874,53876,53878,53880,53882,53884,53886,53888,53890,53892],{"class":157,"line":251},[155,53855,311],{"class":263},[155,53857,314],{"class":171},[155,53859,317],{"class":167},[155,53861,320],{"class":171},[155,53863,324],{"class":323},[155,53865,317],{"class":167},[155,53867,329],{"class":263},[155,53869,332],{"class":171},[155,53871,335],{"class":323},[155,53873,317],{"class":167},[155,53875,4407],{"class":263},[155,53877,332],{"class":171},[155,53879,345],{"class":323},[155,53881,317],{"class":167},[155,53883,4416],{"class":263},[155,53885,332],{"class":171},[155,53887,406],{"class":323},[155,53889,317],{"class":167},[155,53891,1264],{"class":263},[155,53893,363],{"class":171},[155,53895,53896,53898,53900,53902,53904,53906,53908,53910,53912,53914,53916,53918],{"class":157,"line":257},[155,53897,311],{"class":263},[155,53899,390],{"class":171},[155,53901,317],{"class":167},[155,53903,4437],{"class":171},[155,53905,345],{"class":323},[155,53907,317],{"class":167},[155,53909,4444],{"class":263},[155,53911,332],{"class":171},[155,53913,406],{"class":323},[155,53915,317],{"class":167},[155,53917,360],{"class":263},[155,53919,363],{"class":171},[155,53921,53922,53924,53926,53928,53930,53932,53934,53936,53938,53940,53942,53944,53946,53948,53950,53952,53954,53956,53958,53960],{"class":157,"line":270},[155,53923,311],{"class":263},[155,53925,420],{"class":171},[155,53927,317],{"class":167},[155,53929,320],{"class":171},[155,53931,324],{"class":323},[155,53933,317],{"class":167},[155,53935,4407],{"class":263},[155,53937,332],{"class":171},[155,53939,335],{"class":323},[155,53941,317],{"class":167},[155,53943,4479],{"class":263},[155,53945,332],{"class":171},[155,53947,345],{"class":323},[155,53949,317],{"class":167},[155,53951,350],{"class":263},[155,53953,332],{"class":171},[155,53955,355],{"class":323},[155,53957,317],{"class":167},[155,53959,360],{"class":263},[155,53961,363],{"class":171},[155,53963,53964,53966,53968,53970,53972,53974,53976,53978,53980,53982,53984,53986],{"class":157,"line":276},[155,53965,311],{"class":263},[155,53967,457],{"class":171},[155,53969,317],{"class":167},[155,53971,4437],{"class":171},[155,53973,345],{"class":323},[155,53975,317],{"class":167},[155,53977,4444],{"class":263},[155,53979,332],{"class":171},[155,53981,406],{"class":323},[155,53983,317],{"class":167},[155,53985,360],{"class":263},[155,53987,363],{"class":171},[155,53989,53990,53992,53994,53996,53998,54000,54002,54004,54006,54008,54010,54012,54014,54016,54018,54020,54022,54024,54026,54028],{"class":157,"line":297},[155,53991,311],{"class":263},[155,53993,4530],{"class":171},[155,53995,317],{"class":167},[155,53997,320],{"class":171},[155,53999,324],{"class":323},[155,54001,317],{"class":167},[155,54003,4479],{"class":263},[155,54005,332],{"class":171},[155,54007,335],{"class":323},[155,54009,317],{"class":167},[155,54011,4549],{"class":263},[155,54013,332],{"class":171},[155,54015,345],{"class":323},[155,54017,317],{"class":167},[155,54019,4444],{"class":263},[155,54021,332],{"class":171},[155,54023,355],{"class":323},[155,54025,317],{"class":167},[155,54027,329],{"class":263},[155,54029,363],{"class":171},[155,54031,54032,54034,54036,54038,54040,54042,54044,54046,54048,54050,54052,54054,54056,54058,54060,54062,54064,54066,54068,54070],{"class":157,"line":302},[155,54033,311],{"class":263},[155,54035,4574],{"class":171},[155,54037,317],{"class":167},[155,54039,320],{"class":171},[155,54041,324],{"class":323},[155,54043,317],{"class":167},[155,54045,4549],{"class":263},[155,54047,332],{"class":171},[155,54049,335],{"class":323},[155,54051,317],{"class":167},[155,54053,4549],{"class":263},[155,54055,332],{"class":171},[155,54057,345],{"class":323},[155,54059,317],{"class":167},[155,54061,4444],{"class":263},[155,54063,332],{"class":171},[155,54065,355],{"class":323},[155,54067,317],{"class":167},[155,54069,329],{"class":263},[155,54071,363],{"class":171},[155,54073,54074,54076,54078,54080,54082,54084,54086,54088,54090,54092,54094,54096,54098,54100,54102,54104,54106,54108,54110,54112],{"class":157,"line":308},[155,54075,311],{"class":263},[155,54077,4617],{"class":171},[155,54079,317],{"class":167},[155,54081,320],{"class":171},[155,54083,324],{"class":323},[155,54085,317],{"class":167},[155,54087,4549],{"class":263},[155,54089,332],{"class":171},[155,54091,335],{"class":323},[155,54093,317],{"class":167},[155,54095,4479],{"class":263},[155,54097,332],{"class":171},[155,54099,345],{"class":323},[155,54101,317],{"class":167},[155,54103,4444],{"class":263},[155,54105,332],{"class":171},[155,54107,355],{"class":323},[155,54109,317],{"class":167},[155,54111,329],{"class":263},[155,54113,363],{"class":171},[155,54115,54116,54118,54120,54122,54124,54126,54128,54130,54132,54134,54136,54138],{"class":157,"line":366},[155,54117,311],{"class":263},[155,54119,4660],{"class":171},[155,54121,317],{"class":167},[155,54123,4437],{"class":171},[155,54125,345],{"class":323},[155,54127,317],{"class":167},[155,54129,4444],{"class":263},[155,54131,332],{"class":171},[155,54133,406],{"class":323},[155,54135,317],{"class":167},[155,54137,360],{"class":263},[155,54139,363],{"class":171},[155,54141,54142],{"class":157,"line":379},[155,54143,483],{"class":161},[155,54145,54146,54148,54150,54152],{"class":157,"line":385},[155,54147,311],{"class":263},[155,54149,491],{"class":171},[155,54151,317],{"class":167},[155,54153,496],{"class":171},[155,54155,54156],{"class":157,"line":415},[155,54157,4699],{"class":161},[155,54159,54160,54162,54164,54166,54168,54170,54172,54174,54176,54178,54180,54182],{"class":157,"line":452},[155,54161,311],{"class":263},[155,54163,4706],{"class":171},[155,54165,317],{"class":167},[155,54167,515],{"class":171},[155,54169,340],{"class":263},[155,54171,1563],{"class":167},[155,54173,340],{"class":263},[155,54175,1563],{"class":167},[155,54177,4479],{"class":263},[155,54179,332],{"class":171},[155,54181,4725],{"class":263},[155,54183,363],{"class":171},[155,54185,54186,54188,54190,54192,54194,54196,54198,54200],{"class":157,"line":480},[155,54187,311],{"class":263},[155,54189,4734],{"class":171},[155,54191,317],{"class":167},[155,54193,515],{"class":171},[155,54195,4725],{"class":263},[155,54197,332],{"class":171},[155,54199,4725],{"class":263},[155,54201,363],{"class":171},[155,54203,54204,54206,54208,54210,54212,54214,54216,54218],{"class":157,"line":486},[155,54205,311],{"class":263},[155,54207,4753],{"class":171},[155,54209,317],{"class":167},[155,54211,515],{"class":171},[155,54213,4725],{"class":263},[155,54215,332],{"class":171},[155,54217,565],{"class":263},[155,54219,363],{"class":171},[155,54221,54222],{"class":157,"line":499},[155,54223,217],{"emptyLinePlaceholder":216},[155,54225,54226],{"class":157,"line":505},[155,54227,4774],{"class":161},[155,54229,54230,54232,54234],{"class":157,"line":528},[155,54231,260],{"class":167},[155,54233,586],{"class":226},[155,54235,589],{"class":171},[155,54237,54238,54240,54242,54244,54246,54248],{"class":157,"line":549},[155,54239,595],{"class":171},[155,54241,317],{"class":167},[155,54243,285],{"class":263},[155,54245,4793],{"class":171},[155,54247,285],{"class":263},[155,54249,607],{"class":171},[155,54251,54252,54254,54256,54258],{"class":157,"line":570},[155,54253,595],{"class":171},[155,54255,317],{"class":167},[155,54257,285],{"class":263},[155,54259,619],{"class":171},[155,54261,54262,54264,54266,54268,54270,54272],{"class":157,"line":575},[155,54263,595],{"class":171},[155,54265,317],{"class":167},[155,54267,285],{"class":263},[155,54269,4793],{"class":171},[155,54271,285],{"class":263},[155,54273,635],{"class":171},[155,54275,54276,54278,54280,54282],{"class":157,"line":581},[155,54277,595],{"class":171},[155,54279,317],{"class":167},[155,54281,285],{"class":263},[155,54283,647],{"class":171},[155,54285,54286,54288,54290,54292,54294,54296],{"class":157,"line":592},[155,54287,595],{"class":171},[155,54289,317],{"class":167},[155,54291,285],{"class":263},[155,54293,4793],{"class":171},[155,54295,285],{"class":263},[155,54297,4846],{"class":171},[155,54299,54300,54302,54304,54306,54308,54310],{"class":157,"line":610},[155,54301,595],{"class":171},[155,54303,317],{"class":167},[155,54305,285],{"class":263},[155,54307,4793],{"class":171},[155,54309,285],{"class":263},[155,54311,4861],{"class":171},[155,54313,54314,54316,54318,54320,54322,54324],{"class":157,"line":622},[155,54315,595],{"class":171},[155,54317,317],{"class":167},[155,54319,285],{"class":263},[155,54321,4793],{"class":171},[155,54323,285],{"class":263},[155,54325,4876],{"class":171},[155,54327,54328,54330,54332,54334],{"class":157,"line":638},[155,54329,595],{"class":171},[155,54331,317],{"class":167},[155,54333,285],{"class":263},[155,54335,4887],{"class":171},[155,54337,54338],{"class":157,"line":650},[155,54339,217],{"emptyLinePlaceholder":216},[155,54341,54342],{"class":157,"line":662},[155,54343,4896],{"class":161},[155,54345,54346,54348,54350,54352],{"class":157,"line":678},[155,54347,595],{"class":171},[155,54349,317],{"class":167},[155,54351,285],{"class":263},[155,54353,659],{"class":171},[155,54355,54356,54358,54360,54362,54364,54366],{"class":157,"line":694},[155,54357,595],{"class":171},[155,54359,317],{"class":167},[155,54361,285],{"class":263},[155,54363,4793],{"class":171},[155,54365,285],{"class":263},[155,54367,4921],{"class":171},[155,54369,54370],{"class":157,"line":706},[155,54371,4926],{"class":161},[155,54373,54374,54376,54378,54380,54382],{"class":157,"line":715},[155,54375,595],{"class":171},[155,54377,317],{"class":167},[155,54379,4935],{"class":171},[155,54381,4938],{"class":263},[155,54383,363],{"class":171},[155,54385,54386,54388,54390,54392,54394,54396],{"class":157,"line":720},[155,54387,595],{"class":171},[155,54389,317],{"class":167},[155,54391,285],{"class":263},[155,54393,4793],{"class":171},[155,54395,285],{"class":263},[155,54397,4955],{"class":171},[155,54399,54400,54402,54404,54406,54408],{"class":157,"line":739},[155,54401,595],{"class":171},[155,54403,317],{"class":167},[155,54405,4935],{"class":171},[155,54407,4938],{"class":263},[155,54409,363],{"class":171},[155,54411,54412],{"class":157,"line":745},[155,54413,4972],{"class":161},[155,54415,54416,54418,54420,54422],{"class":157,"line":773},[155,54417,595],{"class":171},[155,54419,317],{"class":167},[155,54421,285],{"class":263},[155,54423,4983],{"class":171},[155,54425,54426],{"class":157,"line":779},[155,54427,4988],{"class":161},[155,54429,54430,54432],{"class":157,"line":785},[155,54431,709],{"class":167},[155,54433,712],{"class":171},[155,54435,54436],{"class":157,"line":791},[155,54437,4999],{"class":161},[155,54439,54440,54442,54444,54446,54448],{"class":157,"line":796},[155,54441,723],{"class":167},[155,54443,726],{"class":263},[155,54445,729],{"class":167},[155,54447,733],{"class":732},[155,54449,736],{"class":171},[155,54451,54452,54454,54456,54458,54460,54462,54464,54466,54468],{"class":157,"line":802},[155,54453,748],{"class":171},[155,54455,317],{"class":167},[155,54457,753],{"class":171},[155,54459,756],{"class":732},[155,54461,759],{"class":167},[155,54463,762],{"class":171},[155,54465,765],{"class":167},[155,54467,768],{"class":732},[155,54469,363],{"class":171},[155,54471,54472],{"class":157,"line":808},[155,54473,5036],{"class":161},[155,54475,54476,54478,54480],{"class":157,"line":819},[155,54477,811],{"class":171},[155,54479,317],{"class":167},[155,54481,5045],{"class":171},[155,54483,54484,54486,54488,54490,54492,54494,54496,54498],{"class":157,"line":1832},[155,54485,822],{"class":263},[155,54487,825],{"class":171},[155,54489,329],{"class":263},[155,54491,332],{"class":171},[155,54493,5058],{"class":263},[155,54495,332],{"class":171},[155,54497,5058],{"class":263},[155,54499,839],{"class":171},[28,54501,54502],{"start":46},[31,54503,852],{},[146,54505,54506],{"className":148,"code":5071,"language":150,"meta":39,"style":39},[152,54507,54508,54514,54520,54530,54536,54546,54556,54566,54576,54586,54590,54600,54610,54614,54618,54622,54630,54642,54652,54668,54678,54710,54724,54734,54744,54748,54758,54772,54782,54792,54802,54808,54812,54816,54820,54824,54828,54836,54856,54860,54864,54868,54872,54876,54892,54896,54900,54908,54912,54916,54924,54928,54932,54936,54944,54948,54952,54956,54960,54968,54972,54980,54984,54992,54996,55004,55008,55016,55020,55024,55032,55036,55040,55044,55056,55080,55094,55098,55102,55106,55114,55118,55126,55130,55138,55142,55150,55154,55162,55166,55174,55178,55190,55194,55202,55206,55214,55218,55222,55226,55230,55238,55242,55258,55262,55270,55274,55278,55282,55286,55290,55294,55298,55314,55318,55330,55334,55346,55350,55362,55366,55374,55378,55386,55390,55394,55398,55404,55408,55416,55420,55436,55440,55448,55452,55468,55480,55484,55496,55500,55504,55512,55516,55520,55528,55532,55540,55544,55552,55556,55560,55602,55644,55648,55652,55668,55672,55688,55692,55696,55704,55708,55712,55724,55762,55766,55770,55778,55782,55796,55806,55812,55818,55824,55830,55834,55838,55844,55848,55852,55860,55864,55882,55886,55890,55894,55910,55914,55918,55922,55926,55930,55950,55970,55974,55978,55982,55990,55998,56002,56018,56038,56058,56062,56066,56074,56082,56086,56090,56094,56106,56110,56118,56126,56142],{"__ignoreMap":39},[155,54509,54510,54512],{"class":157,"line":158},[155,54511,168],{"class":167},[155,54513,1359],{"class":171},[155,54515,54516,54518],{"class":157,"line":46},[155,54517,168],{"class":167},[155,54519,1366],{"class":171},[155,54521,54522,54524,54526,54528],{"class":157,"line":121},[155,54523,168],{"class":167},[155,54525,1377],{"class":171},[155,54527,907],{"class":167},[155,54529,1382],{"class":171},[155,54531,54532,54534],{"class":157,"line":180},[155,54533,168],{"class":167},[155,54535,172],{"class":171},[155,54537,54538,54540,54542,54544],{"class":157,"line":194},[155,54539,183],{"class":167},[155,54541,939],{"class":171},[155,54543,168],{"class":167},[155,54545,1399],{"class":171},[155,54547,54548,54550,54552,54554],{"class":157,"line":200},[155,54549,183],{"class":167},[155,54551,892],{"class":171},[155,54553,168],{"class":167},[155,54555,897],{"class":171},[155,54557,54558,54560,54562,54564],{"class":157,"line":213},[155,54559,183],{"class":167},[155,54561,922],{"class":171},[155,54563,168],{"class":167},[155,54565,927],{"class":171},[155,54567,54568,54570,54572,54574],{"class":157,"line":220},[155,54569,168],{"class":167},[155,54571,939],{"class":171},[155,54573,907],{"class":167},[155,54575,944],{"class":171},[155,54577,54578,54580,54582,54584],{"class":157,"line":245},[155,54579,168],{"class":167},[155,54581,956],{"class":171},[155,54583,907],{"class":167},[155,54585,961],{"class":171},[155,54587,54588],{"class":157,"line":251},[155,54589,1444],{"class":161},[155,54591,54592,54594,54596,54598],{"class":157,"line":257},[155,54593,183],{"class":167},[155,54595,1451],{"class":171},[155,54597,168],{"class":167},[155,54599,5166],{"class":171},[155,54601,54602,54604,54606,54608],{"class":157,"line":270},[155,54603,183],{"class":167},[155,54605,186],{"class":171},[155,54607,168],{"class":167},[155,54609,191],{"class":171},[155,54611,54612],{"class":157,"line":276},[155,54613,217],{"emptyLinePlaceholder":216},[155,54615,54616],{"class":157,"line":297},[155,54617,217],{"emptyLinePlaceholder":216},[155,54619,54620],{"class":157,"line":302},[155,54621,1479],{"class":161},[155,54623,54624,54626,54628],{"class":157,"line":308},[155,54625,1484],{"class":167},[155,54627,1487],{"class":226},[155,54629,1490],{"class":171},[155,54631,54632,54634,54636,54638,54640],{"class":157,"line":366},[155,54633,1495],{"class":171},[155,54635,317],{"class":167},[155,54637,979],{"class":171},[155,54639,987],{"class":732},[155,54641,990],{"class":171},[155,54643,54644,54646,54648,54650],{"class":157,"line":379},[155,54645,1508],{"class":323},[155,54647,317],{"class":167},[155,54649,1000],{"class":263},[155,54651,990],{"class":171},[155,54653,54654,54656,54658,54660,54662,54664,54666],{"class":157,"line":385},[155,54655,1519],{"class":323},[155,54657,317],{"class":167},[155,54659,1017],{"class":171},[155,54661,1020],{"class":323},[155,54663,317],{"class":167},[155,54665,5058],{"class":263},[155,54667,1028],{"class":171},[155,54669,54670,54672,54674,54676],{"class":157,"line":415},[155,54671,1536],{"class":323},[155,54673,317],{"class":167},[155,54675,1000],{"class":263},[155,54677,363],{"class":171},[155,54679,54680,54682,54684,54686,54688,54690,54692,54694,54696,54698,54700,54702,54704,54706,54708],{"class":157,"line":452},[155,54681,1547],{"class":171},[155,54683,317],{"class":167},[155,54685,1552],{"class":171},[155,54687,1555],{"class":263},[155,54689,230],{"class":171},[155,54691,1560],{"class":263},[155,54693,1563],{"class":167},[155,54695,1253],{"class":263},[155,54697,1568],{"class":171},[155,54699,1555],{"class":263},[155,54701,230],{"class":171},[155,54703,1575],{"class":263},[155,54705,1563],{"class":167},[155,54707,1253],{"class":263},[155,54709,1582],{"class":171},[155,54711,54712,54714,54716,54718,54720,54722],{"class":157,"line":480},[155,54713,1587],{"class":171},[155,54715,317],{"class":167},[155,54717,1592],{"class":171},[155,54719,1061],{"class":323},[155,54721,317],{"class":167},[155,54723,1066],{"class":171},[155,54725,54726,54728,54730,54732],{"class":157,"line":486},[155,54727,1603],{"class":323},[155,54729,317],{"class":167},[155,54731,1608],{"class":263},[155,54733,990],{"class":171},[155,54735,54736,54738,54740,54742],{"class":157,"line":499},[155,54737,1615],{"class":323},[155,54739,317],{"class":167},[155,54741,1000],{"class":263},[155,54743,990],{"class":171},[155,54745,54746],{"class":157,"line":505},[155,54747,1626],{"class":161},[155,54749,54750,54752,54754,54756],{"class":157,"line":528},[155,54751,1631],{"class":323},[155,54753,317],{"class":167},[155,54755,1636],{"class":263},[155,54757,363],{"class":171},[155,54759,54760,54762,54764,54766,54768,54770],{"class":157,"line":549},[155,54761,1643],{"class":171},[155,54763,317],{"class":167},[155,54765,1058],{"class":171},[155,54767,1061],{"class":323},[155,54769,317],{"class":167},[155,54771,1654],{"class":171},[155,54773,54774,54776,54778,54780],{"class":157,"line":570},[155,54775,1659],{"class":323},[155,54777,317],{"class":167},[155,54779,1608],{"class":263},[155,54781,990],{"class":171},[155,54783,54784,54786,54788,54790],{"class":157,"line":575},[155,54785,1670],{"class":323},[155,54787,317],{"class":167},[155,54789,1000],{"class":263},[155,54791,990],{"class":171},[155,54793,54794,54796,54798,54800],{"class":157,"line":581},[155,54795,1681],{"class":323},[155,54797,317],{"class":167},[155,54799,1636],{"class":263},[155,54801,363],{"class":171},[155,54803,54804,54806],{"class":157,"line":592},[155,54805,1692],{"class":167},[155,54807,1695],{"class":171},[155,54809,54810],{"class":157,"line":610},[155,54811,217],{"emptyLinePlaceholder":216},[155,54813,54814],{"class":157,"line":622},[155,54815,1704],{"class":161},[155,54817,54818],{"class":157,"line":638},[155,54819,1709],{"class":161},[155,54821,54822],{"class":157,"line":650},[155,54823,217],{"emptyLinePlaceholder":216},[155,54825,54826],{"class":157,"line":662},[155,54827,1718],{"class":161},[155,54829,54830,54832,54834],{"class":157,"line":678},[155,54831,1484],{"class":167},[155,54833,1725],{"class":226},[155,54835,1728],{"class":171},[155,54837,54838,54840,54842,54844,54846,54848,54850,54852,54854],{"class":157,"line":694},[155,54839,748],{"class":171},[155,54841,317],{"class":167},[155,54843,753],{"class":171},[155,54845,756],{"class":732},[155,54847,759],{"class":167},[155,54849,762],{"class":171},[155,54851,765],{"class":167},[155,54853,1747],{"class":732},[155,54855,363],{"class":171},[155,54857,54858],{"class":157,"line":706},[155,54859,217],{"emptyLinePlaceholder":216},[155,54861,54862],{"class":157,"line":715},[155,54863,217],{"emptyLinePlaceholder":216},[155,54865,54866],{"class":157,"line":720},[155,54867,1762],{"class":161},[155,54869,54870],{"class":157,"line":739},[155,54871,1767],{"class":161},[155,54873,54874],{"class":157,"line":745},[155,54875,1772],{"class":161},[155,54877,54878,54880,54882,54884,54886,54888,54890],{"class":157,"line":773},[155,54879,1777],{"class":171},[155,54881,317],{"class":167},[155,54883,1782],{"class":171},[155,54885,1785],{"class":323},[155,54887,317],{"class":167},[155,54889,1790],{"class":263},[155,54891,363],{"class":171},[155,54893,54894],{"class":157,"line":779},[155,54895,217],{"emptyLinePlaceholder":216},[155,54897,54898],{"class":157,"line":785},[155,54899,1801],{"class":161},[155,54901,54902,54904,54906],{"class":157,"line":791},[155,54903,1806],{"class":171},[155,54905,317],{"class":167},[155,54907,1811],{"class":171},[155,54909,54910],{"class":157,"line":796},[155,54911,217],{"emptyLinePlaceholder":216},[155,54913,54914],{"class":157,"line":802},[155,54915,1820],{"class":161},[155,54917,54918,54920,54922],{"class":157,"line":808},[155,54919,811],{"class":171},[155,54921,317],{"class":167},[155,54923,1829],{"class":171},[155,54925,54926],{"class":157,"line":819},[155,54927,1835],{"class":161},[155,54929,54930],{"class":157,"line":1832},[155,54931,1841],{"class":161},[155,54933,54934],{"class":157,"line":1838},[155,54935,1847],{"class":161},[155,54937,54938,54940,54942],{"class":157,"line":1844},[155,54939,1853],{"class":171},[155,54941,317],{"class":167},[155,54943,1858],{"class":171},[155,54945,54946],{"class":157,"line":1850},[155,54947,217],{"emptyLinePlaceholder":216},[155,54949,54950],{"class":157,"line":1861},[155,54951,217],{"emptyLinePlaceholder":216},[155,54953,54954],{"class":157,"line":1866},[155,54955,1874],{"class":161},[155,54957,54958],{"class":157,"line":1871},[155,54959,1880],{"class":161},[155,54961,54962,54964,54966],{"class":157,"line":1877},[155,54963,1886],{"class":171},[155,54965,317],{"class":167},[155,54967,1891],{"class":263},[155,54969,54970],{"class":157,"line":1883},[155,54971,1897],{"class":161},[155,54973,54974,54976,54978],{"class":157,"line":1894},[155,54975,1903],{"class":171},[155,54977,317],{"class":167},[155,54979,1908],{"class":171},[155,54981,54982],{"class":157,"line":1900},[155,54983,1914],{"class":161},[155,54985,54986,54988,54990],{"class":157,"line":1911},[155,54987,1920],{"class":171},[155,54989,317],{"class":167},[155,54991,1908],{"class":171},[155,54993,54994],{"class":157,"line":1917},[155,54995,1930],{"class":161},[155,54997,54998,55000,55002],{"class":157,"line":1927},[155,54999,1936],{"class":171},[155,55001,317],{"class":167},[155,55003,1908],{"class":171},[155,55005,55006],{"class":157,"line":1933},[155,55007,1946],{"class":161},[155,55009,55010,55012,55014],{"class":157,"line":1943},[155,55011,1952],{"class":171},[155,55013,317],{"class":167},[155,55015,1908],{"class":171},[155,55017,55018],{"class":157,"line":1949},[155,55019,217],{"emptyLinePlaceholder":216},[155,55021,55022],{"class":157,"line":1959},[155,55023,1967],{"class":161},[155,55025,55026,55028,55030],{"class":157,"line":1964},[155,55027,1973],{"class":171},[155,55029,317],{"class":167},[155,55031,1978],{"class":171},[155,55033,55034],{"class":157,"line":1970},[155,55035,217],{"emptyLinePlaceholder":216},[155,55037,55038],{"class":157,"line":1981},[155,55039,217],{"emptyLinePlaceholder":216},[155,55041,55042],{"class":157,"line":1986},[155,55043,1994],{"class":161},[155,55045,55046,55048,55050,55052,55054],{"class":157,"line":1991},[155,55047,2000],{"class":167},[155,55049,2003],{"class":171},[155,55051,1131],{"class":167},[155,55053,2008],{"class":263},[155,55055,2011],{"class":171},[155,55057,55058,55060,55062,55064,55066,55068,55070,55072,55074,55076,55078],{"class":157,"line":1997},[155,55059,2017],{"class":263},[155,55061,230],{"class":171},[155,55063,2022],{"class":732},[155,55065,2025],{"class":263},[155,55067,2028],{"class":732},[155,55069,2025],{"class":263},[155,55071,2033],{"class":732},[155,55073,2036],{"class":171},[155,55075,2039],{"class":167},[155,55077,329],{"class":263},[155,55079,1238],{"class":171},[155,55081,55082,55084,55086,55088,55090,55092],{"class":157,"line":2014},[155,55083,2017],{"class":263},[155,55085,230],{"class":171},[155,55087,2053],{"class":732},[155,55089,1563],{"class":167},[155,55091,565],{"class":263},[155,55093,363],{"class":171},[155,55095,55096],{"class":157,"line":2046},[155,55097,217],{"emptyLinePlaceholder":216},[155,55099,55100],{"class":157,"line":2062},[155,55101,2070],{"class":161},[155,55103,55104],{"class":157,"line":2067},[155,55105,2076],{"class":161},[155,55107,55108,55110,55112],{"class":157,"line":2073},[155,55109,2082],{"class":171},[155,55111,317],{"class":167},[155,55113,1891],{"class":263},[155,55115,55116],{"class":157,"line":2079},[155,55117,2092],{"class":161},[155,55119,55120,55122,55124],{"class":157,"line":2089},[155,55121,2098],{"class":171},[155,55123,317],{"class":167},[155,55125,2103],{"class":263},[155,55127,55128],{"class":157,"line":2095},[155,55129,2109],{"class":161},[155,55131,55132,55134,55136],{"class":157,"line":2106},[155,55133,2115],{"class":171},[155,55135,317],{"class":167},[155,55137,1891],{"class":263},[155,55139,55140],{"class":157,"line":2112},[155,55141,2125],{"class":161},[155,55143,55144,55146,55148],{"class":157,"line":2122},[155,55145,2131],{"class":171},[155,55147,317],{"class":167},[155,55149,2103],{"class":263},[155,55151,55152],{"class":157,"line":2128},[155,55153,2141],{"class":161},[155,55155,55156,55158,55160],{"class":157,"line":2138},[155,55157,2147],{"class":171},[155,55159,317],{"class":167},[155,55161,2103],{"class":263},[155,55163,55164],{"class":157,"line":2144},[155,55165,2157],{"class":161},[155,55167,55168,55170,55172],{"class":157,"line":2154},[155,55169,2163],{"class":171},[155,55171,317],{"class":167},[155,55173,2103],{"class":263},[155,55175,55176],{"class":157,"line":2160},[155,55177,2173],{"class":161},[155,55179,55180,55182,55184,55186,55188],{"class":157,"line":2170},[155,55181,2179],{"class":167},[155,55183,1128],{"class":171},[155,55185,1131],{"class":167},[155,55187,1134],{"class":263},[155,55189,2188],{"class":171},[155,55191,55192],{"class":157,"line":2176},[155,55193,2194],{"class":161},[155,55195,55196,55198,55200],{"class":157,"line":2191},[155,55197,2200],{"class":171},[155,55199,317],{"class":167},[155,55201,2205],{"class":171},[155,55203,55204],{"class":157,"line":2197},[155,55205,2211],{"class":161},[155,55207,55208,55210,55212],{"class":157,"line":2208},[155,55209,2217],{"class":171},[155,55211,317],{"class":167},[155,55213,2222],{"class":171},[155,55215,55216],{"class":157,"line":2214},[155,55217,2228],{"class":161},[155,55219,55220],{"class":157,"line":2225},[155,55221,2234],{"class":171},[155,55223,55224],{"class":157,"line":2231},[155,55225,2240],{"class":161},[155,55227,55228],{"class":157,"line":2237},[155,55229,2246],{"class":161},[155,55231,55232,55234,55236],{"class":157,"line":2243},[155,55233,2252],{"class":171},[155,55235,317],{"class":167},[155,55237,2257],{"class":171},[155,55239,55240],{"class":157,"line":2249},[155,55241,2263],{"class":161},[155,55243,55244,55246,55248,55250,55252,55254,55256],{"class":157,"line":2260},[155,55245,2269],{"class":171},[155,55247,317],{"class":167},[155,55249,2274],{"class":171},[155,55251,2277],{"class":323},[155,55253,317],{"class":167},[155,55255,329],{"class":263},[155,55257,363],{"class":171},[155,55259,55260],{"class":157,"line":2266},[155,55261,2289],{"class":161},[155,55263,55264,55266,55268],{"class":157,"line":2286},[155,55265,2295],{"class":171},[155,55267,317],{"class":167},[155,55269,2300],{"class":171},[155,55271,55272],{"class":157,"line":2292},[155,55273,2306],{"class":161},[155,55275,55276],{"class":157,"line":2303},[155,55277,2312],{"class":171},[155,55279,55280],{"class":157,"line":2309},[155,55281,2318],{"class":161},[155,55283,55284],{"class":157,"line":2315},[155,55285,2324],{"class":171},[155,55287,55288],{"class":157,"line":2321},[155,55289,2330],{"class":161},[155,55291,55292],{"class":157,"line":2327},[155,55293,2336],{"class":171},[155,55295,55296],{"class":157,"line":2333},[155,55297,2342],{"class":161},[155,55299,55300,55302,55304,55306,55308,55310,55312],{"class":157,"line":2339},[155,55301,2348],{"class":171},[155,55303,2351],{"class":167},[155,55305,2354],{"class":171},[155,55307,1563],{"class":167},[155,55309,2359],{"class":171},[155,55311,1109],{"class":263},[155,55313,363],{"class":171},[155,55315,55316],{"class":157,"line":2345},[155,55317,2369],{"class":161},[155,55319,55320,55322,55324,55326,55328],{"class":157,"line":2366},[155,55321,2375],{"class":171},[155,55323,2351],{"class":167},[155,55325,2380],{"class":171},[155,55327,729],{"class":167},[155,55329,2385],{"class":171},[155,55331,55332],{"class":157,"line":2372},[155,55333,2391],{"class":161},[155,55335,55336,55338,55340,55342,55344],{"class":157,"line":2388},[155,55337,2397],{"class":171},[155,55339,2351],{"class":167},[155,55341,2359],{"class":171},[155,55343,1109],{"class":263},[155,55345,363],{"class":171},[155,55347,55348],{"class":157,"line":2394},[155,55349,2411],{"class":161},[155,55351,55352,55354,55356,55358,55360],{"class":157,"line":2408},[155,55353,2179],{"class":167},[155,55355,2419],{"class":171},[155,55357,1131],{"class":167},[155,55359,1134],{"class":263},[155,55361,2426],{"class":171},[155,55363,55364],{"class":157,"line":2414},[155,55365,2432],{"class":161},[155,55367,55368,55370,55372],{"class":157,"line":2429},[155,55369,2200],{"class":171},[155,55371,317],{"class":167},[155,55373,2205],{"class":171},[155,55375,55376],{"class":157,"line":2435},[155,55377,2447],{"class":161},[155,55379,55380,55382,55384],{"class":157,"line":2444},[155,55381,2217],{"class":171},[155,55383,317],{"class":167},[155,55385,2222],{"class":171},[155,55387,55388],{"class":157,"line":2450},[155,55389,2462],{"class":161},[155,55391,55392],{"class":157,"line":2459},[155,55393,2468],{"class":171},[155,55395,55396],{"class":157,"line":2465},[155,55397,5965],{"class":161},[155,55399,55400,55402],{"class":157,"line":2471},[155,55401,2474],{"class":167},[155,55403,2477],{"class":171},[155,55405,55406],{"class":157,"line":2480},[155,55407,2483],{"class":161},[155,55409,55410,55412,55414],{"class":157,"line":2486},[155,55411,5980],{"class":171},[155,55413,317],{"class":167},[155,55415,2257],{"class":171},[155,55417,55418],{"class":157,"line":2497},[155,55419,2500],{"class":161},[155,55421,55422,55424,55426,55428,55430,55432,55434],{"class":157,"line":2503},[155,55423,5993],{"class":171},[155,55425,317],{"class":167},[155,55427,2274],{"class":171},[155,55429,2277],{"class":323},[155,55431,317],{"class":167},[155,55433,329],{"class":263},[155,55435,363],{"class":171},[155,55437,55438],{"class":157,"line":2522},[155,55439,2525],{"class":161},[155,55441,55442,55444,55446],{"class":157,"line":2528},[155,55443,6014],{"class":171},[155,55445,317],{"class":167},[155,55447,2300],{"class":171},[155,55449,55450],{"class":157,"line":2539},[155,55451,2542],{"class":161},[155,55453,55454,55456,55458,55460,55462,55464,55466],{"class":157,"line":2545},[155,55455,6027],{"class":171},[155,55457,2351],{"class":167},[155,55459,6032],{"class":171},[155,55461,1563],{"class":167},[155,55463,2359],{"class":171},[155,55465,1109],{"class":263},[155,55467,363],{"class":171},[155,55469,55470,55472,55474,55476,55478],{"class":157,"line":2565},[155,55471,6045],{"class":171},[155,55473,2351],{"class":167},[155,55475,2380],{"class":171},[155,55477,729],{"class":167},[155,55479,2385],{"class":171},[155,55481,55482],{"class":157,"line":2581},[155,55483,6058],{"class":161},[155,55485,55486,55488,55490,55492,55494],{"class":157,"line":2587},[155,55487,6063],{"class":171},[155,55489,2351],{"class":167},[155,55491,2359],{"class":171},[155,55493,1109],{"class":263},[155,55495,363],{"class":171},[155,55497,55498],{"class":157,"line":2601},[155,55499,2604],{"class":161},[155,55501,55502],{"class":157,"line":2607},[155,55503,2610],{"class":161},[155,55505,55506,55508,55510],{"class":157,"line":2613},[155,55507,2616],{"class":171},[155,55509,2028],{"class":167},[155,55511,2621],{"class":171},[155,55513,55514],{"class":157,"line":2624},[155,55515,2627],{"class":161},[155,55517,55518],{"class":157,"line":2630},[155,55519,2633],{"class":161},[155,55521,55522,55524,55526],{"class":157,"line":2636},[155,55523,2639],{"class":171},[155,55525,2028],{"class":167},[155,55527,2621],{"class":171},[155,55529,55530],{"class":157,"line":2646},[155,55531,2649],{"class":161},[155,55533,55534,55536,55538],{"class":157,"line":2652},[155,55535,2655],{"class":171},[155,55537,2028],{"class":167},[155,55539,2660],{"class":171},[155,55541,55542],{"class":157,"line":2663},[155,55543,2666],{"class":161},[155,55545,55546,55548,55550],{"class":157,"line":2669},[155,55547,2672],{"class":171},[155,55549,2028],{"class":167},[155,55551,2660],{"class":171},[155,55553,55554],{"class":157,"line":2679},[155,55555,217],{"emptyLinePlaceholder":216},[155,55557,55558],{"class":157,"line":2684},[155,55559,2687],{"class":161},[155,55561,55562,55564,55566,55568,55570,55572,55574,55576,55578,55580,55582,55584,55586,55588,55590,55592,55594,55596,55598,55600],{"class":157,"line":2690},[155,55563,2017],{"class":263},[155,55565,230],{"class":171},[155,55567,2697],{"class":732},[155,55569,2025],{"class":263},[155,55571,2702],{"class":732},[155,55573,2705],{"class":263},[155,55575,2708],{"class":167},[155,55577,2711],{"class":263},[155,55579,2714],{"class":732},[155,55581,2705],{"class":263},[155,55583,2708],{"class":167},[155,55585,2711],{"class":263},[155,55587,2697],{"class":732},[155,55589,2725],{"class":171},[155,55591,2039],{"class":167},[155,55593,329],{"class":263},[155,55595,2732],{"class":171},[155,55597,2039],{"class":167},[155,55599,329],{"class":263},[155,55601,2739],{"class":171},[155,55603,55604,55606,55608,55610,55612,55614,55616,55618,55620,55622,55624,55626,55628,55630,55632,55634,55636,55638,55640,55642],{"class":157,"line":2742},[155,55605,2017],{"class":263},[155,55607,230],{"class":171},[155,55609,2697],{"class":732},[155,55611,2025],{"class":263},[155,55613,2753],{"class":732},[155,55615,2705],{"class":263},[155,55617,2708],{"class":167},[155,55619,2711],{"class":263},[155,55621,2762],{"class":732},[155,55623,2705],{"class":263},[155,55625,2708],{"class":167},[155,55627,2711],{"class":263},[155,55629,2697],{"class":732},[155,55631,2773],{"class":171},[155,55633,2039],{"class":167},[155,55635,329],{"class":263},[155,55637,2780],{"class":171},[155,55639,2039],{"class":167},[155,55641,329],{"class":263},[155,55643,2739],{"class":171},[155,55645,55646],{"class":157,"line":2789},[155,55647,217],{"emptyLinePlaceholder":216},[155,55649,55650],{"class":157,"line":2794},[155,55651,2797],{"class":161},[155,55653,55654,55656,55658,55660,55662,55664,55666],{"class":157,"line":2800},[155,55655,2803],{"class":167},[155,55657,2806],{"class":171},[155,55659,2039],{"class":167},[155,55661,329],{"class":263},[155,55663,2813],{"class":171},[155,55665,1148],{"class":167},[155,55667,2818],{"class":171},[155,55669,55670],{"class":157,"line":2821},[155,55671,2824],{"class":161},[155,55673,55674,55676,55678,55680,55682,55684,55686],{"class":157,"line":2827},[155,55675,2830],{"class":171},[155,55677,2833],{"class":263},[155,55679,317],{"class":167},[155,55681,2838],{"class":171},[155,55683,2039],{"class":167},[155,55685,329],{"class":263},[155,55687,2845],{"class":171},[155,55689,55690],{"class":157,"line":2848},[155,55691,2851],{"class":161},[155,55693,55694],{"class":157,"line":2854},[155,55695,2857],{"class":161},[155,55697,55698,55700,55702],{"class":157,"line":2860},[155,55699,2863],{"class":171},[155,55701,317],{"class":167},[155,55703,1858],{"class":171},[155,55705,55706],{"class":157,"line":2870},[155,55707,217],{"emptyLinePlaceholder":216},[155,55709,55710],{"class":157,"line":2875},[155,55711,2878],{"class":161},[155,55713,55714,55716,55718,55720,55722],{"class":157,"line":2881},[155,55715,2884],{"class":171},[155,55717,317],{"class":167},[155,55719,2889],{"class":171},[155,55721,2039],{"class":167},[155,55723,2894],{"class":171},[155,55725,55726,55728,55730,55732,55734,55736,55738,55740,55742,55744,55746,55748,55750,55752,55754,55756,55758,55760],{"class":157,"line":2897},[155,55727,2017],{"class":263},[155,55729,230],{"class":171},[155,55731,2904],{"class":732},[155,55733,2705],{"class":263},[155,55735,2909],{"class":167},[155,55737,2711],{"class":263},[155,55739,2914],{"class":732},[155,55741,2705],{"class":263},[155,55743,2909],{"class":167},[155,55745,2711],{"class":263},[155,55747,2923],{"class":732},[155,55749,2926],{"class":171},[155,55751,2929],{"class":167},[155,55753,2932],{"class":263},[155,55755,2935],{"class":171},[155,55757,2938],{"class":167},[155,55759,2932],{"class":263},[155,55761,1238],{"class":171},[155,55763,55764],{"class":157,"line":2945},[155,55765,6342],{"class":161},[155,55767,55768],{"class":157,"line":2951},[155,55769,6347],{"class":161},[155,55771,55772,55774,55776],{"class":157,"line":2957},[155,55773,6352],{"class":171},[155,55775,2969],{"class":732},[155,55777,363],{"class":171},[155,55779,55780],{"class":157,"line":2963},[155,55781,2989],{"class":161},[155,55783,55784,55786,55788,55790,55792,55794],{"class":157,"line":2974},[155,55785,2995],{"class":171},[155,55787,317],{"class":167},[155,55789,3000],{"class":171},[155,55791,3003],{"class":323},[155,55793,317],{"class":167},[155,55795,3008],{"class":171},[155,55797,55798,55800,55802,55804],{"class":157,"line":2980},[155,55799,3014],{"class":732},[155,55801,3017],{"class":171},[155,55803,3020],{"class":263},[155,55805,3023],{"class":171},[155,55807,55808,55810],{"class":157,"line":2986},[155,55809,3029],{"class":732},[155,55811,3032],{"class":171},[155,55813,55814,55816],{"class":157,"line":2992},[155,55815,3038],{"class":732},[155,55817,3041],{"class":171},[155,55819,55820,55822],{"class":157,"line":3011},[155,55821,3047],{"class":732},[155,55823,3050],{"class":171},[155,55825,55826,55828],{"class":157,"line":3026},[155,55827,3056],{"class":732},[155,55829,3059],{"class":171},[155,55831,55832],{"class":157,"line":3035},[155,55833,3065],{"class":171},[155,55835,55836],{"class":157,"line":3044},[155,55837,3071],{"class":161},[155,55839,55840,55842],{"class":157,"line":3053},[155,55841,1692],{"class":167},[155,55843,3079],{"class":171},[155,55845,55846],{"class":157,"line":3062},[155,55847,217],{"emptyLinePlaceholder":216},[155,55849,55850],{"class":157,"line":3068},[155,55851,3090],{"class":161},[155,55853,55854,55856,55858],{"class":157,"line":3074},[155,55855,1484],{"class":167},[155,55857,3098],{"class":226},[155,55859,3101],{"class":171},[155,55861,55862],{"class":157,"line":3082},[155,55863,3107],{"class":161},[155,55865,55866,55868,55870,55872,55874,55876,55878,55880],{"class":157,"line":3087},[155,55867,3113],{"class":171},[155,55869,1224],{"class":323},[155,55871,317],{"class":167},[155,55873,230],{"class":171},[155,55875,1231],{"class":263},[155,55877,332],{"class":171},[155,55879,1264],{"class":263},[155,55881,1238],{"class":171},[155,55883,55884],{"class":157,"line":3093},[155,55885,3133],{"class":161},[155,55887,55888],{"class":157,"line":3104},[155,55889,3139],{"class":161},[155,55891,55892],{"class":157,"line":3110},[155,55893,3145],{"class":161},[155,55895,55896,55898,55900,55902,55904,55906,55908],{"class":157,"line":3130},[155,55897,1261],{"class":171},[155,55899,329],{"class":263},[155,55901,332],{"class":171},[155,55903,360],{"class":263},[155,55905,332],{"class":171},[155,55907,329],{"class":263},[155,55909,363],{"class":171},[155,55911,55912],{"class":157,"line":3136},[155,55913,3168],{"class":161},[155,55915,55916],{"class":157,"line":3142},[155,55917,3174],{"class":161},[155,55919,55920],{"class":157,"line":3148},[155,55921,3180],{"class":161},[155,55923,55924],{"class":157,"line":3165},[155,55925,3186],{"class":161},[155,55927,55928],{"class":157,"line":3171},[155,55929,3192],{"class":161},[155,55931,55932,55934,55936,55938,55940,55942,55944,55946,55948],{"class":157,"line":3177},[155,55933,3198],{"class":171},[155,55935,3201],{"class":732},[155,55937,3204],{"class":171},[155,55939,3207],{"class":732},[155,55941,332],{"class":171},[155,55943,3212],{"class":323},[155,55945,317],{"class":167},[155,55947,3217],{"class":732},[155,55949,363],{"class":171},[155,55951,55952,55954,55956,55958,55960,55962,55964,55966,55968],{"class":157,"line":3183},[155,55953,3198],{"class":171},[155,55955,3201],{"class":732},[155,55957,3229],{"class":171},[155,55959,3232],{"class":732},[155,55961,332],{"class":171},[155,55963,3212],{"class":323},[155,55965,317],{"class":167},[155,55967,3241],{"class":732},[155,55969,363],{"class":171},[155,55971,55972],{"class":157,"line":3189},[155,55973,3249],{"class":161},[155,55975,55976],{"class":157,"line":3195},[155,55977,3255],{"class":171},[155,55979,55980],{"class":157,"line":3222},[155,55981,3261],{"class":161},[155,55983,55984,55986,55988],{"class":157,"line":3246},[155,55985,3267],{"class":171},[155,55987,3270],{"class":732},[155,55989,363],{"class":171},[155,55991,55992,55994,55996],{"class":157,"line":3252},[155,55993,3278],{"class":171},[155,55995,3281],{"class":732},[155,55997,363],{"class":171},[155,55999,56000],{"class":157,"line":3258},[155,56001,3289],{"class":161},[155,56003,56004,56006,56008,56010,56012,56014,56016],{"class":157,"line":3264},[155,56005,1261],{"class":171},[155,56007,329],{"class":263},[155,56009,332],{"class":171},[155,56011,360],{"class":263},[155,56013,332],{"class":171},[155,56015,360],{"class":263},[155,56017,363],{"class":171},[155,56019,56020,56022,56024,56026,56028,56030,56032,56034,56036],{"class":157,"line":3275},[155,56021,3198],{"class":171},[155,56023,3201],{"class":732},[155,56025,3316],{"class":171},[155,56027,3207],{"class":732},[155,56029,332],{"class":171},[155,56031,3212],{"class":323},[155,56033,317],{"class":167},[155,56035,3327],{"class":732},[155,56037,363],{"class":171},[155,56039,56040,56042,56044,56046,56048,56050,56052,56054,56056],{"class":157,"line":3286},[155,56041,3198],{"class":171},[155,56043,3201],{"class":732},[155,56045,3339],{"class":171},[155,56047,3232],{"class":732},[155,56049,332],{"class":171},[155,56051,3212],{"class":323},[155,56053,317],{"class":167},[155,56055,3350],{"class":732},[155,56057,363],{"class":171},[155,56059,56060],{"class":157,"line":3292},[155,56061,3358],{"class":161},[155,56063,56064],{"class":157,"line":3309},[155,56065,3255],{"class":171},[155,56067,56068,56070,56072],{"class":157,"line":3332},[155,56069,3267],{"class":171},[155,56071,3201],{"class":732},[155,56073,363],{"class":171},[155,56075,56076,56078,56080],{"class":157,"line":3355},[155,56077,3278],{"class":171},[155,56079,3380],{"class":732},[155,56081,363],{"class":171},[155,56083,56084],{"class":157,"line":3361},[155,56085,3388],{"class":171},[155,56087,56088],{"class":157,"line":3366},[155,56089,217],{"emptyLinePlaceholder":216},[155,56091,56092],{"class":157,"line":3375},[155,56093,3399],{"class":161},[155,56095,56096,56098,56100,56102,56104],{"class":157,"line":3385},[155,56097,723],{"class":167},[155,56099,726],{"class":263},[155,56101,729],{"class":167},[155,56103,733],{"class":732},[155,56105,736],{"class":171},[155,56107,56108],{"class":157,"line":3391},[155,56109,3418],{"class":161},[155,56111,56112,56114,56116],{"class":157,"line":3396},[155,56113,6693],{"class":171},[155,56115,317],{"class":167},[155,56117,6698],{"class":171},[155,56119,56120,56122,56124],{"class":157,"line":3402},[155,56121,3435],{"class":171},[155,56123,317],{"class":167},[155,56125,3440],{"class":171},[155,56127,56128,56130,56132,56134,56136,56138,56140],{"class":157,"line":3415},[155,56129,2995],{"class":171},[155,56131,317],{"class":167},[155,56133,6715],{"class":171},[155,56135,3453],{"class":323},[155,56137,317],{"class":167},[155,56139,3458],{"class":263},[155,56141,363],{"class":171},[155,56143,56144],{"class":157,"line":3421},[155,56145,3466],{"class":171},[28,56147,56148],{"start":121},[31,56149,3479],{},[146,56151,56152],{"className":148,"code":6734,"language":150,"meta":39,"style":39},[152,56153,56154,56160,56170,56180,56190,56194,56204,56214,56224,56228,56232,56236,56244,56260,56270,56286,56296,56310,56314,56324,56334,56344,56350,56354,56358,56366,56370,56386,56394,56398,56402,56410,56418,56422,56426,56430,56434,56440,56444,56454,56462,56470,56474,56478,56482,56490,56494,56510,56514,56518,56522,56534,56538,56550,56554,56558,56570,56574,56584,56588,56592,56604,56608,56616,56620,56624,56632,56636,56644,56648,56652,56656,56660,56664,56680,56688,56692,56696,56744,56750,56754,56764,56772,56780,56784,56788,56792,56796,56804,56808,56824,56828,56836,56844],{"__ignoreMap":39},[155,56155,56156,56158],{"class":157,"line":158},[155,56157,168],{"class":167},[155,56159,172],{"class":171},[155,56161,56162,56164,56166,56168],{"class":157,"line":46},[155,56163,168],{"class":167},[155,56165,939],{"class":171},[155,56167,907],{"class":167},[155,56169,944],{"class":171},[155,56171,56172,56174,56176,56178],{"class":157,"line":121},[155,56173,183],{"class":167},[155,56175,3507],{"class":171},[155,56177,168],{"class":167},[155,56179,3512],{"class":171},[155,56181,56182,56184,56186,56188],{"class":157,"line":180},[155,56183,183],{"class":167},[155,56185,922],{"class":171},[155,56187,168],{"class":167},[155,56189,927],{"class":171},[155,56191,56192],{"class":157,"line":194},[155,56193,3527],{"class":161},[155,56195,56196,56198,56200,56202],{"class":157,"line":200},[155,56197,183],{"class":167},[155,56199,892],{"class":171},[155,56201,168],{"class":167},[155,56203,897],{"class":171},[155,56205,56206,56208,56210,56212],{"class":157,"line":213},[155,56207,183],{"class":167},[155,56209,1451],{"class":171},[155,56211,168],{"class":167},[155,56213,5166],{"class":171},[155,56215,56216,56218,56220,56222],{"class":157,"line":220},[155,56217,183],{"class":167},[155,56219,6803],{"class":171},[155,56221,168],{"class":167},[155,56223,5166],{"class":171},[155,56225,56226],{"class":157,"line":245},[155,56227,217],{"emptyLinePlaceholder":216},[155,56229,56230],{"class":157,"line":251},[155,56231,217],{"emptyLinePlaceholder":216},[155,56233,56234],{"class":157,"line":257},[155,56235,3556],{"class":161},[155,56237,56238,56240,56242],{"class":157,"line":270},[155,56239,1484],{"class":167},[155,56241,3563],{"class":226},[155,56243,1490],{"class":171},[155,56245,56246,56248,56250,56252,56254,56256,56258],{"class":157,"line":276},[155,56247,3570],{"class":171},[155,56249,317],{"class":167},[155,56251,979],{"class":171},[155,56253,982],{"class":323},[155,56255,317],{"class":167},[155,56257,987],{"class":732},[155,56259,990],{"class":171},[155,56261,56262,56264,56266,56268],{"class":157,"line":297},[155,56263,3587],{"class":323},[155,56265,317],{"class":167},[155,56267,3592],{"class":263},[155,56269,990],{"class":171},[155,56271,56272,56274,56276,56278,56280,56282,56284],{"class":157,"line":302},[155,56273,3599],{"class":323},[155,56275,317],{"class":167},[155,56277,1017],{"class":171},[155,56279,1020],{"class":323},[155,56281,317],{"class":167},[155,56283,5058],{"class":263},[155,56285,1028],{"class":171},[155,56287,56288,56290,56292,56294],{"class":157,"line":308},[155,56289,3616],{"class":323},[155,56291,317],{"class":167},[155,56293,1000],{"class":263},[155,56295,363],{"class":171},[155,56297,56298,56300,56302,56304,56306,56308],{"class":157,"line":366},[155,56299,3627],{"class":171},[155,56301,317],{"class":167},[155,56303,1058],{"class":171},[155,56305,1061],{"class":323},[155,56307,317],{"class":167},[155,56309,3638],{"class":171},[155,56311,56312],{"class":157,"line":379},[155,56313,3643],{"class":161},[155,56315,56316,56318,56320,56322],{"class":157,"line":385},[155,56317,3648],{"class":323},[155,56319,317],{"class":167},[155,56321,329],{"class":263},[155,56323,990],{"class":171},[155,56325,56326,56328,56330,56332],{"class":157,"line":415},[155,56327,3659],{"class":323},[155,56329,317],{"class":167},[155,56331,1000],{"class":263},[155,56333,990],{"class":171},[155,56335,56336,56338,56340,56342],{"class":157,"line":452},[155,56337,3670],{"class":323},[155,56339,317],{"class":167},[155,56341,1109],{"class":263},[155,56343,363],{"class":171},[155,56345,56346,56348],{"class":157,"line":480},[155,56347,1692],{"class":167},[155,56349,3683],{"class":171},[155,56351,56352],{"class":157,"line":486},[155,56353,217],{"emptyLinePlaceholder":216},[155,56355,56356],{"class":157,"line":499},[155,56357,3692],{"class":161},[155,56359,56360,56362,56364],{"class":157,"line":505},[155,56361,1484],{"class":167},[155,56363,3699],{"class":226},[155,56365,3702],{"class":171},[155,56367,56368],{"class":157,"line":528},[155,56369,3707],{"class":161},[155,56371,56372,56374,56376,56378,56380,56382,56384],{"class":157,"line":549},[155,56373,748],{"class":171},[155,56375,317],{"class":167},[155,56377,756],{"class":732},[155,56379,759],{"class":167},[155,56381,762],{"class":171},[155,56383,765],{"class":167},[155,56385,3724],{"class":732},[155,56387,56388,56390,56392],{"class":157,"line":570},[155,56389,811],{"class":171},[155,56391,317],{"class":167},[155,56393,1829],{"class":171},[155,56395,56396],{"class":157,"line":575},[155,56397,217],{"emptyLinePlaceholder":216},[155,56399,56400],{"class":157,"line":581},[155,56401,3741],{"class":161},[155,56403,56404,56406,56408],{"class":157,"line":592},[155,56405,3746],{"class":171},[155,56407,317],{"class":167},[155,56409,1891],{"class":263},[155,56411,56412,56414,56416],{"class":157,"line":610},[155,56413,3755],{"class":171},[155,56415,317],{"class":167},[155,56417,2103],{"class":263},[155,56419,56420],{"class":157,"line":622},[155,56421,217],{"emptyLinePlaceholder":216},[155,56423,56424],{"class":157,"line":638},[155,56425,3768],{"class":161},[155,56427,56428],{"class":157,"line":650},[155,56429,3773],{"class":161},[155,56431,56432],{"class":157,"line":662},[155,56433,3778],{"class":161},[155,56435,56436,56438],{"class":157,"line":678},[155,56437,3783],{"class":167},[155,56439,2477],{"class":171},[155,56441,56442],{"class":157,"line":694},[155,56443,3790],{"class":161},[155,56445,56446,56448,56450,56452],{"class":157,"line":706},[155,56447,2179],{"class":167},[155,56449,3797],{"class":171},[155,56451,1131],{"class":167},[155,56453,3802],{"class":171},[155,56455,56456,56458,56460],{"class":157,"line":715},[155,56457,3807],{"class":171},[155,56459,317],{"class":167},[155,56461,3812],{"class":171},[155,56463,56464,56466,56468],{"class":157,"line":720},[155,56465,3817],{"class":171},[155,56467,317],{"class":167},[155,56469,3822],{"class":171},[155,56471,56472],{"class":157,"line":739},[155,56473,3827],{"class":161},[155,56475,56476],{"class":157,"line":745},[155,56477,2468],{"class":171},[155,56479,56480],{"class":157,"line":773},[155,56481,3836],{"class":161},[155,56483,56484,56486,56488],{"class":157,"line":779},[155,56485,2252],{"class":171},[155,56487,317],{"class":167},[155,56489,3845],{"class":171},[155,56491,56492],{"class":157,"line":785},[155,56493,3850],{"class":161},[155,56495,56496,56498,56500,56502,56504,56506,56508],{"class":157,"line":791},[155,56497,2269],{"class":171},[155,56499,317],{"class":167},[155,56501,2274],{"class":171},[155,56503,2277],{"class":323},[155,56505,317],{"class":167},[155,56507,329],{"class":263},[155,56509,363],{"class":171},[155,56511,56512],{"class":157,"line":796},[155,56513,3871],{"class":161},[155,56515,56516],{"class":157,"line":802},[155,56517,3876],{"class":161},[155,56519,56520],{"class":157,"line":808},[155,56521,3881],{"class":161},[155,56523,56524,56526,56528,56530,56532],{"class":157,"line":819},[155,56525,3886],{"class":171},[155,56527,2351],{"class":167},[155,56529,2380],{"class":171},[155,56531,729],{"class":167},[155,56533,3895],{"class":171},[155,56535,56536],{"class":157,"line":1832},[155,56537,3900],{"class":161},[155,56539,56540,56542,56544,56546,56548],{"class":157,"line":1838},[155,56541,3905],{"class":171},[155,56543,2351],{"class":167},[155,56545,3910],{"class":171},[155,56547,1109],{"class":263},[155,56549,363],{"class":171},[155,56551,56552],{"class":157,"line":1844},[155,56553,217],{"emptyLinePlaceholder":216},[155,56555,56556],{"class":157,"line":1850},[155,56557,3923],{"class":161},[155,56559,56560,56562,56564,56566,56568],{"class":157,"line":1861},[155,56561,3928],{"class":171},[155,56563,317],{"class":167},[155,56565,3933],{"class":171},[155,56567,2028],{"class":167},[155,56569,3938],{"class":171},[155,56571,56572],{"class":157,"line":1866},[155,56573,3943],{"class":161},[155,56575,56576,56578,56580,56582],{"class":157,"line":1871},[155,56577,2017],{"class":263},[155,56579,230],{"class":171},[155,56581,3952],{"class":732},[155,56583,3955],{"class":171},[155,56585,56586],{"class":157,"line":1877},[155,56587,217],{"emptyLinePlaceholder":216},[155,56589,56590],{"class":157,"line":1883},[155,56591,3964],{"class":161},[155,56593,56594,56596,56598,56600,56602],{"class":157,"line":1894},[155,56595,723],{"class":167},[155,56597,726],{"class":263},[155,56599,729],{"class":167},[155,56601,733],{"class":732},[155,56603,736],{"class":171},[155,56605,56606],{"class":157,"line":1900},[155,56607,3981],{"class":161},[155,56609,56610,56612,56614],{"class":157,"line":1911},[155,56611,811],{"class":171},[155,56613,317],{"class":167},[155,56615,6698],{"class":171},[155,56617,56618],{"class":157,"line":1917},[155,56619,3994],{"class":161},[155,56621,56622],{"class":157,"line":1927},[155,56623,3999],{"class":161},[155,56625,56626,56628,56630],{"class":157,"line":1933},[155,56627,4004],{"class":171},[155,56629,4007],{"class":732},[155,56631,1238],{"class":171},[155,56633,56634],{"class":157,"line":1943},[155,56635,4014],{"class":161},[155,56637,56638,56640,56642],{"class":157,"line":1949},[155,56639,3627],{"class":171},[155,56641,317],{"class":167},[155,56643,4023],{"class":171},[155,56645,56646],{"class":157,"line":1959},[155,56647,4028],{"class":161},[155,56649,56650],{"class":157,"line":1964},[155,56651,4033],{"class":171},[155,56653,56654],{"class":157,"line":1970},[155,56655,217],{"emptyLinePlaceholder":216},[155,56657,56658],{"class":157,"line":1981},[155,56659,4042],{"class":161},[155,56661,56662],{"class":157,"line":1986},[155,56663,4047],{"class":161},[155,56665,56666,56668,56670,56672,56674,56676,56678],{"class":157,"line":1991},[155,56667,748],{"class":171},[155,56669,317],{"class":167},[155,56671,756],{"class":732},[155,56673,759],{"class":167},[155,56675,762],{"class":171},[155,56677,765],{"class":167},[155,56679,3724],{"class":732},[155,56681,56682,56684,56686],{"class":157,"line":1997},[155,56683,811],{"class":171},[155,56685,317],{"class":167},[155,56687,1829],{"class":171},[155,56689,56690],{"class":157,"line":2014},[155,56691,4076],{"class":161},[155,56693,56694],{"class":157,"line":2046},[155,56695,4081],{"class":161},[155,56697,56698,56700,56702,56704,56706,56708,56710,56712,56714,56716,56718,56720,56722,56724,56726,56728,56730,56732,56734,56736,56738,56740,56742],{"class":157,"line":2062},[155,56699,4086],{"class":171},[155,56701,317],{"class":167},[155,56703,4091],{"class":171},[155,56705,4094],{"class":732},[155,56707,332],{"class":171},[155,56709,4099],{"class":732},[155,56711,332],{"class":171},[155,56713,4104],{"class":732},[155,56715,332],{"class":171},[155,56717,4109],{"class":732},[155,56719,332],{"class":171},[155,56721,4114],{"class":732},[155,56723,332],{"class":171},[155,56725,4119],{"class":732},[155,56727,332],{"class":171},[155,56729,4124],{"class":732},[155,56731,332],{"class":171},[155,56733,4129],{"class":732},[155,56735,332],{"class":171},[155,56737,4134],{"class":732},[155,56739,332],{"class":171},[155,56741,4139],{"class":732},[155,56743,2845],{"class":171},[155,56745,56746,56748],{"class":157,"line":2067},[155,56747,3783],{"class":167},[155,56749,2477],{"class":171},[155,56751,56752],{"class":157,"line":2073},[155,56753,4152],{"class":161},[155,56755,56756,56758,56760,56762],{"class":157,"line":2079},[155,56757,2179],{"class":167},[155,56759,4159],{"class":171},[155,56761,1131],{"class":167},[155,56763,3802],{"class":171},[155,56765,56766,56768,56770],{"class":157,"line":2089},[155,56767,2200],{"class":171},[155,56769,317],{"class":167},[155,56771,2205],{"class":171},[155,56773,56774,56776,56778],{"class":157,"line":2095},[155,56775,2217],{"class":171},[155,56777,317],{"class":167},[155,56779,2222],{"class":171},[155,56781,56782],{"class":157,"line":2106},[155,56783,217],{"emptyLinePlaceholder":216},[155,56785,56786],{"class":157,"line":2112},[155,56787,4188],{"class":161},[155,56789,56790],{"class":157,"line":2122},[155,56791,2468],{"class":171},[155,56793,56794],{"class":157,"line":2128},[155,56795,4197],{"class":161},[155,56797,56798,56800,56802],{"class":157,"line":2138},[155,56799,2252],{"class":171},[155,56801,317],{"class":167},[155,56803,2257],{"class":171},[155,56805,56806],{"class":157,"line":2144},[155,56807,4210],{"class":161},[155,56809,56810,56812,56814,56816,56818,56820,56822],{"class":157,"line":2154},[155,56811,2269],{"class":171},[155,56813,317],{"class":167},[155,56815,2274],{"class":171},[155,56817,2277],{"class":323},[155,56819,317],{"class":167},[155,56821,329],{"class":263},[155,56823,363],{"class":171},[155,56825,56826],{"class":157,"line":2160},[155,56827,4231],{"class":161},[155,56829,56830,56832,56834],{"class":157,"line":2170},[155,56831,4236],{"class":171},[155,56833,317],{"class":167},[155,56835,4241],{"class":171},[155,56837,56838,56840,56842],{"class":157,"line":2176},[155,56839,4246],{"class":171},[155,56841,317],{"class":167},[155,56843,4251],{"class":171},[155,56845,56846,56848,56850,56852,56854,56856,56858,56860],{"class":157,"line":2191},[155,56847,4256],{"class":263},[155,56849,230],{"class":171},[155,56851,4261],{"class":732},[155,56853,4264],{"class":171},[155,56855,4267],{"class":732},[155,56857,332],{"class":171},[155,56859,4272],{"class":732},[155,56861,4275],{"class":171},[14,56863,7449],{"id":7448},[19,56865,7453],{"id":7452},[24,56867,56868],{},[37,56869],{"alt":39,"src":7458},[24,56871,56872],{},[37,56873],{"alt":39,"src":7463},[24,56875,56876],{},[37,56877],{"alt":39,"src":7468},[24,56879,7471],{},[24,56881,56882],{},[37,56883],{"alt":39,"src":7476},[24,56885,56886],{},[37,56887],{"alt":39,"src":7481},[24,56889,56890],{},[37,56891],{"alt":39,"src":7486},[24,56893,56894],{},[37,56895],{"alt":39,"src":7491},[24,56897,56898],{},[37,56899],{"alt":39,"src":7496},[19,56901,7500],{"id":7499},[28,56903,56904],{},[31,56905,7505],{},[146,56907,56908],{"className":148,"code":7508,"language":150,"meta":39,"style":39},[152,56909,56910,56916,56926,56936,56946,56950,56966,56974,56992,56996,57000,57010,57046,57050,57086,57090,57118,57122,57126,57136,57172,57176,57212,57216,57244,57248,57252,57262,57298,57302,57338,57342,57378,57382,57410,57414,57418,57428,57464,57468,57504,57508,57544,57548,57576,57580,57584,57594,57630,57634,57670,57674,57710,57714,57742,57746,57750,57760,57764,57768,57772,57792,57796,57808,57812,57824,57828,57832,57836,57840,57852,57856,57864,57868,57880,57884,57898,57902,57910,57914,57922,57926,57930,57942,57946,57960,57968,57972,57976,57984,57994,58004,58014,58024,58034,58044,58050,58054,58058,58070,58090,58096,58104],{"__ignoreMap":39},[155,56911,56912,56914],{"class":157,"line":158},[155,56913,168],{"class":167},[155,56915,172],{"class":171},[155,56917,56918,56920,56922,56924],{"class":157,"line":46},[155,56919,183],{"class":167},[155,56921,7523],{"class":171},[155,56923,168],{"class":167},[155,56925,7528],{"class":171},[155,56927,56928,56930,56932,56934],{"class":157,"line":121},[155,56929,183],{"class":167},[155,56931,186],{"class":171},[155,56933,168],{"class":167},[155,56935,191],{"class":171},[155,56937,56938,56940,56942,56944],{"class":157,"line":180},[155,56939,183],{"class":167},[155,56941,205],{"class":171},[155,56943,168],{"class":167},[155,56945,210],{"class":171},[155,56947,56948],{"class":157,"line":194},[155,56949,217],{"emptyLinePlaceholder":216},[155,56951,56952,56954,56956,56958,56960,56962,56964],{"class":157,"line":200},[155,56953,223],{"class":167},[155,56955,7559],{"class":226},[155,56957,230],{"class":171},[155,56959,233],{"class":226},[155,56961,236],{"class":171},[155,56963,239],{"class":226},[155,56965,242],{"class":171},[155,56967,56968,56970,56972],{"class":157,"line":213},[155,56969,260],{"class":167},[155,56971,264],{"class":263},[155,56973,267],{"class":171},[155,56975,56976,56978,56980,56982,56984,56986,56988,56990],{"class":157,"line":220},[155,56977,279],{"class":263},[155,56979,230],{"class":171},[155,56981,7586],{"class":263},[155,56983,7589],{"class":171},[155,56985,285],{"class":263},[155,56987,288],{"class":171},[155,56989,291],{"class":263},[155,56991,294],{"class":171},[155,56993,56994],{"class":157,"line":245},[155,56995,7602],{"class":161},[155,56997,56998],{"class":157,"line":251},[155,56999,7607],{"class":161},[155,57001,57002,57004,57006,57008],{"class":157,"line":257},[155,57003,311],{"class":263},[155,57005,7614],{"class":171},[155,57007,317],{"class":167},[155,57009,7619],{"class":171},[155,57011,57012,57014,57016,57018,57020,57022,57024,57026,57028,57030,57032,57034,57036,57038,57040,57042,57044],{"class":157,"line":270},[155,57013,7624],{"class":171},[155,57015,324],{"class":323},[155,57017,317],{"class":167},[155,57019,329],{"class":263},[155,57021,332],{"class":171},[155,57023,335],{"class":323},[155,57025,317],{"class":167},[155,57027,1076],{"class":263},[155,57029,332],{"class":171},[155,57031,345],{"class":323},[155,57033,317],{"class":167},[155,57035,4444],{"class":263},[155,57037,332],{"class":171},[155,57039,355],{"class":323},[155,57041,317],{"class":167},[155,57043,329],{"class":263},[155,57045,7657],{"class":171},[155,57047,57048],{"class":157,"line":276},[155,57049,7662],{"class":171},[155,57051,57052,57054,57056,57058,57060,57062,57064,57066,57068,57070,57072,57074,57076,57078,57080,57082,57084],{"class":157,"line":297},[155,57053,7624],{"class":171},[155,57055,324],{"class":323},[155,57057,317],{"class":167},[155,57059,1076],{"class":263},[155,57061,332],{"class":171},[155,57063,335],{"class":323},[155,57065,317],{"class":167},[155,57067,1076],{"class":263},[155,57069,332],{"class":171},[155,57071,345],{"class":323},[155,57073,317],{"class":167},[155,57075,4444],{"class":263},[155,57077,332],{"class":171},[155,57079,355],{"class":323},[155,57081,317],{"class":167},[155,57083,329],{"class":263},[155,57085,7657],{"class":171},[155,57087,57088],{"class":157,"line":302},[155,57089,7662],{"class":171},[155,57091,57092,57094,57096,57098,57100,57102,57104,57106,57108,57110,57112,57114,57116],{"class":157,"line":308},[155,57093,7707],{"class":171},[155,57095,345],{"class":323},[155,57097,317],{"class":167},[155,57099,360],{"class":263},[155,57101,332],{"class":171},[155,57103,406],{"class":323},[155,57105,317],{"class":167},[155,57107,360],{"class":263},[155,57109,332],{"class":171},[155,57111,355],{"class":323},[155,57113,317],{"class":167},[155,57115,1109],{"class":263},[155,57117,363],{"class":171},[155,57119,57120],{"class":157,"line":366},[155,57121,7736],{"class":171},[155,57123,57124],{"class":157,"line":379},[155,57125,7741],{"class":161},[155,57127,57128,57130,57132,57134],{"class":157,"line":385},[155,57129,311],{"class":263},[155,57131,7748],{"class":171},[155,57133,317],{"class":167},[155,57135,7619],{"class":171},[155,57137,57138,57140,57142,57144,57146,57148,57150,57152,57154,57156,57158,57160,57162,57164,57166,57168,57170],{"class":157,"line":415},[155,57139,7624],{"class":171},[155,57141,324],{"class":323},[155,57143,317],{"class":167},[155,57145,1076],{"class":263},[155,57147,332],{"class":171},[155,57149,335],{"class":323},[155,57151,317],{"class":167},[155,57153,1608],{"class":263},[155,57155,332],{"class":171},[155,57157,345],{"class":323},[155,57159,317],{"class":167},[155,57161,4444],{"class":263},[155,57163,332],{"class":171},[155,57165,355],{"class":323},[155,57167,317],{"class":167},[155,57169,329],{"class":263},[155,57171,7657],{"class":171},[155,57173,57174],{"class":157,"line":452},[155,57175,7662],{"class":171},[155,57177,57178,57180,57182,57184,57186,57188,57190,57192,57194,57196,57198,57200,57202,57204,57206,57208,57210],{"class":157,"line":480},[155,57179,7624],{"class":171},[155,57181,324],{"class":323},[155,57183,317],{"class":167},[155,57185,1608],{"class":263},[155,57187,332],{"class":171},[155,57189,335],{"class":323},[155,57191,317],{"class":167},[155,57193,1608],{"class":263},[155,57195,332],{"class":171},[155,57197,345],{"class":323},[155,57199,317],{"class":167},[155,57201,4444],{"class":263},[155,57203,332],{"class":171},[155,57205,355],{"class":323},[155,57207,317],{"class":167},[155,57209,329],{"class":263},[155,57211,7657],{"class":171},[155,57213,57214],{"class":157,"line":486},[155,57215,7662],{"class":171},[155,57217,57218,57220,57222,57224,57226,57228,57230,57232,57234,57236,57238,57240,57242],{"class":157,"line":499},[155,57219,7707],{"class":171},[155,57221,345],{"class":323},[155,57223,317],{"class":167},[155,57225,360],{"class":263},[155,57227,332],{"class":171},[155,57229,406],{"class":323},[155,57231,317],{"class":167},[155,57233,360],{"class":263},[155,57235,332],{"class":171},[155,57237,355],{"class":323},[155,57239,317],{"class":167},[155,57241,1109],{"class":263},[155,57243,363],{"class":171},[155,57245,57246],{"class":157,"line":505},[155,57247,7736],{"class":171},[155,57249,57250],{"class":157,"line":528},[155,57251,7869],{"class":161},[155,57253,57254,57256,57258,57260],{"class":157,"line":549},[155,57255,311],{"class":263},[155,57257,7876],{"class":171},[155,57259,317],{"class":167},[155,57261,7619],{"class":171},[155,57263,57264,57266,57268,57270,57272,57274,57276,57278,57280,57282,57284,57286,57288,57290,57292,57294,57296],{"class":157,"line":570},[155,57265,7624],{"class":171},[155,57267,324],{"class":323},[155,57269,317],{"class":167},[155,57271,1608],{"class":263},[155,57273,332],{"class":171},[155,57275,335],{"class":323},[155,57277,317],{"class":167},[155,57279,4479],{"class":263},[155,57281,332],{"class":171},[155,57283,345],{"class":323},[155,57285,317],{"class":167},[155,57287,4444],{"class":263},[155,57289,332],{"class":171},[155,57291,355],{"class":323},[155,57293,317],{"class":167},[155,57295,329],{"class":263},[155,57297,7657],{"class":171},[155,57299,57300],{"class":157,"line":575},[155,57301,7662],{"class":171},[155,57303,57304,57306,57308,57310,57312,57314,57316,57318,57320,57322,57324,57326,57328,57330,57332,57334,57336],{"class":157,"line":581},[155,57305,7624],{"class":171},[155,57307,324],{"class":323},[155,57309,317],{"class":167},[155,57311,4479],{"class":263},[155,57313,332],{"class":171},[155,57315,335],{"class":323},[155,57317,317],{"class":167},[155,57319,4479],{"class":263},[155,57321,332],{"class":171},[155,57323,345],{"class":323},[155,57325,317],{"class":167},[155,57327,4444],{"class":263},[155,57329,332],{"class":171},[155,57331,355],{"class":323},[155,57333,317],{"class":167},[155,57335,329],{"class":263},[155,57337,7657],{"class":171},[155,57339,57340],{"class":157,"line":592},[155,57341,7662],{"class":171},[155,57343,57344,57346,57348,57350,57352,57354,57356,57358,57360,57362,57364,57366,57368,57370,57372,57374,57376],{"class":157,"line":610},[155,57345,7624],{"class":171},[155,57347,324],{"class":323},[155,57349,317],{"class":167},[155,57351,4479],{"class":263},[155,57353,332],{"class":171},[155,57355,335],{"class":323},[155,57357,317],{"class":167},[155,57359,4479],{"class":263},[155,57361,332],{"class":171},[155,57363,345],{"class":323},[155,57365,317],{"class":167},[155,57367,4444],{"class":263},[155,57369,332],{"class":171},[155,57371,355],{"class":323},[155,57373,317],{"class":167},[155,57375,329],{"class":263},[155,57377,7657],{"class":171},[155,57379,57380],{"class":157,"line":622},[155,57381,7662],{"class":171},[155,57383,57384,57386,57388,57390,57392,57394,57396,57398,57400,57402,57404,57406,57408],{"class":157,"line":638},[155,57385,7707],{"class":171},[155,57387,345],{"class":323},[155,57389,317],{"class":167},[155,57391,360],{"class":263},[155,57393,332],{"class":171},[155,57395,406],{"class":323},[155,57397,317],{"class":167},[155,57399,360],{"class":263},[155,57401,332],{"class":171},[155,57403,355],{"class":323},[155,57405,317],{"class":167},[155,57407,1109],{"class":263},[155,57409,363],{"class":171},[155,57411,57412],{"class":157,"line":650},[155,57413,7736],{"class":171},[155,57415,57416],{"class":157,"line":662},[155,57417,8037],{"class":161},[155,57419,57420,57422,57424,57426],{"class":157,"line":678},[155,57421,311],{"class":263},[155,57423,8044],{"class":171},[155,57425,317],{"class":167},[155,57427,7619],{"class":171},[155,57429,57430,57432,57434,57436,57438,57440,57442,57444,57446,57448,57450,57452,57454,57456,57458,57460,57462],{"class":157,"line":694},[155,57431,7624],{"class":171},[155,57433,324],{"class":323},[155,57435,317],{"class":167},[155,57437,4479],{"class":263},[155,57439,332],{"class":171},[155,57441,335],{"class":323},[155,57443,317],{"class":167},[155,57445,8067],{"class":263},[155,57447,332],{"class":171},[155,57449,345],{"class":323},[155,57451,317],{"class":167},[155,57453,4444],{"class":263},[155,57455,332],{"class":171},[155,57457,355],{"class":323},[155,57459,317],{"class":167},[155,57461,329],{"class":263},[155,57463,7657],{"class":171},[155,57465,57466],{"class":157,"line":706},[155,57467,7662],{"class":171},[155,57469,57470,57472,57474,57476,57478,57480,57482,57484,57486,57488,57490,57492,57494,57496,57498,57500,57502],{"class":157,"line":715},[155,57471,7624],{"class":171},[155,57473,324],{"class":323},[155,57475,317],{"class":167},[155,57477,8067],{"class":263},[155,57479,332],{"class":171},[155,57481,335],{"class":323},[155,57483,317],{"class":167},[155,57485,8067],{"class":263},[155,57487,332],{"class":171},[155,57489,345],{"class":323},[155,57491,317],{"class":167},[155,57493,4444],{"class":263},[155,57495,332],{"class":171},[155,57497,355],{"class":323},[155,57499,317],{"class":167},[155,57501,329],{"class":263},[155,57503,7657],{"class":171},[155,57505,57506],{"class":157,"line":720},[155,57507,7662],{"class":171},[155,57509,57510,57512,57514,57516,57518,57520,57522,57524,57526,57528,57530,57532,57534,57536,57538,57540,57542],{"class":157,"line":739},[155,57511,7624],{"class":171},[155,57513,324],{"class":323},[155,57515,317],{"class":167},[155,57517,8067],{"class":263},[155,57519,332],{"class":171},[155,57521,335],{"class":323},[155,57523,317],{"class":167},[155,57525,8067],{"class":263},[155,57527,332],{"class":171},[155,57529,345],{"class":323},[155,57531,317],{"class":167},[155,57533,4444],{"class":263},[155,57535,332],{"class":171},[155,57537,355],{"class":323},[155,57539,317],{"class":167},[155,57541,329],{"class":263},[155,57543,7657],{"class":171},[155,57545,57546],{"class":157,"line":745},[155,57547,7662],{"class":171},[155,57549,57550,57552,57554,57556,57558,57560,57562,57564,57566,57568,57570,57572,57574],{"class":157,"line":773},[155,57551,7707],{"class":171},[155,57553,345],{"class":323},[155,57555,317],{"class":167},[155,57557,360],{"class":263},[155,57559,332],{"class":171},[155,57561,406],{"class":323},[155,57563,317],{"class":167},[155,57565,360],{"class":263},[155,57567,332],{"class":171},[155,57569,355],{"class":323},[155,57571,317],{"class":167},[155,57573,1109],{"class":263},[155,57575,363],{"class":171},[155,57577,57578],{"class":157,"line":779},[155,57579,7736],{"class":171},[155,57581,57582],{"class":157,"line":785},[155,57583,8206],{"class":161},[155,57585,57586,57588,57590,57592],{"class":157,"line":791},[155,57587,311],{"class":263},[155,57589,8213],{"class":171},[155,57591,317],{"class":167},[155,57593,7619],{"class":171},[155,57595,57596,57598,57600,57602,57604,57606,57608,57610,57612,57614,57616,57618,57620,57622,57624,57626,57628],{"class":157,"line":796},[155,57597,7624],{"class":171},[155,57599,324],{"class":323},[155,57601,317],{"class":167},[155,57603,8067],{"class":263},[155,57605,332],{"class":171},[155,57607,335],{"class":323},[155,57609,317],{"class":167},[155,57611,8067],{"class":263},[155,57613,332],{"class":171},[155,57615,345],{"class":323},[155,57617,317],{"class":167},[155,57619,4444],{"class":263},[155,57621,332],{"class":171},[155,57623,355],{"class":323},[155,57625,317],{"class":167},[155,57627,329],{"class":263},[155,57629,7657],{"class":171},[155,57631,57632],{"class":157,"line":802},[155,57633,7662],{"class":171},[155,57635,57636,57638,57640,57642,57644,57646,57648,57650,57652,57654,57656,57658,57660,57662,57664,57666,57668],{"class":157,"line":808},[155,57637,7624],{"class":171},[155,57639,324],{"class":323},[155,57641,317],{"class":167},[155,57643,8067],{"class":263},[155,57645,332],{"class":171},[155,57647,335],{"class":323},[155,57649,317],{"class":167},[155,57651,8067],{"class":263},[155,57653,332],{"class":171},[155,57655,345],{"class":323},[155,57657,317],{"class":167},[155,57659,4444],{"class":263},[155,57661,332],{"class":171},[155,57663,355],{"class":323},[155,57665,317],{"class":167},[155,57667,329],{"class":263},[155,57669,7657],{"class":171},[155,57671,57672],{"class":157,"line":819},[155,57673,7662],{"class":171},[155,57675,57676,57678,57680,57682,57684,57686,57688,57690,57692,57694,57696,57698,57700,57702,57704,57706,57708],{"class":157,"line":1832},[155,57677,7624],{"class":171},[155,57679,324],{"class":323},[155,57681,317],{"class":167},[155,57683,8067],{"class":263},[155,57685,332],{"class":171},[155,57687,335],{"class":323},[155,57689,317],{"class":167},[155,57691,8067],{"class":263},[155,57693,332],{"class":171},[155,57695,345],{"class":323},[155,57697,317],{"class":167},[155,57699,4444],{"class":263},[155,57701,332],{"class":171},[155,57703,355],{"class":323},[155,57705,317],{"class":167},[155,57707,329],{"class":263},[155,57709,7657],{"class":171},[155,57711,57712],{"class":157,"line":1838},[155,57713,7662],{"class":171},[155,57715,57716,57718,57720,57722,57724,57726,57728,57730,57732,57734,57736,57738,57740],{"class":157,"line":1844},[155,57717,7707],{"class":171},[155,57719,345],{"class":323},[155,57721,317],{"class":167},[155,57723,360],{"class":263},[155,57725,332],{"class":171},[155,57727,406],{"class":323},[155,57729,317],{"class":167},[155,57731,360],{"class":263},[155,57733,332],{"class":171},[155,57735,355],{"class":323},[155,57737,317],{"class":167},[155,57739,1109],{"class":263},[155,57741,363],{"class":171},[155,57743,57744],{"class":157,"line":1850},[155,57745,7736],{"class":171},[155,57747,57748],{"class":157,"line":1861},[155,57749,8374],{"class":161},[155,57751,57752,57754,57756,57758],{"class":157,"line":1866},[155,57753,311],{"class":263},[155,57755,8381],{"class":171},[155,57757,317],{"class":167},[155,57759,7619],{"class":171},[155,57761,57762],{"class":157,"line":1871},[155,57763,8390],{"class":161},[155,57765,57766],{"class":157,"line":1877},[155,57767,8395],{"class":161},[155,57769,57770],{"class":157,"line":1883},[155,57771,8400],{"class":171},[155,57773,57774,57776,57778,57780,57782,57784,57786,57788,57790],{"class":157,"line":1894},[155,57775,8405],{"class":171},[155,57777,8408],{"class":263},[155,57779,1563],{"class":167},[155,57781,8408],{"class":263},[155,57783,1563],{"class":167},[155,57785,8067],{"class":263},[155,57787,332],{"class":171},[155,57789,4479],{"class":263},[155,57791,7657],{"class":171},[155,57793,57794],{"class":157,"line":1900},[155,57795,7662],{"class":171},[155,57797,57798,57800,57802,57804,57806],{"class":157,"line":1911},[155,57799,8405],{"class":171},[155,57801,4479],{"class":263},[155,57803,332],{"class":171},[155,57805,1608],{"class":263},[155,57807,7657],{"class":171},[155,57809,57810],{"class":157,"line":1917},[155,57811,7662],{"class":171},[155,57813,57814,57816,57818,57820,57822],{"class":157,"line":1927},[155,57815,8405],{"class":171},[155,57817,1608],{"class":263},[155,57819,332],{"class":171},[155,57821,565],{"class":263},[155,57823,363],{"class":171},[155,57825,57826],{"class":157,"line":1933},[155,57827,7736],{"class":171},[155,57829,57830],{"class":157,"line":1943},[155,57831,217],{"emptyLinePlaceholder":216},[155,57833,57834],{"class":157,"line":1949},[155,57835,8467],{"class":161},[155,57837,57838],{"class":157,"line":1959},[155,57839,8472],{"class":161},[155,57841,57842,57844,57846,57848,57850],{"class":157,"line":1964},[155,57843,2179],{"class":167},[155,57845,8479],{"class":171},[155,57847,1131],{"class":167},[155,57849,8484],{"class":263},[155,57851,8487],{"class":171},[155,57853,57854],{"class":157,"line":1970},[155,57855,8492],{"class":161},[155,57857,57858,57860,57862],{"class":157,"line":1981},[155,57859,8497],{"class":167},[155,57861,8500],{"class":263},[155,57863,8503],{"class":171},[155,57865,57866],{"class":157,"line":1986},[155,57867,8508],{"class":161},[155,57869,57870,57872,57874,57876,57878],{"class":157,"line":1991},[155,57871,8513],{"class":171},[155,57873,8516],{"class":323},[155,57875,317],{"class":167},[155,57877,8521],{"class":732},[155,57879,363],{"class":171},[155,57881,57882],{"class":157,"line":1997},[155,57883,8528],{"class":161},[155,57885,57886,57888,57890,57892,57894,57896],{"class":157,"line":2014},[155,57887,8533],{"class":167},[155,57889,8536],{"class":171},[155,57891,8539],{"class":167},[155,57893,8542],{"class":167},[155,57895,8545],{"class":263},[155,57897,736],{"class":171},[155,57899,57900],{"class":157,"line":2046},[155,57901,8552],{"class":161},[155,57903,57904,57906,57908],{"class":157,"line":2062},[155,57905,8557],{"class":171},[155,57907,1109],{"class":263},[155,57909,363],{"class":171},[155,57911,57912],{"class":157,"line":2067},[155,57913,8566],{"class":161},[155,57915,57916,57918,57920],{"class":157,"line":2073},[155,57917,8571],{"class":167},[155,57919,8500],{"class":263},[155,57921,8576],{"class":171},[155,57923,57924],{"class":157,"line":2079},[155,57925,8581],{"class":161},[155,57927,57928],{"class":157,"line":2089},[155,57929,8586],{"class":161},[155,57931,57932,57934,57936,57938,57940],{"class":157,"line":2095},[155,57933,8591],{"class":171},[155,57935,1109],{"class":263},[155,57937,332],{"class":171},[155,57939,8598],{"class":263},[155,57941,363],{"class":171},[155,57943,57944],{"class":157,"line":2106},[155,57945,8605],{"class":161},[155,57947,57948,57950,57952,57954,57956,57958],{"class":157,"line":2112},[155,57949,8533],{"class":167},[155,57951,8536],{"class":171},[155,57953,8539],{"class":167},[155,57955,8542],{"class":167},[155,57957,8545],{"class":263},[155,57959,736],{"class":171},[155,57961,57962,57964,57966],{"class":157,"line":2122},[155,57963,8557],{"class":171},[155,57965,1109],{"class":263},[155,57967,363],{"class":171},[155,57969,57970],{"class":157,"line":2128},[155,57971,217],{"emptyLinePlaceholder":216},[155,57973,57974],{"class":157,"line":2138},[155,57975,4774],{"class":161},[155,57977,57978,57980,57982],{"class":157,"line":2144},[155,57979,260],{"class":167},[155,57981,586],{"class":226},[155,57983,589],{"class":171},[155,57985,57986,57988,57990,57992],{"class":157,"line":2154},[155,57987,595],{"class":171},[155,57989,317],{"class":167},[155,57991,285],{"class":263},[155,57993,8654],{"class":171},[155,57995,57996,57998,58000,58002],{"class":157,"line":2160},[155,57997,595],{"class":171},[155,57999,317],{"class":167},[155,58001,285],{"class":263},[155,58003,8665],{"class":171},[155,58005,58006,58008,58010,58012],{"class":157,"line":2170},[155,58007,595],{"class":171},[155,58009,317],{"class":167},[155,58011,285],{"class":263},[155,58013,8676],{"class":171},[155,58015,58016,58018,58020,58022],{"class":157,"line":2176},[155,58017,595],{"class":171},[155,58019,317],{"class":167},[155,58021,285],{"class":263},[155,58023,8687],{"class":171},[155,58025,58026,58028,58030,58032],{"class":157,"line":2191},[155,58027,595],{"class":171},[155,58029,317],{"class":167},[155,58031,285],{"class":263},[155,58033,8698],{"class":171},[155,58035,58036,58038,58040,58042],{"class":157,"line":2197},[155,58037,595],{"class":171},[155,58039,317],{"class":167},[155,58041,285],{"class":263},[155,58043,8709],{"class":171},[155,58045,58046,58048],{"class":157,"line":2208},[155,58047,709],{"class":167},[155,58049,712],{"class":171},[155,58051,58052],{"class":157,"line":2214},[155,58053,217],{"emptyLinePlaceholder":216},[155,58055,58056],{"class":157,"line":2225},[155,58057,8724],{"class":161},[155,58059,58060,58062,58064,58066,58068],{"class":157,"line":2231},[155,58061,723],{"class":167},[155,58063,726],{"class":263},[155,58065,729],{"class":167},[155,58067,8735],{"class":732},[155,58069,736],{"class":171},[155,58071,58072,58074,58076,58078,58080,58082,58084,58086,58088],{"class":157,"line":2237},[155,58073,748],{"class":171},[155,58075,317],{"class":167},[155,58077,753],{"class":171},[155,58079,756],{"class":732},[155,58081,759],{"class":167},[155,58083,762],{"class":171},[155,58085,765],{"class":167},[155,58087,768],{"class":732},[155,58089,363],{"class":171},[155,58091,58092,58094],{"class":157,"line":2243},[155,58093,822],{"class":263},[155,58095,8764],{"class":171},[155,58097,58098,58100,58102],{"class":157,"line":2249},[155,58099,811],{"class":171},[155,58101,317],{"class":167},[155,58103,8773],{"class":171},[155,58105,58106,58108,58110,58112,58114,58116,58118,58120],{"class":157,"line":2260},[155,58107,822],{"class":263},[155,58109,825],{"class":171},[155,58111,329],{"class":263},[155,58113,332],{"class":171},[155,58115,1025],{"class":263},[155,58117,332],{"class":171},[155,58119,1025],{"class":263},[155,58121,839],{"class":171},[28,58123,58124],{"start":46},[31,58125,8796],{},[24,58127,8799],{},[24,58129,8802],{},[24,58131,8805],{},[146,58133,58134],{"className":148,"code":8808,"language":150,"meta":39,"style":39},[152,58135,58136,58140,58144,58156,58160,58168,58172,58184,58188,58202,58206,58214,58218,58226,58230,58234,58246,58250,58264],{"__ignoreMap":39},[155,58137,58138],{"class":157,"line":158},[155,58139,8815],{"class":161},[155,58141,58142],{"class":157,"line":46},[155,58143,8820],{"class":161},[155,58145,58146,58148,58150,58152,58154],{"class":157,"line":121},[155,58147,1125],{"class":167},[155,58149,8479],{"class":171},[155,58151,1131],{"class":167},[155,58153,8484],{"class":263},[155,58155,8487],{"class":171},[155,58157,58158],{"class":157,"line":180},[155,58159,8837],{"class":161},[155,58161,58162,58164,58166],{"class":157,"line":194},[155,58163,1142],{"class":167},[155,58165,8500],{"class":263},[155,58167,8503],{"class":171},[155,58169,58170],{"class":157,"line":200},[155,58171,8850],{"class":161},[155,58173,58174,58176,58178,58180,58182],{"class":157,"line":213},[155,58175,8855],{"class":171},[155,58177,8516],{"class":323},[155,58179,317],{"class":167},[155,58181,8521],{"class":732},[155,58183,363],{"class":171},[155,58185,58186],{"class":157,"line":220},[155,58187,8868],{"class":161},[155,58189,58190,58192,58194,58196,58198,58200],{"class":157,"line":245},[155,58191,2803],{"class":167},[155,58193,8536],{"class":171},[155,58195,8539],{"class":167},[155,58197,8542],{"class":167},[155,58199,8545],{"class":263},[155,58201,736],{"class":171},[155,58203,58204],{"class":157,"line":251},[155,58205,8887],{"class":161},[155,58207,58208,58210,58212],{"class":157,"line":257},[155,58209,8892],{"class":171},[155,58211,1109],{"class":263},[155,58213,363],{"class":171},[155,58215,58216],{"class":157,"line":270},[155,58217,8901],{"class":161},[155,58219,58220,58222,58224],{"class":157,"line":276},[155,58221,8906],{"class":167},[155,58223,8500],{"class":263},[155,58225,8576],{"class":171},[155,58227,58228],{"class":157,"line":297},[155,58229,8915],{"class":161},[155,58231,58232],{"class":157,"line":302},[155,58233,8920],{"class":161},[155,58235,58236,58238,58240,58242,58244],{"class":157,"line":308},[155,58237,8925],{"class":171},[155,58239,1109],{"class":263},[155,58241,332],{"class":171},[155,58243,8598],{"class":263},[155,58245,363],{"class":171},[155,58247,58248],{"class":157,"line":366},[155,58249,8938],{"class":161},[155,58251,58252,58254,58256,58258,58260,58262],{"class":157,"line":379},[155,58253,2803],{"class":167},[155,58255,8536],{"class":171},[155,58257,8539],{"class":167},[155,58259,8542],{"class":167},[155,58261,8545],{"class":263},[155,58263,736],{"class":171},[155,58265,58266,58268,58270],{"class":157,"line":385},[155,58267,8892],{"class":171},[155,58269,1109],{"class":263},[155,58271,363],{"class":171},[24,58273,8963],{},[24,58275,8966],{},[146,58277,58278],{"className":148,"code":7508,"language":150,"meta":39,"style":39},[152,58279,58280,58286,58296,58306,58316,58320,58336,58344,58362,58366,58370,58380,58416,58420,58456,58460,58488,58492,58496,58506,58542,58546,58582,58586,58614,58618,58622,58632,58668,58672,58708,58712,58748,58752,58780,58784,58788,58798,58834,58838,58874,58878,58914,58918,58946,58950,58954,58964,59000,59004,59040,59044,59080,59084,59112,59116,59120,59130,59134,59138,59142,59162,59166,59178,59182,59194,59198,59202,59206,59210,59222,59226,59234,59238,59250,59254,59268,59272,59280,59284,59292,59296,59300,59312,59316,59330,59338,59342,59346,59354,59364,59374,59384,59394,59404,59414,59420,59424,59428,59440,59460,59466,59474],{"__ignoreMap":39},[155,58281,58282,58284],{"class":157,"line":158},[155,58283,168],{"class":167},[155,58285,172],{"class":171},[155,58287,58288,58290,58292,58294],{"class":157,"line":46},[155,58289,183],{"class":167},[155,58291,7523],{"class":171},[155,58293,168],{"class":167},[155,58295,7528],{"class":171},[155,58297,58298,58300,58302,58304],{"class":157,"line":121},[155,58299,183],{"class":167},[155,58301,186],{"class":171},[155,58303,168],{"class":167},[155,58305,191],{"class":171},[155,58307,58308,58310,58312,58314],{"class":157,"line":180},[155,58309,183],{"class":167},[155,58311,205],{"class":171},[155,58313,168],{"class":167},[155,58315,210],{"class":171},[155,58317,58318],{"class":157,"line":194},[155,58319,217],{"emptyLinePlaceholder":216},[155,58321,58322,58324,58326,58328,58330,58332,58334],{"class":157,"line":200},[155,58323,223],{"class":167},[155,58325,7559],{"class":226},[155,58327,230],{"class":171},[155,58329,233],{"class":226},[155,58331,236],{"class":171},[155,58333,239],{"class":226},[155,58335,242],{"class":171},[155,58337,58338,58340,58342],{"class":157,"line":213},[155,58339,260],{"class":167},[155,58341,264],{"class":263},[155,58343,267],{"class":171},[155,58345,58346,58348,58350,58352,58354,58356,58358,58360],{"class":157,"line":220},[155,58347,279],{"class":263},[155,58349,230],{"class":171},[155,58351,7586],{"class":263},[155,58353,7589],{"class":171},[155,58355,285],{"class":263},[155,58357,288],{"class":171},[155,58359,291],{"class":263},[155,58361,294],{"class":171},[155,58363,58364],{"class":157,"line":245},[155,58365,7602],{"class":161},[155,58367,58368],{"class":157,"line":251},[155,58369,7607],{"class":161},[155,58371,58372,58374,58376,58378],{"class":157,"line":257},[155,58373,311],{"class":263},[155,58375,7614],{"class":171},[155,58377,317],{"class":167},[155,58379,7619],{"class":171},[155,58381,58382,58384,58386,58388,58390,58392,58394,58396,58398,58400,58402,58404,58406,58408,58410,58412,58414],{"class":157,"line":270},[155,58383,7624],{"class":171},[155,58385,324],{"class":323},[155,58387,317],{"class":167},[155,58389,329],{"class":263},[155,58391,332],{"class":171},[155,58393,335],{"class":323},[155,58395,317],{"class":167},[155,58397,1076],{"class":263},[155,58399,332],{"class":171},[155,58401,345],{"class":323},[155,58403,317],{"class":167},[155,58405,4444],{"class":263},[155,58407,332],{"class":171},[155,58409,355],{"class":323},[155,58411,317],{"class":167},[155,58413,329],{"class":263},[155,58415,7657],{"class":171},[155,58417,58418],{"class":157,"line":276},[155,58419,7662],{"class":171},[155,58421,58422,58424,58426,58428,58430,58432,58434,58436,58438,58440,58442,58444,58446,58448,58450,58452,58454],{"class":157,"line":297},[155,58423,7624],{"class":171},[155,58425,324],{"class":323},[155,58427,317],{"class":167},[155,58429,1076],{"class":263},[155,58431,332],{"class":171},[155,58433,335],{"class":323},[155,58435,317],{"class":167},[155,58437,1076],{"class":263},[155,58439,332],{"class":171},[155,58441,345],{"class":323},[155,58443,317],{"class":167},[155,58445,4444],{"class":263},[155,58447,332],{"class":171},[155,58449,355],{"class":323},[155,58451,317],{"class":167},[155,58453,329],{"class":263},[155,58455,7657],{"class":171},[155,58457,58458],{"class":157,"line":302},[155,58459,7662],{"class":171},[155,58461,58462,58464,58466,58468,58470,58472,58474,58476,58478,58480,58482,58484,58486],{"class":157,"line":308},[155,58463,7707],{"class":171},[155,58465,345],{"class":323},[155,58467,317],{"class":167},[155,58469,360],{"class":263},[155,58471,332],{"class":171},[155,58473,406],{"class":323},[155,58475,317],{"class":167},[155,58477,360],{"class":263},[155,58479,332],{"class":171},[155,58481,355],{"class":323},[155,58483,317],{"class":167},[155,58485,1109],{"class":263},[155,58487,363],{"class":171},[155,58489,58490],{"class":157,"line":366},[155,58491,7736],{"class":171},[155,58493,58494],{"class":157,"line":379},[155,58495,7741],{"class":161},[155,58497,58498,58500,58502,58504],{"class":157,"line":385},[155,58499,311],{"class":263},[155,58501,7748],{"class":171},[155,58503,317],{"class":167},[155,58505,7619],{"class":171},[155,58507,58508,58510,58512,58514,58516,58518,58520,58522,58524,58526,58528,58530,58532,58534,58536,58538,58540],{"class":157,"line":415},[155,58509,7624],{"class":171},[155,58511,324],{"class":323},[155,58513,317],{"class":167},[155,58515,1076],{"class":263},[155,58517,332],{"class":171},[155,58519,335],{"class":323},[155,58521,317],{"class":167},[155,58523,1608],{"class":263},[155,58525,332],{"class":171},[155,58527,345],{"class":323},[155,58529,317],{"class":167},[155,58531,4444],{"class":263},[155,58533,332],{"class":171},[155,58535,355],{"class":323},[155,58537,317],{"class":167},[155,58539,329],{"class":263},[155,58541,7657],{"class":171},[155,58543,58544],{"class":157,"line":452},[155,58545,7662],{"class":171},[155,58547,58548,58550,58552,58554,58556,58558,58560,58562,58564,58566,58568,58570,58572,58574,58576,58578,58580],{"class":157,"line":480},[155,58549,7624],{"class":171},[155,58551,324],{"class":323},[155,58553,317],{"class":167},[155,58555,1608],{"class":263},[155,58557,332],{"class":171},[155,58559,335],{"class":323},[155,58561,317],{"class":167},[155,58563,1608],{"class":263},[155,58565,332],{"class":171},[155,58567,345],{"class":323},[155,58569,317],{"class":167},[155,58571,4444],{"class":263},[155,58573,332],{"class":171},[155,58575,355],{"class":323},[155,58577,317],{"class":167},[155,58579,329],{"class":263},[155,58581,7657],{"class":171},[155,58583,58584],{"class":157,"line":486},[155,58585,7662],{"class":171},[155,58587,58588,58590,58592,58594,58596,58598,58600,58602,58604,58606,58608,58610,58612],{"class":157,"line":499},[155,58589,7707],{"class":171},[155,58591,345],{"class":323},[155,58593,317],{"class":167},[155,58595,360],{"class":263},[155,58597,332],{"class":171},[155,58599,406],{"class":323},[155,58601,317],{"class":167},[155,58603,360],{"class":263},[155,58605,332],{"class":171},[155,58607,355],{"class":323},[155,58609,317],{"class":167},[155,58611,1109],{"class":263},[155,58613,363],{"class":171},[155,58615,58616],{"class":157,"line":505},[155,58617,7736],{"class":171},[155,58619,58620],{"class":157,"line":528},[155,58621,7869],{"class":161},[155,58623,58624,58626,58628,58630],{"class":157,"line":549},[155,58625,311],{"class":263},[155,58627,7876],{"class":171},[155,58629,317],{"class":167},[155,58631,7619],{"class":171},[155,58633,58634,58636,58638,58640,58642,58644,58646,58648,58650,58652,58654,58656,58658,58660,58662,58664,58666],{"class":157,"line":570},[155,58635,7624],{"class":171},[155,58637,324],{"class":323},[155,58639,317],{"class":167},[155,58641,1608],{"class":263},[155,58643,332],{"class":171},[155,58645,335],{"class":323},[155,58647,317],{"class":167},[155,58649,4479],{"class":263},[155,58651,332],{"class":171},[155,58653,345],{"class":323},[155,58655,317],{"class":167},[155,58657,4444],{"class":263},[155,58659,332],{"class":171},[155,58661,355],{"class":323},[155,58663,317],{"class":167},[155,58665,329],{"class":263},[155,58667,7657],{"class":171},[155,58669,58670],{"class":157,"line":575},[155,58671,7662],{"class":171},[155,58673,58674,58676,58678,58680,58682,58684,58686,58688,58690,58692,58694,58696,58698,58700,58702,58704,58706],{"class":157,"line":581},[155,58675,7624],{"class":171},[155,58677,324],{"class":323},[155,58679,317],{"class":167},[155,58681,4479],{"class":263},[155,58683,332],{"class":171},[155,58685,335],{"class":323},[155,58687,317],{"class":167},[155,58689,4479],{"class":263},[155,58691,332],{"class":171},[155,58693,345],{"class":323},[155,58695,317],{"class":167},[155,58697,4444],{"class":263},[155,58699,332],{"class":171},[155,58701,355],{"class":323},[155,58703,317],{"class":167},[155,58705,329],{"class":263},[155,58707,7657],{"class":171},[155,58709,58710],{"class":157,"line":592},[155,58711,7662],{"class":171},[155,58713,58714,58716,58718,58720,58722,58724,58726,58728,58730,58732,58734,58736,58738,58740,58742,58744,58746],{"class":157,"line":610},[155,58715,7624],{"class":171},[155,58717,324],{"class":323},[155,58719,317],{"class":167},[155,58721,4479],{"class":263},[155,58723,332],{"class":171},[155,58725,335],{"class":323},[155,58727,317],{"class":167},[155,58729,4479],{"class":263},[155,58731,332],{"class":171},[155,58733,345],{"class":323},[155,58735,317],{"class":167},[155,58737,4444],{"class":263},[155,58739,332],{"class":171},[155,58741,355],{"class":323},[155,58743,317],{"class":167},[155,58745,329],{"class":263},[155,58747,7657],{"class":171},[155,58749,58750],{"class":157,"line":622},[155,58751,7662],{"class":171},[155,58753,58754,58756,58758,58760,58762,58764,58766,58768,58770,58772,58774,58776,58778],{"class":157,"line":638},[155,58755,7707],{"class":171},[155,58757,345],{"class":323},[155,58759,317],{"class":167},[155,58761,360],{"class":263},[155,58763,332],{"class":171},[155,58765,406],{"class":323},[155,58767,317],{"class":167},[155,58769,360],{"class":263},[155,58771,332],{"class":171},[155,58773,355],{"class":323},[155,58775,317],{"class":167},[155,58777,1109],{"class":263},[155,58779,363],{"class":171},[155,58781,58782],{"class":157,"line":650},[155,58783,7736],{"class":171},[155,58785,58786],{"class":157,"line":662},[155,58787,8037],{"class":161},[155,58789,58790,58792,58794,58796],{"class":157,"line":678},[155,58791,311],{"class":263},[155,58793,8044],{"class":171},[155,58795,317],{"class":167},[155,58797,7619],{"class":171},[155,58799,58800,58802,58804,58806,58808,58810,58812,58814,58816,58818,58820,58822,58824,58826,58828,58830,58832],{"class":157,"line":694},[155,58801,7624],{"class":171},[155,58803,324],{"class":323},[155,58805,317],{"class":167},[155,58807,4479],{"class":263},[155,58809,332],{"class":171},[155,58811,335],{"class":323},[155,58813,317],{"class":167},[155,58815,8067],{"class":263},[155,58817,332],{"class":171},[155,58819,345],{"class":323},[155,58821,317],{"class":167},[155,58823,4444],{"class":263},[155,58825,332],{"class":171},[155,58827,355],{"class":323},[155,58829,317],{"class":167},[155,58831,329],{"class":263},[155,58833,7657],{"class":171},[155,58835,58836],{"class":157,"line":706},[155,58837,7662],{"class":171},[155,58839,58840,58842,58844,58846,58848,58850,58852,58854,58856,58858,58860,58862,58864,58866,58868,58870,58872],{"class":157,"line":715},[155,58841,7624],{"class":171},[155,58843,324],{"class":323},[155,58845,317],{"class":167},[155,58847,8067],{"class":263},[155,58849,332],{"class":171},[155,58851,335],{"class":323},[155,58853,317],{"class":167},[155,58855,8067],{"class":263},[155,58857,332],{"class":171},[155,58859,345],{"class":323},[155,58861,317],{"class":167},[155,58863,4444],{"class":263},[155,58865,332],{"class":171},[155,58867,355],{"class":323},[155,58869,317],{"class":167},[155,58871,329],{"class":263},[155,58873,7657],{"class":171},[155,58875,58876],{"class":157,"line":720},[155,58877,7662],{"class":171},[155,58879,58880,58882,58884,58886,58888,58890,58892,58894,58896,58898,58900,58902,58904,58906,58908,58910,58912],{"class":157,"line":739},[155,58881,7624],{"class":171},[155,58883,324],{"class":323},[155,58885,317],{"class":167},[155,58887,8067],{"class":263},[155,58889,332],{"class":171},[155,58891,335],{"class":323},[155,58893,317],{"class":167},[155,58895,8067],{"class":263},[155,58897,332],{"class":171},[155,58899,345],{"class":323},[155,58901,317],{"class":167},[155,58903,4444],{"class":263},[155,58905,332],{"class":171},[155,58907,355],{"class":323},[155,58909,317],{"class":167},[155,58911,329],{"class":263},[155,58913,7657],{"class":171},[155,58915,58916],{"class":157,"line":745},[155,58917,7662],{"class":171},[155,58919,58920,58922,58924,58926,58928,58930,58932,58934,58936,58938,58940,58942,58944],{"class":157,"line":773},[155,58921,7707],{"class":171},[155,58923,345],{"class":323},[155,58925,317],{"class":167},[155,58927,360],{"class":263},[155,58929,332],{"class":171},[155,58931,406],{"class":323},[155,58933,317],{"class":167},[155,58935,360],{"class":263},[155,58937,332],{"class":171},[155,58939,355],{"class":323},[155,58941,317],{"class":167},[155,58943,1109],{"class":263},[155,58945,363],{"class":171},[155,58947,58948],{"class":157,"line":779},[155,58949,7736],{"class":171},[155,58951,58952],{"class":157,"line":785},[155,58953,8206],{"class":161},[155,58955,58956,58958,58960,58962],{"class":157,"line":791},[155,58957,311],{"class":263},[155,58959,8213],{"class":171},[155,58961,317],{"class":167},[155,58963,7619],{"class":171},[155,58965,58966,58968,58970,58972,58974,58976,58978,58980,58982,58984,58986,58988,58990,58992,58994,58996,58998],{"class":157,"line":796},[155,58967,7624],{"class":171},[155,58969,324],{"class":323},[155,58971,317],{"class":167},[155,58973,8067],{"class":263},[155,58975,332],{"class":171},[155,58977,335],{"class":323},[155,58979,317],{"class":167},[155,58981,8067],{"class":263},[155,58983,332],{"class":171},[155,58985,345],{"class":323},[155,58987,317],{"class":167},[155,58989,4444],{"class":263},[155,58991,332],{"class":171},[155,58993,355],{"class":323},[155,58995,317],{"class":167},[155,58997,329],{"class":263},[155,58999,7657],{"class":171},[155,59001,59002],{"class":157,"line":802},[155,59003,7662],{"class":171},[155,59005,59006,59008,59010,59012,59014,59016,59018,59020,59022,59024,59026,59028,59030,59032,59034,59036,59038],{"class":157,"line":808},[155,59007,7624],{"class":171},[155,59009,324],{"class":323},[155,59011,317],{"class":167},[155,59013,8067],{"class":263},[155,59015,332],{"class":171},[155,59017,335],{"class":323},[155,59019,317],{"class":167},[155,59021,8067],{"class":263},[155,59023,332],{"class":171},[155,59025,345],{"class":323},[155,59027,317],{"class":167},[155,59029,4444],{"class":263},[155,59031,332],{"class":171},[155,59033,355],{"class":323},[155,59035,317],{"class":167},[155,59037,329],{"class":263},[155,59039,7657],{"class":171},[155,59041,59042],{"class":157,"line":819},[155,59043,7662],{"class":171},[155,59045,59046,59048,59050,59052,59054,59056,59058,59060,59062,59064,59066,59068,59070,59072,59074,59076,59078],{"class":157,"line":1832},[155,59047,7624],{"class":171},[155,59049,324],{"class":323},[155,59051,317],{"class":167},[155,59053,8067],{"class":263},[155,59055,332],{"class":171},[155,59057,335],{"class":323},[155,59059,317],{"class":167},[155,59061,8067],{"class":263},[155,59063,332],{"class":171},[155,59065,345],{"class":323},[155,59067,317],{"class":167},[155,59069,4444],{"class":263},[155,59071,332],{"class":171},[155,59073,355],{"class":323},[155,59075,317],{"class":167},[155,59077,329],{"class":263},[155,59079,7657],{"class":171},[155,59081,59082],{"class":157,"line":1838},[155,59083,7662],{"class":171},[155,59085,59086,59088,59090,59092,59094,59096,59098,59100,59102,59104,59106,59108,59110],{"class":157,"line":1844},[155,59087,7707],{"class":171},[155,59089,345],{"class":323},[155,59091,317],{"class":167},[155,59093,360],{"class":263},[155,59095,332],{"class":171},[155,59097,406],{"class":323},[155,59099,317],{"class":167},[155,59101,360],{"class":263},[155,59103,332],{"class":171},[155,59105,355],{"class":323},[155,59107,317],{"class":167},[155,59109,1109],{"class":263},[155,59111,363],{"class":171},[155,59113,59114],{"class":157,"line":1850},[155,59115,7736],{"class":171},[155,59117,59118],{"class":157,"line":1861},[155,59119,8374],{"class":161},[155,59121,59122,59124,59126,59128],{"class":157,"line":1866},[155,59123,311],{"class":263},[155,59125,8381],{"class":171},[155,59127,317],{"class":167},[155,59129,7619],{"class":171},[155,59131,59132],{"class":157,"line":1871},[155,59133,8390],{"class":161},[155,59135,59136],{"class":157,"line":1877},[155,59137,8395],{"class":161},[155,59139,59140],{"class":157,"line":1883},[155,59141,8400],{"class":171},[155,59143,59144,59146,59148,59150,59152,59154,59156,59158,59160],{"class":157,"line":1894},[155,59145,8405],{"class":171},[155,59147,8408],{"class":263},[155,59149,1563],{"class":167},[155,59151,8408],{"class":263},[155,59153,1563],{"class":167},[155,59155,8067],{"class":263},[155,59157,332],{"class":171},[155,59159,4479],{"class":263},[155,59161,7657],{"class":171},[155,59163,59164],{"class":157,"line":1900},[155,59165,7662],{"class":171},[155,59167,59168,59170,59172,59174,59176],{"class":157,"line":1911},[155,59169,8405],{"class":171},[155,59171,4479],{"class":263},[155,59173,332],{"class":171},[155,59175,1608],{"class":263},[155,59177,7657],{"class":171},[155,59179,59180],{"class":157,"line":1917},[155,59181,7662],{"class":171},[155,59183,59184,59186,59188,59190,59192],{"class":157,"line":1927},[155,59185,8405],{"class":171},[155,59187,1608],{"class":263},[155,59189,332],{"class":171},[155,59191,565],{"class":263},[155,59193,363],{"class":171},[155,59195,59196],{"class":157,"line":1933},[155,59197,7736],{"class":171},[155,59199,59200],{"class":157,"line":1943},[155,59201,217],{"emptyLinePlaceholder":216},[155,59203,59204],{"class":157,"line":1949},[155,59205,8467],{"class":161},[155,59207,59208],{"class":157,"line":1959},[155,59209,8472],{"class":161},[155,59211,59212,59214,59216,59218,59220],{"class":157,"line":1964},[155,59213,2179],{"class":167},[155,59215,8479],{"class":171},[155,59217,1131],{"class":167},[155,59219,8484],{"class":263},[155,59221,8487],{"class":171},[155,59223,59224],{"class":157,"line":1970},[155,59225,8492],{"class":161},[155,59227,59228,59230,59232],{"class":157,"line":1981},[155,59229,8497],{"class":167},[155,59231,8500],{"class":263},[155,59233,8503],{"class":171},[155,59235,59236],{"class":157,"line":1986},[155,59237,8508],{"class":161},[155,59239,59240,59242,59244,59246,59248],{"class":157,"line":1991},[155,59241,8513],{"class":171},[155,59243,8516],{"class":323},[155,59245,317],{"class":167},[155,59247,8521],{"class":732},[155,59249,363],{"class":171},[155,59251,59252],{"class":157,"line":1997},[155,59253,8528],{"class":161},[155,59255,59256,59258,59260,59262,59264,59266],{"class":157,"line":2014},[155,59257,8533],{"class":167},[155,59259,8536],{"class":171},[155,59261,8539],{"class":167},[155,59263,8542],{"class":167},[155,59265,8545],{"class":263},[155,59267,736],{"class":171},[155,59269,59270],{"class":157,"line":2046},[155,59271,8552],{"class":161},[155,59273,59274,59276,59278],{"class":157,"line":2062},[155,59275,8557],{"class":171},[155,59277,1109],{"class":263},[155,59279,363],{"class":171},[155,59281,59282],{"class":157,"line":2067},[155,59283,8566],{"class":161},[155,59285,59286,59288,59290],{"class":157,"line":2073},[155,59287,8571],{"class":167},[155,59289,8500],{"class":263},[155,59291,8576],{"class":171},[155,59293,59294],{"class":157,"line":2079},[155,59295,8581],{"class":161},[155,59297,59298],{"class":157,"line":2089},[155,59299,8586],{"class":161},[155,59301,59302,59304,59306,59308,59310],{"class":157,"line":2095},[155,59303,8591],{"class":171},[155,59305,1109],{"class":263},[155,59307,332],{"class":171},[155,59309,8598],{"class":263},[155,59311,363],{"class":171},[155,59313,59314],{"class":157,"line":2106},[155,59315,8605],{"class":161},[155,59317,59318,59320,59322,59324,59326,59328],{"class":157,"line":2112},[155,59319,8533],{"class":167},[155,59321,8536],{"class":171},[155,59323,8539],{"class":167},[155,59325,8542],{"class":167},[155,59327,8545],{"class":263},[155,59329,736],{"class":171},[155,59331,59332,59334,59336],{"class":157,"line":2122},[155,59333,8557],{"class":171},[155,59335,1109],{"class":263},[155,59337,363],{"class":171},[155,59339,59340],{"class":157,"line":2128},[155,59341,217],{"emptyLinePlaceholder":216},[155,59343,59344],{"class":157,"line":2138},[155,59345,4774],{"class":161},[155,59347,59348,59350,59352],{"class":157,"line":2144},[155,59349,260],{"class":167},[155,59351,586],{"class":226},[155,59353,589],{"class":171},[155,59355,59356,59358,59360,59362],{"class":157,"line":2154},[155,59357,595],{"class":171},[155,59359,317],{"class":167},[155,59361,285],{"class":263},[155,59363,8654],{"class":171},[155,59365,59366,59368,59370,59372],{"class":157,"line":2160},[155,59367,595],{"class":171},[155,59369,317],{"class":167},[155,59371,285],{"class":263},[155,59373,8665],{"class":171},[155,59375,59376,59378,59380,59382],{"class":157,"line":2170},[155,59377,595],{"class":171},[155,59379,317],{"class":167},[155,59381,285],{"class":263},[155,59383,8676],{"class":171},[155,59385,59386,59388,59390,59392],{"class":157,"line":2176},[155,59387,595],{"class":171},[155,59389,317],{"class":167},[155,59391,285],{"class":263},[155,59393,8687],{"class":171},[155,59395,59396,59398,59400,59402],{"class":157,"line":2191},[155,59397,595],{"class":171},[155,59399,317],{"class":167},[155,59401,285],{"class":263},[155,59403,8698],{"class":171},[155,59405,59406,59408,59410,59412],{"class":157,"line":2197},[155,59407,595],{"class":171},[155,59409,317],{"class":167},[155,59411,285],{"class":263},[155,59413,8709],{"class":171},[155,59415,59416,59418],{"class":157,"line":2208},[155,59417,709],{"class":167},[155,59419,712],{"class":171},[155,59421,59422],{"class":157,"line":2214},[155,59423,217],{"emptyLinePlaceholder":216},[155,59425,59426],{"class":157,"line":2225},[155,59427,8724],{"class":161},[155,59429,59430,59432,59434,59436,59438],{"class":157,"line":2231},[155,59431,723],{"class":167},[155,59433,726],{"class":263},[155,59435,729],{"class":167},[155,59437,8735],{"class":732},[155,59439,736],{"class":171},[155,59441,59442,59444,59446,59448,59450,59452,59454,59456,59458],{"class":157,"line":2237},[155,59443,748],{"class":171},[155,59445,317],{"class":167},[155,59447,753],{"class":171},[155,59449,756],{"class":732},[155,59451,759],{"class":167},[155,59453,762],{"class":171},[155,59455,765],{"class":167},[155,59457,768],{"class":732},[155,59459,363],{"class":171},[155,59461,59462,59464],{"class":157,"line":2243},[155,59463,822],{"class":263},[155,59465,8764],{"class":171},[155,59467,59468,59470,59472],{"class":157,"line":2249},[155,59469,811],{"class":171},[155,59471,317],{"class":167},[155,59473,8773],{"class":171},[155,59475,59476,59478,59480,59482,59484,59486,59488,59490],{"class":157,"line":2260},[155,59477,822],{"class":263},[155,59479,825],{"class":171},[155,59481,329],{"class":263},[155,59483,332],{"class":171},[155,59485,1025],{"class":263},[155,59487,332],{"class":171},[155,59489,1025],{"class":263},[155,59491,839],{"class":171},[28,59493,59494],{"start":121},[31,59495,10187],{},[146,59497,59498],{"className":148,"code":10190,"language":150,"meta":39,"style":39},[152,59499,59500,59506,59516,59526,59530,59540,59550,59554,59558,59562,59570,59586,59596,59612,59622,59636,59640,59650,59660,59670,59676,59680,59684,59692,59696,59712,59720,59724,59728,59736,59744,59748,59752,59756,59760,59766,59770,59780,59788,59796,59800,59804,59808,59816,59820,59836,59840,59844,59848,59860,59864,59876,59880,59884,59896,59900,59910,59914,59918,59930,59934,59942,59946,59950,59958,59962,59970,59974,59978,59982,59986,59990,60006,60014,60018,60022,60070,60076,60080,60090,60098,60106,60110,60114,60118,60122,60130,60134,60150,60154,60162,60170],{"__ignoreMap":39},[155,59501,59502,59504],{"class":157,"line":158},[155,59503,168],{"class":167},[155,59505,172],{"class":171},[155,59507,59508,59510,59512,59514],{"class":157,"line":46},[155,59509,168],{"class":167},[155,59511,939],{"class":171},[155,59513,907],{"class":167},[155,59515,944],{"class":171},[155,59517,59518,59520,59522,59524],{"class":157,"line":121},[155,59519,183],{"class":167},[155,59521,922],{"class":171},[155,59523,168],{"class":167},[155,59525,927],{"class":171},[155,59527,59528],{"class":157,"line":180},[155,59529,3527],{"class":161},[155,59531,59532,59534,59536,59538],{"class":157,"line":194},[155,59533,183],{"class":167},[155,59535,892],{"class":171},[155,59537,168],{"class":167},[155,59539,897],{"class":171},[155,59541,59542,59544,59546,59548],{"class":157,"line":200},[155,59543,183],{"class":167},[155,59545,1451],{"class":171},[155,59547,168],{"class":167},[155,59549,10243],{"class":263},[155,59551,59552],{"class":157,"line":213},[155,59553,217],{"emptyLinePlaceholder":216},[155,59555,59556],{"class":157,"line":220},[155,59557,217],{"emptyLinePlaceholder":216},[155,59559,59560],{"class":157,"line":245},[155,59561,3556],{"class":161},[155,59563,59564,59566,59568],{"class":157,"line":251},[155,59565,1484],{"class":167},[155,59567,3563],{"class":226},[155,59569,1490],{"class":171},[155,59571,59572,59574,59576,59578,59580,59582,59584],{"class":157,"line":257},[155,59573,3570],{"class":171},[155,59575,317],{"class":167},[155,59577,979],{"class":171},[155,59579,982],{"class":323},[155,59581,317],{"class":167},[155,59583,987],{"class":732},[155,59585,990],{"class":171},[155,59587,59588,59590,59592,59594],{"class":157,"line":270},[155,59589,3587],{"class":323},[155,59591,317],{"class":167},[155,59593,3592],{"class":263},[155,59595,990],{"class":171},[155,59597,59598,59600,59602,59604,59606,59608,59610],{"class":157,"line":276},[155,59599,3599],{"class":323},[155,59601,317],{"class":167},[155,59603,1017],{"class":171},[155,59605,1020],{"class":323},[155,59607,317],{"class":167},[155,59609,1025],{"class":263},[155,59611,1028],{"class":171},[155,59613,59614,59616,59618,59620],{"class":157,"line":297},[155,59615,3616],{"class":323},[155,59617,317],{"class":167},[155,59619,1000],{"class":263},[155,59621,363],{"class":171},[155,59623,59624,59626,59628,59630,59632,59634],{"class":157,"line":302},[155,59625,3627],{"class":171},[155,59627,317],{"class":167},[155,59629,1058],{"class":171},[155,59631,1061],{"class":323},[155,59633,317],{"class":167},[155,59635,3638],{"class":171},[155,59637,59638],{"class":157,"line":308},[155,59639,3643],{"class":161},[155,59641,59642,59644,59646,59648],{"class":157,"line":366},[155,59643,3648],{"class":323},[155,59645,317],{"class":167},[155,59647,329],{"class":263},[155,59649,990],{"class":171},[155,59651,59652,59654,59656,59658],{"class":157,"line":379},[155,59653,3659],{"class":323},[155,59655,317],{"class":167},[155,59657,1000],{"class":263},[155,59659,990],{"class":171},[155,59661,59662,59664,59666,59668],{"class":157,"line":385},[155,59663,3670],{"class":323},[155,59665,317],{"class":167},[155,59667,1109],{"class":263},[155,59669,363],{"class":171},[155,59671,59672,59674],{"class":157,"line":415},[155,59673,1692],{"class":167},[155,59675,3683],{"class":171},[155,59677,59678],{"class":157,"line":452},[155,59679,217],{"emptyLinePlaceholder":216},[155,59681,59682],{"class":157,"line":480},[155,59683,3692],{"class":161},[155,59685,59686,59688,59690],{"class":157,"line":486},[155,59687,1484],{"class":167},[155,59689,3699],{"class":226},[155,59691,3702],{"class":171},[155,59693,59694],{"class":157,"line":499},[155,59695,3707],{"class":161},[155,59697,59698,59700,59702,59704,59706,59708,59710],{"class":157,"line":505},[155,59699,748],{"class":171},[155,59701,317],{"class":167},[155,59703,756],{"class":732},[155,59705,759],{"class":167},[155,59707,762],{"class":171},[155,59709,765],{"class":167},[155,59711,3724],{"class":732},[155,59713,59714,59716,59718],{"class":157,"line":528},[155,59715,811],{"class":171},[155,59717,317],{"class":167},[155,59719,1829],{"class":171},[155,59721,59722],{"class":157,"line":549},[155,59723,217],{"emptyLinePlaceholder":216},[155,59725,59726],{"class":157,"line":570},[155,59727,3741],{"class":161},[155,59729,59730,59732,59734],{"class":157,"line":575},[155,59731,3746],{"class":171},[155,59733,317],{"class":167},[155,59735,1891],{"class":263},[155,59737,59738,59740,59742],{"class":157,"line":581},[155,59739,3755],{"class":171},[155,59741,317],{"class":167},[155,59743,2103],{"class":263},[155,59745,59746],{"class":157,"line":592},[155,59747,217],{"emptyLinePlaceholder":216},[155,59749,59750],{"class":157,"line":610},[155,59751,3768],{"class":161},[155,59753,59754],{"class":157,"line":622},[155,59755,3773],{"class":161},[155,59757,59758],{"class":157,"line":638},[155,59759,3778],{"class":161},[155,59761,59762,59764],{"class":157,"line":650},[155,59763,3783],{"class":167},[155,59765,2477],{"class":171},[155,59767,59768],{"class":157,"line":662},[155,59769,3790],{"class":161},[155,59771,59772,59774,59776,59778],{"class":157,"line":678},[155,59773,2179],{"class":167},[155,59775,3797],{"class":171},[155,59777,1131],{"class":167},[155,59779,3802],{"class":171},[155,59781,59782,59784,59786],{"class":157,"line":694},[155,59783,3807],{"class":171},[155,59785,317],{"class":167},[155,59787,3812],{"class":171},[155,59789,59790,59792,59794],{"class":157,"line":706},[155,59791,3817],{"class":171},[155,59793,317],{"class":167},[155,59795,3822],{"class":171},[155,59797,59798],{"class":157,"line":715},[155,59799,3827],{"class":161},[155,59801,59802],{"class":157,"line":720},[155,59803,2468],{"class":171},[155,59805,59806],{"class":157,"line":739},[155,59807,3836],{"class":161},[155,59809,59810,59812,59814],{"class":157,"line":745},[155,59811,2252],{"class":171},[155,59813,317],{"class":167},[155,59815,3845],{"class":171},[155,59817,59818],{"class":157,"line":773},[155,59819,3850],{"class":161},[155,59821,59822,59824,59826,59828,59830,59832,59834],{"class":157,"line":779},[155,59823,2269],{"class":171},[155,59825,317],{"class":167},[155,59827,2274],{"class":171},[155,59829,2277],{"class":323},[155,59831,317],{"class":167},[155,59833,329],{"class":263},[155,59835,363],{"class":171},[155,59837,59838],{"class":157,"line":785},[155,59839,3871],{"class":161},[155,59841,59842],{"class":157,"line":791},[155,59843,3876],{"class":161},[155,59845,59846],{"class":157,"line":796},[155,59847,3881],{"class":161},[155,59849,59850,59852,59854,59856,59858],{"class":157,"line":802},[155,59851,3886],{"class":171},[155,59853,2351],{"class":167},[155,59855,2380],{"class":171},[155,59857,729],{"class":167},[155,59859,3895],{"class":171},[155,59861,59862],{"class":157,"line":808},[155,59863,3900],{"class":161},[155,59865,59866,59868,59870,59872,59874],{"class":157,"line":819},[155,59867,3905],{"class":171},[155,59869,2351],{"class":167},[155,59871,3910],{"class":171},[155,59873,1109],{"class":263},[155,59875,363],{"class":171},[155,59877,59878],{"class":157,"line":1832},[155,59879,217],{"emptyLinePlaceholder":216},[155,59881,59882],{"class":157,"line":1838},[155,59883,3923],{"class":161},[155,59885,59886,59888,59890,59892,59894],{"class":157,"line":1844},[155,59887,3928],{"class":171},[155,59889,317],{"class":167},[155,59891,3933],{"class":171},[155,59893,2028],{"class":167},[155,59895,3938],{"class":171},[155,59897,59898],{"class":157,"line":1850},[155,59899,3943],{"class":161},[155,59901,59902,59904,59906,59908],{"class":157,"line":1861},[155,59903,2017],{"class":263},[155,59905,230],{"class":171},[155,59907,3952],{"class":732},[155,59909,3955],{"class":171},[155,59911,59912],{"class":157,"line":1866},[155,59913,217],{"emptyLinePlaceholder":216},[155,59915,59916],{"class":157,"line":1871},[155,59917,3964],{"class":161},[155,59919,59920,59922,59924,59926,59928],{"class":157,"line":1877},[155,59921,723],{"class":167},[155,59923,726],{"class":263},[155,59925,729],{"class":167},[155,59927,733],{"class":732},[155,59929,736],{"class":171},[155,59931,59932],{"class":157,"line":1883},[155,59933,3981],{"class":161},[155,59935,59936,59938,59940],{"class":157,"line":1894},[155,59937,811],{"class":171},[155,59939,317],{"class":167},[155,59941,10636],{"class":171},[155,59943,59944],{"class":157,"line":1900},[155,59945,3994],{"class":161},[155,59947,59948],{"class":157,"line":1911},[155,59949,3999],{"class":161},[155,59951,59952,59954,59956],{"class":157,"line":1917},[155,59953,4004],{"class":171},[155,59955,4007],{"class":732},[155,59957,1238],{"class":171},[155,59959,59960],{"class":157,"line":1927},[155,59961,4014],{"class":161},[155,59963,59964,59966,59968],{"class":157,"line":1933},[155,59965,3627],{"class":171},[155,59967,317],{"class":167},[155,59969,4023],{"class":171},[155,59971,59972],{"class":157,"line":1943},[155,59973,4028],{"class":161},[155,59975,59976],{"class":157,"line":1949},[155,59977,4033],{"class":171},[155,59979,59980],{"class":157,"line":1959},[155,59981,217],{"emptyLinePlaceholder":216},[155,59983,59984],{"class":157,"line":1964},[155,59985,4042],{"class":161},[155,59987,59988],{"class":157,"line":1970},[155,59989,4047],{"class":161},[155,59991,59992,59994,59996,59998,60000,60002,60004],{"class":157,"line":1981},[155,59993,748],{"class":171},[155,59995,317],{"class":167},[155,59997,756],{"class":732},[155,59999,759],{"class":167},[155,60001,762],{"class":171},[155,60003,765],{"class":167},[155,60005,3724],{"class":732},[155,60007,60008,60010,60012],{"class":157,"line":1986},[155,60009,811],{"class":171},[155,60011,317],{"class":167},[155,60013,1829],{"class":171},[155,60015,60016],{"class":157,"line":1991},[155,60017,4076],{"class":161},[155,60019,60020],{"class":157,"line":1997},[155,60021,4081],{"class":161},[155,60023,60024,60026,60028,60030,60032,60034,60036,60038,60040,60042,60044,60046,60048,60050,60052,60054,60056,60058,60060,60062,60064,60066,60068],{"class":157,"line":2014},[155,60025,4086],{"class":171},[155,60027,317],{"class":167},[155,60029,4091],{"class":171},[155,60031,4094],{"class":732},[155,60033,332],{"class":171},[155,60035,4099],{"class":732},[155,60037,332],{"class":171},[155,60039,4104],{"class":732},[155,60041,332],{"class":171},[155,60043,4109],{"class":732},[155,60045,332],{"class":171},[155,60047,4114],{"class":732},[155,60049,332],{"class":171},[155,60051,4119],{"class":732},[155,60053,332],{"class":171},[155,60055,4124],{"class":732},[155,60057,332],{"class":171},[155,60059,4129],{"class":732},[155,60061,332],{"class":171},[155,60063,4134],{"class":732},[155,60065,332],{"class":171},[155,60067,4139],{"class":732},[155,60069,2845],{"class":171},[155,60071,60072,60074],{"class":157,"line":2046},[155,60073,3783],{"class":167},[155,60075,2477],{"class":171},[155,60077,60078],{"class":157,"line":2062},[155,60079,4152],{"class":161},[155,60081,60082,60084,60086,60088],{"class":157,"line":2067},[155,60083,2179],{"class":167},[155,60085,4159],{"class":171},[155,60087,1131],{"class":167},[155,60089,3802],{"class":171},[155,60091,60092,60094,60096],{"class":157,"line":2073},[155,60093,2200],{"class":171},[155,60095,317],{"class":167},[155,60097,2205],{"class":171},[155,60099,60100,60102,60104],{"class":157,"line":2079},[155,60101,2217],{"class":171},[155,60103,317],{"class":167},[155,60105,2222],{"class":171},[155,60107,60108],{"class":157,"line":2089},[155,60109,217],{"emptyLinePlaceholder":216},[155,60111,60112],{"class":157,"line":2095},[155,60113,4188],{"class":161},[155,60115,60116],{"class":157,"line":2106},[155,60117,2468],{"class":171},[155,60119,60120],{"class":157,"line":2112},[155,60121,4197],{"class":161},[155,60123,60124,60126,60128],{"class":157,"line":2122},[155,60125,2252],{"class":171},[155,60127,317],{"class":167},[155,60129,2257],{"class":171},[155,60131,60132],{"class":157,"line":2128},[155,60133,4210],{"class":161},[155,60135,60136,60138,60140,60142,60144,60146,60148],{"class":157,"line":2138},[155,60137,2269],{"class":171},[155,60139,317],{"class":167},[155,60141,2274],{"class":171},[155,60143,2277],{"class":323},[155,60145,317],{"class":167},[155,60147,329],{"class":263},[155,60149,363],{"class":171},[155,60151,60152],{"class":157,"line":2144},[155,60153,4231],{"class":161},[155,60155,60156,60158,60160],{"class":157,"line":2154},[155,60157,4236],{"class":171},[155,60159,317],{"class":167},[155,60161,4241],{"class":171},[155,60163,60164,60166,60168],{"class":157,"line":2160},[155,60165,4246],{"class":171},[155,60167,317],{"class":167},[155,60169,4251],{"class":171},[155,60171,60172,60174,60176,60178,60180,60182,60184,60186],{"class":157,"line":2170},[155,60173,4256],{"class":263},[155,60175,230],{"class":171},[155,60177,4261],{"class":732},[155,60179,4264],{"class":171},[155,60181,4267],{"class":732},[155,60183,332],{"class":171},[155,60185,4272],{"class":732},[155,60187,4275],{"class":171},[14,60189,10886],{"id":10885},[19,60191,10890],{"id":10889},[28,60193,60194],{},[31,60195,10895],{},[24,60197,60198],{},[37,60199],{"alt":39,"src":10900},[24,60201,10903],{},[24,60203,60204],{},[37,60205],{"alt":39,"src":10908},[24,60207,60208],{},[37,60209],{"alt":39,"src":10913},[24,60211,60212],{},[37,60213],{"alt":39,"src":10918},[28,60215,60216],{"start":46},[31,60217,10923],{},[24,60219,60220],{},[37,60221],{"alt":39,"src":10928},[28,60223,60224],{"start":121},[31,60225,10933],{},[24,60227,60228],{},[37,60229],{"alt":39,"src":10938},[24,60231,60232],{},[37,60233],{"alt":39,"src":10943},[28,60235,60236],{"start":180},[31,60237,10948],{},[24,60239,60240],{},[37,60241],{"alt":39,"src":10953},[24,60243,60244],{},[37,60245],{"alt":39,"src":10958},[24,60247,60248],{},[37,60249],{"alt":39,"src":10963},[24,60251,60252],{},[37,60253],{"alt":39,"src":10968},[24,60255,60256],{},[37,60257],{"alt":39,"src":10973},[24,60259,60260],{},[37,60261],{"alt":39,"src":10978},[24,60263,60264],{},[37,60265],{"alt":39,"src":10983},[24,60267,60268],{},[37,60269],{"alt":39,"src":10988},[24,60271,60272],{},[37,60273],{"alt":39,"src":10993},[24,60275,60276],{},[37,60277],{"alt":39,"src":10998},[24,60279,60280],{},[37,60281],{"alt":39,"src":11003},[24,60283,60284],{},[37,60285],{"alt":39,"src":11008},[24,60287,60288],{},[37,60289],{"alt":39,"src":11013},[24,60291,60292],{},[37,60293],{"alt":39,"src":11018},[24,60295,60296],{},[37,60297],{"alt":39,"src":11023},[24,60299,60300],{},[37,60301],{"alt":39,"src":11028},[24,60303,60304],{},[37,60305],{"alt":39,"src":11033},[24,60307,60308],{},[37,60309],{"alt":39,"src":11038},[24,60311,60312],{},[37,60313],{"alt":39,"src":11043},[24,60315,60316],{},[37,60317],{"alt":39,"src":11048},[24,60319,60320],{},[37,60321],{"alt":39,"src":11053},[19,60323,11057],{"id":11056},[28,60325,60326],{},[31,60327,144],{},[24,60329,11064],{},[146,60331,60332],{"className":148,"code":11067,"language":150,"meta":39,"style":39},[152,60333,60334,60340,60350,60360,60364,60380,60388,60402,60412,60416,60446,60450,60484,60530,60534,60568,60614,60618,60622,60656,60686,60690,60698,60712,60734,60756,60774,60778,60792,60796,60800,60804,60820,60824,60832,60846,60856,60900,60904,60932,60936,60946,60974,60978,61014,61018,61046,61050,61060,61092,61124,61152,61156,61166,61198,61230,61262,61294,61326,61354,61358,61368,61400,61432,61444,61448,61460,61464,61468,61480,61488,61508,61512,61516,61520,61524,61528,61532,61546,61554,61562,61574,61588,61596,61600,61608,61618,61628,61638,61648,61658,61664,61668,61672,61684,61704,61712],{"__ignoreMap":39},[155,60335,60336,60338],{"class":157,"line":158},[155,60337,168],{"class":167},[155,60339,172],{"class":171},[155,60341,60342,60344,60346,60348],{"class":157,"line":46},[155,60343,183],{"class":167},[155,60345,186],{"class":171},[155,60347,168],{"class":167},[155,60349,191],{"class":171},[155,60351,60352,60354,60356,60358],{"class":157,"line":121},[155,60353,183],{"class":167},[155,60355,205],{"class":171},[155,60357,168],{"class":167},[155,60359,210],{"class":171},[155,60361,60362],{"class":157,"line":180},[155,60363,217],{"emptyLinePlaceholder":216},[155,60365,60366,60368,60370,60372,60374,60376,60378],{"class":157,"line":194},[155,60367,223],{"class":167},[155,60369,11106],{"class":226},[155,60371,230],{"class":171},[155,60373,233],{"class":226},[155,60375,236],{"class":171},[155,60377,239],{"class":226},[155,60379,242],{"class":171},[155,60381,60382,60384,60386],{"class":157,"line":200},[155,60383,260],{"class":167},[155,60385,264],{"class":263},[155,60387,11125],{"class":171},[155,60389,60390,60392,60394,60396,60398,60400],{"class":157,"line":213},[155,60391,279],{"class":263},[155,60393,11132],{"class":171},[155,60395,285],{"class":263},[155,60397,288],{"class":171},[155,60399,291],{"class":263},[155,60401,294],{"class":171},[155,60403,60404,60406,60408,60410],{"class":157,"line":220},[155,60405,311],{"class":263},[155,60407,4377],{"class":171},[155,60409,317],{"class":167},[155,60411,4382],{"class":171},[155,60413,60414],{"class":157,"line":245},[155,60415,11155],{"class":161},[155,60417,60418,60420,60422,60424,60426,60428,60430,60432,60434,60436,60438,60440,60442,60444],{"class":157,"line":251},[155,60419,311],{"class":263},[155,60421,11162],{"class":171},[155,60423,317],{"class":167},[155,60425,320],{"class":171},[155,60427,324],{"class":323},[155,60429,317],{"class":167},[155,60431,11173],{"class":171},[155,60433,335],{"class":323},[155,60435,317],{"class":167},[155,60437,11180],{"class":171},[155,60439,345],{"class":323},[155,60441,317],{"class":167},[155,60443,329],{"class":263},[155,60445,363],{"class":171},[155,60447,60448],{"class":157,"line":257},[155,60449,11193],{"class":161},[155,60451,60452,60454,60456,60458,60460,60462,60464,60466,60468,60470,60472,60474,60476,60478,60480,60482],{"class":157,"line":270},[155,60453,311],{"class":263},[155,60455,11200],{"class":171},[155,60457,317],{"class":167},[155,60459,320],{"class":171},[155,60461,324],{"class":323},[155,60463,317],{"class":167},[155,60465,11173],{"class":171},[155,60467,335],{"class":323},[155,60469,317],{"class":167},[155,60471,11217],{"class":171},[155,60473,1109],{"class":263},[155,60475,11222],{"class":171},[155,60477,345],{"class":323},[155,60479,317],{"class":167},[155,60481,329],{"class":263},[155,60483,363],{"class":171},[155,60485,60486,60488,60490,60492,60494,60496,60498,60500,60502,60504,60506,60508,60510,60512,60514,60516,60518,60520,60522,60524,60526,60528],{"class":157,"line":276},[155,60487,311],{"class":263},[155,60489,11237],{"class":171},[155,60491,317],{"class":167},[155,60493,320],{"class":171},[155,60495,324],{"class":323},[155,60497,317],{"class":167},[155,60499,11217],{"class":171},[155,60501,1109],{"class":263},[155,60503,11222],{"class":171},[155,60505,335],{"class":323},[155,60507,317],{"class":167},[155,60509,11217],{"class":171},[155,60511,329],{"class":263},[155,60513,11222],{"class":171},[155,60515,345],{"class":323},[155,60517,317],{"class":167},[155,60519,4444],{"class":263},[155,60521,332],{"class":171},[155,60523,355],{"class":323},[155,60525,317],{"class":167},[155,60527,329],{"class":263},[155,60529,363],{"class":171},[155,60531,60532],{"class":157,"line":297},[155,60533,11282],{"class":161},[155,60535,60536,60538,60540,60542,60544,60546,60548,60550,60552,60554,60556,60558,60560,60562,60564,60566],{"class":157,"line":302},[155,60537,311],{"class":263},[155,60539,11289],{"class":171},[155,60541,317],{"class":167},[155,60543,320],{"class":171},[155,60545,324],{"class":323},[155,60547,317],{"class":167},[155,60549,11173],{"class":171},[155,60551,335],{"class":323},[155,60553,317],{"class":167},[155,60555,11306],{"class":171},[155,60557,1109],{"class":263},[155,60559,11222],{"class":171},[155,60561,345],{"class":323},[155,60563,317],{"class":167},[155,60565,329],{"class":263},[155,60567,363],{"class":171},[155,60569,60570,60572,60574,60576,60578,60580,60582,60584,60586,60588,60590,60592,60594,60596,60598,60600,60602,60604,60606,60608,60610,60612],{"class":157,"line":308},[155,60571,311],{"class":263},[155,60573,11325],{"class":171},[155,60575,317],{"class":167},[155,60577,320],{"class":171},[155,60579,324],{"class":323},[155,60581,317],{"class":167},[155,60583,11306],{"class":171},[155,60585,1109],{"class":263},[155,60587,11222],{"class":171},[155,60589,335],{"class":323},[155,60591,317],{"class":167},[155,60593,11306],{"class":171},[155,60595,329],{"class":263},[155,60597,11222],{"class":171},[155,60599,345],{"class":323},[155,60601,317],{"class":167},[155,60603,350],{"class":263},[155,60605,332],{"class":171},[155,60607,355],{"class":323},[155,60609,317],{"class":167},[155,60611,360],{"class":263},[155,60613,363],{"class":171},[155,60615,60616],{"class":157,"line":366},[155,60617,11370],{"class":161},[155,60619,60620],{"class":157,"line":379},[155,60621,11375],{"class":161},[155,60623,60624,60626,60628,60630,60632,60634,60636,60638,60640,60642,60644,60646,60648,60650,60652,60654],{"class":157,"line":385},[155,60625,311],{"class":263},[155,60627,11382],{"class":171},[155,60629,317],{"class":167},[155,60631,4437],{"class":171},[155,60633,345],{"class":323},[155,60635,317],{"class":167},[155,60637,4444],{"class":263},[155,60639,332],{"class":171},[155,60641,406],{"class":323},[155,60643,317],{"class":167},[155,60645,329],{"class":263},[155,60647,332],{"class":171},[155,60649,355],{"class":323},[155,60651,317],{"class":167},[155,60653,329],{"class":263},[155,60655,363],{"class":171},[155,60657,60658,60660,60662,60664,60666,60668,60670,60672,60674,60676,60678,60680,60682,60684],{"class":157,"line":415},[155,60659,311],{"class":263},[155,60661,11417],{"class":171},[155,60663,317],{"class":167},[155,60665,320],{"class":171},[155,60667,324],{"class":323},[155,60669,317],{"class":167},[155,60671,11173],{"class":171},[155,60673,335],{"class":323},[155,60675,317],{"class":167},[155,60677,11434],{"class":171},[155,60679,345],{"class":323},[155,60681,317],{"class":167},[155,60683,329],{"class":263},[155,60685,363],{"class":171},[155,60687,60688],{"class":157,"line":452},[155,60689,217],{"emptyLinePlaceholder":216},[155,60691,60692,60694,60696],{"class":157,"line":480},[155,60693,260],{"class":167},[155,60695,586],{"class":226},[155,60697,589],{"class":171},[155,60699,60700,60702,60704,60706,60708,60710],{"class":157,"line":486},[155,60701,11459],{"class":171},[155,60703,317],{"class":167},[155,60705,285],{"class":263},[155,60707,4793],{"class":171},[155,60709,285],{"class":263},[155,60711,11470],{"class":171},[155,60713,60714,60716,60718,60720,60722,60724,60726,60728,60730,60732],{"class":157,"line":499},[155,60715,11475],{"class":171},[155,60717,317],{"class":167},[155,60719,285],{"class":263},[155,60721,4793],{"class":171},[155,60723,285],{"class":263},[155,60725,11486],{"class":171},[155,60727,285],{"class":263},[155,60729,4793],{"class":171},[155,60731,285],{"class":263},[155,60733,11495],{"class":171},[155,60735,60736,60738,60740,60742,60744,60746,60748,60750,60752,60754],{"class":157,"line":505},[155,60737,11500],{"class":171},[155,60739,317],{"class":167},[155,60741,285],{"class":263},[155,60743,4793],{"class":171},[155,60745,285],{"class":263},[155,60747,11511],{"class":171},[155,60749,285],{"class":263},[155,60751,4793],{"class":171},[155,60753,285],{"class":263},[155,60755,11520],{"class":171},[155,60757,60758,60760,60762,60764,60766,60768,60770,60772],{"class":157,"line":528},[155,60759,11525],{"class":171},[155,60761,317],{"class":167},[155,60763,285],{"class":263},[155,60765,4793],{"class":171},[155,60767,285],{"class":263},[155,60769,11536],{"class":171},[155,60771,285],{"class":263},[155,60773,11541],{"class":171},[155,60775,60776],{"class":157,"line":549},[155,60777,11546],{"class":161},[155,60779,60780,60782,60784,60786,60788,60790],{"class":157,"line":570},[155,60781,709],{"class":167},[155,60783,11553],{"class":171},[155,60785,2277],{"class":323},[155,60787,317],{"class":167},[155,60789,329],{"class":263},[155,60791,363],{"class":171},[155,60793,60794],{"class":157,"line":575},[155,60795,217],{"emptyLinePlaceholder":216},[155,60797,60798],{"class":157,"line":581},[155,60799,217],{"emptyLinePlaceholder":216},[155,60801,60802],{"class":157,"line":592},[155,60803,11574],{"class":161},[155,60805,60806,60808,60810,60812,60814,60816,60818],{"class":157,"line":610},[155,60807,223],{"class":167},[155,60809,11581],{"class":226},[155,60811,230],{"class":171},[155,60813,233],{"class":226},[155,60815,236],{"class":171},[155,60817,239],{"class":226},[155,60819,242],{"class":171},[155,60821,60822],{"class":157,"line":622},[155,60823,11596],{"class":161},[155,60825,60826,60828,60830],{"class":157,"line":638},[155,60827,260],{"class":167},[155,60829,264],{"class":263},[155,60831,11605],{"class":171},[155,60833,60834,60836,60838,60840,60842,60844],{"class":157,"line":650},[155,60835,279],{"class":263},[155,60837,11612],{"class":171},[155,60839,285],{"class":263},[155,60841,288],{"class":171},[155,60843,291],{"class":263},[155,60845,294],{"class":171},[155,60847,60848,60850,60852,60854],{"class":157,"line":662},[155,60849,311],{"class":263},[155,60851,11627],{"class":171},[155,60853,317],{"class":167},[155,60855,7619],{"class":171},[155,60857,60858,60860,60862,60864,60866,60868,60870,60872,60874,60876,60878,60880,60882,60884,60886,60888,60890,60892,60894,60896,60898],{"class":157,"line":678},[155,60859,7624],{"class":171},[155,60861,324],{"class":323},[155,60863,317],{"class":167},[155,60865,329],{"class":263},[155,60867,332],{"class":171},[155,60869,335],{"class":323},[155,60871,317],{"class":167},[155,60873,1076],{"class":263},[155,60875,332],{"class":171},[155,60877,345],{"class":323},[155,60879,317],{"class":167},[155,60881,8408],{"class":263},[155,60883,332],{"class":171},[155,60885,406],{"class":323},[155,60887,317],{"class":167},[155,60889,360],{"class":263},[155,60891,332],{"class":171},[155,60893,355],{"class":323},[155,60895,317],{"class":167},[155,60897,4444],{"class":263},[155,60899,7657],{"class":171},[155,60901,60902],{"class":157,"line":694},[155,60903,7662],{"class":171},[155,60905,60906,60908,60910,60912,60914,60916,60918,60920,60922,60924,60926,60928,60930],{"class":157,"line":706},[155,60907,7707],{"class":171},[155,60909,345],{"class":323},[155,60911,317],{"class":167},[155,60913,4444],{"class":263},[155,60915,332],{"class":171},[155,60917,406],{"class":323},[155,60919,317],{"class":167},[155,60921,360],{"class":263},[155,60923,332],{"class":171},[155,60925,355],{"class":323},[155,60927,317],{"class":167},[155,60929,329],{"class":263},[155,60931,363],{"class":171},[155,60933,60934],{"class":157,"line":715},[155,60935,7736],{"class":171},[155,60937,60938,60940,60942,60944],{"class":157,"line":720},[155,60939,311],{"class":263},[155,60941,11718],{"class":171},[155,60943,317],{"class":167},[155,60945,7619],{"class":171},[155,60947,60948,60950,60952,60954,60956,60958,60960,60962,60964,60966,60968,60970,60972],{"class":157,"line":739},[155,60949,7624],{"class":171},[155,60951,324],{"class":323},[155,60953,317],{"class":167},[155,60955,1076],{"class":263},[155,60957,332],{"class":171},[155,60959,335],{"class":323},[155,60961,317],{"class":167},[155,60963,1076],{"class":263},[155,60965,332],{"class":171},[155,60967,345],{"class":323},[155,60969,317],{"class":167},[155,60971,329],{"class":263},[155,60973,7657],{"class":171},[155,60975,60976],{"class":157,"line":745},[155,60977,7662],{"class":171},[155,60979,60980,60982,60984,60986,60988,60990,60992,60994,60996,60998,61000,61002,61004,61006,61008,61010,61012],{"class":157,"line":773},[155,60981,7624],{"class":171},[155,60983,324],{"class":323},[155,60985,317],{"class":167},[155,60987,1076],{"class":263},[155,60989,332],{"class":171},[155,60991,335],{"class":323},[155,60993,317],{"class":167},[155,60995,11773],{"class":263},[155,60997,332],{"class":171},[155,60999,345],{"class":323},[155,61001,317],{"class":167},[155,61003,4444],{"class":263},[155,61005,332],{"class":171},[155,61007,355],{"class":323},[155,61009,317],{"class":167},[155,61011,329],{"class":263},[155,61013,7657],{"class":171},[155,61015,61016],{"class":157,"line":779},[155,61017,7662],{"class":171},[155,61019,61020,61022,61024,61026,61028,61030,61032,61034,61036,61038,61040,61042,61044],{"class":157,"line":785},[155,61021,7707],{"class":171},[155,61023,345],{"class":323},[155,61025,317],{"class":167},[155,61027,4444],{"class":263},[155,61029,332],{"class":171},[155,61031,406],{"class":323},[155,61033,317],{"class":167},[155,61035,360],{"class":263},[155,61037,332],{"class":171},[155,61039,355],{"class":323},[155,61041,317],{"class":167},[155,61043,329],{"class":263},[155,61045,363],{"class":171},[155,61047,61048],{"class":157,"line":791},[155,61049,7736],{"class":171},[155,61051,61052,61054,61056,61058],{"class":157,"line":796},[155,61053,311],{"class":263},[155,61055,11834],{"class":171},[155,61057,317],{"class":167},[155,61059,7619],{"class":171},[155,61061,61062,61064,61066,61068,61070,61072,61074,61076,61078,61080,61082,61084,61086,61088,61090],{"class":157,"line":802},[155,61063,11843],{"class":171},[155,61065,11773],{"class":263},[155,61067,332],{"class":171},[155,61069,1076],{"class":263},[155,61071,11852],{"class":171},[155,61073,4407],{"class":263},[155,61075,332],{"class":171},[155,61077,1608],{"class":263},[155,61079,11861],{"class":171},[155,61081,439],{"class":263},[155,61083,332],{"class":171},[155,61085,11868],{"class":263},[155,61087,11871],{"class":171},[155,61089,11868],{"class":263},[155,61091,7657],{"class":171},[155,61093,61094,61096,61098,61100,61102,61104,61106,61108,61110,61112,61114,61116,61118,61120,61122],{"class":157,"line":808},[155,61095,11843],{"class":171},[155,61097,4479],{"class":263},[155,61099,332],{"class":171},[155,61101,1608],{"class":263},[155,61103,11852],{"class":171},[155,61105,1608],{"class":263},[155,61107,332],{"class":171},[155,61109,11773],{"class":263},[155,61111,11861],{"class":171},[155,61113,11868],{"class":263},[155,61115,332],{"class":171},[155,61117,4407],{"class":263},[155,61119,11871],{"class":171},[155,61121,1076],{"class":263},[155,61123,7657],{"class":171},[155,61125,61126,61128,61130,61132,61134,61136,61138,61140,61142,61144,61146,61148,61150],{"class":157,"line":819},[155,61127,7707],{"class":171},[155,61129,345],{"class":323},[155,61131,317],{"class":167},[155,61133,4444],{"class":263},[155,61135,332],{"class":171},[155,61137,406],{"class":323},[155,61139,317],{"class":167},[155,61141,360],{"class":263},[155,61143,332],{"class":171},[155,61145,355],{"class":323},[155,61147,317],{"class":167},[155,61149,329],{"class":263},[155,61151,363],{"class":171},[155,61153,61154],{"class":157,"line":1832},[155,61155,7736],{"class":171},[155,61157,61158,61160,61162,61164],{"class":157,"line":1838},[155,61159,311],{"class":263},[155,61161,11946],{"class":171},[155,61163,317],{"class":167},[155,61165,7619],{"class":171},[155,61167,61168,61170,61172,61174,61176,61178,61180,61182,61184,61186,61188,61190,61192,61194,61196],{"class":157,"line":1844},[155,61169,11843],{"class":171},[155,61171,11957],{"class":263},[155,61173,332],{"class":171},[155,61175,11773],{"class":263},[155,61177,11852],{"class":171},[155,61179,4407],{"class":263},[155,61181,332],{"class":171},[155,61183,11970],{"class":263},[155,61185,11861],{"class":171},[155,61187,439],{"class":263},[155,61189,332],{"class":171},[155,61191,11979],{"class":263},[155,61193,11871],{"class":171},[155,61195,1076],{"class":263},[155,61197,7657],{"class":171},[155,61199,61200,61202,61204,61206,61208,61210,61212,61214,61216,61218,61220,61222,61224,61226,61228],{"class":157,"line":1850},[155,61201,11843],{"class":171},[155,61203,8067],{"class":263},[155,61205,332],{"class":171},[155,61207,11996],{"class":263},[155,61209,11852],{"class":171},[155,61211,12001],{"class":263},[155,61213,332],{"class":171},[155,61215,1025],{"class":263},[155,61217,11861],{"class":171},[155,61219,12010],{"class":263},[155,61221,332],{"class":171},[155,61223,1076],{"class":263},[155,61225,11871],{"class":171},[155,61227,1076],{"class":263},[155,61229,7657],{"class":171},[155,61231,61232,61234,61236,61238,61240,61242,61244,61246,61248,61250,61252,61254,61256,61258,61260],{"class":157,"line":1861},[155,61233,11843],{"class":171},[155,61235,8067],{"class":263},[155,61237,332],{"class":171},[155,61239,1608],{"class":263},[155,61241,11852],{"class":171},[155,61243,1608],{"class":263},[155,61245,332],{"class":171},[155,61247,4479],{"class":263},[155,61249,11861],{"class":171},[155,61251,12010],{"class":263},[155,61253,332],{"class":171},[155,61255,1076],{"class":263},[155,61257,11871],{"class":171},[155,61259,1076],{"class":263},[155,61261,7657],{"class":171},[155,61263,61264,61266,61268,61270,61272,61274,61276,61278,61280,61282,61284,61286,61288,61290,61292],{"class":157,"line":1866},[155,61265,11843],{"class":171},[155,61267,8067],{"class":263},[155,61269,332],{"class":171},[155,61271,12001],{"class":263},[155,61273,11852],{"class":171},[155,61275,1608],{"class":263},[155,61277,332],{"class":171},[155,61279,12071],{"class":263},[155,61281,11861],{"class":171},[155,61283,11868],{"class":263},[155,61285,332],{"class":171},[155,61287,1076],{"class":263},[155,61289,11871],{"class":171},[155,61291,1076],{"class":263},[155,61293,7657],{"class":171},[155,61295,61296,61298,61300,61302,61304,61306,61308,61310,61312,61314,61316,61318,61320,61322,61324],{"class":157,"line":1871},[155,61297,11843],{"class":171},[155,61299,12092],{"class":263},[155,61301,332],{"class":171},[155,61303,4479],{"class":263},[155,61305,11852],{"class":171},[155,61307,11996],{"class":263},[155,61309,332],{"class":171},[155,61311,12105],{"class":263},[155,61313,11861],{"class":171},[155,61315,11868],{"class":263},[155,61317,332],{"class":171},[155,61319,1608],{"class":263},[155,61321,11871],{"class":171},[155,61323,1608],{"class":263},[155,61325,7657],{"class":171},[155,61327,61328,61330,61332,61334,61336,61338,61340,61342,61344,61346,61348,61350,61352],{"class":157,"line":1877},[155,61329,7707],{"class":171},[155,61331,345],{"class":323},[155,61333,317],{"class":167},[155,61335,4444],{"class":263},[155,61337,332],{"class":171},[155,61339,406],{"class":323},[155,61341,317],{"class":167},[155,61343,360],{"class":263},[155,61345,332],{"class":171},[155,61347,355],{"class":323},[155,61349,317],{"class":167},[155,61351,329],{"class":263},[155,61353,363],{"class":171},[155,61355,61356],{"class":157,"line":1883},[155,61357,7736],{"class":171},[155,61359,61360,61362,61364,61366],{"class":157,"line":1894},[155,61361,311],{"class":263},[155,61363,12158],{"class":171},[155,61365,317],{"class":167},[155,61367,7619],{"class":171},[155,61369,61370,61372,61374,61376,61378,61380,61382,61384,61386,61388,61390,61392,61394,61396,61398],{"class":157,"line":1900},[155,61371,11843],{"class":171},[155,61373,12169],{"class":263},[155,61375,332],{"class":171},[155,61377,4479],{"class":263},[155,61379,11852],{"class":171},[155,61381,11996],{"class":263},[155,61383,332],{"class":171},[155,61385,12105],{"class":263},[155,61387,11861],{"class":171},[155,61389,11868],{"class":263},[155,61391,332],{"class":171},[155,61393,1608],{"class":263},[155,61395,11871],{"class":171},[155,61397,1608],{"class":263},[155,61399,7657],{"class":171},[155,61401,61402,61404,61406,61408,61410,61412,61414,61416,61418,61420,61422,61424,61426,61428,61430],{"class":157,"line":1911},[155,61403,11843],{"class":171},[155,61405,12169],{"class":263},[155,61407,332],{"class":171},[155,61409,4549],{"class":263},[155,61411,11852],{"class":171},[155,61413,11773],{"class":263},[155,61415,332],{"class":171},[155,61417,4549],{"class":263},[155,61419,11861],{"class":171},[155,61421,11979],{"class":263},[155,61423,332],{"class":171},[155,61425,1608],{"class":263},[155,61427,11871],{"class":171},[155,61429,1608],{"class":263},[155,61431,7657],{"class":171},[155,61433,61434,61436,61438,61440,61442],{"class":157,"line":1917},[155,61435,12232],{"class":171},[155,61437,329],{"class":263},[155,61439,332],{"class":171},[155,61441,329],{"class":263},[155,61443,12241],{"class":171},[155,61445,61446],{"class":157,"line":1927},[155,61447,8400],{"class":171},[155,61449,61450,61452,61454,61456,61458],{"class":157,"line":1933},[155,61451,8405],{"class":171},[155,61453,12252],{"class":263},[155,61455,332],{"class":171},[155,61457,565],{"class":263},[155,61459,363],{"class":171},[155,61461,61462],{"class":157,"line":1943},[155,61463,7736],{"class":171},[155,61465,61466],{"class":157,"line":1949},[155,61467,12267],{"class":161},[155,61469,61470,61472,61474,61476,61478],{"class":157,"line":1959},[155,61471,2179],{"class":167},[155,61473,8479],{"class":171},[155,61475,1131],{"class":167},[155,61477,8484],{"class":263},[155,61479,8487],{"class":171},[155,61481,61482,61484,61486],{"class":157,"line":1964},[155,61483,8497],{"class":167},[155,61485,8500],{"class":263},[155,61487,8503],{"class":171},[155,61489,61490,61492,61494,61496,61498,61500,61502,61504,61506],{"class":157,"line":1970},[155,61491,8513],{"class":171},[155,61493,12294],{"class":323},[155,61495,317],{"class":167},[155,61497,12299],{"class":732},[155,61499,332],{"class":171},[155,61501,8516],{"class":323},[155,61503,317],{"class":167},[155,61505,8521],{"class":732},[155,61507,363],{"class":171},[155,61509,61510],{"class":157,"line":1981},[155,61511,12314],{"class":161},[155,61513,61514],{"class":157,"line":1986},[155,61515,12319],{"class":161},[155,61517,61518],{"class":157,"line":1991},[155,61519,12324],{"class":161},[155,61521,61522],{"class":157,"line":1997},[155,61523,12329],{"class":161},[155,61525,61526],{"class":157,"line":2014},[155,61527,12334],{"class":161},[155,61529,61530],{"class":157,"line":2046},[155,61531,12339],{"class":161},[155,61533,61534,61536,61538,61540,61542,61544],{"class":157,"line":2062},[155,61535,8533],{"class":167},[155,61537,8536],{"class":171},[155,61539,8539],{"class":167},[155,61541,8542],{"class":167},[155,61543,8545],{"class":263},[155,61545,736],{"class":171},[155,61547,61548,61550,61552],{"class":157,"line":2067},[155,61549,8557],{"class":171},[155,61551,1109],{"class":263},[155,61553,363],{"class":171},[155,61555,61556,61558,61560],{"class":157,"line":2073},[155,61557,12366],{"class":167},[155,61559,8500],{"class":263},[155,61561,8576],{"class":171},[155,61563,61564,61566,61568,61570,61572],{"class":157,"line":2079},[155,61565,12375],{"class":171},[155,61567,1109],{"class":263},[155,61569,332],{"class":171},[155,61571,8598],{"class":263},[155,61573,363],{"class":171},[155,61575,61576,61578,61580,61582,61584,61586],{"class":157,"line":2089},[155,61577,12388],{"class":167},[155,61579,8536],{"class":171},[155,61581,8539],{"class":167},[155,61583,8542],{"class":167},[155,61585,8545],{"class":263},[155,61587,736],{"class":171},[155,61589,61590,61592,61594],{"class":157,"line":2095},[155,61591,12403],{"class":171},[155,61593,1109],{"class":263},[155,61595,363],{"class":171},[155,61597,61598],{"class":157,"line":2106},[155,61599,4774],{"class":161},[155,61601,61602,61604,61606],{"class":157,"line":2112},[155,61603,260],{"class":167},[155,61605,586],{"class":226},[155,61607,589],{"class":171},[155,61609,61610,61612,61614,61616],{"class":157,"line":2122},[155,61611,595],{"class":171},[155,61613,317],{"class":167},[155,61615,285],{"class":263},[155,61617,12430],{"class":171},[155,61619,61620,61622,61624,61626],{"class":157,"line":2128},[155,61621,595],{"class":171},[155,61623,317],{"class":167},[155,61625,285],{"class":263},[155,61627,12441],{"class":171},[155,61629,61630,61632,61634,61636],{"class":157,"line":2138},[155,61631,595],{"class":171},[155,61633,317],{"class":167},[155,61635,285],{"class":263},[155,61637,12452],{"class":171},[155,61639,61640,61642,61644,61646],{"class":157,"line":2144},[155,61641,595],{"class":171},[155,61643,317],{"class":167},[155,61645,285],{"class":263},[155,61647,12463],{"class":171},[155,61649,61650,61652,61654,61656],{"class":157,"line":2154},[155,61651,595],{"class":171},[155,61653,317],{"class":167},[155,61655,285],{"class":263},[155,61657,12474],{"class":171},[155,61659,61660,61662],{"class":157,"line":2160},[155,61661,709],{"class":167},[155,61663,712],{"class":171},[155,61665,61666],{"class":157,"line":2170},[155,61667,217],{"emptyLinePlaceholder":216},[155,61669,61670],{"class":157,"line":2176},[155,61671,12489],{"class":161},[155,61673,61674,61676,61678,61680,61682],{"class":157,"line":2191},[155,61675,723],{"class":167},[155,61677,726],{"class":263},[155,61679,729],{"class":167},[155,61681,733],{"class":732},[155,61683,736],{"class":171},[155,61685,61686,61688,61690,61692,61694,61696,61698,61700,61702],{"class":157,"line":2197},[155,61687,748],{"class":171},[155,61689,317],{"class":167},[155,61691,753],{"class":171},[155,61693,756],{"class":732},[155,61695,759],{"class":167},[155,61697,762],{"class":171},[155,61699,765],{"class":167},[155,61701,768],{"class":732},[155,61703,363],{"class":171},[155,61705,61706,61708,61710],{"class":157,"line":2208},[155,61707,811],{"class":171},[155,61709,317],{"class":167},[155,61711,12530],{"class":171},[155,61713,61714,61716,61718,61720,61722,61724,61726,61728],{"class":157,"line":2214},[155,61715,822],{"class":263},[155,61717,825],{"class":171},[155,61719,329],{"class":263},[155,61721,332],{"class":171},[155,61723,1025],{"class":263},[155,61725,332],{"class":171},[155,61727,1025],{"class":263},[155,61729,839],{"class":171},[28,61731,61732],{"start":46},[31,61733,8796],{},[146,61735,61736],{"className":148,"code":12555,"language":150,"meta":39,"style":39},[152,61737,61738,61744,61750,61760,61766,61776,61786,61796,61806,61816,61820,61830,61840,61844,61848,61852,61860,61872,61882,61898,61908,61940,61954,61964,61974,61978,61988,62002,62012,62022,62032,62038,62042,62046,62050,62054,62058,62066,62086,62090,62094,62098,62102,62106,62122,62126,62130,62138,62142,62146,62154,62158,62162,62166,62174,62178,62182,62186,62190,62198,62202,62210,62214,62222,62226,62234,62238,62246,62250,62254,62262,62266,62270,62274,62286,62310,62324,62328,62332,62336,62344,62348,62356,62360,62368,62372,62380,62384,62392,62396,62404,62408,62420,62424,62432,62436,62444,62448,62452,62456,62460,62468,62472,62488,62492,62500,62504,62508,62512,62516,62520,62524,62528,62544,62548,62560,62564,62576,62580,62592,62596,62604,62608,62616,62620,62624,62628,62634,62638,62646,62650,62666,62670,62678,62682,62698,62710,62714,62726,62730,62734,62742,62746,62750,62758,62762,62770,62774,62782,62786,62790,62832,62874,62878,62882,62898,62902,62918,62922,62926,62934,62938,62942,62954,62992,62996,63000,63008,63012,63026,63036,63042,63048,63054,63060,63064,63068,63074,63078,63082,63090,63094,63112,63116,63120,63124,63140,63144,63148,63152,63156,63160,63180,63200,63204,63208,63212,63220,63228,63232,63248,63268,63288,63292,63296,63304,63312,63316,63320,63324,63336,63340,63348,63356,63372],{"__ignoreMap":39},[155,61739,61740,61742],{"class":157,"line":158},[155,61741,168],{"class":167},[155,61743,1359],{"class":171},[155,61745,61746,61748],{"class":157,"line":46},[155,61747,168],{"class":167},[155,61749,1366],{"class":171},[155,61751,61752,61754,61756,61758],{"class":157,"line":121},[155,61753,168],{"class":167},[155,61755,1377],{"class":171},[155,61757,907],{"class":167},[155,61759,1382],{"class":171},[155,61761,61762,61764],{"class":157,"line":180},[155,61763,168],{"class":167},[155,61765,172],{"class":171},[155,61767,61768,61770,61772,61774],{"class":157,"line":194},[155,61769,183],{"class":167},[155,61771,939],{"class":171},[155,61773,168],{"class":167},[155,61775,1399],{"class":171},[155,61777,61778,61780,61782,61784],{"class":157,"line":200},[155,61779,183],{"class":167},[155,61781,892],{"class":171},[155,61783,168],{"class":167},[155,61785,897],{"class":171},[155,61787,61788,61790,61792,61794],{"class":157,"line":213},[155,61789,183],{"class":167},[155,61791,922],{"class":171},[155,61793,168],{"class":167},[155,61795,927],{"class":171},[155,61797,61798,61800,61802,61804],{"class":157,"line":220},[155,61799,168],{"class":167},[155,61801,939],{"class":171},[155,61803,907],{"class":167},[155,61805,944],{"class":171},[155,61807,61808,61810,61812,61814],{"class":157,"line":245},[155,61809,168],{"class":167},[155,61811,956],{"class":171},[155,61813,907],{"class":167},[155,61815,961],{"class":171},[155,61817,61818],{"class":157,"line":251},[155,61819,1444],{"class":161},[155,61821,61822,61824,61826,61828],{"class":157,"line":257},[155,61823,183],{"class":167},[155,61825,1451],{"class":171},[155,61827,168],{"class":167},[155,61829,12650],{"class":171},[155,61831,61832,61834,61836,61838],{"class":157,"line":270},[155,61833,183],{"class":167},[155,61835,186],{"class":171},[155,61837,168],{"class":167},[155,61839,191],{"class":171},[155,61841,61842],{"class":157,"line":276},[155,61843,217],{"emptyLinePlaceholder":216},[155,61845,61846],{"class":157,"line":297},[155,61847,217],{"emptyLinePlaceholder":216},[155,61849,61850],{"class":157,"line":302},[155,61851,1479],{"class":161},[155,61853,61854,61856,61858],{"class":157,"line":308},[155,61855,1484],{"class":167},[155,61857,1487],{"class":226},[155,61859,1490],{"class":171},[155,61861,61862,61864,61866,61868,61870],{"class":157,"line":366},[155,61863,1495],{"class":171},[155,61865,317],{"class":167},[155,61867,979],{"class":171},[155,61869,987],{"class":732},[155,61871,990],{"class":171},[155,61873,61874,61876,61878,61880],{"class":157,"line":379},[155,61875,1508],{"class":323},[155,61877,317],{"class":167},[155,61879,1000],{"class":263},[155,61881,990],{"class":171},[155,61883,61884,61886,61888,61890,61892,61894,61896],{"class":157,"line":385},[155,61885,1519],{"class":323},[155,61887,317],{"class":167},[155,61889,1017],{"class":171},[155,61891,1020],{"class":323},[155,61893,317],{"class":167},[155,61895,5058],{"class":263},[155,61897,1028],{"class":171},[155,61899,61900,61902,61904,61906],{"class":157,"line":415},[155,61901,1536],{"class":323},[155,61903,317],{"class":167},[155,61905,1000],{"class":263},[155,61907,363],{"class":171},[155,61909,61910,61912,61914,61916,61918,61920,61922,61924,61926,61928,61930,61932,61934,61936,61938],{"class":157,"line":452},[155,61911,1547],{"class":171},[155,61913,317],{"class":167},[155,61915,1552],{"class":171},[155,61917,1555],{"class":263},[155,61919,230],{"class":171},[155,61921,1560],{"class":263},[155,61923,1563],{"class":167},[155,61925,1253],{"class":263},[155,61927,1568],{"class":171},[155,61929,1555],{"class":263},[155,61931,230],{"class":171},[155,61933,1575],{"class":263},[155,61935,1563],{"class":167},[155,61937,1253],{"class":263},[155,61939,1582],{"class":171},[155,61941,61942,61944,61946,61948,61950,61952],{"class":157,"line":480},[155,61943,1587],{"class":171},[155,61945,317],{"class":167},[155,61947,1592],{"class":171},[155,61949,1061],{"class":323},[155,61951,317],{"class":167},[155,61953,1066],{"class":171},[155,61955,61956,61958,61960,61962],{"class":157,"line":486},[155,61957,1603],{"class":323},[155,61959,317],{"class":167},[155,61961,11868],{"class":263},[155,61963,990],{"class":171},[155,61965,61966,61968,61970,61972],{"class":157,"line":499},[155,61967,1615],{"class":323},[155,61969,317],{"class":167},[155,61971,1000],{"class":263},[155,61973,990],{"class":171},[155,61975,61976],{"class":157,"line":505},[155,61977,1626],{"class":161},[155,61979,61980,61982,61984,61986],{"class":157,"line":528},[155,61981,1631],{"class":323},[155,61983,317],{"class":167},[155,61985,1636],{"class":263},[155,61987,363],{"class":171},[155,61989,61990,61992,61994,61996,61998,62000],{"class":157,"line":549},[155,61991,1643],{"class":171},[155,61993,317],{"class":167},[155,61995,1058],{"class":171},[155,61997,1061],{"class":323},[155,61999,317],{"class":167},[155,62001,1654],{"class":171},[155,62003,62004,62006,62008,62010],{"class":157,"line":570},[155,62005,1659],{"class":323},[155,62007,317],{"class":167},[155,62009,11868],{"class":263},[155,62011,990],{"class":171},[155,62013,62014,62016,62018,62020],{"class":157,"line":575},[155,62015,1670],{"class":323},[155,62017,317],{"class":167},[155,62019,1000],{"class":263},[155,62021,990],{"class":171},[155,62023,62024,62026,62028,62030],{"class":157,"line":581},[155,62025,1681],{"class":323},[155,62027,317],{"class":167},[155,62029,1636],{"class":263},[155,62031,363],{"class":171},[155,62033,62034,62036],{"class":157,"line":592},[155,62035,1692],{"class":167},[155,62037,1695],{"class":171},[155,62039,62040],{"class":157,"line":610},[155,62041,217],{"emptyLinePlaceholder":216},[155,62043,62044],{"class":157,"line":622},[155,62045,1704],{"class":161},[155,62047,62048],{"class":157,"line":638},[155,62049,1709],{"class":161},[155,62051,62052],{"class":157,"line":650},[155,62053,217],{"emptyLinePlaceholder":216},[155,62055,62056],{"class":157,"line":662},[155,62057,1718],{"class":161},[155,62059,62060,62062,62064],{"class":157,"line":678},[155,62061,1484],{"class":167},[155,62063,1725],{"class":226},[155,62065,1728],{"class":171},[155,62067,62068,62070,62072,62074,62076,62078,62080,62082,62084],{"class":157,"line":694},[155,62069,748],{"class":171},[155,62071,317],{"class":167},[155,62073,753],{"class":171},[155,62075,756],{"class":732},[155,62077,759],{"class":167},[155,62079,762],{"class":171},[155,62081,765],{"class":167},[155,62083,1747],{"class":732},[155,62085,363],{"class":171},[155,62087,62088],{"class":157,"line":706},[155,62089,217],{"emptyLinePlaceholder":216},[155,62091,62092],{"class":157,"line":715},[155,62093,217],{"emptyLinePlaceholder":216},[155,62095,62096],{"class":157,"line":720},[155,62097,1762],{"class":161},[155,62099,62100],{"class":157,"line":739},[155,62101,1767],{"class":161},[155,62103,62104],{"class":157,"line":745},[155,62105,1772],{"class":161},[155,62107,62108,62110,62112,62114,62116,62118,62120],{"class":157,"line":773},[155,62109,1777],{"class":171},[155,62111,317],{"class":167},[155,62113,1782],{"class":171},[155,62115,1785],{"class":323},[155,62117,317],{"class":167},[155,62119,1790],{"class":263},[155,62121,363],{"class":171},[155,62123,62124],{"class":157,"line":779},[155,62125,217],{"emptyLinePlaceholder":216},[155,62127,62128],{"class":157,"line":785},[155,62129,1801],{"class":161},[155,62131,62132,62134,62136],{"class":157,"line":791},[155,62133,1806],{"class":171},[155,62135,317],{"class":167},[155,62137,1811],{"class":171},[155,62139,62140],{"class":157,"line":796},[155,62141,217],{"emptyLinePlaceholder":216},[155,62143,62144],{"class":157,"line":802},[155,62145,1820],{"class":161},[155,62147,62148,62150,62152],{"class":157,"line":808},[155,62149,811],{"class":171},[155,62151,317],{"class":167},[155,62153,1829],{"class":171},[155,62155,62156],{"class":157,"line":819},[155,62157,1835],{"class":161},[155,62159,62160],{"class":157,"line":1832},[155,62161,1841],{"class":161},[155,62163,62164],{"class":157,"line":1838},[155,62165,1847],{"class":161},[155,62167,62168,62170,62172],{"class":157,"line":1844},[155,62169,1853],{"class":171},[155,62171,317],{"class":167},[155,62173,1858],{"class":171},[155,62175,62176],{"class":157,"line":1850},[155,62177,217],{"emptyLinePlaceholder":216},[155,62179,62180],{"class":157,"line":1861},[155,62181,217],{"emptyLinePlaceholder":216},[155,62183,62184],{"class":157,"line":1866},[155,62185,1874],{"class":161},[155,62187,62188],{"class":157,"line":1871},[155,62189,1880],{"class":161},[155,62191,62192,62194,62196],{"class":157,"line":1877},[155,62193,1886],{"class":171},[155,62195,317],{"class":167},[155,62197,1891],{"class":263},[155,62199,62200],{"class":157,"line":1883},[155,62201,1897],{"class":161},[155,62203,62204,62206,62208],{"class":157,"line":1894},[155,62205,1903],{"class":171},[155,62207,317],{"class":167},[155,62209,1908],{"class":171},[155,62211,62212],{"class":157,"line":1900},[155,62213,1914],{"class":161},[155,62215,62216,62218,62220],{"class":157,"line":1911},[155,62217,1920],{"class":171},[155,62219,317],{"class":167},[155,62221,1908],{"class":171},[155,62223,62224],{"class":157,"line":1917},[155,62225,1930],{"class":161},[155,62227,62228,62230,62232],{"class":157,"line":1927},[155,62229,1936],{"class":171},[155,62231,317],{"class":167},[155,62233,1908],{"class":171},[155,62235,62236],{"class":157,"line":1933},[155,62237,1946],{"class":161},[155,62239,62240,62242,62244],{"class":157,"line":1943},[155,62241,1952],{"class":171},[155,62243,317],{"class":167},[155,62245,1908],{"class":171},[155,62247,62248],{"class":157,"line":1949},[155,62249,217],{"emptyLinePlaceholder":216},[155,62251,62252],{"class":157,"line":1959},[155,62253,1967],{"class":161},[155,62255,62256,62258,62260],{"class":157,"line":1964},[155,62257,1973],{"class":171},[155,62259,317],{"class":167},[155,62261,1978],{"class":171},[155,62263,62264],{"class":157,"line":1970},[155,62265,217],{"emptyLinePlaceholder":216},[155,62267,62268],{"class":157,"line":1981},[155,62269,217],{"emptyLinePlaceholder":216},[155,62271,62272],{"class":157,"line":1986},[155,62273,1994],{"class":161},[155,62275,62276,62278,62280,62282,62284],{"class":157,"line":1991},[155,62277,2000],{"class":167},[155,62279,2003],{"class":171},[155,62281,1131],{"class":167},[155,62283,2008],{"class":263},[155,62285,2011],{"class":171},[155,62287,62288,62290,62292,62294,62296,62298,62300,62302,62304,62306,62308],{"class":157,"line":1997},[155,62289,2017],{"class":263},[155,62291,230],{"class":171},[155,62293,2022],{"class":732},[155,62295,2025],{"class":263},[155,62297,2028],{"class":732},[155,62299,2025],{"class":263},[155,62301,2033],{"class":732},[155,62303,2036],{"class":171},[155,62305,2039],{"class":167},[155,62307,329],{"class":263},[155,62309,1238],{"class":171},[155,62311,62312,62314,62316,62318,62320,62322],{"class":157,"line":2014},[155,62313,2017],{"class":263},[155,62315,230],{"class":171},[155,62317,2053],{"class":732},[155,62319,1563],{"class":167},[155,62321,565],{"class":263},[155,62323,363],{"class":171},[155,62325,62326],{"class":157,"line":2046},[155,62327,217],{"emptyLinePlaceholder":216},[155,62329,62330],{"class":157,"line":2062},[155,62331,2070],{"class":161},[155,62333,62334],{"class":157,"line":2067},[155,62335,2076],{"class":161},[155,62337,62338,62340,62342],{"class":157,"line":2073},[155,62339,2082],{"class":171},[155,62341,317],{"class":167},[155,62343,1891],{"class":263},[155,62345,62346],{"class":157,"line":2079},[155,62347,2092],{"class":161},[155,62349,62350,62352,62354],{"class":157,"line":2089},[155,62351,2098],{"class":171},[155,62353,317],{"class":167},[155,62355,2103],{"class":263},[155,62357,62358],{"class":157,"line":2095},[155,62359,2109],{"class":161},[155,62361,62362,62364,62366],{"class":157,"line":2106},[155,62363,2115],{"class":171},[155,62365,317],{"class":167},[155,62367,1891],{"class":263},[155,62369,62370],{"class":157,"line":2112},[155,62371,2125],{"class":161},[155,62373,62374,62376,62378],{"class":157,"line":2122},[155,62375,2131],{"class":171},[155,62377,317],{"class":167},[155,62379,2103],{"class":263},[155,62381,62382],{"class":157,"line":2128},[155,62383,2141],{"class":161},[155,62385,62386,62388,62390],{"class":157,"line":2138},[155,62387,2147],{"class":171},[155,62389,317],{"class":167},[155,62391,2103],{"class":263},[155,62393,62394],{"class":157,"line":2144},[155,62395,2157],{"class":161},[155,62397,62398,62400,62402],{"class":157,"line":2154},[155,62399,2163],{"class":171},[155,62401,317],{"class":167},[155,62403,2103],{"class":263},[155,62405,62406],{"class":157,"line":2160},[155,62407,2173],{"class":161},[155,62409,62410,62412,62414,62416,62418],{"class":157,"line":2170},[155,62411,2179],{"class":167},[155,62413,1128],{"class":171},[155,62415,1131],{"class":167},[155,62417,1134],{"class":263},[155,62419,2188],{"class":171},[155,62421,62422],{"class":157,"line":2176},[155,62423,2194],{"class":161},[155,62425,62426,62428,62430],{"class":157,"line":2191},[155,62427,2200],{"class":171},[155,62429,317],{"class":167},[155,62431,2205],{"class":171},[155,62433,62434],{"class":157,"line":2197},[155,62435,2211],{"class":161},[155,62437,62438,62440,62442],{"class":157,"line":2208},[155,62439,2217],{"class":171},[155,62441,317],{"class":167},[155,62443,2222],{"class":171},[155,62445,62446],{"class":157,"line":2214},[155,62447,2228],{"class":161},[155,62449,62450],{"class":157,"line":2225},[155,62451,2234],{"class":171},[155,62453,62454],{"class":157,"line":2231},[155,62455,2240],{"class":161},[155,62457,62458],{"class":157,"line":2237},[155,62459,2246],{"class":161},[155,62461,62462,62464,62466],{"class":157,"line":2243},[155,62463,2252],{"class":171},[155,62465,317],{"class":167},[155,62467,2257],{"class":171},[155,62469,62470],{"class":157,"line":2249},[155,62471,2263],{"class":161},[155,62473,62474,62476,62478,62480,62482,62484,62486],{"class":157,"line":2260},[155,62475,2269],{"class":171},[155,62477,317],{"class":167},[155,62479,2274],{"class":171},[155,62481,2277],{"class":323},[155,62483,317],{"class":167},[155,62485,329],{"class":263},[155,62487,363],{"class":171},[155,62489,62490],{"class":157,"line":2266},[155,62491,2289],{"class":161},[155,62493,62494,62496,62498],{"class":157,"line":2286},[155,62495,2295],{"class":171},[155,62497,317],{"class":167},[155,62499,2300],{"class":171},[155,62501,62502],{"class":157,"line":2292},[155,62503,2306],{"class":161},[155,62505,62506],{"class":157,"line":2303},[155,62507,2312],{"class":171},[155,62509,62510],{"class":157,"line":2309},[155,62511,2318],{"class":161},[155,62513,62514],{"class":157,"line":2315},[155,62515,2324],{"class":171},[155,62517,62518],{"class":157,"line":2321},[155,62519,2330],{"class":161},[155,62521,62522],{"class":157,"line":2327},[155,62523,2336],{"class":171},[155,62525,62526],{"class":157,"line":2333},[155,62527,2342],{"class":161},[155,62529,62530,62532,62534,62536,62538,62540,62542],{"class":157,"line":2339},[155,62531,2348],{"class":171},[155,62533,2351],{"class":167},[155,62535,2354],{"class":171},[155,62537,1563],{"class":167},[155,62539,2359],{"class":171},[155,62541,1109],{"class":263},[155,62543,363],{"class":171},[155,62545,62546],{"class":157,"line":2345},[155,62547,2369],{"class":161},[155,62549,62550,62552,62554,62556,62558],{"class":157,"line":2366},[155,62551,2375],{"class":171},[155,62553,2351],{"class":167},[155,62555,2380],{"class":171},[155,62557,729],{"class":167},[155,62559,2385],{"class":171},[155,62561,62562],{"class":157,"line":2372},[155,62563,2391],{"class":161},[155,62565,62566,62568,62570,62572,62574],{"class":157,"line":2388},[155,62567,2397],{"class":171},[155,62569,2351],{"class":167},[155,62571,2359],{"class":171},[155,62573,1109],{"class":263},[155,62575,363],{"class":171},[155,62577,62578],{"class":157,"line":2394},[155,62579,2411],{"class":161},[155,62581,62582,62584,62586,62588,62590],{"class":157,"line":2408},[155,62583,2179],{"class":167},[155,62585,2419],{"class":171},[155,62587,1131],{"class":167},[155,62589,1134],{"class":263},[155,62591,2426],{"class":171},[155,62593,62594],{"class":157,"line":2414},[155,62595,2432],{"class":161},[155,62597,62598,62600,62602],{"class":157,"line":2429},[155,62599,2200],{"class":171},[155,62601,317],{"class":167},[155,62603,2205],{"class":171},[155,62605,62606],{"class":157,"line":2435},[155,62607,2447],{"class":161},[155,62609,62610,62612,62614],{"class":157,"line":2444},[155,62611,2217],{"class":171},[155,62613,317],{"class":167},[155,62615,2222],{"class":171},[155,62617,62618],{"class":157,"line":2450},[155,62619,2462],{"class":161},[155,62621,62622],{"class":157,"line":2459},[155,62623,2468],{"class":171},[155,62625,62626],{"class":157,"line":2465},[155,62627,5965],{"class":161},[155,62629,62630,62632],{"class":157,"line":2471},[155,62631,2474],{"class":167},[155,62633,2477],{"class":171},[155,62635,62636],{"class":157,"line":2480},[155,62637,2483],{"class":161},[155,62639,62640,62642,62644],{"class":157,"line":2486},[155,62641,5980],{"class":171},[155,62643,317],{"class":167},[155,62645,2257],{"class":171},[155,62647,62648],{"class":157,"line":2497},[155,62649,2500],{"class":161},[155,62651,62652,62654,62656,62658,62660,62662,62664],{"class":157,"line":2503},[155,62653,5993],{"class":171},[155,62655,317],{"class":167},[155,62657,2274],{"class":171},[155,62659,2277],{"class":323},[155,62661,317],{"class":167},[155,62663,329],{"class":263},[155,62665,363],{"class":171},[155,62667,62668],{"class":157,"line":2522},[155,62669,2525],{"class":161},[155,62671,62672,62674,62676],{"class":157,"line":2528},[155,62673,6014],{"class":171},[155,62675,317],{"class":167},[155,62677,2300],{"class":171},[155,62679,62680],{"class":157,"line":2539},[155,62681,2542],{"class":161},[155,62683,62684,62686,62688,62690,62692,62694,62696],{"class":157,"line":2545},[155,62685,6027],{"class":171},[155,62687,2351],{"class":167},[155,62689,6032],{"class":171},[155,62691,1563],{"class":167},[155,62693,2359],{"class":171},[155,62695,1109],{"class":263},[155,62697,363],{"class":171},[155,62699,62700,62702,62704,62706,62708],{"class":157,"line":2565},[155,62701,6045],{"class":171},[155,62703,2351],{"class":167},[155,62705,2380],{"class":171},[155,62707,729],{"class":167},[155,62709,2385],{"class":171},[155,62711,62712],{"class":157,"line":2581},[155,62713,6058],{"class":161},[155,62715,62716,62718,62720,62722,62724],{"class":157,"line":2587},[155,62717,6063],{"class":171},[155,62719,2351],{"class":167},[155,62721,2359],{"class":171},[155,62723,1109],{"class":263},[155,62725,363],{"class":171},[155,62727,62728],{"class":157,"line":2601},[155,62729,2604],{"class":161},[155,62731,62732],{"class":157,"line":2607},[155,62733,2610],{"class":161},[155,62735,62736,62738,62740],{"class":157,"line":2613},[155,62737,2616],{"class":171},[155,62739,2028],{"class":167},[155,62741,2621],{"class":171},[155,62743,62744],{"class":157,"line":2624},[155,62745,2627],{"class":161},[155,62747,62748],{"class":157,"line":2630},[155,62749,2633],{"class":161},[155,62751,62752,62754,62756],{"class":157,"line":2636},[155,62753,2639],{"class":171},[155,62755,2028],{"class":167},[155,62757,2621],{"class":171},[155,62759,62760],{"class":157,"line":2646},[155,62761,2649],{"class":161},[155,62763,62764,62766,62768],{"class":157,"line":2652},[155,62765,2655],{"class":171},[155,62767,2028],{"class":167},[155,62769,2660],{"class":171},[155,62771,62772],{"class":157,"line":2663},[155,62773,2666],{"class":161},[155,62775,62776,62778,62780],{"class":157,"line":2669},[155,62777,2672],{"class":171},[155,62779,2028],{"class":167},[155,62781,2660],{"class":171},[155,62783,62784],{"class":157,"line":2679},[155,62785,217],{"emptyLinePlaceholder":216},[155,62787,62788],{"class":157,"line":2684},[155,62789,2687],{"class":161},[155,62791,62792,62794,62796,62798,62800,62802,62804,62806,62808,62810,62812,62814,62816,62818,62820,62822,62824,62826,62828,62830],{"class":157,"line":2690},[155,62793,2017],{"class":263},[155,62795,230],{"class":171},[155,62797,2697],{"class":732},[155,62799,2025],{"class":263},[155,62801,2702],{"class":732},[155,62803,2705],{"class":263},[155,62805,2708],{"class":167},[155,62807,2711],{"class":263},[155,62809,2714],{"class":732},[155,62811,2705],{"class":263},[155,62813,2708],{"class":167},[155,62815,2711],{"class":263},[155,62817,2697],{"class":732},[155,62819,2725],{"class":171},[155,62821,2039],{"class":167},[155,62823,329],{"class":263},[155,62825,2732],{"class":171},[155,62827,2039],{"class":167},[155,62829,329],{"class":263},[155,62831,2739],{"class":171},[155,62833,62834,62836,62838,62840,62842,62844,62846,62848,62850,62852,62854,62856,62858,62860,62862,62864,62866,62868,62870,62872],{"class":157,"line":2742},[155,62835,2017],{"class":263},[155,62837,230],{"class":171},[155,62839,2697],{"class":732},[155,62841,2025],{"class":263},[155,62843,2753],{"class":732},[155,62845,2705],{"class":263},[155,62847,2708],{"class":167},[155,62849,2711],{"class":263},[155,62851,2762],{"class":732},[155,62853,2705],{"class":263},[155,62855,2708],{"class":167},[155,62857,2711],{"class":263},[155,62859,2697],{"class":732},[155,62861,2773],{"class":171},[155,62863,2039],{"class":167},[155,62865,329],{"class":263},[155,62867,2780],{"class":171},[155,62869,2039],{"class":167},[155,62871,329],{"class":263},[155,62873,2739],{"class":171},[155,62875,62876],{"class":157,"line":2789},[155,62877,217],{"emptyLinePlaceholder":216},[155,62879,62880],{"class":157,"line":2794},[155,62881,2797],{"class":161},[155,62883,62884,62886,62888,62890,62892,62894,62896],{"class":157,"line":2800},[155,62885,2803],{"class":167},[155,62887,2806],{"class":171},[155,62889,2039],{"class":167},[155,62891,329],{"class":263},[155,62893,2813],{"class":171},[155,62895,1148],{"class":167},[155,62897,2818],{"class":171},[155,62899,62900],{"class":157,"line":2821},[155,62901,2824],{"class":161},[155,62903,62904,62906,62908,62910,62912,62914,62916],{"class":157,"line":2827},[155,62905,2830],{"class":171},[155,62907,2833],{"class":263},[155,62909,317],{"class":167},[155,62911,2838],{"class":171},[155,62913,2039],{"class":167},[155,62915,329],{"class":263},[155,62917,2845],{"class":171},[155,62919,62920],{"class":157,"line":2848},[155,62921,2851],{"class":161},[155,62923,62924],{"class":157,"line":2854},[155,62925,2857],{"class":161},[155,62927,62928,62930,62932],{"class":157,"line":2860},[155,62929,2863],{"class":171},[155,62931,317],{"class":167},[155,62933,1858],{"class":171},[155,62935,62936],{"class":157,"line":2870},[155,62937,217],{"emptyLinePlaceholder":216},[155,62939,62940],{"class":157,"line":2875},[155,62941,2878],{"class":161},[155,62943,62944,62946,62948,62950,62952],{"class":157,"line":2881},[155,62945,2884],{"class":171},[155,62947,317],{"class":167},[155,62949,2889],{"class":171},[155,62951,2039],{"class":167},[155,62953,2894],{"class":171},[155,62955,62956,62958,62960,62962,62964,62966,62968,62970,62972,62974,62976,62978,62980,62982,62984,62986,62988,62990],{"class":157,"line":2897},[155,62957,2017],{"class":263},[155,62959,230],{"class":171},[155,62961,2904],{"class":732},[155,62963,2705],{"class":263},[155,62965,2909],{"class":167},[155,62967,2711],{"class":263},[155,62969,2914],{"class":732},[155,62971,2705],{"class":263},[155,62973,2909],{"class":167},[155,62975,2711],{"class":263},[155,62977,2923],{"class":732},[155,62979,2926],{"class":171},[155,62981,2929],{"class":167},[155,62983,2932],{"class":263},[155,62985,2935],{"class":171},[155,62987,2938],{"class":167},[155,62989,2932],{"class":263},[155,62991,1238],{"class":171},[155,62993,62994],{"class":157,"line":2945},[155,62995,6342],{"class":161},[155,62997,62998],{"class":157,"line":2951},[155,62999,6347],{"class":161},[155,63001,63002,63004,63006],{"class":157,"line":2957},[155,63003,6352],{"class":171},[155,63005,2969],{"class":732},[155,63007,363],{"class":171},[155,63009,63010],{"class":157,"line":2963},[155,63011,2989],{"class":161},[155,63013,63014,63016,63018,63020,63022,63024],{"class":157,"line":2974},[155,63015,2995],{"class":171},[155,63017,317],{"class":167},[155,63019,3000],{"class":171},[155,63021,3003],{"class":323},[155,63023,317],{"class":167},[155,63025,3008],{"class":171},[155,63027,63028,63030,63032,63034],{"class":157,"line":2980},[155,63029,3014],{"class":732},[155,63031,3017],{"class":171},[155,63033,3020],{"class":263},[155,63035,3023],{"class":171},[155,63037,63038,63040],{"class":157,"line":2986},[155,63039,3029],{"class":732},[155,63041,3032],{"class":171},[155,63043,63044,63046],{"class":157,"line":2992},[155,63045,3038],{"class":732},[155,63047,3041],{"class":171},[155,63049,63050,63052],{"class":157,"line":3011},[155,63051,3047],{"class":732},[155,63053,3050],{"class":171},[155,63055,63056,63058],{"class":157,"line":3026},[155,63057,3056],{"class":732},[155,63059,3059],{"class":171},[155,63061,63062],{"class":157,"line":3035},[155,63063,3065],{"class":171},[155,63065,63066],{"class":157,"line":3044},[155,63067,3071],{"class":161},[155,63069,63070,63072],{"class":157,"line":3053},[155,63071,1692],{"class":167},[155,63073,3079],{"class":171},[155,63075,63076],{"class":157,"line":3062},[155,63077,217],{"emptyLinePlaceholder":216},[155,63079,63080],{"class":157,"line":3068},[155,63081,3090],{"class":161},[155,63083,63084,63086,63088],{"class":157,"line":3074},[155,63085,1484],{"class":167},[155,63087,3098],{"class":226},[155,63089,3101],{"class":171},[155,63091,63092],{"class":157,"line":3082},[155,63093,3107],{"class":161},[155,63095,63096,63098,63100,63102,63104,63106,63108,63110],{"class":157,"line":3087},[155,63097,3113],{"class":171},[155,63099,1224],{"class":323},[155,63101,317],{"class":167},[155,63103,230],{"class":171},[155,63105,1231],{"class":263},[155,63107,332],{"class":171},[155,63109,1264],{"class":263},[155,63111,1238],{"class":171},[155,63113,63114],{"class":157,"line":3093},[155,63115,3133],{"class":161},[155,63117,63118],{"class":157,"line":3104},[155,63119,3139],{"class":161},[155,63121,63122],{"class":157,"line":3110},[155,63123,3145],{"class":161},[155,63125,63126,63128,63130,63132,63134,63136,63138],{"class":157,"line":3130},[155,63127,1261],{"class":171},[155,63129,329],{"class":263},[155,63131,332],{"class":171},[155,63133,360],{"class":263},[155,63135,332],{"class":171},[155,63137,329],{"class":263},[155,63139,363],{"class":171},[155,63141,63142],{"class":157,"line":3136},[155,63143,3168],{"class":161},[155,63145,63146],{"class":157,"line":3142},[155,63147,3174],{"class":161},[155,63149,63150],{"class":157,"line":3148},[155,63151,3180],{"class":161},[155,63153,63154],{"class":157,"line":3165},[155,63155,3186],{"class":161},[155,63157,63158],{"class":157,"line":3171},[155,63159,3192],{"class":161},[155,63161,63162,63164,63166,63168,63170,63172,63174,63176,63178],{"class":157,"line":3177},[155,63163,3198],{"class":171},[155,63165,3201],{"class":732},[155,63167,3204],{"class":171},[155,63169,3207],{"class":732},[155,63171,332],{"class":171},[155,63173,3212],{"class":323},[155,63175,317],{"class":167},[155,63177,3217],{"class":732},[155,63179,363],{"class":171},[155,63181,63182,63184,63186,63188,63190,63192,63194,63196,63198],{"class":157,"line":3183},[155,63183,3198],{"class":171},[155,63185,3201],{"class":732},[155,63187,3229],{"class":171},[155,63189,3232],{"class":732},[155,63191,332],{"class":171},[155,63193,3212],{"class":323},[155,63195,317],{"class":167},[155,63197,3241],{"class":732},[155,63199,363],{"class":171},[155,63201,63202],{"class":157,"line":3189},[155,63203,3249],{"class":161},[155,63205,63206],{"class":157,"line":3195},[155,63207,3255],{"class":171},[155,63209,63210],{"class":157,"line":3222},[155,63211,3261],{"class":161},[155,63213,63214,63216,63218],{"class":157,"line":3246},[155,63215,3267],{"class":171},[155,63217,3270],{"class":732},[155,63219,363],{"class":171},[155,63221,63222,63224,63226],{"class":157,"line":3252},[155,63223,3278],{"class":171},[155,63225,3281],{"class":732},[155,63227,363],{"class":171},[155,63229,63230],{"class":157,"line":3258},[155,63231,3289],{"class":161},[155,63233,63234,63236,63238,63240,63242,63244,63246],{"class":157,"line":3264},[155,63235,1261],{"class":171},[155,63237,329],{"class":263},[155,63239,332],{"class":171},[155,63241,360],{"class":263},[155,63243,332],{"class":171},[155,63245,360],{"class":263},[155,63247,363],{"class":171},[155,63249,63250,63252,63254,63256,63258,63260,63262,63264,63266],{"class":157,"line":3275},[155,63251,3198],{"class":171},[155,63253,3201],{"class":732},[155,63255,3316],{"class":171},[155,63257,3207],{"class":732},[155,63259,332],{"class":171},[155,63261,3212],{"class":323},[155,63263,317],{"class":167},[155,63265,3327],{"class":732},[155,63267,363],{"class":171},[155,63269,63270,63272,63274,63276,63278,63280,63282,63284,63286],{"class":157,"line":3286},[155,63271,3198],{"class":171},[155,63273,3201],{"class":732},[155,63275,3339],{"class":171},[155,63277,3232],{"class":732},[155,63279,332],{"class":171},[155,63281,3212],{"class":323},[155,63283,317],{"class":167},[155,63285,3350],{"class":732},[155,63287,363],{"class":171},[155,63289,63290],{"class":157,"line":3292},[155,63291,3358],{"class":161},[155,63293,63294],{"class":157,"line":3309},[155,63295,3255],{"class":171},[155,63297,63298,63300,63302],{"class":157,"line":3332},[155,63299,3267],{"class":171},[155,63301,3201],{"class":732},[155,63303,363],{"class":171},[155,63305,63306,63308,63310],{"class":157,"line":3355},[155,63307,3278],{"class":171},[155,63309,3380],{"class":732},[155,63311,363],{"class":171},[155,63313,63314],{"class":157,"line":3361},[155,63315,3388],{"class":171},[155,63317,63318],{"class":157,"line":3366},[155,63319,217],{"emptyLinePlaceholder":216},[155,63321,63322],{"class":157,"line":3375},[155,63323,3399],{"class":161},[155,63325,63326,63328,63330,63332,63334],{"class":157,"line":3385},[155,63327,723],{"class":167},[155,63329,726],{"class":263},[155,63331,729],{"class":167},[155,63333,733],{"class":732},[155,63335,736],{"class":171},[155,63337,63338],{"class":157,"line":3391},[155,63339,3418],{"class":161},[155,63341,63342,63344,63346],{"class":157,"line":3396},[155,63343,14165],{"class":171},[155,63345,317],{"class":167},[155,63347,14170],{"class":171},[155,63349,63350,63352,63354],{"class":157,"line":3402},[155,63351,3435],{"class":171},[155,63353,317],{"class":167},[155,63355,3440],{"class":171},[155,63357,63358,63360,63362,63364,63366,63368,63370],{"class":157,"line":3415},[155,63359,2995],{"class":171},[155,63361,317],{"class":167},[155,63363,14187],{"class":171},[155,63365,3453],{"class":323},[155,63367,317],{"class":167},[155,63369,14194],{"class":263},[155,63371,363],{"class":171},[155,63373,63374],{"class":157,"line":3421},[155,63375,3466],{"class":171},[28,63377,63378],{"start":121},[31,63379,10187],{},[146,63381,63382],{"className":148,"code":14207,"language":150,"meta":39,"style":39},[152,63383,63384,63390,63400,63410,63414,63424,63434,63438,63442,63446,63454,63470,63480,63496,63506,63520,63524,63534,63544,63554,63560,63564,63568,63576,63580,63596,63604,63608,63612,63620,63628,63632,63636,63640,63644,63650,63654,63664,63672,63680,63684,63688,63692,63700,63704,63720,63724,63728,63732,63744,63748,63760,63764,63768,63780,63784,63794,63798,63802,63814,63818,63826,63830,63834,63842,63846,63854,63858,63862,63866,63870,63874,63890,63898,63902,63906,63954,63960,63964,63974,63982,63990,63994,63998,64002,64006,64014,64018,64034,64038,64046,64054],{"__ignoreMap":39},[155,63385,63386,63388],{"class":157,"line":158},[155,63387,168],{"class":167},[155,63389,172],{"class":171},[155,63391,63392,63394,63396,63398],{"class":157,"line":46},[155,63393,168],{"class":167},[155,63395,939],{"class":171},[155,63397,907],{"class":167},[155,63399,944],{"class":171},[155,63401,63402,63404,63406,63408],{"class":157,"line":121},[155,63403,183],{"class":167},[155,63405,922],{"class":171},[155,63407,168],{"class":167},[155,63409,927],{"class":171},[155,63411,63412],{"class":157,"line":180},[155,63413,3527],{"class":161},[155,63415,63416,63418,63420,63422],{"class":157,"line":194},[155,63417,183],{"class":167},[155,63419,892],{"class":171},[155,63421,168],{"class":167},[155,63423,897],{"class":171},[155,63425,63426,63428,63430,63432],{"class":157,"line":200},[155,63427,183],{"class":167},[155,63429,1451],{"class":171},[155,63431,168],{"class":167},[155,63433,14260],{"class":171},[155,63435,63436],{"class":157,"line":213},[155,63437,217],{"emptyLinePlaceholder":216},[155,63439,63440],{"class":157,"line":220},[155,63441,217],{"emptyLinePlaceholder":216},[155,63443,63444],{"class":157,"line":245},[155,63445,3556],{"class":161},[155,63447,63448,63450,63452],{"class":157,"line":251},[155,63449,1484],{"class":167},[155,63451,3563],{"class":226},[155,63453,1490],{"class":171},[155,63455,63456,63458,63460,63462,63464,63466,63468],{"class":157,"line":257},[155,63457,3570],{"class":171},[155,63459,317],{"class":167},[155,63461,979],{"class":171},[155,63463,982],{"class":323},[155,63465,317],{"class":167},[155,63467,987],{"class":732},[155,63469,990],{"class":171},[155,63471,63472,63474,63476,63478],{"class":157,"line":270},[155,63473,3587],{"class":323},[155,63475,317],{"class":167},[155,63477,3592],{"class":263},[155,63479,990],{"class":171},[155,63481,63482,63484,63486,63488,63490,63492,63494],{"class":157,"line":276},[155,63483,3599],{"class":323},[155,63485,317],{"class":167},[155,63487,1017],{"class":171},[155,63489,1020],{"class":323},[155,63491,317],{"class":167},[155,63493,5058],{"class":263},[155,63495,1028],{"class":171},[155,63497,63498,63500,63502,63504],{"class":157,"line":297},[155,63499,3616],{"class":323},[155,63501,317],{"class":167},[155,63503,1000],{"class":263},[155,63505,363],{"class":171},[155,63507,63508,63510,63512,63514,63516,63518],{"class":157,"line":302},[155,63509,3627],{"class":171},[155,63511,317],{"class":167},[155,63513,1058],{"class":171},[155,63515,1061],{"class":323},[155,63517,317],{"class":167},[155,63519,3638],{"class":171},[155,63521,63522],{"class":157,"line":308},[155,63523,3643],{"class":161},[155,63525,63526,63528,63530,63532],{"class":157,"line":366},[155,63527,3648],{"class":323},[155,63529,317],{"class":167},[155,63531,329],{"class":263},[155,63533,990],{"class":171},[155,63535,63536,63538,63540,63542],{"class":157,"line":379},[155,63537,3659],{"class":323},[155,63539,317],{"class":167},[155,63541,1000],{"class":263},[155,63543,990],{"class":171},[155,63545,63546,63548,63550,63552],{"class":157,"line":385},[155,63547,3670],{"class":323},[155,63549,317],{"class":167},[155,63551,1109],{"class":263},[155,63553,363],{"class":171},[155,63555,63556,63558],{"class":157,"line":415},[155,63557,1692],{"class":167},[155,63559,3683],{"class":171},[155,63561,63562],{"class":157,"line":452},[155,63563,217],{"emptyLinePlaceholder":216},[155,63565,63566],{"class":157,"line":480},[155,63567,3692],{"class":161},[155,63569,63570,63572,63574],{"class":157,"line":486},[155,63571,1484],{"class":167},[155,63573,3699],{"class":226},[155,63575,3702],{"class":171},[155,63577,63578],{"class":157,"line":499},[155,63579,3707],{"class":161},[155,63581,63582,63584,63586,63588,63590,63592,63594],{"class":157,"line":505},[155,63583,748],{"class":171},[155,63585,317],{"class":167},[155,63587,756],{"class":732},[155,63589,759],{"class":167},[155,63591,762],{"class":171},[155,63593,765],{"class":167},[155,63595,3724],{"class":732},[155,63597,63598,63600,63602],{"class":157,"line":528},[155,63599,811],{"class":171},[155,63601,317],{"class":167},[155,63603,1829],{"class":171},[155,63605,63606],{"class":157,"line":549},[155,63607,217],{"emptyLinePlaceholder":216},[155,63609,63610],{"class":157,"line":570},[155,63611,3741],{"class":161},[155,63613,63614,63616,63618],{"class":157,"line":575},[155,63615,3746],{"class":171},[155,63617,317],{"class":167},[155,63619,1891],{"class":263},[155,63621,63622,63624,63626],{"class":157,"line":581},[155,63623,3755],{"class":171},[155,63625,317],{"class":167},[155,63627,2103],{"class":263},[155,63629,63630],{"class":157,"line":592},[155,63631,217],{"emptyLinePlaceholder":216},[155,63633,63634],{"class":157,"line":610},[155,63635,3768],{"class":161},[155,63637,63638],{"class":157,"line":622},[155,63639,3773],{"class":161},[155,63641,63642],{"class":157,"line":638},[155,63643,3778],{"class":161},[155,63645,63646,63648],{"class":157,"line":650},[155,63647,3783],{"class":167},[155,63649,2477],{"class":171},[155,63651,63652],{"class":157,"line":662},[155,63653,3790],{"class":161},[155,63655,63656,63658,63660,63662],{"class":157,"line":678},[155,63657,2179],{"class":167},[155,63659,3797],{"class":171},[155,63661,1131],{"class":167},[155,63663,3802],{"class":171},[155,63665,63666,63668,63670],{"class":157,"line":694},[155,63667,3807],{"class":171},[155,63669,317],{"class":167},[155,63671,3812],{"class":171},[155,63673,63674,63676,63678],{"class":157,"line":706},[155,63675,3817],{"class":171},[155,63677,317],{"class":167},[155,63679,3822],{"class":171},[155,63681,63682],{"class":157,"line":715},[155,63683,3827],{"class":161},[155,63685,63686],{"class":157,"line":720},[155,63687,2468],{"class":171},[155,63689,63690],{"class":157,"line":739},[155,63691,3836],{"class":161},[155,63693,63694,63696,63698],{"class":157,"line":745},[155,63695,2252],{"class":171},[155,63697,317],{"class":167},[155,63699,3845],{"class":171},[155,63701,63702],{"class":157,"line":773},[155,63703,3850],{"class":161},[155,63705,63706,63708,63710,63712,63714,63716,63718],{"class":157,"line":779},[155,63707,2269],{"class":171},[155,63709,317],{"class":167},[155,63711,2274],{"class":171},[155,63713,2277],{"class":323},[155,63715,317],{"class":167},[155,63717,329],{"class":263},[155,63719,363],{"class":171},[155,63721,63722],{"class":157,"line":785},[155,63723,3871],{"class":161},[155,63725,63726],{"class":157,"line":791},[155,63727,3876],{"class":161},[155,63729,63730],{"class":157,"line":796},[155,63731,3881],{"class":161},[155,63733,63734,63736,63738,63740,63742],{"class":157,"line":802},[155,63735,3886],{"class":171},[155,63737,2351],{"class":167},[155,63739,2380],{"class":171},[155,63741,729],{"class":167},[155,63743,3895],{"class":171},[155,63745,63746],{"class":157,"line":808},[155,63747,3900],{"class":161},[155,63749,63750,63752,63754,63756,63758],{"class":157,"line":819},[155,63751,3905],{"class":171},[155,63753,2351],{"class":167},[155,63755,3910],{"class":171},[155,63757,1109],{"class":263},[155,63759,363],{"class":171},[155,63761,63762],{"class":157,"line":1832},[155,63763,217],{"emptyLinePlaceholder":216},[155,63765,63766],{"class":157,"line":1838},[155,63767,3923],{"class":161},[155,63769,63770,63772,63774,63776,63778],{"class":157,"line":1844},[155,63771,3928],{"class":171},[155,63773,317],{"class":167},[155,63775,3933],{"class":171},[155,63777,2028],{"class":167},[155,63779,3938],{"class":171},[155,63781,63782],{"class":157,"line":1850},[155,63783,3943],{"class":161},[155,63785,63786,63788,63790,63792],{"class":157,"line":1861},[155,63787,2017],{"class":263},[155,63789,230],{"class":171},[155,63791,3952],{"class":732},[155,63793,3955],{"class":171},[155,63795,63796],{"class":157,"line":1866},[155,63797,217],{"emptyLinePlaceholder":216},[155,63799,63800],{"class":157,"line":1871},[155,63801,3964],{"class":161},[155,63803,63804,63806,63808,63810,63812],{"class":157,"line":1877},[155,63805,723],{"class":167},[155,63807,726],{"class":263},[155,63809,729],{"class":167},[155,63811,733],{"class":732},[155,63813,736],{"class":171},[155,63815,63816],{"class":157,"line":1883},[155,63817,3981],{"class":161},[155,63819,63820,63822,63824],{"class":157,"line":1894},[155,63821,811],{"class":171},[155,63823,317],{"class":167},[155,63825,14170],{"class":171},[155,63827,63828],{"class":157,"line":1900},[155,63829,3994],{"class":161},[155,63831,63832],{"class":157,"line":1911},[155,63833,3999],{"class":161},[155,63835,63836,63838,63840],{"class":157,"line":1917},[155,63837,4004],{"class":171},[155,63839,4007],{"class":732},[155,63841,1238],{"class":171},[155,63843,63844],{"class":157,"line":1927},[155,63845,4014],{"class":161},[155,63847,63848,63850,63852],{"class":157,"line":1933},[155,63849,3627],{"class":171},[155,63851,317],{"class":167},[155,63853,4023],{"class":171},[155,63855,63856],{"class":157,"line":1943},[155,63857,4028],{"class":161},[155,63859,63860],{"class":157,"line":1949},[155,63861,4033],{"class":171},[155,63863,63864],{"class":157,"line":1959},[155,63865,217],{"emptyLinePlaceholder":216},[155,63867,63868],{"class":157,"line":1964},[155,63869,4042],{"class":161},[155,63871,63872],{"class":157,"line":1970},[155,63873,4047],{"class":161},[155,63875,63876,63878,63880,63882,63884,63886,63888],{"class":157,"line":1981},[155,63877,748],{"class":171},[155,63879,317],{"class":167},[155,63881,756],{"class":732},[155,63883,759],{"class":167},[155,63885,762],{"class":171},[155,63887,765],{"class":167},[155,63889,3724],{"class":732},[155,63891,63892,63894,63896],{"class":157,"line":1986},[155,63893,811],{"class":171},[155,63895,317],{"class":167},[155,63897,1829],{"class":171},[155,63899,63900],{"class":157,"line":1991},[155,63901,4076],{"class":161},[155,63903,63904],{"class":157,"line":1997},[155,63905,4081],{"class":161},[155,63907,63908,63910,63912,63914,63916,63918,63920,63922,63924,63926,63928,63930,63932,63934,63936,63938,63940,63942,63944,63946,63948,63950,63952],{"class":157,"line":2014},[155,63909,4086],{"class":171},[155,63911,317],{"class":167},[155,63913,4091],{"class":171},[155,63915,4094],{"class":732},[155,63917,332],{"class":171},[155,63919,4099],{"class":732},[155,63921,332],{"class":171},[155,63923,4104],{"class":732},[155,63925,332],{"class":171},[155,63927,4109],{"class":732},[155,63929,332],{"class":171},[155,63931,4114],{"class":732},[155,63933,332],{"class":171},[155,63935,4119],{"class":732},[155,63937,332],{"class":171},[155,63939,4124],{"class":732},[155,63941,332],{"class":171},[155,63943,4129],{"class":732},[155,63945,332],{"class":171},[155,63947,4134],{"class":732},[155,63949,332],{"class":171},[155,63951,4139],{"class":732},[155,63953,2845],{"class":171},[155,63955,63956,63958],{"class":157,"line":2046},[155,63957,3783],{"class":167},[155,63959,2477],{"class":171},[155,63961,63962],{"class":157,"line":2062},[155,63963,4152],{"class":161},[155,63965,63966,63968,63970,63972],{"class":157,"line":2067},[155,63967,2179],{"class":167},[155,63969,4159],{"class":171},[155,63971,1131],{"class":167},[155,63973,3802],{"class":171},[155,63975,63976,63978,63980],{"class":157,"line":2073},[155,63977,2200],{"class":171},[155,63979,317],{"class":167},[155,63981,2205],{"class":171},[155,63983,63984,63986,63988],{"class":157,"line":2079},[155,63985,2217],{"class":171},[155,63987,317],{"class":167},[155,63989,2222],{"class":171},[155,63991,63992],{"class":157,"line":2089},[155,63993,217],{"emptyLinePlaceholder":216},[155,63995,63996],{"class":157,"line":2095},[155,63997,4188],{"class":161},[155,63999,64000],{"class":157,"line":2106},[155,64001,2468],{"class":171},[155,64003,64004],{"class":157,"line":2112},[155,64005,4197],{"class":161},[155,64007,64008,64010,64012],{"class":157,"line":2122},[155,64009,2252],{"class":171},[155,64011,317],{"class":167},[155,64013,2257],{"class":171},[155,64015,64016],{"class":157,"line":2128},[155,64017,4210],{"class":161},[155,64019,64020,64022,64024,64026,64028,64030,64032],{"class":157,"line":2138},[155,64021,2269],{"class":171},[155,64023,317],{"class":167},[155,64025,2274],{"class":171},[155,64027,2277],{"class":323},[155,64029,317],{"class":167},[155,64031,329],{"class":263},[155,64033,363],{"class":171},[155,64035,64036],{"class":157,"line":2144},[155,64037,4231],{"class":161},[155,64039,64040,64042,64044],{"class":157,"line":2154},[155,64041,4236],{"class":171},[155,64043,317],{"class":167},[155,64045,4241],{"class":171},[155,64047,64048,64050,64052],{"class":157,"line":2160},[155,64049,4246],{"class":171},[155,64051,317],{"class":167},[155,64053,4251],{"class":171},[155,64055,64056,64058,64060,64062,64064,64066,64068,64070],{"class":157,"line":2170},[155,64057,4256],{"class":263},[155,64059,230],{"class":171},[155,64061,4261],{"class":732},[155,64063,4264],{"class":171},[155,64065,4267],{"class":732},[155,64067,332],{"class":171},[155,64069,4272],{"class":732},[155,64071,4275],{"class":171},[14,64073,14902],{"id":14901},[24,64075,14905],{},[24,64077,14908],{},[146,64079,64080],{"className":148,"code":14911,"language":150,"meta":39,"style":39},[152,64081,64082,64086,64092,64096,64106,64112,64116,64124,64136,64144,64148,64152,64160,64176,64180,64184,64192,64202,64212,64216,64220,64228,64238,64248,64252,64256,64264,64268,64272,64276,64280,64284,64288,64292,64302,64324,64334,64344,64366,64370,64374,64386,64390,64400,64412,64424,64430,64434,64438,64444,64456,64468,64472,64476,64480,64522,64528,64532],{"__ignoreMap":39},[155,64083,64084],{"class":157,"line":158},[155,64085,14918],{"class":161},[155,64087,64088,64090],{"class":157,"line":46},[155,64089,168],{"class":167},[155,64091,14925],{"class":171},[155,64093,64094],{"class":157,"line":121},[155,64095,14930],{"class":161},[155,64097,64098,64100,64102,64104],{"class":157,"line":180},[155,64099,183],{"class":167},[155,64101,14937],{"class":171},[155,64103,168],{"class":167},[155,64105,1359],{"class":171},[155,64107,64108,64110],{"class":157,"line":194},[155,64109,168],{"class":167},[155,64111,14948],{"class":171},[155,64113,64114],{"class":157,"line":200},[155,64115,217],{"emptyLinePlaceholder":216},[155,64117,64118,64120,64122],{"class":157,"line":213},[155,64119,1484],{"class":167},[155,64121,14959],{"class":226},[155,64123,14962],{"class":171},[155,64125,64126,64128,64130,64132,64134],{"class":157,"line":220},[155,64127,1142],{"class":167},[155,64129,8542],{"class":167},[155,64131,14971],{"class":171},[155,64133,14974],{"class":323},[155,64135,242],{"class":171},[155,64137,64138,64140,64142],{"class":157,"line":245},[155,64139,14981],{"class":171},[155,64141,14974],{"class":323},[155,64143,363],{"class":171},[155,64145,64146],{"class":157,"line":251},[155,64147,217],{"emptyLinePlaceholder":216},[155,64149,64150],{"class":157,"line":257},[155,64151,14994],{"class":161},[155,64153,64154,64156,64158],{"class":157,"line":270},[155,64155,14999],{"class":171},[155,64157,317],{"class":167},[155,64159,15004],{"class":732},[155,64161,64162,64164,64166,64168,64170,64172,64174],{"class":157,"line":276},[155,64163,15009],{"class":171},[155,64165,317],{"class":167},[155,64167,15014],{"class":171},[155,64169,1125],{"class":167},[155,64171,15019],{"class":171},[155,64173,1131],{"class":167},[155,64175,15024],{"class":171},[155,64177,64178],{"class":157,"line":297},[155,64179,217],{"emptyLinePlaceholder":216},[155,64181,64182],{"class":157,"line":302},[155,64183,15033],{"class":161},[155,64185,64186,64188,64190],{"class":157,"line":308},[155,64187,15038],{"class":171},[155,64189,15041],{"class":732},[155,64191,363],{"class":171},[155,64193,64194,64196,64198,64200],{"class":157,"line":366},[155,64195,1125],{"class":167},[155,64197,15019],{"class":171},[155,64199,1131],{"class":167},[155,64201,15054],{"class":171},[155,64203,64204,64206,64208,64210],{"class":157,"line":379},[155,64205,15059],{"class":171},[155,64207,15062],{"class":732},[155,64209,1274],{"class":167},[155,64211,15067],{"class":171},[155,64213,64214],{"class":157,"line":385},[155,64215,217],{"emptyLinePlaceholder":216},[155,64217,64218],{"class":157,"line":415},[155,64219,15076],{"class":161},[155,64221,64222,64224,64226],{"class":157,"line":452},[155,64223,15038],{"class":171},[155,64225,15083],{"class":732},[155,64227,363],{"class":171},[155,64229,64230,64232,64234,64236],{"class":157,"line":480},[155,64231,1125],{"class":167},[155,64233,15019],{"class":171},[155,64235,1131],{"class":167},[155,64237,15054],{"class":171},[155,64239,64240,64242,64244,64246],{"class":157,"line":486},[155,64241,15059],{"class":171},[155,64243,15102],{"class":732},[155,64245,1274],{"class":167},[155,64247,15067],{"class":171},[155,64249,64250],{"class":157,"line":499},[155,64251,217],{"emptyLinePlaceholder":216},[155,64253,64254],{"class":157,"line":505},[155,64255,15115],{"class":161},[155,64257,64258,64260,64262],{"class":157,"line":528},[155,64259,15120],{"class":171},[155,64261,317],{"class":167},[155,64263,15125],{"class":263},[155,64265,64266],{"class":157,"line":549},[155,64267,217],{"emptyLinePlaceholder":216},[155,64269,64270],{"class":157,"line":570},[155,64271,15134],{"class":161},[155,64273,64274],{"class":157,"line":575},[155,64275,15139],{"class":161},[155,64277,64278],{"class":157,"line":581},[155,64279,15144],{"class":161},[155,64281,64282],{"class":157,"line":592},[155,64283,15149],{"class":161},[155,64285,64286],{"class":157,"line":610},[155,64287,15154],{"class":161},[155,64289,64290],{"class":157,"line":622},[155,64291,217],{"emptyLinePlaceholder":216},[155,64293,64294,64296,64298,64300],{"class":157,"line":638},[155,64295,1125],{"class":167},[155,64297,15019],{"class":171},[155,64299,1131],{"class":167},[155,64301,15054],{"class":171},[155,64303,64304,64306,64308,64310,64312,64314,64316,64318,64320,64322],{"class":157,"line":650},[155,64305,15173],{"class":171},[155,64307,317],{"class":167},[155,64309,15178],{"class":171},[155,64311,1274],{"class":167},[155,64313,15183],{"class":732},[155,64315,15186],{"class":167},[155,64317,15019],{"class":171},[155,64319,1274],{"class":167},[155,64321,15183],{"class":732},[155,64323,15195],{"class":161},[155,64325,64326,64328,64330,64332],{"class":157,"line":662},[155,64327,15200],{"class":171},[155,64329,317],{"class":167},[155,64331,15205],{"class":171},[155,64333,15208],{"class":161},[155,64335,64336,64338,64340,64342],{"class":157,"line":678},[155,64337,15213],{"class":171},[155,64339,317],{"class":167},[155,64341,15218],{"class":263},[155,64343,15221],{"class":171},[155,64345,64346,64348,64350,64352,64354,64356,64358,64360,64362,64364],{"class":157,"line":694},[155,64347,15226],{"class":171},[155,64349,317],{"class":167},[155,64351,15231],{"class":171},[155,64353,15234],{"class":323},[155,64355,317],{"class":167},[155,64357,15239],{"class":263},[155,64359,15242],{"class":171},[155,64361,1563],{"class":167},[155,64363,15247],{"class":171},[155,64365,15250],{"class":161},[155,64367,64368],{"class":157,"line":706},[155,64369,15255],{"class":161},[155,64371,64372],{"class":157,"line":715},[155,64373,15260],{"class":161},[155,64375,64376,64378,64380,64382,64384],{"class":157,"line":720},[155,64377,2000],{"class":167},[155,64379,15267],{"class":171},[155,64381,1131],{"class":167},[155,64383,1134],{"class":263},[155,64385,15274],{"class":171},[155,64387,64388],{"class":157,"line":739},[155,64389,15279],{"class":161},[155,64391,64392,64394,64396,64398],{"class":157,"line":745},[155,64393,2803],{"class":167},[155,64395,15286],{"class":171},[155,64397,1131],{"class":167},[155,64399,15291],{"class":171},[155,64401,64402,64404,64406,64408,64410],{"class":157,"line":773},[155,64403,15296],{"class":171},[155,64405,317],{"class":167},[155,64407,15301],{"class":171},[155,64409,1274],{"class":167},[155,64411,15306],{"class":171},[155,64413,64414,64416,64418,64420,64422],{"class":157,"line":779},[155,64415,15311],{"class":171},[155,64417,317],{"class":167},[155,64419,15316],{"class":732},[155,64421,15186],{"class":167},[155,64423,15321],{"class":171},[155,64425,64426,64428],{"class":157,"line":785},[155,64427,15326],{"class":171},[155,64429,15329],{"class":161},[155,64431,64432],{"class":157,"line":791},[155,64433,217],{"emptyLinePlaceholder":216},[155,64435,64436],{"class":157,"line":796},[155,64437,15338],{"class":161},[155,64439,64440,64442],{"class":157,"line":802},[155,64441,15343],{"class":167},[155,64443,736],{"class":171},[155,64445,64446,64448,64450,64452,64454],{"class":157,"line":808},[155,64447,15296],{"class":171},[155,64449,317],{"class":167},[155,64451,15301],{"class":171},[155,64453,1274],{"class":167},[155,64455,15306],{"class":171},[155,64457,64458,64460,64462,64464,64466],{"class":157,"line":819},[155,64459,15311],{"class":171},[155,64461,317],{"class":167},[155,64463,15366],{"class":732},[155,64465,15186],{"class":167},[155,64467,15321],{"class":171},[155,64469,64470],{"class":157,"line":1832},[155,64471,15375],{"class":171},[155,64473,64474],{"class":157,"line":1838},[155,64475,15380],{"class":161},[155,64477,64478],{"class":157,"line":1844},[155,64479,15385],{"class":161},[155,64481,64482,64484,64486,64488,64490,64492,64494,64496,64498,64500,64502,64504,64506,64508,64510,64512,64514,64516,64518,64520],{"class":157,"line":1850},[155,64483,2017],{"class":263},[155,64485,230],{"class":171},[155,64487,2033],{"class":732},[155,64489,15396],{"class":263},[155,64491,4091],{"class":732},[155,64493,2025],{"class":263},[155,64495,15403],{"class":732},[155,64497,2025],{"class":263},[155,64499,2028],{"class":732},[155,64501,2025],{"class":263},[155,64503,15412],{"class":732},[155,64505,15415],{"class":171},[155,64507,1274],{"class":167},[155,64509,1277],{"class":263},[155,64511,15422],{"class":171},[155,64513,15425],{"class":323},[155,64515,317],{"class":167},[155,64517,15430],{"class":732},[155,64519,15433],{"class":171},[155,64521,15436],{"class":161},[155,64523,64524,64526],{"class":157,"line":1861},[155,64525,822],{"class":263},[155,64527,294],{"class":171},[155,64529,64530],{"class":157,"line":1866},[155,64531,217],{"emptyLinePlaceholder":216},[155,64533,64534,64536,64538,64540],{"class":157,"line":1871},[155,64535,15451],{"class":263},[155,64537,230],{"class":171},[155,64539,15456],{"class":732},[155,64541,363],{"class":171},[24,64543,15461],{},[19,64545,15465],{"id":15464},[24,64547,15468],{},[146,64549,64550],{"className":148,"code":15471,"language":150,"meta":39,"style":39},[152,64551,64552,64558,64568,64578,64582,64598,64606,64620,64630,64634,64664,64668,64702,64748,64752,64786,64832,64836,64840,64874,64904,64908,64916,64930,64952,64974,64992,64996,65010,65014,65018,65034,65038,65046,65060,65070,65114,65118,65146,65150,65160,65188,65192,65228,65232,65260,65264,65274,65306,65338,65366,65370,65380,65412,65444,65476,65508,65540,65568,65572,65582,65614,65646,65658,65662,65674,65678,65682,65694,65702,65722,65726,65730,65734,65738,65742,65746,65760,65768,65776,65788,65802,65810,65814,65822,65832,65842,65852,65862,65872,65878,65882,65886,65898,65918,65926],{"__ignoreMap":39},[155,64553,64554,64556],{"class":157,"line":158},[155,64555,168],{"class":167},[155,64557,172],{"class":171},[155,64559,64560,64562,64564,64566],{"class":157,"line":46},[155,64561,183],{"class":167},[155,64563,186],{"class":171},[155,64565,168],{"class":167},[155,64567,191],{"class":171},[155,64569,64570,64572,64574,64576],{"class":157,"line":121},[155,64571,183],{"class":167},[155,64573,205],{"class":171},[155,64575,168],{"class":167},[155,64577,210],{"class":171},[155,64579,64580],{"class":157,"line":180},[155,64581,217],{"emptyLinePlaceholder":216},[155,64583,64584,64586,64588,64590,64592,64594,64596],{"class":157,"line":194},[155,64585,223],{"class":167},[155,64587,11106],{"class":226},[155,64589,230],{"class":171},[155,64591,233],{"class":226},[155,64593,236],{"class":171},[155,64595,239],{"class":226},[155,64597,242],{"class":171},[155,64599,64600,64602,64604],{"class":157,"line":200},[155,64601,260],{"class":167},[155,64603,264],{"class":263},[155,64605,11125],{"class":171},[155,64607,64608,64610,64612,64614,64616,64618],{"class":157,"line":213},[155,64609,279],{"class":263},[155,64611,11132],{"class":171},[155,64613,285],{"class":263},[155,64615,288],{"class":171},[155,64617,291],{"class":263},[155,64619,294],{"class":171},[155,64621,64622,64624,64626,64628],{"class":157,"line":220},[155,64623,311],{"class":263},[155,64625,4377],{"class":171},[155,64627,317],{"class":167},[155,64629,4382],{"class":171},[155,64631,64632],{"class":157,"line":245},[155,64633,11155],{"class":161},[155,64635,64636,64638,64640,64642,64644,64646,64648,64650,64652,64654,64656,64658,64660,64662],{"class":157,"line":251},[155,64637,311],{"class":263},[155,64639,11162],{"class":171},[155,64641,317],{"class":167},[155,64643,320],{"class":171},[155,64645,324],{"class":323},[155,64647,317],{"class":167},[155,64649,11173],{"class":171},[155,64651,335],{"class":323},[155,64653,317],{"class":167},[155,64655,11180],{"class":171},[155,64657,345],{"class":323},[155,64659,317],{"class":167},[155,64661,329],{"class":263},[155,64663,363],{"class":171},[155,64665,64666],{"class":157,"line":257},[155,64667,11193],{"class":161},[155,64669,64670,64672,64674,64676,64678,64680,64682,64684,64686,64688,64690,64692,64694,64696,64698,64700],{"class":157,"line":270},[155,64671,311],{"class":263},[155,64673,11200],{"class":171},[155,64675,317],{"class":167},[155,64677,320],{"class":171},[155,64679,324],{"class":323},[155,64681,317],{"class":167},[155,64683,11173],{"class":171},[155,64685,335],{"class":323},[155,64687,317],{"class":167},[155,64689,11217],{"class":171},[155,64691,1109],{"class":263},[155,64693,11222],{"class":171},[155,64695,345],{"class":323},[155,64697,317],{"class":167},[155,64699,329],{"class":263},[155,64701,363],{"class":171},[155,64703,64704,64706,64708,64710,64712,64714,64716,64718,64720,64722,64724,64726,64728,64730,64732,64734,64736,64738,64740,64742,64744,64746],{"class":157,"line":276},[155,64705,311],{"class":263},[155,64707,11237],{"class":171},[155,64709,317],{"class":167},[155,64711,320],{"class":171},[155,64713,324],{"class":323},[155,64715,317],{"class":167},[155,64717,11217],{"class":171},[155,64719,1109],{"class":263},[155,64721,11222],{"class":171},[155,64723,335],{"class":323},[155,64725,317],{"class":167},[155,64727,11217],{"class":171},[155,64729,329],{"class":263},[155,64731,11222],{"class":171},[155,64733,345],{"class":323},[155,64735,317],{"class":167},[155,64737,4444],{"class":263},[155,64739,332],{"class":171},[155,64741,355],{"class":323},[155,64743,317],{"class":167},[155,64745,329],{"class":263},[155,64747,363],{"class":171},[155,64749,64750],{"class":157,"line":297},[155,64751,11282],{"class":161},[155,64753,64754,64756,64758,64760,64762,64764,64766,64768,64770,64772,64774,64776,64778,64780,64782,64784],{"class":157,"line":302},[155,64755,311],{"class":263},[155,64757,11289],{"class":171},[155,64759,317],{"class":167},[155,64761,320],{"class":171},[155,64763,324],{"class":323},[155,64765,317],{"class":167},[155,64767,11173],{"class":171},[155,64769,335],{"class":323},[155,64771,317],{"class":167},[155,64773,11306],{"class":171},[155,64775,1109],{"class":263},[155,64777,11222],{"class":171},[155,64779,345],{"class":323},[155,64781,317],{"class":167},[155,64783,329],{"class":263},[155,64785,363],{"class":171},[155,64787,64788,64790,64792,64794,64796,64798,64800,64802,64804,64806,64808,64810,64812,64814,64816,64818,64820,64822,64824,64826,64828,64830],{"class":157,"line":308},[155,64789,311],{"class":263},[155,64791,11325],{"class":171},[155,64793,317],{"class":167},[155,64795,320],{"class":171},[155,64797,324],{"class":323},[155,64799,317],{"class":167},[155,64801,11306],{"class":171},[155,64803,1109],{"class":263},[155,64805,11222],{"class":171},[155,64807,335],{"class":323},[155,64809,317],{"class":167},[155,64811,11306],{"class":171},[155,64813,329],{"class":263},[155,64815,11222],{"class":171},[155,64817,345],{"class":323},[155,64819,317],{"class":167},[155,64821,350],{"class":263},[155,64823,332],{"class":171},[155,64825,355],{"class":323},[155,64827,317],{"class":167},[155,64829,360],{"class":263},[155,64831,363],{"class":171},[155,64833,64834],{"class":157,"line":366},[155,64835,11370],{"class":161},[155,64837,64838],{"class":157,"line":379},[155,64839,11375],{"class":161},[155,64841,64842,64844,64846,64848,64850,64852,64854,64856,64858,64860,64862,64864,64866,64868,64870,64872],{"class":157,"line":385},[155,64843,311],{"class":263},[155,64845,11382],{"class":171},[155,64847,317],{"class":167},[155,64849,4437],{"class":171},[155,64851,345],{"class":323},[155,64853,317],{"class":167},[155,64855,4444],{"class":263},[155,64857,332],{"class":171},[155,64859,406],{"class":323},[155,64861,317],{"class":167},[155,64863,329],{"class":263},[155,64865,332],{"class":171},[155,64867,355],{"class":323},[155,64869,317],{"class":167},[155,64871,329],{"class":263},[155,64873,363],{"class":171},[155,64875,64876,64878,64880,64882,64884,64886,64888,64890,64892,64894,64896,64898,64900,64902],{"class":157,"line":415},[155,64877,311],{"class":263},[155,64879,11417],{"class":171},[155,64881,317],{"class":167},[155,64883,320],{"class":171},[155,64885,324],{"class":323},[155,64887,317],{"class":167},[155,64889,11173],{"class":171},[155,64891,335],{"class":323},[155,64893,317],{"class":167},[155,64895,11434],{"class":171},[155,64897,345],{"class":323},[155,64899,317],{"class":167},[155,64901,329],{"class":263},[155,64903,363],{"class":171},[155,64905,64906],{"class":157,"line":452},[155,64907,217],{"emptyLinePlaceholder":216},[155,64909,64910,64912,64914],{"class":157,"line":480},[155,64911,260],{"class":167},[155,64913,586],{"class":226},[155,64915,589],{"class":171},[155,64917,64918,64920,64922,64924,64926,64928],{"class":157,"line":486},[155,64919,11459],{"class":171},[155,64921,317],{"class":167},[155,64923,285],{"class":263},[155,64925,4793],{"class":171},[155,64927,285],{"class":263},[155,64929,11470],{"class":171},[155,64931,64932,64934,64936,64938,64940,64942,64944,64946,64948,64950],{"class":157,"line":499},[155,64933,11475],{"class":171},[155,64935,317],{"class":167},[155,64937,285],{"class":263},[155,64939,4793],{"class":171},[155,64941,285],{"class":263},[155,64943,11486],{"class":171},[155,64945,285],{"class":263},[155,64947,4793],{"class":171},[155,64949,285],{"class":263},[155,64951,11495],{"class":171},[155,64953,64954,64956,64958,64960,64962,64964,64966,64968,64970,64972],{"class":157,"line":505},[155,64955,11500],{"class":171},[155,64957,317],{"class":167},[155,64959,285],{"class":263},[155,64961,4793],{"class":171},[155,64963,285],{"class":263},[155,64965,11511],{"class":171},[155,64967,285],{"class":263},[155,64969,4793],{"class":171},[155,64971,285],{"class":263},[155,64973,11520],{"class":171},[155,64975,64976,64978,64980,64982,64984,64986,64988,64990],{"class":157,"line":528},[155,64977,11525],{"class":171},[155,64979,317],{"class":167},[155,64981,285],{"class":263},[155,64983,4793],{"class":171},[155,64985,285],{"class":263},[155,64987,11536],{"class":171},[155,64989,285],{"class":263},[155,64991,11541],{"class":171},[155,64993,64994],{"class":157,"line":549},[155,64995,11546],{"class":161},[155,64997,64998,65000,65002,65004,65006,65008],{"class":157,"line":570},[155,64999,709],{"class":167},[155,65001,11553],{"class":171},[155,65003,2277],{"class":323},[155,65005,317],{"class":167},[155,65007,329],{"class":263},[155,65009,363],{"class":171},[155,65011,65012],{"class":157,"line":575},[155,65013,217],{"emptyLinePlaceholder":216},[155,65015,65016],{"class":157,"line":581},[155,65017,11574],{"class":161},[155,65019,65020,65022,65024,65026,65028,65030,65032],{"class":157,"line":592},[155,65021,223],{"class":167},[155,65023,11581],{"class":226},[155,65025,230],{"class":171},[155,65027,233],{"class":226},[155,65029,236],{"class":171},[155,65031,239],{"class":226},[155,65033,242],{"class":171},[155,65035,65036],{"class":157,"line":610},[155,65037,11596],{"class":161},[155,65039,65040,65042,65044],{"class":157,"line":622},[155,65041,260],{"class":167},[155,65043,264],{"class":263},[155,65045,11605],{"class":171},[155,65047,65048,65050,65052,65054,65056,65058],{"class":157,"line":638},[155,65049,279],{"class":263},[155,65051,11612],{"class":171},[155,65053,285],{"class":263},[155,65055,288],{"class":171},[155,65057,291],{"class":263},[155,65059,294],{"class":171},[155,65061,65062,65064,65066,65068],{"class":157,"line":650},[155,65063,311],{"class":263},[155,65065,11627],{"class":171},[155,65067,317],{"class":167},[155,65069,7619],{"class":171},[155,65071,65072,65074,65076,65078,65080,65082,65084,65086,65088,65090,65092,65094,65096,65098,65100,65102,65104,65106,65108,65110,65112],{"class":157,"line":662},[155,65073,7624],{"class":171},[155,65075,324],{"class":323},[155,65077,317],{"class":167},[155,65079,4444],{"class":263},[155,65081,332],{"class":171},[155,65083,335],{"class":323},[155,65085,317],{"class":167},[155,65087,1076],{"class":263},[155,65089,332],{"class":171},[155,65091,345],{"class":323},[155,65093,317],{"class":167},[155,65095,8408],{"class":263},[155,65097,332],{"class":171},[155,65099,406],{"class":323},[155,65101,317],{"class":167},[155,65103,360],{"class":263},[155,65105,332],{"class":171},[155,65107,355],{"class":323},[155,65109,317],{"class":167},[155,65111,4444],{"class":263},[155,65113,7657],{"class":171},[155,65115,65116],{"class":157,"line":678},[155,65117,7662],{"class":171},[155,65119,65120,65122,65124,65126,65128,65130,65132,65134,65136,65138,65140,65142,65144],{"class":157,"line":694},[155,65121,7707],{"class":171},[155,65123,345],{"class":323},[155,65125,317],{"class":167},[155,65127,4444],{"class":263},[155,65129,332],{"class":171},[155,65131,406],{"class":323},[155,65133,317],{"class":167},[155,65135,360],{"class":263},[155,65137,332],{"class":171},[155,65139,355],{"class":323},[155,65141,317],{"class":167},[155,65143,329],{"class":263},[155,65145,363],{"class":171},[155,65147,65148],{"class":157,"line":706},[155,65149,7736],{"class":171},[155,65151,65152,65154,65156,65158],{"class":157,"line":715},[155,65153,311],{"class":263},[155,65155,11718],{"class":171},[155,65157,317],{"class":167},[155,65159,7619],{"class":171},[155,65161,65162,65164,65166,65168,65170,65172,65174,65176,65178,65180,65182,65184,65186],{"class":157,"line":720},[155,65163,7624],{"class":171},[155,65165,324],{"class":323},[155,65167,317],{"class":167},[155,65169,1076],{"class":263},[155,65171,332],{"class":171},[155,65173,335],{"class":323},[155,65175,317],{"class":167},[155,65177,1076],{"class":263},[155,65179,332],{"class":171},[155,65181,345],{"class":323},[155,65183,317],{"class":167},[155,65185,329],{"class":263},[155,65187,7657],{"class":171},[155,65189,65190],{"class":157,"line":739},[155,65191,7662],{"class":171},[155,65193,65194,65196,65198,65200,65202,65204,65206,65208,65210,65212,65214,65216,65218,65220,65222,65224,65226],{"class":157,"line":745},[155,65195,7624],{"class":171},[155,65197,324],{"class":323},[155,65199,317],{"class":167},[155,65201,1076],{"class":263},[155,65203,332],{"class":171},[155,65205,335],{"class":323},[155,65207,317],{"class":167},[155,65209,11773],{"class":263},[155,65211,332],{"class":171},[155,65213,345],{"class":323},[155,65215,317],{"class":167},[155,65217,4444],{"class":263},[155,65219,332],{"class":171},[155,65221,355],{"class":323},[155,65223,317],{"class":167},[155,65225,329],{"class":263},[155,65227,7657],{"class":171},[155,65229,65230],{"class":157,"line":773},[155,65231,7662],{"class":171},[155,65233,65234,65236,65238,65240,65242,65244,65246,65248,65250,65252,65254,65256,65258],{"class":157,"line":779},[155,65235,7707],{"class":171},[155,65237,345],{"class":323},[155,65239,317],{"class":167},[155,65241,4444],{"class":263},[155,65243,332],{"class":171},[155,65245,406],{"class":323},[155,65247,317],{"class":167},[155,65249,360],{"class":263},[155,65251,332],{"class":171},[155,65253,355],{"class":323},[155,65255,317],{"class":167},[155,65257,329],{"class":263},[155,65259,363],{"class":171},[155,65261,65262],{"class":157,"line":785},[155,65263,7736],{"class":171},[155,65265,65266,65268,65270,65272],{"class":157,"line":791},[155,65267,311],{"class":263},[155,65269,11834],{"class":171},[155,65271,317],{"class":167},[155,65273,7619],{"class":171},[155,65275,65276,65278,65280,65282,65284,65286,65288,65290,65292,65294,65296,65298,65300,65302,65304],{"class":157,"line":796},[155,65277,11843],{"class":171},[155,65279,11773],{"class":263},[155,65281,332],{"class":171},[155,65283,1076],{"class":263},[155,65285,11852],{"class":171},[155,65287,4407],{"class":263},[155,65289,332],{"class":171},[155,65291,1608],{"class":263},[155,65293,11861],{"class":171},[155,65295,439],{"class":263},[155,65297,332],{"class":171},[155,65299,11868],{"class":263},[155,65301,11871],{"class":171},[155,65303,11868],{"class":263},[155,65305,7657],{"class":171},[155,65307,65308,65310,65312,65314,65316,65318,65320,65322,65324,65326,65328,65330,65332,65334,65336],{"class":157,"line":802},[155,65309,11843],{"class":171},[155,65311,4479],{"class":263},[155,65313,332],{"class":171},[155,65315,1608],{"class":263},[155,65317,11852],{"class":171},[155,65319,1608],{"class":263},[155,65321,332],{"class":171},[155,65323,11773],{"class":263},[155,65325,11861],{"class":171},[155,65327,11868],{"class":263},[155,65329,332],{"class":171},[155,65331,4407],{"class":263},[155,65333,11871],{"class":171},[155,65335,1076],{"class":263},[155,65337,7657],{"class":171},[155,65339,65340,65342,65344,65346,65348,65350,65352,65354,65356,65358,65360,65362,65364],{"class":157,"line":808},[155,65341,7707],{"class":171},[155,65343,345],{"class":323},[155,65345,317],{"class":167},[155,65347,4444],{"class":263},[155,65349,332],{"class":171},[155,65351,406],{"class":323},[155,65353,317],{"class":167},[155,65355,360],{"class":263},[155,65357,332],{"class":171},[155,65359,355],{"class":323},[155,65361,317],{"class":167},[155,65363,329],{"class":263},[155,65365,363],{"class":171},[155,65367,65368],{"class":157,"line":819},[155,65369,7736],{"class":171},[155,65371,65372,65374,65376,65378],{"class":157,"line":1832},[155,65373,311],{"class":263},[155,65375,11946],{"class":171},[155,65377,317],{"class":167},[155,65379,7619],{"class":171},[155,65381,65382,65384,65386,65388,65390,65392,65394,65396,65398,65400,65402,65404,65406,65408,65410],{"class":157,"line":1838},[155,65383,11843],{"class":171},[155,65385,11957],{"class":263},[155,65387,332],{"class":171},[155,65389,11773],{"class":263},[155,65391,11852],{"class":171},[155,65393,4407],{"class":263},[155,65395,332],{"class":171},[155,65397,11970],{"class":263},[155,65399,11861],{"class":171},[155,65401,439],{"class":263},[155,65403,332],{"class":171},[155,65405,11979],{"class":263},[155,65407,11871],{"class":171},[155,65409,1076],{"class":263},[155,65411,7657],{"class":171},[155,65413,65414,65416,65418,65420,65422,65424,65426,65428,65430,65432,65434,65436,65438,65440,65442],{"class":157,"line":1844},[155,65415,11843],{"class":171},[155,65417,8067],{"class":263},[155,65419,332],{"class":171},[155,65421,11996],{"class":263},[155,65423,11852],{"class":171},[155,65425,12001],{"class":263},[155,65427,332],{"class":171},[155,65429,1025],{"class":263},[155,65431,11861],{"class":171},[155,65433,12010],{"class":263},[155,65435,332],{"class":171},[155,65437,1076],{"class":263},[155,65439,11871],{"class":171},[155,65441,1076],{"class":263},[155,65443,7657],{"class":171},[155,65445,65446,65448,65450,65452,65454,65456,65458,65460,65462,65464,65466,65468,65470,65472,65474],{"class":157,"line":1850},[155,65447,11843],{"class":171},[155,65449,8067],{"class":263},[155,65451,332],{"class":171},[155,65453,1608],{"class":263},[155,65455,11852],{"class":171},[155,65457,1608],{"class":263},[155,65459,332],{"class":171},[155,65461,4479],{"class":263},[155,65463,11861],{"class":171},[155,65465,12010],{"class":263},[155,65467,332],{"class":171},[155,65469,1076],{"class":263},[155,65471,11871],{"class":171},[155,65473,1076],{"class":263},[155,65475,7657],{"class":171},[155,65477,65478,65480,65482,65484,65486,65488,65490,65492,65494,65496,65498,65500,65502,65504,65506],{"class":157,"line":1861},[155,65479,11843],{"class":171},[155,65481,8067],{"class":263},[155,65483,332],{"class":171},[155,65485,12001],{"class":263},[155,65487,11852],{"class":171},[155,65489,1608],{"class":263},[155,65491,332],{"class":171},[155,65493,12071],{"class":263},[155,65495,11861],{"class":171},[155,65497,11868],{"class":263},[155,65499,332],{"class":171},[155,65501,1076],{"class":263},[155,65503,11871],{"class":171},[155,65505,1076],{"class":263},[155,65507,7657],{"class":171},[155,65509,65510,65512,65514,65516,65518,65520,65522,65524,65526,65528,65530,65532,65534,65536,65538],{"class":157,"line":1866},[155,65511,11843],{"class":171},[155,65513,12092],{"class":263},[155,65515,332],{"class":171},[155,65517,4479],{"class":263},[155,65519,11852],{"class":171},[155,65521,11996],{"class":263},[155,65523,332],{"class":171},[155,65525,12105],{"class":263},[155,65527,11861],{"class":171},[155,65529,11868],{"class":263},[155,65531,332],{"class":171},[155,65533,1608],{"class":263},[155,65535,11871],{"class":171},[155,65537,1608],{"class":263},[155,65539,7657],{"class":171},[155,65541,65542,65544,65546,65548,65550,65552,65554,65556,65558,65560,65562,65564,65566],{"class":157,"line":1871},[155,65543,7707],{"class":171},[155,65545,345],{"class":323},[155,65547,317],{"class":167},[155,65549,4444],{"class":263},[155,65551,332],{"class":171},[155,65553,406],{"class":323},[155,65555,317],{"class":167},[155,65557,360],{"class":263},[155,65559,332],{"class":171},[155,65561,355],{"class":323},[155,65563,317],{"class":167},[155,65565,329],{"class":263},[155,65567,363],{"class":171},[155,65569,65570],{"class":157,"line":1877},[155,65571,7736],{"class":171},[155,65573,65574,65576,65578,65580],{"class":157,"line":1883},[155,65575,311],{"class":263},[155,65577,12158],{"class":171},[155,65579,317],{"class":167},[155,65581,7619],{"class":171},[155,65583,65584,65586,65588,65590,65592,65594,65596,65598,65600,65602,65604,65606,65608,65610,65612],{"class":157,"line":1894},[155,65585,11843],{"class":171},[155,65587,12169],{"class":263},[155,65589,332],{"class":171},[155,65591,4479],{"class":263},[155,65593,11852],{"class":171},[155,65595,11996],{"class":263},[155,65597,332],{"class":171},[155,65599,12105],{"class":263},[155,65601,11861],{"class":171},[155,65603,11868],{"class":263},[155,65605,332],{"class":171},[155,65607,1608],{"class":263},[155,65609,11871],{"class":171},[155,65611,1608],{"class":263},[155,65613,7657],{"class":171},[155,65615,65616,65618,65620,65622,65624,65626,65628,65630,65632,65634,65636,65638,65640,65642,65644],{"class":157,"line":1900},[155,65617,11843],{"class":171},[155,65619,12169],{"class":263},[155,65621,332],{"class":171},[155,65623,4549],{"class":263},[155,65625,11852],{"class":171},[155,65627,11773],{"class":263},[155,65629,332],{"class":171},[155,65631,4549],{"class":263},[155,65633,11861],{"class":171},[155,65635,11979],{"class":263},[155,65637,332],{"class":171},[155,65639,1608],{"class":263},[155,65641,11871],{"class":171},[155,65643,1608],{"class":263},[155,65645,7657],{"class":171},[155,65647,65648,65650,65652,65654,65656],{"class":157,"line":1911},[155,65649,12232],{"class":171},[155,65651,329],{"class":263},[155,65653,332],{"class":171},[155,65655,329],{"class":263},[155,65657,12241],{"class":171},[155,65659,65660],{"class":157,"line":1917},[155,65661,8400],{"class":171},[155,65663,65664,65666,65668,65670,65672],{"class":157,"line":1927},[155,65665,8405],{"class":171},[155,65667,12252],{"class":263},[155,65669,332],{"class":171},[155,65671,360],{"class":263},[155,65673,363],{"class":171},[155,65675,65676],{"class":157,"line":1933},[155,65677,7736],{"class":171},[155,65679,65680],{"class":157,"line":1943},[155,65681,12267],{"class":161},[155,65683,65684,65686,65688,65690,65692],{"class":157,"line":1949},[155,65685,2179],{"class":167},[155,65687,8479],{"class":171},[155,65689,1131],{"class":167},[155,65691,8484],{"class":263},[155,65693,8487],{"class":171},[155,65695,65696,65698,65700],{"class":157,"line":1959},[155,65697,8497],{"class":167},[155,65699,8500],{"class":263},[155,65701,8503],{"class":171},[155,65703,65704,65706,65708,65710,65712,65714,65716,65718,65720],{"class":157,"line":1964},[155,65705,8513],{"class":171},[155,65707,12294],{"class":323},[155,65709,317],{"class":167},[155,65711,12299],{"class":732},[155,65713,332],{"class":171},[155,65715,8516],{"class":323},[155,65717,317],{"class":167},[155,65719,8521],{"class":732},[155,65721,363],{"class":171},[155,65723,65724],{"class":157,"line":1970},[155,65725,12314],{"class":161},[155,65727,65728],{"class":157,"line":1981},[155,65729,12319],{"class":161},[155,65731,65732],{"class":157,"line":1986},[155,65733,12324],{"class":161},[155,65735,65736],{"class":157,"line":1991},[155,65737,12329],{"class":161},[155,65739,65740],{"class":157,"line":1997},[155,65741,12334],{"class":161},[155,65743,65744],{"class":157,"line":2014},[155,65745,12339],{"class":161},[155,65747,65748,65750,65752,65754,65756,65758],{"class":157,"line":2046},[155,65749,8533],{"class":167},[155,65751,8536],{"class":171},[155,65753,8539],{"class":167},[155,65755,8542],{"class":167},[155,65757,8545],{"class":263},[155,65759,736],{"class":171},[155,65761,65762,65764,65766],{"class":157,"line":2062},[155,65763,8557],{"class":171},[155,65765,1109],{"class":263},[155,65767,363],{"class":171},[155,65769,65770,65772,65774],{"class":157,"line":2067},[155,65771,12366],{"class":167},[155,65773,8500],{"class":263},[155,65775,8576],{"class":171},[155,65777,65778,65780,65782,65784,65786],{"class":157,"line":2073},[155,65779,12375],{"class":171},[155,65781,1109],{"class":263},[155,65783,332],{"class":171},[155,65785,8598],{"class":263},[155,65787,363],{"class":171},[155,65789,65790,65792,65794,65796,65798,65800],{"class":157,"line":2079},[155,65791,12388],{"class":167},[155,65793,8536],{"class":171},[155,65795,8539],{"class":167},[155,65797,8542],{"class":167},[155,65799,8545],{"class":263},[155,65801,736],{"class":171},[155,65803,65804,65806,65808],{"class":157,"line":2089},[155,65805,12403],{"class":171},[155,65807,1109],{"class":263},[155,65809,363],{"class":171},[155,65811,65812],{"class":157,"line":2095},[155,65813,4774],{"class":161},[155,65815,65816,65818,65820],{"class":157,"line":2106},[155,65817,260],{"class":167},[155,65819,586],{"class":226},[155,65821,589],{"class":171},[155,65823,65824,65826,65828,65830],{"class":157,"line":2112},[155,65825,595],{"class":171},[155,65827,317],{"class":167},[155,65829,285],{"class":263},[155,65831,12430],{"class":171},[155,65833,65834,65836,65838,65840],{"class":157,"line":2122},[155,65835,595],{"class":171},[155,65837,317],{"class":167},[155,65839,285],{"class":263},[155,65841,12441],{"class":171},[155,65843,65844,65846,65848,65850],{"class":157,"line":2128},[155,65845,595],{"class":171},[155,65847,317],{"class":167},[155,65849,285],{"class":263},[155,65851,12452],{"class":171},[155,65853,65854,65856,65858,65860],{"class":157,"line":2138},[155,65855,595],{"class":171},[155,65857,317],{"class":167},[155,65859,285],{"class":263},[155,65861,12463],{"class":171},[155,65863,65864,65866,65868,65870],{"class":157,"line":2144},[155,65865,595],{"class":171},[155,65867,317],{"class":167},[155,65869,285],{"class":263},[155,65871,12474],{"class":171},[155,65873,65874,65876],{"class":157,"line":2154},[155,65875,709],{"class":167},[155,65877,712],{"class":171},[155,65879,65880],{"class":157,"line":2160},[155,65881,217],{"emptyLinePlaceholder":216},[155,65883,65884],{"class":157,"line":2170},[155,65885,12489],{"class":161},[155,65887,65888,65890,65892,65894,65896],{"class":157,"line":2176},[155,65889,723],{"class":167},[155,65891,726],{"class":263},[155,65893,729],{"class":167},[155,65895,733],{"class":732},[155,65897,736],{"class":171},[155,65899,65900,65902,65904,65906,65908,65910,65912,65914,65916],{"class":157,"line":2191},[155,65901,748],{"class":171},[155,65903,317],{"class":167},[155,65905,753],{"class":171},[155,65907,756],{"class":732},[155,65909,759],{"class":167},[155,65911,762],{"class":171},[155,65913,765],{"class":167},[155,65915,768],{"class":732},[155,65917,363],{"class":171},[155,65919,65920,65922,65924],{"class":157,"line":2197},[155,65921,811],{"class":171},[155,65923,317],{"class":167},[155,65925,12530],{"class":171},[155,65927,65928,65930,65932,65934,65936,65938,65940,65942],{"class":157,"line":2208},[155,65929,822],{"class":263},[155,65931,825],{"class":171},[155,65933,329],{"class":263},[155,65935,332],{"class":171},[155,65937,1025],{"class":263},[155,65939,332],{"class":171},[155,65941,1025],{"class":263},[155,65943,839],{"class":171},[19,65945,16869],{"id":16868},[24,65947,16872],{},[146,65949,65950],{"className":148,"code":16875,"language":150,"meta":39,"style":39},[152,65951,65952,65956,65966,65970,65976,65980,65990,65994,65998,66006,66010,66014,66022,66036,66040,66044,66054,66064,66088,66096,66104,66112,66116,66120,66132,66136,66140,66144,66148,66156,66160,66182,66186,66190,66202,66206,66218,66222,66226,66230,66234,66238,66242,66252,66262,66284,66292,66300,66308,66312,66324,66328,66332,66336,66340,66346,66362,66384,66390,66402,66406,66410,66414,66426,66430,66440],{"__ignoreMap":39},[155,65953,65954],{"class":157,"line":158},[155,65955,16882],{"class":161},[155,65957,65958,65960,65962,65964],{"class":157,"line":46},[155,65959,183],{"class":167},[155,65961,16889],{"class":263},[155,65963,16892],{"class":167},[155,65965,16895],{"class":171},[155,65967,65968],{"class":157,"line":121},[155,65969,16900],{"class":161},[155,65971,65972,65974],{"class":157,"line":180},[155,65973,168],{"class":167},[155,65975,14925],{"class":171},[155,65977,65978],{"class":157,"line":194},[155,65979,16911],{"class":161},[155,65981,65982,65984,65986,65988],{"class":157,"line":200},[155,65983,168],{"class":167},[155,65985,904],{"class":171},[155,65987,907],{"class":167},[155,65989,910],{"class":171},[155,65991,65992],{"class":157,"line":213},[155,65993,217],{"emptyLinePlaceholder":216},[155,65995,65996],{"class":157,"line":220},[155,65997,16930],{"class":161},[155,65999,66000,66002,66004],{"class":157,"line":245},[155,66001,16935],{"class":171},[155,66003,317],{"class":167},[155,66005,16940],{"class":732},[155,66007,66008],{"class":157,"line":251},[155,66009,217],{"emptyLinePlaceholder":216},[155,66011,66012],{"class":157,"line":257},[155,66013,16949],{"class":161},[155,66015,66016,66018,66020],{"class":157,"line":270},[155,66017,16954],{"class":171},[155,66019,317],{"class":167},[155,66021,16959],{"class":263},[155,66023,66024,66026,66028,66030,66032,66034],{"class":157,"line":276},[155,66025,16964],{"class":171},[155,66027,317],{"class":167},[155,66029,16969],{"class":171},[155,66031,4444],{"class":263},[155,66033,15433],{"class":171},[155,66035,16976],{"class":161},[155,66037,66038],{"class":157,"line":297},[155,66039,217],{"emptyLinePlaceholder":216},[155,66041,66042],{"class":157,"line":302},[155,66043,16985],{"class":161},[155,66045,66046,66048,66050,66052],{"class":157,"line":308},[155,66047,1125],{"class":167},[155,66049,16992],{"class":171},[155,66051,1131],{"class":167},[155,66053,16997],{"class":171},[155,66055,66056,66058,66060,66062],{"class":157,"line":366},[155,66057,2000],{"class":167},[155,66059,17004],{"class":171},[155,66061,1131],{"class":167},[155,66063,17009],{"class":171},[155,66065,66066,66068,66070,66072,66074,66076,66078,66080,66082,66084,66086],{"class":157,"line":379},[155,66067,2803],{"class":167},[155,66069,17016],{"class":171},[155,66071,17019],{"class":732},[155,66073,7589],{"class":171},[155,66075,17024],{"class":732},[155,66077,7589],{"class":171},[155,66079,17029],{"class":732},[155,66081,7589],{"class":171},[155,66083,17034],{"class":732},[155,66085,17037],{"class":171},[155,66087,17040],{"class":161},[155,66089,66090,66092,66094],{"class":157,"line":385},[155,66091,15296],{"class":171},[155,66093,317],{"class":167},[155,66095,17049],{"class":171},[155,66097,66098,66100,66102],{"class":157,"line":415},[155,66099,17054],{"class":171},[155,66101,317],{"class":167},[155,66103,17059],{"class":171},[155,66105,66106,66108,66110],{"class":157,"line":452},[155,66107,17064],{"class":171},[155,66109,317],{"class":167},[155,66111,17069],{"class":171},[155,66113,66114],{"class":157,"line":480},[155,66115,217],{"emptyLinePlaceholder":216},[155,66117,66118],{"class":157,"line":486},[155,66119,17078],{"class":161},[155,66121,66122,66124,66126,66128,66130],{"class":157,"line":499},[155,66123,17083],{"class":171},[155,66125,317],{"class":167},[155,66127,17088],{"class":171},[155,66129,2028],{"class":167},[155,66131,17093],{"class":263},[155,66133,66134],{"class":157,"line":505},[155,66135,217],{"emptyLinePlaceholder":216},[155,66137,66138],{"class":157,"line":528},[155,66139,17102],{"class":161},[155,66141,66142],{"class":157,"line":549},[155,66143,17107],{"class":161},[155,66145,66146],{"class":157,"line":570},[155,66147,17112],{"class":161},[155,66149,66150,66152,66154],{"class":157,"line":575},[155,66151,17117],{"class":171},[155,66153,2351],{"class":167},[155,66155,17122],{"class":171},[155,66157,66158],{"class":157,"line":581},[155,66159,17127],{"class":161},[155,66161,66162,66164,66166,66168,66170,66172,66174,66176,66178,66180],{"class":157,"line":592},[155,66163,17132],{"class":171},[155,66165,2351],{"class":167},[155,66167,17137],{"class":171},[155,66169,17140],{"class":323},[155,66171,317],{"class":167},[155,66173,230],{"class":171},[155,66175,1109],{"class":263},[155,66177,7589],{"class":171},[155,66179,329],{"class":263},[155,66181,1238],{"class":171},[155,66183,66184],{"class":157,"line":610},[155,66185,217],{"emptyLinePlaceholder":216},[155,66187,66188],{"class":157,"line":622},[155,66189,17161],{"class":161},[155,66191,66192,66194,66196,66198,66200],{"class":157,"line":638},[155,66193,17166],{"class":171},[155,66195,317],{"class":167},[155,66197,17171],{"class":171},[155,66199,2028],{"class":167},[155,66201,17176],{"class":171},[155,66203,66204],{"class":157,"line":650},[155,66205,217],{"emptyLinePlaceholder":216},[155,66207,66208,66210,66212,66214,66216],{"class":157,"line":662},[155,66209,17185],{"class":171},[155,66211,317],{"class":167},[155,66213,16969],{"class":171},[155,66215,4444],{"class":263},[155,66217,363],{"class":171},[155,66219,66220],{"class":157,"line":678},[155,66221,217],{"emptyLinePlaceholder":216},[155,66223,66224],{"class":157,"line":694},[155,66225,17202],{"class":161},[155,66227,66228],{"class":157,"line":706},[155,66229,17207],{"class":161},[155,66231,66232],{"class":157,"line":715},[155,66233,17212],{"class":161},[155,66235,66236],{"class":157,"line":720},[155,66237,17217],{"class":161},[155,66239,66240],{"class":157,"line":739},[155,66241,17222],{"class":161},[155,66243,66244,66246,66248,66250],{"class":157,"line":745},[155,66245,1125],{"class":167},[155,66247,16992],{"class":171},[155,66249,1131],{"class":167},[155,66251,16997],{"class":171},[155,66253,66254,66256,66258,66260],{"class":157,"line":773},[155,66255,2000],{"class":167},[155,66257,17004],{"class":171},[155,66259,1131],{"class":167},[155,66261,17009],{"class":171},[155,66263,66264,66266,66268,66270,66272,66274,66276,66278,66280,66282],{"class":157,"line":779},[155,66265,2803],{"class":167},[155,66267,17016],{"class":171},[155,66269,17019],{"class":732},[155,66271,7589],{"class":171},[155,66273,17024],{"class":732},[155,66275,7589],{"class":171},[155,66277,17029],{"class":732},[155,66279,7589],{"class":171},[155,66281,17034],{"class":732},[155,66283,17265],{"class":171},[155,66285,66286,66288,66290],{"class":157,"line":785},[155,66287,15296],{"class":171},[155,66289,317],{"class":167},[155,66291,17049],{"class":171},[155,66293,66294,66296,66298],{"class":157,"line":791},[155,66295,17054],{"class":171},[155,66297,317],{"class":167},[155,66299,17059],{"class":171},[155,66301,66302,66304,66306],{"class":157,"line":796},[155,66303,17064],{"class":171},[155,66305,317],{"class":167},[155,66307,17069],{"class":171},[155,66309,66310],{"class":157,"line":802},[155,66311,17078],{"class":161},[155,66313,66314,66316,66318,66320,66322],{"class":157,"line":808},[155,66315,17083],{"class":171},[155,66317,317],{"class":167},[155,66319,17088],{"class":171},[155,66321,2028],{"class":167},[155,66323,17093],{"class":263},[155,66325,66326],{"class":157,"line":819},[155,66327,17107],{"class":161},[155,66329,66330],{"class":157,"line":1832},[155,66331,17314],{"class":161},[155,66333,66334],{"class":157,"line":1838},[155,66335,17102],{"class":161},[155,66337,66338],{"class":157,"line":1844},[155,66339,217],{"emptyLinePlaceholder":216},[155,66341,66342,66344],{"class":157,"line":1850},[155,66343,17327],{"class":167},[155,66345,736],{"class":171},[155,66347,66348,66350,66352,66354,66356,66358,66360],{"class":157,"line":1861},[155,66349,17334],{"class":171},[155,66351,317],{"class":167},[155,66353,17339],{"class":171},[155,66355,2039],{"class":167},[155,66357,17344],{"class":171},[155,66359,17347],{"class":167},[155,66361,17350],{"class":263},[155,66363,66364,66366,66368,66370,66372,66374,66376,66378,66380,66382],{"class":157,"line":1866},[155,66365,17355],{"class":171},[155,66367,2351],{"class":167},[155,66369,17360],{"class":171},[155,66371,17140],{"class":323},[155,66373,317],{"class":167},[155,66375,230],{"class":171},[155,66377,1109],{"class":263},[155,66379,7589],{"class":171},[155,66381,329],{"class":263},[155,66383,1238],{"class":171},[155,66385,66386,66388],{"class":157,"line":1871},[155,66387,17379],{"class":167},[155,66389,736],{"class":171},[155,66391,66392,66394,66396,66398,66400],{"class":157,"line":1877},[155,66393,17386],{"class":263},[155,66395,230],{"class":171},[155,66397,17391],{"class":167},[155,66399,17394],{"class":732},[155,66401,363],{"class":171},[155,66403,66404],{"class":157,"line":1883},[155,66405,17401],{"class":161},[155,66407,66408],{"class":157,"line":1894},[155,66409,17406],{"class":161},[155,66411,66412],{"class":157,"line":1900},[155,66413,217],{"emptyLinePlaceholder":216},[155,66415,66416,66418,66420,66422,66424],{"class":157,"line":1911},[155,66417,17415],{"class":171},[155,66419,317],{"class":167},[155,66421,17420],{"class":171},[155,66423,2028],{"class":167},[155,66425,17176],{"class":171},[155,66427,66428],{"class":157,"line":1917},[155,66429,217],{"emptyLinePlaceholder":216},[155,66431,66432,66434,66436,66438],{"class":157,"line":1927},[155,66433,15451],{"class":263},[155,66435,230],{"class":171},[155,66437,17437],{"class":732},[155,66439,17440],{"class":171},[155,66441,66442,66444,66446,66448],{"class":157,"line":1933},[155,66443,15451],{"class":263},[155,66445,230],{"class":171},[155,66447,17449],{"class":732},[155,66449,17452],{"class":171},[146,66451,66452],{"className":148,"code":17455,"language":150,"meta":39,"style":39},[152,66453,66454,66460,66466,66476,66482,66492,66504,66514,66524,66534,66538,66548,66558,66562,66566,66574,66578,66582,66598,66602,66606,66610,66614,66618,66650,66654,66662,66666,66678,66682,66686,66690,66694,66698,66702,66706,66710,66728,66732,66764,66778,66788,66798,66802,66812,66826,66836,66846,66856,66862,66866,66870,66874,66878,66882,66890,66910,66914,66918,66922,66926,66942,66946,66950,66958,66962,66966,66974,66978,66982,66986,66994,66998,67002,67006,67014,67018,67026,67030,67038,67042,67050,67054,67062,67066,67070,67078,67082,67086,67098,67122,67136,67140,67144,67148,67156,67160,67168,67172,67180,67184,67192,67196,67204,67208,67216,67220,67232,67236,67244,67248,67256,67260,67264,67268,67272,67280,67284,67300,67304,67312,67316,67320,67324,67328,67332,67336,67340,67356,67360,67372,67376,67388,67392,67404,67408,67416,67420,67428,67432,67436,67440,67446,67450,67458,67462,67478,67482,67490,67494,67510,67522,67526,67538,67542,67546,67554,67558,67562,67570,67574,67582,67586,67594,67598,67602,67644,67686,67690,67694,67710,67714,67730,67734,67738,67746,67750,67754,67766,67804,67808,67812,67820,67824,67838,67848,67854,67860,67866,67872,67876,67880,67886,67890,67894,67902,67906,67924,67928,67932,67936,67952,67956,67960,67964,67968,67972,67992,68012,68016,68020,68024,68032,68040,68044,68060,68080,68100,68104,68108,68116,68124,68128,68132,68136,68148,68152,68160,68168,68184],{"__ignoreMap":39},[155,66455,66456,66458],{"class":157,"line":158},[155,66457,168],{"class":167},[155,66459,1359],{"class":171},[155,66461,66462,66464],{"class":157,"line":46},[155,66463,168],{"class":167},[155,66465,1366],{"class":171},[155,66467,66468,66470,66472,66474],{"class":157,"line":121},[155,66469,168],{"class":167},[155,66471,1377],{"class":171},[155,66473,907],{"class":167},[155,66475,1382],{"class":171},[155,66477,66478,66480],{"class":157,"line":180},[155,66479,168],{"class":167},[155,66481,172],{"class":171},[155,66483,66484,66486,66488,66490],{"class":157,"line":194},[155,66485,183],{"class":167},[155,66487,939],{"class":171},[155,66489,168],{"class":167},[155,66491,1399],{"class":171},[155,66493,66494,66496,66498,66500,66502],{"class":157,"line":200},[155,66495,183],{"class":167},[155,66497,892],{"class":171},[155,66499,168],{"class":167},[155,66501,17506],{"class":171},[155,66503,17509],{"class":161},[155,66505,66506,66508,66510,66512],{"class":157,"line":213},[155,66507,183],{"class":167},[155,66509,922],{"class":171},[155,66511,168],{"class":167},[155,66513,927],{"class":171},[155,66515,66516,66518,66520,66522],{"class":157,"line":220},[155,66517,168],{"class":167},[155,66519,939],{"class":171},[155,66521,907],{"class":167},[155,66523,944],{"class":171},[155,66525,66526,66528,66530,66532],{"class":157,"line":245},[155,66527,168],{"class":167},[155,66529,956],{"class":171},[155,66531,907],{"class":167},[155,66533,961],{"class":171},[155,66535,66536],{"class":157,"line":251},[155,66537,1444],{"class":161},[155,66539,66540,66542,66544,66546],{"class":157,"line":257},[155,66541,183],{"class":167},[155,66543,1451],{"class":171},[155,66545,168],{"class":167},[155,66547,12650],{"class":171},[155,66549,66550,66552,66554,66556],{"class":157,"line":270},[155,66551,183],{"class":167},[155,66553,186],{"class":171},[155,66555,168],{"class":167},[155,66557,191],{"class":171},[155,66559,66560],{"class":157,"line":276},[155,66561,217],{"emptyLinePlaceholder":216},[155,66563,66564],{"class":157,"line":297},[155,66565,1479],{"class":161},[155,66567,66568,66570,66572],{"class":157,"line":302},[155,66569,1484],{"class":167},[155,66571,1487],{"class":226},[155,66573,1490],{"class":171},[155,66575,66576],{"class":157,"line":308},[155,66577,17584],{"class":161},[155,66579,66580],{"class":157,"line":366},[155,66581,17589],{"class":161},[155,66583,66584,66586,66588,66590,66592,66594,66596],{"class":157,"line":379},[155,66585,17594],{"class":263},[155,66587,317],{"class":167},[155,66589,17599],{"class":167},[155,66591,2033],{"class":732},[155,66593,236],{"class":263},[155,66595,17607],{"class":17606},[155,66597,17610],{"class":732},[155,66599,66600],{"class":157,"line":385},[155,66601,217],{"emptyLinePlaceholder":216},[155,66603,66604],{"class":157,"line":415},[155,66605,17619],{"class":161},[155,66607,66608],{"class":157,"line":452},[155,66609,17624],{"class":161},[155,66611,66612],{"class":157,"line":480},[155,66613,17629],{"class":161},[155,66615,66616],{"class":157,"line":486},[155,66617,17634],{"class":161},[155,66619,66620,66622,66624,66626,66628,66630,66632,66634,66636,66638,66640,66642,66644,66646,66648],{"class":157,"line":499},[155,66621,17639],{"class":171},[155,66623,317],{"class":167},[155,66625,17644],{"class":171},[155,66627,17647],{"class":263},[155,66629,332],{"class":171},[155,66631,17652],{"class":263},[155,66633,332],{"class":171},[155,66635,17657],{"class":263},[155,66637,17660],{"class":171},[155,66639,17663],{"class":263},[155,66641,332],{"class":171},[155,66643,17668],{"class":263},[155,66645,332],{"class":171},[155,66647,17673],{"class":263},[155,66649,17676],{"class":171},[155,66651,66652],{"class":157,"line":505},[155,66653,17681],{"class":161},[155,66655,66656,66658,66660],{"class":157,"line":528},[155,66657,17686],{"class":171},[155,66659,317],{"class":167},[155,66661,17691],{"class":171},[155,66663,66664],{"class":157,"line":549},[155,66665,17696],{"class":161},[155,66667,66668,66670,66672,66674,66676],{"class":157,"line":570},[155,66669,17701],{"class":171},[155,66671,1025],{"class":263},[155,66673,332],{"class":171},[155,66675,1025],{"class":263},[155,66677,12241],{"class":171},[155,66679,66680],{"class":157,"line":575},[155,66681,17714],{"class":161},[155,66683,66684],{"class":157,"line":581},[155,66685,17719],{"class":171},[155,66687,66688],{"class":157,"line":592},[155,66689,17724],{"class":171},[155,66691,66692],{"class":157,"line":610},[155,66693,17729],{"class":161},[155,66695,66696],{"class":157,"line":622},[155,66697,17734],{"class":161},[155,66699,66700],{"class":157,"line":638},[155,66701,217],{"emptyLinePlaceholder":216},[155,66703,66704],{"class":157,"line":650},[155,66705,17743],{"class":161},[155,66707,66708],{"class":157,"line":662},[155,66709,17748],{"class":161},[155,66711,66712,66714,66716,66718,66720,66722,66724,66726],{"class":157,"line":678},[155,66713,1495],{"class":171},[155,66715,317],{"class":167},[155,66717,17757],{"class":171},[155,66719,17760],{"class":263},[155,66721,332],{"class":171},[155,66723,17765],{"class":323},[155,66725,317],{"class":167},[155,66727,17770],{"class":171},[155,66729,66730],{"class":157,"line":694},[155,66731,217],{"emptyLinePlaceholder":216},[155,66733,66734,66736,66738,66740,66742,66744,66746,66748,66750,66752,66754,66756,66758,66760,66762],{"class":157,"line":706},[155,66735,1547],{"class":171},[155,66737,317],{"class":167},[155,66739,1552],{"class":171},[155,66741,1555],{"class":263},[155,66743,230],{"class":171},[155,66745,1560],{"class":263},[155,66747,1563],{"class":167},[155,66749,1253],{"class":263},[155,66751,1568],{"class":171},[155,66753,1555],{"class":263},[155,66755,230],{"class":171},[155,66757,1575],{"class":263},[155,66759,1563],{"class":167},[155,66761,1253],{"class":263},[155,66763,1582],{"class":171},[155,66765,66766,66768,66770,66772,66774,66776],{"class":157,"line":715},[155,66767,1587],{"class":171},[155,66769,317],{"class":167},[155,66771,1592],{"class":171},[155,66773,1061],{"class":323},[155,66775,317],{"class":167},[155,66777,1066],{"class":171},[155,66779,66780,66782,66784,66786],{"class":157,"line":720},[155,66781,1603],{"class":323},[155,66783,317],{"class":167},[155,66785,11868],{"class":263},[155,66787,990],{"class":171},[155,66789,66790,66792,66794,66796],{"class":157,"line":739},[155,66791,1615],{"class":323},[155,66793,317],{"class":167},[155,66795,1000],{"class":263},[155,66797,990],{"class":171},[155,66799,66800],{"class":157,"line":745},[155,66801,1626],{"class":161},[155,66803,66804,66806,66808,66810],{"class":157,"line":773},[155,66805,1631],{"class":323},[155,66807,317],{"class":167},[155,66809,1636],{"class":263},[155,66811,363],{"class":171},[155,66813,66814,66816,66818,66820,66822,66824],{"class":157,"line":779},[155,66815,1643],{"class":171},[155,66817,317],{"class":167},[155,66819,1058],{"class":171},[155,66821,1061],{"class":323},[155,66823,317],{"class":167},[155,66825,1654],{"class":171},[155,66827,66828,66830,66832,66834],{"class":157,"line":785},[155,66829,1659],{"class":323},[155,66831,317],{"class":167},[155,66833,11868],{"class":263},[155,66835,990],{"class":171},[155,66837,66838,66840,66842,66844],{"class":157,"line":791},[155,66839,1670],{"class":323},[155,66841,317],{"class":167},[155,66843,1000],{"class":263},[155,66845,990],{"class":171},[155,66847,66848,66850,66852,66854],{"class":157,"line":796},[155,66849,1681],{"class":323},[155,66851,317],{"class":167},[155,66853,1636],{"class":263},[155,66855,363],{"class":171},[155,66857,66858,66860],{"class":157,"line":802},[155,66859,1692],{"class":167},[155,66861,1695],{"class":171},[155,66863,66864],{"class":157,"line":808},[155,66865,217],{"emptyLinePlaceholder":216},[155,66867,66868],{"class":157,"line":819},[155,66869,1704],{"class":161},[155,66871,66872],{"class":157,"line":1832},[155,66873,1709],{"class":161},[155,66875,66876],{"class":157,"line":1838},[155,66877,217],{"emptyLinePlaceholder":216},[155,66879,66880],{"class":157,"line":1844},[155,66881,1718],{"class":161},[155,66883,66884,66886,66888],{"class":157,"line":1850},[155,66885,1484],{"class":167},[155,66887,1725],{"class":226},[155,66889,1728],{"class":171},[155,66891,66892,66894,66896,66898,66900,66902,66904,66906,66908],{"class":157,"line":1861},[155,66893,748],{"class":171},[155,66895,317],{"class":167},[155,66897,753],{"class":171},[155,66899,756],{"class":732},[155,66901,759],{"class":167},[155,66903,762],{"class":171},[155,66905,765],{"class":167},[155,66907,1747],{"class":732},[155,66909,363],{"class":171},[155,66911,66912],{"class":157,"line":1866},[155,66913,217],{"emptyLinePlaceholder":216},[155,66915,66916],{"class":157,"line":1871},[155,66917,1762],{"class":161},[155,66919,66920],{"class":157,"line":1877},[155,66921,1767],{"class":161},[155,66923,66924],{"class":157,"line":1883},[155,66925,1772],{"class":161},[155,66927,66928,66930,66932,66934,66936,66938,66940],{"class":157,"line":1894},[155,66929,1777],{"class":171},[155,66931,317],{"class":167},[155,66933,1782],{"class":171},[155,66935,1785],{"class":323},[155,66937,317],{"class":167},[155,66939,1790],{"class":263},[155,66941,363],{"class":171},[155,66943,66944],{"class":157,"line":1900},[155,66945,217],{"emptyLinePlaceholder":216},[155,66947,66948],{"class":157,"line":1911},[155,66949,1801],{"class":161},[155,66951,66952,66954,66956],{"class":157,"line":1917},[155,66953,1806],{"class":171},[155,66955,317],{"class":167},[155,66957,1811],{"class":171},[155,66959,66960],{"class":157,"line":1927},[155,66961,217],{"emptyLinePlaceholder":216},[155,66963,66964],{"class":157,"line":1933},[155,66965,1820],{"class":161},[155,66967,66968,66970,66972],{"class":157,"line":1943},[155,66969,811],{"class":171},[155,66971,317],{"class":167},[155,66973,1829],{"class":171},[155,66975,66976],{"class":157,"line":1949},[155,66977,1835],{"class":161},[155,66979,66980],{"class":157,"line":1959},[155,66981,1841],{"class":161},[155,66983,66984],{"class":157,"line":1964},[155,66985,1847],{"class":161},[155,66987,66988,66990,66992],{"class":157,"line":1970},[155,66989,1853],{"class":171},[155,66991,317],{"class":167},[155,66993,1858],{"class":171},[155,66995,66996],{"class":157,"line":1981},[155,66997,217],{"emptyLinePlaceholder":216},[155,66999,67000],{"class":157,"line":1986},[155,67001,1874],{"class":161},[155,67003,67004],{"class":157,"line":1991},[155,67005,1880],{"class":161},[155,67007,67008,67010,67012],{"class":157,"line":1997},[155,67009,1886],{"class":171},[155,67011,317],{"class":167},[155,67013,1891],{"class":263},[155,67015,67016],{"class":157,"line":2014},[155,67017,1897],{"class":161},[155,67019,67020,67022,67024],{"class":157,"line":2046},[155,67021,1903],{"class":171},[155,67023,317],{"class":167},[155,67025,1908],{"class":171},[155,67027,67028],{"class":157,"line":2062},[155,67029,1914],{"class":161},[155,67031,67032,67034,67036],{"class":157,"line":2067},[155,67033,1920],{"class":171},[155,67035,317],{"class":167},[155,67037,1908],{"class":171},[155,67039,67040],{"class":157,"line":2073},[155,67041,1930],{"class":161},[155,67043,67044,67046,67048],{"class":157,"line":2079},[155,67045,1936],{"class":171},[155,67047,317],{"class":167},[155,67049,1908],{"class":171},[155,67051,67052],{"class":157,"line":2089},[155,67053,1946],{"class":161},[155,67055,67056,67058,67060],{"class":157,"line":2095},[155,67057,1952],{"class":171},[155,67059,317],{"class":167},[155,67061,1908],{"class":171},[155,67063,67064],{"class":157,"line":2106},[155,67065,217],{"emptyLinePlaceholder":216},[155,67067,67068],{"class":157,"line":2112},[155,67069,1967],{"class":161},[155,67071,67072,67074,67076],{"class":157,"line":2122},[155,67073,1973],{"class":171},[155,67075,317],{"class":167},[155,67077,1978],{"class":171},[155,67079,67080],{"class":157,"line":2128},[155,67081,217],{"emptyLinePlaceholder":216},[155,67083,67084],{"class":157,"line":2138},[155,67085,1994],{"class":161},[155,67087,67088,67090,67092,67094,67096],{"class":157,"line":2144},[155,67089,2000],{"class":167},[155,67091,2003],{"class":171},[155,67093,1131],{"class":167},[155,67095,2008],{"class":263},[155,67097,2011],{"class":171},[155,67099,67100,67102,67104,67106,67108,67110,67112,67114,67116,67118,67120],{"class":157,"line":2154},[155,67101,2017],{"class":263},[155,67103,230],{"class":171},[155,67105,2022],{"class":732},[155,67107,2025],{"class":263},[155,67109,2028],{"class":732},[155,67111,2025],{"class":263},[155,67113,2033],{"class":732},[155,67115,2036],{"class":171},[155,67117,2039],{"class":167},[155,67119,329],{"class":263},[155,67121,1238],{"class":171},[155,67123,67124,67126,67128,67130,67132,67134],{"class":157,"line":2160},[155,67125,2017],{"class":263},[155,67127,230],{"class":171},[155,67129,2053],{"class":732},[155,67131,1563],{"class":167},[155,67133,565],{"class":263},[155,67135,363],{"class":171},[155,67137,67138],{"class":157,"line":2170},[155,67139,217],{"emptyLinePlaceholder":216},[155,67141,67142],{"class":157,"line":2176},[155,67143,2070],{"class":161},[155,67145,67146],{"class":157,"line":2191},[155,67147,2076],{"class":161},[155,67149,67150,67152,67154],{"class":157,"line":2197},[155,67151,2082],{"class":171},[155,67153,317],{"class":167},[155,67155,1891],{"class":263},[155,67157,67158],{"class":157,"line":2208},[155,67159,2092],{"class":161},[155,67161,67162,67164,67166],{"class":157,"line":2214},[155,67163,2098],{"class":171},[155,67165,317],{"class":167},[155,67167,2103],{"class":263},[155,67169,67170],{"class":157,"line":2225},[155,67171,2109],{"class":161},[155,67173,67174,67176,67178],{"class":157,"line":2231},[155,67175,2115],{"class":171},[155,67177,317],{"class":167},[155,67179,1891],{"class":263},[155,67181,67182],{"class":157,"line":2237},[155,67183,2125],{"class":161},[155,67185,67186,67188,67190],{"class":157,"line":2243},[155,67187,2131],{"class":171},[155,67189,317],{"class":167},[155,67191,2103],{"class":263},[155,67193,67194],{"class":157,"line":2249},[155,67195,2141],{"class":161},[155,67197,67198,67200,67202],{"class":157,"line":2260},[155,67199,2147],{"class":171},[155,67201,317],{"class":167},[155,67203,2103],{"class":263},[155,67205,67206],{"class":157,"line":2266},[155,67207,2157],{"class":161},[155,67209,67210,67212,67214],{"class":157,"line":2286},[155,67211,2163],{"class":171},[155,67213,317],{"class":167},[155,67215,2103],{"class":263},[155,67217,67218],{"class":157,"line":2292},[155,67219,2173],{"class":161},[155,67221,67222,67224,67226,67228,67230],{"class":157,"line":2303},[155,67223,2179],{"class":167},[155,67225,1128],{"class":171},[155,67227,1131],{"class":167},[155,67229,1134],{"class":263},[155,67231,2188],{"class":171},[155,67233,67234],{"class":157,"line":2309},[155,67235,2194],{"class":161},[155,67237,67238,67240,67242],{"class":157,"line":2315},[155,67239,2200],{"class":171},[155,67241,317],{"class":167},[155,67243,2205],{"class":171},[155,67245,67246],{"class":157,"line":2321},[155,67247,2211],{"class":161},[155,67249,67250,67252,67254],{"class":157,"line":2327},[155,67251,2217],{"class":171},[155,67253,317],{"class":167},[155,67255,2222],{"class":171},[155,67257,67258],{"class":157,"line":2333},[155,67259,2228],{"class":161},[155,67261,67262],{"class":157,"line":2339},[155,67263,2234],{"class":171},[155,67265,67266],{"class":157,"line":2345},[155,67267,2240],{"class":161},[155,67269,67270],{"class":157,"line":2366},[155,67271,2246],{"class":161},[155,67273,67274,67276,67278],{"class":157,"line":2372},[155,67275,2252],{"class":171},[155,67277,317],{"class":167},[155,67279,2257],{"class":171},[155,67281,67282],{"class":157,"line":2388},[155,67283,2263],{"class":161},[155,67285,67286,67288,67290,67292,67294,67296,67298],{"class":157,"line":2394},[155,67287,2269],{"class":171},[155,67289,317],{"class":167},[155,67291,2274],{"class":171},[155,67293,2277],{"class":323},[155,67295,317],{"class":167},[155,67297,329],{"class":263},[155,67299,363],{"class":171},[155,67301,67302],{"class":157,"line":2408},[155,67303,2289],{"class":161},[155,67305,67306,67308,67310],{"class":157,"line":2414},[155,67307,2295],{"class":171},[155,67309,317],{"class":167},[155,67311,2300],{"class":171},[155,67313,67314],{"class":157,"line":2429},[155,67315,2306],{"class":161},[155,67317,67318],{"class":157,"line":2435},[155,67319,2312],{"class":171},[155,67321,67322],{"class":157,"line":2444},[155,67323,2318],{"class":161},[155,67325,67326],{"class":157,"line":2450},[155,67327,2324],{"class":171},[155,67329,67330],{"class":157,"line":2459},[155,67331,2330],{"class":161},[155,67333,67334],{"class":157,"line":2465},[155,67335,2336],{"class":171},[155,67337,67338],{"class":157,"line":2471},[155,67339,2342],{"class":161},[155,67341,67342,67344,67346,67348,67350,67352,67354],{"class":157,"line":2480},[155,67343,2348],{"class":171},[155,67345,2351],{"class":167},[155,67347,2354],{"class":171},[155,67349,1563],{"class":167},[155,67351,2359],{"class":171},[155,67353,1109],{"class":263},[155,67355,363],{"class":171},[155,67357,67358],{"class":157,"line":2486},[155,67359,2369],{"class":161},[155,67361,67362,67364,67366,67368,67370],{"class":157,"line":2497},[155,67363,2375],{"class":171},[155,67365,2351],{"class":167},[155,67367,2380],{"class":171},[155,67369,729],{"class":167},[155,67371,2385],{"class":171},[155,67373,67374],{"class":157,"line":2503},[155,67375,2391],{"class":161},[155,67377,67378,67380,67382,67384,67386],{"class":157,"line":2522},[155,67379,2397],{"class":171},[155,67381,2351],{"class":167},[155,67383,2359],{"class":171},[155,67385,1109],{"class":263},[155,67387,363],{"class":171},[155,67389,67390],{"class":157,"line":2528},[155,67391,2411],{"class":161},[155,67393,67394,67396,67398,67400,67402],{"class":157,"line":2539},[155,67395,2179],{"class":167},[155,67397,2419],{"class":171},[155,67399,1131],{"class":167},[155,67401,1134],{"class":263},[155,67403,2426],{"class":171},[155,67405,67406],{"class":157,"line":2545},[155,67407,2432],{"class":161},[155,67409,67410,67412,67414],{"class":157,"line":2565},[155,67411,2200],{"class":171},[155,67413,317],{"class":167},[155,67415,2205],{"class":171},[155,67417,67418],{"class":157,"line":2581},[155,67419,2447],{"class":161},[155,67421,67422,67424,67426],{"class":157,"line":2587},[155,67423,2217],{"class":171},[155,67425,317],{"class":167},[155,67427,2222],{"class":171},[155,67429,67430],{"class":157,"line":2601},[155,67431,2462],{"class":161},[155,67433,67434],{"class":157,"line":2607},[155,67435,2468],{"class":171},[155,67437,67438],{"class":157,"line":2613},[155,67439,5965],{"class":161},[155,67441,67442,67444],{"class":157,"line":2624},[155,67443,2474],{"class":167},[155,67445,2477],{"class":171},[155,67447,67448],{"class":157,"line":2630},[155,67449,2483],{"class":161},[155,67451,67452,67454,67456],{"class":157,"line":2636},[155,67453,5980],{"class":171},[155,67455,317],{"class":167},[155,67457,2257],{"class":171},[155,67459,67460],{"class":157,"line":2646},[155,67461,2500],{"class":161},[155,67463,67464,67466,67468,67470,67472,67474,67476],{"class":157,"line":2652},[155,67465,5993],{"class":171},[155,67467,317],{"class":167},[155,67469,2274],{"class":171},[155,67471,2277],{"class":323},[155,67473,317],{"class":167},[155,67475,329],{"class":263},[155,67477,363],{"class":171},[155,67479,67480],{"class":157,"line":2663},[155,67481,2525],{"class":161},[155,67483,67484,67486,67488],{"class":157,"line":2669},[155,67485,6014],{"class":171},[155,67487,317],{"class":167},[155,67489,2300],{"class":171},[155,67491,67492],{"class":157,"line":2679},[155,67493,2542],{"class":161},[155,67495,67496,67498,67500,67502,67504,67506,67508],{"class":157,"line":2684},[155,67497,6027],{"class":171},[155,67499,2351],{"class":167},[155,67501,6032],{"class":171},[155,67503,1563],{"class":167},[155,67505,2359],{"class":171},[155,67507,1109],{"class":263},[155,67509,363],{"class":171},[155,67511,67512,67514,67516,67518,67520],{"class":157,"line":2690},[155,67513,6045],{"class":171},[155,67515,2351],{"class":167},[155,67517,2380],{"class":171},[155,67519,729],{"class":167},[155,67521,2385],{"class":171},[155,67523,67524],{"class":157,"line":2742},[155,67525,6058],{"class":161},[155,67527,67528,67530,67532,67534,67536],{"class":157,"line":2789},[155,67529,6063],{"class":171},[155,67531,2351],{"class":167},[155,67533,2359],{"class":171},[155,67535,1109],{"class":263},[155,67537,363],{"class":171},[155,67539,67540],{"class":157,"line":2794},[155,67541,2604],{"class":161},[155,67543,67544],{"class":157,"line":2800},[155,67545,2610],{"class":161},[155,67547,67548,67550,67552],{"class":157,"line":2821},[155,67549,2616],{"class":171},[155,67551,2028],{"class":167},[155,67553,2621],{"class":171},[155,67555,67556],{"class":157,"line":2827},[155,67557,2627],{"class":161},[155,67559,67560],{"class":157,"line":2848},[155,67561,2633],{"class":161},[155,67563,67564,67566,67568],{"class":157,"line":2854},[155,67565,2639],{"class":171},[155,67567,2028],{"class":167},[155,67569,2621],{"class":171},[155,67571,67572],{"class":157,"line":2860},[155,67573,2649],{"class":161},[155,67575,67576,67578,67580],{"class":157,"line":2870},[155,67577,2655],{"class":171},[155,67579,2028],{"class":167},[155,67581,2660],{"class":171},[155,67583,67584],{"class":157,"line":2875},[155,67585,2666],{"class":161},[155,67587,67588,67590,67592],{"class":157,"line":2881},[155,67589,2672],{"class":171},[155,67591,2028],{"class":167},[155,67593,2660],{"class":171},[155,67595,67596],{"class":157,"line":2897},[155,67597,217],{"emptyLinePlaceholder":216},[155,67599,67600],{"class":157,"line":2945},[155,67601,2687],{"class":161},[155,67603,67604,67606,67608,67610,67612,67614,67616,67618,67620,67622,67624,67626,67628,67630,67632,67634,67636,67638,67640,67642],{"class":157,"line":2951},[155,67605,2017],{"class":263},[155,67607,230],{"class":171},[155,67609,2697],{"class":732},[155,67611,2025],{"class":263},[155,67613,2702],{"class":732},[155,67615,2705],{"class":263},[155,67617,2708],{"class":167},[155,67619,2711],{"class":263},[155,67621,2714],{"class":732},[155,67623,2705],{"class":263},[155,67625,2708],{"class":167},[155,67627,2711],{"class":263},[155,67629,2697],{"class":732},[155,67631,2725],{"class":171},[155,67633,2039],{"class":167},[155,67635,329],{"class":263},[155,67637,2732],{"class":171},[155,67639,2039],{"class":167},[155,67641,329],{"class":263},[155,67643,2739],{"class":171},[155,67645,67646,67648,67650,67652,67654,67656,67658,67660,67662,67664,67666,67668,67670,67672,67674,67676,67678,67680,67682,67684],{"class":157,"line":2957},[155,67647,2017],{"class":263},[155,67649,230],{"class":171},[155,67651,2697],{"class":732},[155,67653,2025],{"class":263},[155,67655,2753],{"class":732},[155,67657,2705],{"class":263},[155,67659,2708],{"class":167},[155,67661,2711],{"class":263},[155,67663,2762],{"class":732},[155,67665,2705],{"class":263},[155,67667,2708],{"class":167},[155,67669,2711],{"class":263},[155,67671,2697],{"class":732},[155,67673,2773],{"class":171},[155,67675,2039],{"class":167},[155,67677,329],{"class":263},[155,67679,2780],{"class":171},[155,67681,2039],{"class":167},[155,67683,329],{"class":263},[155,67685,2739],{"class":171},[155,67687,67688],{"class":157,"line":2963},[155,67689,217],{"emptyLinePlaceholder":216},[155,67691,67692],{"class":157,"line":2974},[155,67693,2797],{"class":161},[155,67695,67696,67698,67700,67702,67704,67706,67708],{"class":157,"line":2980},[155,67697,2803],{"class":167},[155,67699,2806],{"class":171},[155,67701,2039],{"class":167},[155,67703,329],{"class":263},[155,67705,2813],{"class":171},[155,67707,1148],{"class":167},[155,67709,2818],{"class":171},[155,67711,67712],{"class":157,"line":2986},[155,67713,2824],{"class":161},[155,67715,67716,67718,67720,67722,67724,67726,67728],{"class":157,"line":2992},[155,67717,2830],{"class":171},[155,67719,2833],{"class":263},[155,67721,317],{"class":167},[155,67723,2838],{"class":171},[155,67725,2039],{"class":167},[155,67727,329],{"class":263},[155,67729,2845],{"class":171},[155,67731,67732],{"class":157,"line":3011},[155,67733,2851],{"class":161},[155,67735,67736],{"class":157,"line":3026},[155,67737,2857],{"class":161},[155,67739,67740,67742,67744],{"class":157,"line":3035},[155,67741,2863],{"class":171},[155,67743,317],{"class":167},[155,67745,1858],{"class":171},[155,67747,67748],{"class":157,"line":3044},[155,67749,217],{"emptyLinePlaceholder":216},[155,67751,67752],{"class":157,"line":3053},[155,67753,2878],{"class":161},[155,67755,67756,67758,67760,67762,67764],{"class":157,"line":3062},[155,67757,2884],{"class":171},[155,67759,317],{"class":167},[155,67761,2889],{"class":171},[155,67763,2039],{"class":167},[155,67765,2894],{"class":171},[155,67767,67768,67770,67772,67774,67776,67778,67780,67782,67784,67786,67788,67790,67792,67794,67796,67798,67800,67802],{"class":157,"line":3068},[155,67769,2017],{"class":263},[155,67771,230],{"class":171},[155,67773,2904],{"class":732},[155,67775,2705],{"class":263},[155,67777,2909],{"class":167},[155,67779,2711],{"class":263},[155,67781,2914],{"class":732},[155,67783,2705],{"class":263},[155,67785,2909],{"class":167},[155,67787,2711],{"class":263},[155,67789,2923],{"class":732},[155,67791,2926],{"class":171},[155,67793,2929],{"class":167},[155,67795,2932],{"class":263},[155,67797,2935],{"class":171},[155,67799,2938],{"class":167},[155,67801,2932],{"class":263},[155,67803,1238],{"class":171},[155,67805,67806],{"class":157,"line":3074},[155,67807,6342],{"class":161},[155,67809,67810],{"class":157,"line":3082},[155,67811,6347],{"class":161},[155,67813,67814,67816,67818],{"class":157,"line":3087},[155,67815,6352],{"class":171},[155,67817,2969],{"class":732},[155,67819,363],{"class":171},[155,67821,67822],{"class":157,"line":3093},[155,67823,2989],{"class":161},[155,67825,67826,67828,67830,67832,67834,67836],{"class":157,"line":3104},[155,67827,2995],{"class":171},[155,67829,317],{"class":167},[155,67831,3000],{"class":171},[155,67833,3003],{"class":323},[155,67835,317],{"class":167},[155,67837,3008],{"class":171},[155,67839,67840,67842,67844,67846],{"class":157,"line":3110},[155,67841,3014],{"class":732},[155,67843,3017],{"class":171},[155,67845,3020],{"class":263},[155,67847,3023],{"class":171},[155,67849,67850,67852],{"class":157,"line":3130},[155,67851,3029],{"class":732},[155,67853,3032],{"class":171},[155,67855,67856,67858],{"class":157,"line":3136},[155,67857,3038],{"class":732},[155,67859,3041],{"class":171},[155,67861,67862,67864],{"class":157,"line":3142},[155,67863,3047],{"class":732},[155,67865,3050],{"class":171},[155,67867,67868,67870],{"class":157,"line":3148},[155,67869,3056],{"class":732},[155,67871,3059],{"class":171},[155,67873,67874],{"class":157,"line":3165},[155,67875,3065],{"class":171},[155,67877,67878],{"class":157,"line":3171},[155,67879,3071],{"class":161},[155,67881,67882,67884],{"class":157,"line":3177},[155,67883,1692],{"class":167},[155,67885,3079],{"class":171},[155,67887,67888],{"class":157,"line":3183},[155,67889,217],{"emptyLinePlaceholder":216},[155,67891,67892],{"class":157,"line":3189},[155,67893,3090],{"class":161},[155,67895,67896,67898,67900],{"class":157,"line":3195},[155,67897,1484],{"class":167},[155,67899,3098],{"class":226},[155,67901,3101],{"class":171},[155,67903,67904],{"class":157,"line":3222},[155,67905,3107],{"class":161},[155,67907,67908,67910,67912,67914,67916,67918,67920,67922],{"class":157,"line":3246},[155,67909,3113],{"class":171},[155,67911,1224],{"class":323},[155,67913,317],{"class":167},[155,67915,230],{"class":171},[155,67917,1231],{"class":263},[155,67919,332],{"class":171},[155,67921,1264],{"class":263},[155,67923,1238],{"class":171},[155,67925,67926],{"class":157,"line":3252},[155,67927,3133],{"class":161},[155,67929,67930],{"class":157,"line":3258},[155,67931,3139],{"class":161},[155,67933,67934],{"class":157,"line":3264},[155,67935,3145],{"class":161},[155,67937,67938,67940,67942,67944,67946,67948,67950],{"class":157,"line":3275},[155,67939,1261],{"class":171},[155,67941,329],{"class":263},[155,67943,332],{"class":171},[155,67945,360],{"class":263},[155,67947,332],{"class":171},[155,67949,329],{"class":263},[155,67951,363],{"class":171},[155,67953,67954],{"class":157,"line":3286},[155,67955,3168],{"class":161},[155,67957,67958],{"class":157,"line":3292},[155,67959,3174],{"class":161},[155,67961,67962],{"class":157,"line":3309},[155,67963,3180],{"class":161},[155,67965,67966],{"class":157,"line":3332},[155,67967,3186],{"class":161},[155,67969,67970],{"class":157,"line":3355},[155,67971,3192],{"class":161},[155,67973,67974,67976,67978,67980,67982,67984,67986,67988,67990],{"class":157,"line":3361},[155,67975,3198],{"class":171},[155,67977,3201],{"class":732},[155,67979,3204],{"class":171},[155,67981,3207],{"class":732},[155,67983,332],{"class":171},[155,67985,3212],{"class":323},[155,67987,317],{"class":167},[155,67989,3217],{"class":732},[155,67991,363],{"class":171},[155,67993,67994,67996,67998,68000,68002,68004,68006,68008,68010],{"class":157,"line":3366},[155,67995,3198],{"class":171},[155,67997,3201],{"class":732},[155,67999,3229],{"class":171},[155,68001,3232],{"class":732},[155,68003,332],{"class":171},[155,68005,3212],{"class":323},[155,68007,317],{"class":167},[155,68009,3241],{"class":732},[155,68011,363],{"class":171},[155,68013,68014],{"class":157,"line":3375},[155,68015,3249],{"class":161},[155,68017,68018],{"class":157,"line":3385},[155,68019,3255],{"class":171},[155,68021,68022],{"class":157,"line":3391},[155,68023,3261],{"class":161},[155,68025,68026,68028,68030],{"class":157,"line":3396},[155,68027,3267],{"class":171},[155,68029,3270],{"class":732},[155,68031,363],{"class":171},[155,68033,68034,68036,68038],{"class":157,"line":3402},[155,68035,3278],{"class":171},[155,68037,3281],{"class":732},[155,68039,363],{"class":171},[155,68041,68042],{"class":157,"line":3415},[155,68043,3289],{"class":161},[155,68045,68046,68048,68050,68052,68054,68056,68058],{"class":157,"line":3421},[155,68047,1261],{"class":171},[155,68049,329],{"class":263},[155,68051,332],{"class":171},[155,68053,360],{"class":263},[155,68055,332],{"class":171},[155,68057,360],{"class":263},[155,68059,363],{"class":171},[155,68061,68062,68064,68066,68068,68070,68072,68074,68076,68078],{"class":157,"line":3432},[155,68063,3198],{"class":171},[155,68065,3201],{"class":732},[155,68067,3316],{"class":171},[155,68069,3207],{"class":732},[155,68071,332],{"class":171},[155,68073,3212],{"class":323},[155,68075,317],{"class":167},[155,68077,3327],{"class":732},[155,68079,363],{"class":171},[155,68081,68082,68084,68086,68088,68090,68092,68094,68096,68098],{"class":157,"line":3443},[155,68083,3198],{"class":171},[155,68085,3201],{"class":732},[155,68087,3339],{"class":171},[155,68089,3232],{"class":732},[155,68091,332],{"class":171},[155,68093,3212],{"class":323},[155,68095,317],{"class":167},[155,68097,3350],{"class":732},[155,68099,363],{"class":171},[155,68101,68102],{"class":157,"line":3463},[155,68103,3358],{"class":161},[155,68105,68106],{"class":157,"line":19149},[155,68107,3255],{"class":171},[155,68109,68110,68112,68114],{"class":157,"line":19154},[155,68111,3267],{"class":171},[155,68113,3201],{"class":732},[155,68115,363],{"class":171},[155,68117,68118,68120,68122],{"class":157,"line":19163},[155,68119,3278],{"class":171},[155,68121,3380],{"class":732},[155,68123,363],{"class":171},[155,68125,68126],{"class":157,"line":19172},[155,68127,3388],{"class":171},[155,68129,68130],{"class":157,"line":19177},[155,68131,217],{"emptyLinePlaceholder":216},[155,68133,68134],{"class":157,"line":19182},[155,68135,3399],{"class":161},[155,68137,68138,68140,68142,68144,68146],{"class":157,"line":19187},[155,68139,723],{"class":167},[155,68141,726],{"class":263},[155,68143,729],{"class":167},[155,68145,733],{"class":732},[155,68147,736],{"class":171},[155,68149,68150],{"class":157,"line":19200},[155,68151,3418],{"class":161},[155,68153,68154,68156,68158],{"class":157,"line":19205},[155,68155,14165],{"class":171},[155,68157,317],{"class":167},[155,68159,14170],{"class":171},[155,68161,68162,68164,68166],{"class":157,"line":19214},[155,68163,3435],{"class":171},[155,68165,317],{"class":167},[155,68167,3440],{"class":171},[155,68169,68170,68172,68174,68176,68178,68180,68182],{"class":157,"line":19223},[155,68171,2995],{"class":171},[155,68173,317],{"class":167},[155,68175,14187],{"class":171},[155,68177,3453],{"class":323},[155,68179,317],{"class":167},[155,68181,2932],{"class":263},[155,68183,363],{"class":171},[155,68185,68186],{"class":157,"line":19240},[155,68187,3466],{"class":171},[19,68189,19246],{"id":19245},[24,68191,19249],{},[146,68193,68194],{"className":148,"code":19252,"language":150,"meta":39,"style":39},[152,68195,68196,68202,68212,68222,68232,68242,68246,68250,68258,68262,68266,68282,68286,68290,68294,68298,68302,68334,68338,68346,68350,68362,68366,68370,68374,68378,68382,68386,68390,68394,68412,68426,68430,68440,68450,68460,68466,68470,68474,68482,68486,68502,68510,68514,68518,68526,68534,68538,68542,68546,68550,68556,68560,68570,68578,68586,68590,68594,68598,68606,68610,68626,68630,68634,68638,68650,68654,68666,68670,68674,68686,68690,68700,68704,68708,68720,68724,68732,68736,68740,68748,68752,68760,68764,68768,68772,68776,68780,68796,68804,68808,68812,68828,68834,68838,68848,68856,68864,68868,68872,68876,68880,68888,68892,68908,68912,68920,68928],{"__ignoreMap":39},[155,68197,68198,68200],{"class":157,"line":158},[155,68199,168],{"class":167},[155,68201,172],{"class":171},[155,68203,68204,68206,68208,68210],{"class":157,"line":46},[155,68205,168],{"class":167},[155,68207,939],{"class":171},[155,68209,907],{"class":167},[155,68211,944],{"class":171},[155,68213,68214,68216,68218,68220],{"class":157,"line":121},[155,68215,183],{"class":167},[155,68217,922],{"class":171},[155,68219,168],{"class":167},[155,68221,927],{"class":171},[155,68223,68224,68226,68228,68230],{"class":157,"line":180},[155,68225,183],{"class":167},[155,68227,892],{"class":171},[155,68229,168],{"class":167},[155,68231,19291],{"class":171},[155,68233,68234,68236,68238,68240],{"class":157,"line":194},[155,68235,183],{"class":167},[155,68237,1451],{"class":171},[155,68239,168],{"class":167},[155,68241,14260],{"class":171},[155,68243,68244],{"class":157,"line":200},[155,68245,217],{"emptyLinePlaceholder":216},[155,68247,68248],{"class":157,"line":213},[155,68249,3556],{"class":161},[155,68251,68252,68254,68256],{"class":157,"line":220},[155,68253,1484],{"class":167},[155,68255,3563],{"class":226},[155,68257,1490],{"class":171},[155,68259,68260],{"class":157,"line":245},[155,68261,19322],{"class":161},[155,68263,68264],{"class":157,"line":251},[155,68265,17589],{"class":161},[155,68267,68268,68270,68272,68274,68276,68278,68280],{"class":157,"line":257},[155,68269,17594],{"class":263},[155,68271,317],{"class":167},[155,68273,17599],{"class":167},[155,68275,2033],{"class":732},[155,68277,236],{"class":263},[155,68279,19341],{"class":17606},[155,68281,17610],{"class":732},[155,68283,68284],{"class":157,"line":270},[155,68285,217],{"emptyLinePlaceholder":216},[155,68287,68288],{"class":157,"line":276},[155,68289,17619],{"class":161},[155,68291,68292],{"class":157,"line":297},[155,68293,17624],{"class":161},[155,68295,68296],{"class":157,"line":302},[155,68297,17629],{"class":161},[155,68299,68300],{"class":157,"line":308},[155,68301,17634],{"class":161},[155,68303,68304,68306,68308,68310,68312,68314,68316,68318,68320,68322,68324,68326,68328,68330,68332],{"class":157,"line":366},[155,68305,17639],{"class":171},[155,68307,317],{"class":167},[155,68309,17644],{"class":171},[155,68311,17647],{"class":263},[155,68313,332],{"class":171},[155,68315,17652],{"class":263},[155,68317,332],{"class":171},[155,68319,17657],{"class":263},[155,68321,17660],{"class":171},[155,68323,17663],{"class":263},[155,68325,332],{"class":171},[155,68327,17668],{"class":263},[155,68329,332],{"class":171},[155,68331,17673],{"class":263},[155,68333,17676],{"class":171},[155,68335,68336],{"class":157,"line":379},[155,68337,17681],{"class":161},[155,68339,68340,68342,68344],{"class":157,"line":385},[155,68341,17686],{"class":171},[155,68343,317],{"class":167},[155,68345,17691],{"class":171},[155,68347,68348],{"class":157,"line":415},[155,68349,17696],{"class":161},[155,68351,68352,68354,68356,68358,68360],{"class":157,"line":452},[155,68353,17701],{"class":171},[155,68355,1025],{"class":263},[155,68357,332],{"class":171},[155,68359,1025],{"class":263},[155,68361,12241],{"class":171},[155,68363,68364],{"class":157,"line":480},[155,68365,17714],{"class":161},[155,68367,68368],{"class":157,"line":486},[155,68369,17719],{"class":171},[155,68371,68372],{"class":157,"line":499},[155,68373,17724],{"class":171},[155,68375,68376],{"class":157,"line":505},[155,68377,17729],{"class":161},[155,68379,68380],{"class":157,"line":528},[155,68381,17734],{"class":161},[155,68383,68384],{"class":157,"line":549},[155,68385,217],{"emptyLinePlaceholder":216},[155,68387,68388],{"class":157,"line":570},[155,68389,17743],{"class":161},[155,68391,68392],{"class":157,"line":575},[155,68393,17748],{"class":161},[155,68395,68396,68398,68400,68402,68404,68406,68408,68410],{"class":157,"line":581},[155,68397,3570],{"class":171},[155,68399,317],{"class":167},[155,68401,17757],{"class":171},[155,68403,17760],{"class":263},[155,68405,332],{"class":171},[155,68407,17765],{"class":323},[155,68409,317],{"class":167},[155,68411,17770],{"class":171},[155,68413,68414,68416,68418,68420,68422,68424],{"class":157,"line":592},[155,68415,3627],{"class":171},[155,68417,317],{"class":167},[155,68419,1058],{"class":171},[155,68421,1061],{"class":323},[155,68423,317],{"class":167},[155,68425,3638],{"class":171},[155,68427,68428],{"class":157,"line":610},[155,68429,3643],{"class":161},[155,68431,68432,68434,68436,68438],{"class":157,"line":622},[155,68433,3648],{"class":323},[155,68435,317],{"class":167},[155,68437,329],{"class":263},[155,68439,990],{"class":171},[155,68441,68442,68444,68446,68448],{"class":157,"line":638},[155,68443,3659],{"class":323},[155,68445,317],{"class":167},[155,68447,1000],{"class":263},[155,68449,990],{"class":171},[155,68451,68452,68454,68456,68458],{"class":157,"line":650},[155,68453,3670],{"class":323},[155,68455,317],{"class":167},[155,68457,1109],{"class":263},[155,68459,363],{"class":171},[155,68461,68462,68464],{"class":157,"line":662},[155,68463,1692],{"class":167},[155,68465,3683],{"class":171},[155,68467,68468],{"class":157,"line":678},[155,68469,217],{"emptyLinePlaceholder":216},[155,68471,68472],{"class":157,"line":694},[155,68473,3692],{"class":161},[155,68475,68476,68478,68480],{"class":157,"line":706},[155,68477,1484],{"class":167},[155,68479,3699],{"class":226},[155,68481,3702],{"class":171},[155,68483,68484],{"class":157,"line":715},[155,68485,3707],{"class":161},[155,68487,68488,68490,68492,68494,68496,68498,68500],{"class":157,"line":720},[155,68489,748],{"class":171},[155,68491,317],{"class":167},[155,68493,756],{"class":732},[155,68495,759],{"class":167},[155,68497,762],{"class":171},[155,68499,765],{"class":167},[155,68501,3724],{"class":732},[155,68503,68504,68506,68508],{"class":157,"line":739},[155,68505,811],{"class":171},[155,68507,317],{"class":167},[155,68509,1829],{"class":171},[155,68511,68512],{"class":157,"line":745},[155,68513,217],{"emptyLinePlaceholder":216},[155,68515,68516],{"class":157,"line":773},[155,68517,3741],{"class":161},[155,68519,68520,68522,68524],{"class":157,"line":779},[155,68521,3746],{"class":171},[155,68523,317],{"class":167},[155,68525,1891],{"class":263},[155,68527,68528,68530,68532],{"class":157,"line":785},[155,68529,3755],{"class":171},[155,68531,317],{"class":167},[155,68533,2103],{"class":263},[155,68535,68536],{"class":157,"line":791},[155,68537,217],{"emptyLinePlaceholder":216},[155,68539,68540],{"class":157,"line":796},[155,68541,3768],{"class":161},[155,68543,68544],{"class":157,"line":802},[155,68545,3773],{"class":161},[155,68547,68548],{"class":157,"line":808},[155,68549,3778],{"class":161},[155,68551,68552,68554],{"class":157,"line":819},[155,68553,3783],{"class":167},[155,68555,2477],{"class":171},[155,68557,68558],{"class":157,"line":1832},[155,68559,3790],{"class":161},[155,68561,68562,68564,68566,68568],{"class":157,"line":1838},[155,68563,2179],{"class":167},[155,68565,3797],{"class":171},[155,68567,1131],{"class":167},[155,68569,3802],{"class":171},[155,68571,68572,68574,68576],{"class":157,"line":1844},[155,68573,3807],{"class":171},[155,68575,317],{"class":167},[155,68577,3812],{"class":171},[155,68579,68580,68582,68584],{"class":157,"line":1850},[155,68581,3817],{"class":171},[155,68583,317],{"class":167},[155,68585,3822],{"class":171},[155,68587,68588],{"class":157,"line":1861},[155,68589,3827],{"class":161},[155,68591,68592],{"class":157,"line":1866},[155,68593,2468],{"class":171},[155,68595,68596],{"class":157,"line":1871},[155,68597,3836],{"class":161},[155,68599,68600,68602,68604],{"class":157,"line":1877},[155,68601,2252],{"class":171},[155,68603,317],{"class":167},[155,68605,3845],{"class":171},[155,68607,68608],{"class":157,"line":1883},[155,68609,3850],{"class":161},[155,68611,68612,68614,68616,68618,68620,68622,68624],{"class":157,"line":1894},[155,68613,2269],{"class":171},[155,68615,317],{"class":167},[155,68617,2274],{"class":171},[155,68619,2277],{"class":323},[155,68621,317],{"class":167},[155,68623,329],{"class":263},[155,68625,363],{"class":171},[155,68627,68628],{"class":157,"line":1900},[155,68629,3871],{"class":161},[155,68631,68632],{"class":157,"line":1911},[155,68633,3876],{"class":161},[155,68635,68636],{"class":157,"line":1917},[155,68637,3881],{"class":161},[155,68639,68640,68642,68644,68646,68648],{"class":157,"line":1927},[155,68641,3886],{"class":171},[155,68643,2351],{"class":167},[155,68645,2380],{"class":171},[155,68647,729],{"class":167},[155,68649,3895],{"class":171},[155,68651,68652],{"class":157,"line":1933},[155,68653,3900],{"class":161},[155,68655,68656,68658,68660,68662,68664],{"class":157,"line":1943},[155,68657,3905],{"class":171},[155,68659,2351],{"class":167},[155,68661,3910],{"class":171},[155,68663,1109],{"class":263},[155,68665,363],{"class":171},[155,68667,68668],{"class":157,"line":1949},[155,68669,217],{"emptyLinePlaceholder":216},[155,68671,68672],{"class":157,"line":1959},[155,68673,3923],{"class":161},[155,68675,68676,68678,68680,68682,68684],{"class":157,"line":1964},[155,68677,3928],{"class":171},[155,68679,317],{"class":167},[155,68681,3933],{"class":171},[155,68683,2028],{"class":167},[155,68685,3938],{"class":171},[155,68687,68688],{"class":157,"line":1970},[155,68689,3943],{"class":161},[155,68691,68692,68694,68696,68698],{"class":157,"line":1981},[155,68693,2017],{"class":263},[155,68695,230],{"class":171},[155,68697,3952],{"class":732},[155,68699,3955],{"class":171},[155,68701,68702],{"class":157,"line":1986},[155,68703,217],{"emptyLinePlaceholder":216},[155,68705,68706],{"class":157,"line":1991},[155,68707,3964],{"class":161},[155,68709,68710,68712,68714,68716,68718],{"class":157,"line":1997},[155,68711,723],{"class":167},[155,68713,726],{"class":263},[155,68715,729],{"class":167},[155,68717,733],{"class":732},[155,68719,736],{"class":171},[155,68721,68722],{"class":157,"line":2014},[155,68723,3981],{"class":161},[155,68725,68726,68728,68730],{"class":157,"line":2046},[155,68727,811],{"class":171},[155,68729,317],{"class":167},[155,68731,14170],{"class":171},[155,68733,68734],{"class":157,"line":2062},[155,68735,3994],{"class":161},[155,68737,68738],{"class":157,"line":2067},[155,68739,3999],{"class":161},[155,68741,68742,68744,68746],{"class":157,"line":2073},[155,68743,4004],{"class":171},[155,68745,4007],{"class":732},[155,68747,1238],{"class":171},[155,68749,68750],{"class":157,"line":2079},[155,68751,4014],{"class":161},[155,68753,68754,68756,68758],{"class":157,"line":2089},[155,68755,3627],{"class":171},[155,68757,317],{"class":167},[155,68759,4023],{"class":171},[155,68761,68762],{"class":157,"line":2095},[155,68763,4028],{"class":161},[155,68765,68766],{"class":157,"line":2106},[155,68767,4033],{"class":171},[155,68769,68770],{"class":157,"line":2112},[155,68771,217],{"emptyLinePlaceholder":216},[155,68773,68774],{"class":157,"line":2122},[155,68775,4042],{"class":161},[155,68777,68778],{"class":157,"line":2128},[155,68779,4047],{"class":161},[155,68781,68782,68784,68786,68788,68790,68792,68794],{"class":157,"line":2138},[155,68783,748],{"class":171},[155,68785,317],{"class":167},[155,68787,756],{"class":732},[155,68789,759],{"class":167},[155,68791,762],{"class":171},[155,68793,765],{"class":167},[155,68795,3724],{"class":732},[155,68797,68798,68800,68802],{"class":157,"line":2144},[155,68799,811],{"class":171},[155,68801,317],{"class":167},[155,68803,1829],{"class":171},[155,68805,68806],{"class":157,"line":2154},[155,68807,4076],{"class":161},[155,68809,68810],{"class":157,"line":2160},[155,68811,4081],{"class":161},[155,68813,68814,68816,68818,68820,68822,68824,68826],{"class":157,"line":2170},[155,68815,4086],{"class":171},[155,68817,317],{"class":167},[155,68819,4091],{"class":171},[155,68821,19884],{"class":732},[155,68823,332],{"class":171},[155,68825,19889],{"class":732},[155,68827,2845],{"class":171},[155,68829,68830,68832],{"class":157,"line":2176},[155,68831,3783],{"class":167},[155,68833,2477],{"class":171},[155,68835,68836],{"class":157,"line":2191},[155,68837,4152],{"class":161},[155,68839,68840,68842,68844,68846],{"class":157,"line":2197},[155,68841,2179],{"class":167},[155,68843,4159],{"class":171},[155,68845,1131],{"class":167},[155,68847,3802],{"class":171},[155,68849,68850,68852,68854],{"class":157,"line":2208},[155,68851,2200],{"class":171},[155,68853,317],{"class":167},[155,68855,2205],{"class":171},[155,68857,68858,68860,68862],{"class":157,"line":2214},[155,68859,2217],{"class":171},[155,68861,317],{"class":167},[155,68863,2222],{"class":171},[155,68865,68866],{"class":157,"line":2225},[155,68867,217],{"emptyLinePlaceholder":216},[155,68869,68870],{"class":157,"line":2231},[155,68871,4188],{"class":161},[155,68873,68874],{"class":157,"line":2237},[155,68875,2468],{"class":171},[155,68877,68878],{"class":157,"line":2243},[155,68879,4197],{"class":161},[155,68881,68882,68884,68886],{"class":157,"line":2249},[155,68883,2252],{"class":171},[155,68885,317],{"class":167},[155,68887,2257],{"class":171},[155,68889,68890],{"class":157,"line":2260},[155,68891,4210],{"class":161},[155,68893,68894,68896,68898,68900,68902,68904,68906],{"class":157,"line":2266},[155,68895,2269],{"class":171},[155,68897,317],{"class":167},[155,68899,2274],{"class":171},[155,68901,2277],{"class":323},[155,68903,317],{"class":167},[155,68905,329],{"class":263},[155,68907,363],{"class":171},[155,68909,68910],{"class":157,"line":2286},[155,68911,4231],{"class":161},[155,68913,68914,68916,68918],{"class":157,"line":2292},[155,68915,4236],{"class":171},[155,68917,317],{"class":167},[155,68919,4241],{"class":171},[155,68921,68922,68924,68926],{"class":157,"line":2303},[155,68923,4246],{"class":171},[155,68925,317],{"class":167},[155,68927,4251],{"class":171},[155,68929,68930,68932,68934,68936,68938,68940,68942,68944],{"class":157,"line":2309},[155,68931,4256],{"class":263},[155,68933,230],{"class":171},[155,68935,4261],{"class":732},[155,68937,4264],{"class":171},[155,68939,4267],{"class":732},[155,68941,332],{"class":171},[155,68943,4272],{"class":732},[155,68945,4275],{"class":171},[20011,68947,20013],{},{"title":39,"searchDepth":46,"depth":46,"links":68949},[68950,68951,68952,68953],{"id":16,"depth":121,"text":17},{"id":7448,"depth":121,"text":7449},{"id":10885,"depth":121,"text":10886},{"id":14901,"depth":121,"text":14902},{},{"title":5,"description":20020},{"id":68957,"title":68958,"body":68959,"description":20020,"extension":20021,"meta":68966,"navigation":216,"path":68967,"seo":68968,"stem":68969,"__hash__":68970},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":68960,"toc":68964},[68961],[10,68962,68958],{"id":68963},"_3yolo模型学习",{"title":39,"searchDepth":46,"depth":46,"links":68965},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":68958,"description":20020},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":68972,"title":68973,"body":68974,"description":68981,"extension":20021,"meta":68982,"navigation":216,"path":68984,"seo":68985,"stem":68986,"__hash__":68987},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":68975,"toc":68979},[68976],[24,68977,68978],{},"yolo模型还未补充",{"title":39,"searchDepth":46,"depth":46,"links":68980},[],"深度学习学习",{"category":68983},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":68973,"description":68981},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":68989,"title":68990,"body":68991,"description":20020,"extension":20021,"meta":69016,"navigation":216,"path":69017,"seo":69018,"stem":69019,"__hash__":69020},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":68992,"toc":69014},[68993,68996,68999,69004,69011],[10,68994,68990],{"id":68995},"_1工具",[24,68997,68998],{},"提示错误插件：有问题会提前报错",[24,69000,69001],{},[37,69002],{"alt":39,"src":69003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[24,69005,69006],{},[20318,69007,69010],{"href":69008,"rel":69009},"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",[43656],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[24,69012,69013],{},"alt键加上下箭头可以实现语句的移动",{"title":39,"searchDepth":46,"depth":46,"links":69015},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":68990,"description":20020},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":69022,"title":69023,"body":69024,"description":20020,"extension":20021,"meta":71888,"navigation":216,"path":71889,"seo":71890,"stem":71891,"__hash__":71892},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":69025,"toc":71839},[69026,69029,69033,69037,69042,69045,69050,69054,69061,69066,69073,69078,69085,69090,69094,69099,69102,69106,69111,69115,69120,69123,69126,69129,69132,69135,69138,69141,69144,69149,69154,69159,69163,69166,69169,69173,69178,69181,69189,69194,69211,69219,69224,69229,69234,69239,69244,69247,69252,69257,69261,69270,69275,69280,69284,69289,69292,69296,69301,69309,69314,69319,69322,69327,69332,69337,69340,69343,69346,69351,69356,69359,69364,69367,69372,69375,69378,69381,69386,69389,69392,69407,69412,69417,69422,69425,69428,69431,69445,69448,69453,69458,69461,69464,69467,69470,69473,69476,69479,69483,69487,69492,69496,69499,69504,69509,69512,69517,69520,69524,69529,69532,69535,69538,69541,69544,69547,69550,69553,69556,69560,69565,69570,69575,69578,69581,69585,69590,69593,69597,69600,69603,69608,69611,69614,69618,69622,69625,69630,69635,69638,69667,69672,69677,69682,69687,69691,69696,69700,69705,69708,69712,69716,69721,69725,69730,69735,69739,69744,69747,69749,69752,69757,69761,69766,69770,69774,69779,69784,69789,69794,69798,69803,69808,69813,69816,69819,69824,69827,69832,69837,69842,69847,69851,70658,70662,71005,71010,71013,71016,71019,71022,71025,71028,71031,71034,71036,71039,71041,71044,71048,71053,71056,71059,71062,71066,71071,71076,71096,71099,71103,71108,71113,71130,71134,71163,71167,71189,71191,71230,71238,71244,71248,71251,71254,71259,71264,71267,71270,71273,71278,71283,71286,71289,71292,71295,71298,71301,71304,71307,71310,71313,71316,71318,71321,71324,71327,71330,71333,71336,71339,71342,71346,71351,71354,71359,71362,71365,71368,71371,71374,71377,71380,71382,71385,71388,71391,71394,71397,71400,71404,71407,71416,71419,71424,71427,71432,71435,71438,71441,71444,71447,71450,71453,71457,71461,71464,71467,71472,71477,71482,71486,71491,71496,71499,71502,71505,71508,71511,71516,71519,71524,71526,71531,71534,71538,71543,71546,71549,71554,71558,71561,71566,71569,71572,71601,71606,71609,71612,71615,71618,71621,71625,71628,71714,71718,71721,71726,71731,71738,71741,71744,71747,71750,71753,71758,71763,71766,71769,71772,71775,71778,71781,71784,71787,71790,71792,71795,71799,71804,71809,71814,71817,71822,71827,71830,71833,71836],[10,69027,69023],{"id":69028},"_2基础语法",[20037,69030,69032],{"id":69031},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[14,69034,69036],{"id":69035},"_211-js组成","2.1.1 js组成",[28,69038,69039],{},[31,69040,69041],{},"js是编程语言，html和css不是编程语言，是标记语言",[24,69043,69044],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[28,69046,69047],{"start":46},[31,69048,69049],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[14,69051,69053],{"id":69052},"_212-js书写位置","2.1.2 js书写位置",[28,69055,69056],{},[31,69057,69058],{},[20234,69059,69060],{},"内部 JavaScript",[24,69062,69063],{},[37,69064],{"alt":39,"src":69065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[28,69067,69068],{"start":46},[31,69069,69070],{},[20234,69071,69072],{},"外部 JavaScript",[24,69074,69075],{},[37,69076],{"alt":39,"src":69077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[28,69079,69080],{"start":121},[31,69081,69082],{},[20234,69083,69084],{},"内联 JavaScript",[24,69086,69087],{},[37,69088],{"alt":39,"src":69089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[14,69091,69093],{"id":69092},"_213-javascript注释","2.1.3 JavaScript注释",[24,69095,69096],{},[37,69097],{"alt":39,"src":69098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[24,69100,69101],{},"alt+shift+a一定要记住！",[14,69103,69105],{"id":69104},"_214-javascript结束符","2.1.4 JavaScript结束符",[24,69107,69108],{},[37,69109],{"alt":39,"src":69110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[14,69112,69114],{"id":69113},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[28,69116,69117],{},[31,69118,69119],{},"输出语法：",[24,69121,69122],{},"①document.write('要出的内容')",[24,69124,69125],{},"向body内输出内容；",[24,69127,69128],{},"如果输出的内容写的是标签，也会被解析cheng",[24,69130,69131],{},"②alert('要出的内容')",[24,69133,69134],{},"页面弹出警告对话框",[24,69136,69137],{},"③console.log('控制台打印')",[24,69139,69140],{},"控制台输出语法，程序员调试使用",[24,69142,69143],{},"输入log就行，自动生成：",[24,69145,69146],{},[37,69147],{"alt":39,"src":69148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[28,69150,69151],{"start":46},[31,69152,69153],{},"输入语法：",[24,69155,69156],{},[37,69157],{"alt":39,"src":69158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[14,69160,69162],{"id":69161},"_2116-字面量","21.1.6 字面量",[24,69164,69165],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[24,69167,69168],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[20037,69170,69172],{"id":69171},"_22-变量","2.2 变量",[28,69174,69175],{},[31,69176,69177],{},"变量声明",[24,69179,69180],{},"let 变量名",[21052,69182,69183,69186],{},[31,69184,69185],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[31,69187,69188],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[28,69190,69191],{"start":46},[31,69192,69193],{},"变量赋值",[146,69195,69199],{"className":69196,"code":69197,"language":69198,"meta":39,"style":39},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[152,69200,69201,69206],{"__ignoreMap":39},[155,69202,69203],{"class":157,"line":158},[155,69204,69205],{"class":171},"let age\n",[155,69207,69208],{"class":157,"line":46},[155,69209,69210],{"class":171},"age=18\n",[28,69212,69213,69216],{"start":121},[31,69214,69215],{},"连这些（变量的初始化）：let age=18",[31,69217,69218],{},"更新变量",[24,69220,69221],{},[37,69222],{"alt":39,"src":69223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[28,69225,69226],{"start":194},[31,69227,69228],{},"声明多个变量",[24,69230,69231],{},[37,69232],{"alt":39,"src":69233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[28,69235,69236],{"start":200},[31,69237,69238],{},"变量命名规则与规范",[24,69240,69241],{},[37,69242],{"alt":39,"src":69243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[24,69245,69246],{},"遵守小驼峰！",[28,69248,69249],{"start":213},[31,69250,69251],{},"变量拓展-let和var的区别",[24,69253,69254],{},[37,69255],{"alt":39,"src":69256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[20037,69258,69260],{"id":69259},"_23-数组","2.3 数组",[146,69262,69264],{"className":69196,"code":69263,"language":69198,"meta":39,"style":39},"let arr = []\n",[152,69265,69266],{"__ignoreMap":39},[155,69267,69268],{"class":157,"line":158},[155,69269,69263],{"class":171},[24,69271,69272],{},[37,69273],{"alt":39,"src":69274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[24,69276,69277],{},[37,69278],{"alt":39,"src":69279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[20037,69281,69283],{"id":69282},"_24-常量","2.4 常量",[24,69285,69286],{},[37,69287],{"alt":39,"src":69288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[24,69290,69291],{},"const — 类似于 let ，但是变量的值无法被修改",[20037,69293,69295],{"id":69294},"_25-数据类型","2.5 数据类型",[24,69297,69298],{},[37,69299],{"alt":39,"src":69300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[28,69302,69303,69306],{},[31,69304,69305],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[31,69307,69308],{},"算数运算符：",[24,69310,69311],{},[37,69312],{"alt":39,"src":69313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[28,69315,69316],{"start":121},[31,69317,69318],{},"数字类型（Number）",[24,69320,69321],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[24,69323,69324],{},[37,69325],{"alt":39,"src":69326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[28,69328,69329],{"start":180},[31,69330,69331],{},"字符串类型（string）",[24,69333,69334],{},[37,69335],{"alt":39,"src":69336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[24,69338,69339],{},"反引号也是可以使用的",[24,69341,69342],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[24,69344,69345],{},"例如：document.write(\"我今年\"+age+\"岁\")",[28,69347,69348],{"start":194},[31,69349,69350],{},"模板字符串",[24,69352,69353],{},[37,69354],{"alt":39,"src":69355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[24,69357,69358],{},"类似于python的字符串格式化",[28,69360,69361],{"start":200},[31,69362,69363],{},"布尔类型",[24,69365,69366],{},"true 和 false",[28,69368,69369],{"start":213},[31,69370,69371],{},"未定义类型（underfined）",[24,69373,69374],{},"表示没有赋值",[24,69376,69377],{},"未定义类型是比较特殊的类型，只有一个值undefined",[24,69379,69380],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[28,69382,69383],{"start":220},[31,69384,69385],{},"null（空类型）",[24,69387,69388],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[24,69390,69391],{},"赋值了，但是内容为空",[146,69393,69395],{"className":69196,"code":69394,"language":69198,"meta":39,"style":39},"typeof null\n输出的是'object'，是一个对象数据类型\n",[152,69396,69397,69402],{"__ignoreMap":39},[155,69398,69399],{"class":157,"line":158},[155,69400,69401],{"class":171},"typeof null\n",[155,69403,69404],{"class":157,"line":46},[155,69405,69406],{"class":171},"输出的是'object'，是一个对象数据类型\n",[28,69408,69409],{"start":245},[31,69410,69411],{},"控制台检测数据类型",[24,69413,69414],{},[37,69415],{"alt":39,"src":69416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[28,69418,69419],{"start":251},[31,69420,69421],{},"类型转换",[24,69423,69424],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[24,69426,69427],{},"转换方式：隐式转换和显示转换",[24,69429,69430],{},"①隐式转换",[21052,69432,69433,69436,69439,69442],{},[31,69434,69435],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[31,69437,69438],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[31,69440,69441],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[31,69443,69444],{},"任何数据和字符串相加结果都是字符串",[24,69446,69447],{},"②显示转换",[24,69449,69450],{},[37,69451],{"alt":39,"src":69452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[24,69454,69455],{},[37,69456],{"alt":39,"src":69457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[24,69459,69460],{},"在输入的时候要用好隐式转换，简单写起来",[24,69462,69463],{},"let num = +prompt(’请输入数字：‘)",[24,69465,69466],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[24,69468,69469],{},"console.log(parseInt('12.333px'))",[24,69471,69472],{},"输出为：12",[24,69474,69475],{},"console.log(parseInt('a'a'a12.333px'))",[24,69477,69478],{},"输出：NaN",[20037,69480,69482],{"id":69481},"_26-运算符","2.6 运算符",[14,69484,69486],{"id":69485},"_261-赋值运算符","2.6.1 赋值运算符",[24,69488,69489],{},[37,69490],{"alt":39,"src":69491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[14,69493,69495],{"id":69494},"_262-一元运算符","2.6.2 一元运算符",[24,69497,69498],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[24,69500,69501],{},[37,69502],{"alt":39,"src":69503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[24,69505,69506],{},[37,69507],{"alt":39,"src":69508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[24,69510,69511],{},"两者的区别：",[24,69513,69514],{},[37,69515],{"alt":39,"src":69516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[24,69518,69519],{},"前置先自加；后置后加，代码执行完之后再加",[14,69521,69523],{"id":69522},"_263-比较运算符","2.6.3 比较运算符",[24,69525,69526],{},[37,69527],{"alt":39,"src":69528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[24,69530,69531],{},"比较运算符也有隐式转换",[24,69533,69534],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[24,69536,69537],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[24,69539,69540],{},"要使用三等，开发的时候",[24,69542,69543],{},"NaN不等于任何人，包括它自己",[24,69545,69546],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[24,69548,69549],{},"7\u002F10=0.7",[24,69551,69552],{},"最后：0.5+0.2=0.7",[24,69554,69555],{},"字符串比较，比较的是字符对应的ASCII码",[14,69557,69559],{"id":69558},"_264-逻辑运算符","2.6.4 逻辑运算符",[24,69561,69562],{},[37,69563],{"alt":39,"src":69564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[24,69566,69567],{},[37,69568],{"alt":39,"src":69569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[24,69571,69572],{},[37,69573],{"alt":39,"src":69574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[24,69576,69577],{},"上述题目选D",[24,69579,69580],{},"与真2假1；或真1假2",[14,69582,69584],{"id":69583},"_265-运算符优先级","2.6.5 运算符优先级",[24,69586,69587],{},[37,69588],{"alt":39,"src":69589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[24,69591,69592],{},"先算逻辑与，后算逻辑或",[20037,69594,69596],{"id":69595},"_27-语句","2.7 语句",[24,69598,69599],{},"表达式：是可以被求值的代码，会有结果给我们",[24,69601,69602],{},"语句：语句是可以被执行的代码，例如prompt()",[24,69604,69605],{},[37,69606],{"alt":39,"src":69607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[24,69609,69610],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[24,69612,69613],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[14,69615,69617],{"id":69616},"_271-分支语句","2.7.1 分支语句",[19,69619,69621],{"id":69620},"_2711-if分支语句","2.7.1.1 if分支语句",[24,69623,69624],{},"if语句单行简单的话，可以不写{}，写在一行就行",[28,69626,69627],{},[31,69628,69629],{},"单分支语句",[24,69631,69632],{},[37,69633],{"alt":39,"src":69634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[24,69636,69637],{},"除了0，所有数字都为真",[146,69639,69641],{"className":69196,"code":69640,"language":69198,"meta":39,"style":39},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[152,69642,69643,69648,69653,69658,69662],{"__ignoreMap":39},[155,69644,69645],{"class":157,"line":158},[155,69646,69647],{"class":171},"if（0) {\n",[155,69649,69650],{"class":157,"line":46},[155,69651,69652],{"class":171},"    let a=1\n",[155,69654,69655],{"class":157,"line":121},[155,69656,69657],{"class":171},"    alert(typeof a)\n",[155,69659,69660],{"class":157,"line":180},[155,69661,21475],{"class":171},[155,69663,69664],{"class":157,"line":194},[155,69665,69666],{"class":171},"不输出，括号为假\n",[28,69668,69669],{"start":46},[31,69670,69671],{},"双分支语句",[24,69673,69674],{},[37,69675],{"alt":39,"src":69676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[28,69678,69679],{"start":121},[31,69680,69681],{},"多分支语句",[24,69683,69684],{},[37,69685],{"alt":39,"src":69686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[19,69688,69690],{"id":69689},"_2712-三元运算符","2.7.1.2 三元运算符",[24,69692,69693],{},[37,69694],{"alt":39,"src":69695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[19,69697,69699],{"id":69698},"_2713-switch语句","2.7.1.3 switch语句",[24,69701,69702],{},[37,69703],{"alt":39,"src":69704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[24,69706,69707],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[14,69709,69711],{"id":69710},"_272-循环语句","2.7.2 循环语句",[19,69713,69715],{"id":69714},"_2721-断点演示","2.7.2.1 断点演示",[24,69717,69718],{},[37,69719],{"alt":39,"src":69720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[19,69722,69724],{"id":69723},"_2722-while循环","2.7.2.2 while循环",[24,69726,69727],{},[37,69728],{"alt":39,"src":69729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[24,69731,69732],{},[37,69733],{"alt":39,"src":69734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[19,69736,69738],{"id":69737},"_2723-for循环","2.7.2.3 for循环",[24,69740,69741],{},[37,69742],{"alt":39,"src":69743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[24,69745,69746],{},"for(;;) {",[24,69748,2711],{},[24,69750,69751],{},"表示无限循环",[24,69753,69754],{},[37,69755],{"alt":39,"src":69756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[19,69758,69760],{"id":69759},"_2724-循环的退出","2.7.2.4 循环的退出",[24,69762,69763],{},[37,69764],{"alt":39,"src":69765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[20037,69767,69769],{"id":69768},"_28-数组","2.8 数组",[14,69771,69773],{"id":69772},"_281-基础认识","2.8.1 基础认识",[24,69775,69776],{},[37,69777],{"alt":39,"src":69778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[24,69780,69781],{},[37,69782],{"alt":39,"src":69783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[24,69785,69786],{},[37,69787],{"alt":39,"src":69788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[24,69790,69791],{},[37,69792],{"alt":39,"src":69793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[14,69795,69797],{"id":69796},"_282-操作数组","2.8.2 操作数组",[24,69799,69800],{},[37,69801],{"alt":39,"src":69802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[28,69804,69805],{},[31,69806,69807],{},"添加元素",[24,69809,69810],{},[37,69811],{"alt":39,"src":69812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[24,69814,69815],{},"console.log(arr.push('green'))",[24,69817,69818],{},"输出结果：为新数组的长度",[24,69820,69821],{},[37,69822],{"alt":39,"src":69823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[24,69825,69826],{},"push用的非常多，一定要记住",[28,69828,69829],{},[31,69830,69831],{},"删除元素",[24,69833,69834],{},[37,69835],{"alt":39,"src":69836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[24,69838,69839],{},[37,69840],{"alt":39,"src":69841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[24,69843,69844],{},[37,69845],{"alt":39,"src":69846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[14,69848,69850],{"id":69849},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[146,69852,69854],{"className":69196,"code":69853,"language":69198,"meta":39,"style":39},"\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",[152,69855,69856,69871,69887,69891,69900,69918,69942,69964,69978,69986,69993,70005,70016,70020,70024,70031,70043,70058,70071,70090,70107,70122,70134,70146,70158,70162,70166,70177,70187,70199,70211,70223,70234,70238,70242,70254,70258,70272,70276,70280,70291,70305,70317,70331,70335,70344,70353,70357,70366,70370,70379,70384,70389,70402,70430,70435,70440,70465,70470,70474,70479,70484,70499,70503,70508,70538,70550,70566,70582,70596,70601,70608,70612,70617,70630,70638,70646,70650],{"__ignoreMap":39},[155,69857,69858,69861,69865,69868],{"class":157,"line":158},[155,69859,69860],{"class":171},"\u003C!",[155,69862,69864],{"class":69863},"s9eBZ","DOCTYPE",[155,69866,69867],{"class":226}," html",[155,69869,69870],{"class":171},">\n",[155,69872,69873,69875,69877,69880,69882,69885],{"class":157,"line":46},[155,69874,20959],{"class":171},[155,69876,69198],{"class":69863},[155,69878,69879],{"class":226}," lang",[155,69881,317],{"class":171},[155,69883,69884],{"class":732},"\"en\"",[155,69886,69870],{"class":171},[155,69888,69889],{"class":157,"line":121},[155,69890,217],{"emptyLinePlaceholder":216},[155,69892,69893,69895,69898],{"class":157,"line":180},[155,69894,20959],{"class":171},[155,69896,69897],{"class":69863},"head",[155,69899,69870],{"class":171},[155,69901,69902,69905,69908,69911,69913,69916],{"class":157,"line":194},[155,69903,69904],{"class":171},"    \u003C",[155,69906,69907],{"class":69863},"meta",[155,69909,69910],{"class":226}," charset",[155,69912,317],{"class":171},[155,69914,69915],{"class":732},"\"UTF-8\"",[155,69917,69870],{"class":171},[155,69919,69920,69922,69924,69927,69929,69932,69935,69937,69940],{"class":157,"line":200},[155,69921,69904],{"class":171},[155,69923,69907],{"class":69863},[155,69925,69926],{"class":226}," http-equiv",[155,69928,317],{"class":171},[155,69930,69931],{"class":732},"\"X-UA-Compatible\"",[155,69933,69934],{"class":226}," content",[155,69936,317],{"class":171},[155,69938,69939],{"class":732},"\"IE=edge\"",[155,69941,69870],{"class":171},[155,69943,69944,69946,69948,69950,69952,69955,69957,69959,69962],{"class":157,"line":213},[155,69945,69904],{"class":171},[155,69947,69907],{"class":69863},[155,69949,34745],{"class":226},[155,69951,317],{"class":171},[155,69953,69954],{"class":732},"\"viewport\"",[155,69956,69934],{"class":226},[155,69958,317],{"class":171},[155,69960,69961],{"class":732},"\"width=device-width, initial-scale=1.0\"",[155,69963,69870],{"class":171},[155,69965,69966,69968,69971,69974,69976],{"class":157,"line":220},[155,69967,69904],{"class":171},[155,69969,69970],{"class":69863},"title",[155,69972,69973],{"class":171},">Document\u003C\u002F",[155,69975,69970],{"class":69863},[155,69977,69870],{"class":171},[155,69979,69980,69982,69984],{"class":157,"line":245},[155,69981,69904],{"class":171},[155,69983,20011],{"class":69863},[155,69985,69870],{"class":171},[155,69987,69988,69991],{"class":157,"line":251},[155,69989,69990],{"class":69863},"        *",[155,69992,35397],{"class":171},[155,69994,69995,69998,70001,70003],{"class":157,"line":257},[155,69996,69997],{"class":263},"            margin",[155,69999,70000],{"class":171},": ",[155,70002,1109],{"class":263},[155,70004,21206],{"class":171},[155,70006,70007,70010,70012,70014],{"class":157,"line":270},[155,70008,70009],{"class":263},"            padding",[155,70011,70000],{"class":171},[155,70013,1109],{"class":263},[155,70015,21206],{"class":171},[155,70017,70018],{"class":157,"line":276},[155,70019,22414],{"class":171},[155,70021,70022],{"class":157,"line":297},[155,70023,217],{"emptyLinePlaceholder":216},[155,70025,70026,70029],{"class":157,"line":302},[155,70027,70028],{"class":226},"        .box",[155,70030,35397],{"class":171},[155,70032,70033,70036,70038,70041],{"class":157,"line":308},[155,70034,70035],{"class":263},"            display",[155,70037,70000],{"class":171},[155,70039,70040],{"class":263},"flex",[155,70042,21206],{"class":171},[155,70044,70045,70048,70050,70053,70056],{"class":157,"line":366},[155,70046,70047],{"class":263},"            width",[155,70049,70000],{"class":171},[155,70051,70052],{"class":263},"700",[155,70054,70055],{"class":167},"px",[155,70057,21206],{"class":171},[155,70059,70060,70063,70065,70067,70069],{"class":157,"line":379},[155,70061,70062],{"class":263},"            height",[155,70064,70000],{"class":171},[155,70066,23842],{"class":263},[155,70068,70055],{"class":167},[155,70070,21206],{"class":171},[155,70072,70073,70076,70078,70080,70082,70085,70088],{"class":157,"line":385},[155,70074,70075],{"class":263},"            border-left",[155,70077,70000],{"class":171},[155,70079,329],{"class":263},[155,70081,70055],{"class":167},[155,70083,70084],{"class":263}," solid",[155,70086,70087],{"class":263}," pink",[155,70089,21206],{"class":171},[155,70091,70092,70095,70097,70099,70101,70103,70105],{"class":157,"line":415},[155,70093,70094],{"class":263},"            border-bottom",[155,70096,70000],{"class":171},[155,70098,329],{"class":263},[155,70100,70055],{"class":167},[155,70102,70084],{"class":263},[155,70104,70087],{"class":263},[155,70106,21206],{"class":171},[155,70108,70109,70111,70113,70115,70117,70120],{"class":157,"line":452},[155,70110,69997],{"class":263},[155,70112,70000],{"class":171},[155,70114,20715],{"class":263},[155,70116,70055],{"class":167},[155,70118,70119],{"class":263}," auto",[155,70121,21206],{"class":171},[155,70123,70124,70127,70129,70132],{"class":157,"line":480},[155,70125,70126],{"class":263},"            justify-content",[155,70128,70000],{"class":171},[155,70130,70131],{"class":263},"space-around",[155,70133,21206],{"class":171},[155,70135,70136,70139,70141,70144],{"class":157,"line":486},[155,70137,70138],{"class":263},"            align-items",[155,70140,70000],{"class":171},[155,70142,70143],{"class":263},"flex-end",[155,70145,21206],{"class":171},[155,70147,70148,70151,70153,70156],{"class":157,"line":499},[155,70149,70150],{"class":263},"            text-align",[155,70152,70000],{"class":171},[155,70154,70155],{"class":263},"center",[155,70157,21206],{"class":171},[155,70159,70160],{"class":157,"line":505},[155,70161,22414],{"class":171},[155,70163,70164],{"class":157,"line":528},[155,70165,217],{"emptyLinePlaceholder":216},[155,70167,70168,70170,70172,70175],{"class":157,"line":549},[155,70169,70028],{"class":226},[155,70171,1148],{"class":167},[155,70173,70174],{"class":69863},"div",[155,70176,35397],{"class":171},[155,70178,70179,70181,70183,70185],{"class":157,"line":570},[155,70180,70035],{"class":263},[155,70182,70000],{"class":171},[155,70184,70040],{"class":263},[155,70186,21206],{"class":171},[155,70188,70189,70191,70193,70195,70197],{"class":157,"line":575},[155,70190,70047],{"class":263},[155,70192,70000],{"class":171},[155,70194,20715],{"class":263},[155,70196,70055],{"class":167},[155,70198,21206],{"class":171},[155,70200,70201,70204,70206,70209],{"class":157,"line":581},[155,70202,70203],{"class":263},"            background-color",[155,70205,70000],{"class":171},[155,70207,70208],{"class":263},"pink",[155,70210,21206],{"class":171},[155,70212,70213,70216,70218,70221],{"class":157,"line":592},[155,70214,70215],{"class":263},"            flex-direction",[155,70217,70000],{"class":171},[155,70219,70220],{"class":263},"column",[155,70222,21206],{"class":171},[155,70224,70225,70227,70229,70232],{"class":157,"line":610},[155,70226,70126],{"class":263},[155,70228,70000],{"class":171},[155,70230,70231],{"class":263},"space-between",[155,70233,21206],{"class":171},[155,70235,70236],{"class":157,"line":622},[155,70237,22414],{"class":171},[155,70239,70240],{"class":157,"line":638},[155,70241,217],{"emptyLinePlaceholder":216},[155,70243,70244,70246,70249,70252],{"class":157,"line":650},[155,70245,70028],{"class":226},[155,70247,70248],{"class":69863}," div",[155,70250,70251],{"class":69863}," span",[155,70253,35397],{"class":171},[155,70255,70256],{"class":157,"line":662},[155,70257,217],{"emptyLinePlaceholder":216},[155,70259,70260,70263,70265,70268,70270],{"class":157,"line":678},[155,70261,70262],{"class":263},"            margin-top",[155,70264,70000],{"class":171},[155,70266,70267],{"class":263},"-20",[155,70269,70055],{"class":167},[155,70271,21206],{"class":171},[155,70273,70274],{"class":157,"line":694},[155,70275,22414],{"class":171},[155,70277,70278],{"class":157,"line":706},[155,70279,217],{"emptyLinePlaceholder":216},[155,70281,70282,70284,70286,70289],{"class":157,"line":715},[155,70283,70028],{"class":226},[155,70285,70248],{"class":69863},[155,70287,70288],{"class":69863}," h4",[155,70290,35397],{"class":171},[155,70292,70293,70296,70298,70301,70303],{"class":157,"line":720},[155,70294,70295],{"class":263},"            margin-bottom",[155,70297,70000],{"class":171},[155,70299,70300],{"class":263},"-35",[155,70302,70055],{"class":167},[155,70304,21206],{"class":171},[155,70306,70307,70309,70311,70313,70315],{"class":157,"line":739},[155,70308,70047],{"class":263},[155,70310,70000],{"class":171},[155,70312,20431],{"class":263},[155,70314,70055],{"class":167},[155,70316,21206],{"class":171},[155,70318,70319,70322,70324,70327,70329],{"class":157,"line":745},[155,70320,70321],{"class":263},"            margin-left",[155,70323,70000],{"class":171},[155,70325,70326],{"class":263},"-10",[155,70328,70055],{"class":167},[155,70330,21206],{"class":171},[155,70332,70333],{"class":157,"line":773},[155,70334,22414],{"class":171},[155,70336,70337,70340,70342],{"class":157,"line":779},[155,70338,70339],{"class":171},"    \u003C\u002F",[155,70341,20011],{"class":69863},[155,70343,69870],{"class":171},[155,70345,70346,70349,70351],{"class":157,"line":785},[155,70347,70348],{"class":171},"\u003C\u002F",[155,70350,69897],{"class":69863},[155,70352,69870],{"class":171},[155,70354,70355],{"class":157,"line":791},[155,70356,217],{"emptyLinePlaceholder":216},[155,70358,70359,70361,70364],{"class":157,"line":796},[155,70360,20959],{"class":171},[155,70362,70363],{"class":69863},"body",[155,70365,69870],{"class":171},[155,70367,70368],{"class":157,"line":802},[155,70369,217],{"emptyLinePlaceholder":216},[155,70371,70372,70374,70377],{"class":157,"line":808},[155,70373,69904],{"class":171},[155,70375,70376],{"class":69863},"script",[155,70378,69870],{"class":171},[155,70380,70381],{"class":157,"line":819},[155,70382,70383],{"class":161},"        \u002F\u002F 1. 四次弹框效果\n",[155,70385,70386],{"class":157,"line":1832},[155,70387,70388],{"class":161},"        \u002F\u002F 声明一个新的数组\n",[155,70390,70391,70394,70397,70399],{"class":157,"line":1838},[155,70392,70393],{"class":167},"        let",[155,70395,70396],{"class":171}," arr ",[155,70398,317],{"class":167},[155,70400,70401],{"class":171}," []\n",[155,70403,70404,70406,70408,70411,70413,70415,70417,70419,70421,70424,70426,70428],{"class":157,"line":1844},[155,70405,2179],{"class":167},[155,70407,21561],{"class":171},[155,70409,70410],{"class":167},"let",[155,70412,29287],{"class":171},[155,70414,317],{"class":167},[155,70416,1277],{"class":263},[155,70418,29294],{"class":171},[155,70420,21498],{"class":167},[155,70422,70423],{"class":263}," 4",[155,70425,23086],{"class":171},[155,70427,22179],{"class":167},[155,70429,32269],{"class":171},[155,70431,70432],{"class":157,"line":1850},[155,70433,70434],{"class":161},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[155,70436,70437],{"class":157,"line":1861},[155,70438,70439],{"class":161},"            \u002F\u002F arr.push(num)\n",[155,70441,70442,70445,70448,70450,70453,70455,70458,70460,70463],{"class":157,"line":1866},[155,70443,70444],{"class":171},"            arr.",[155,70446,70447],{"class":226},"push",[155,70449,230],{"class":171},[155,70451,70452],{"class":226},"prompt",[155,70454,230],{"class":171},[155,70456,70457],{"class":732},"`请输入第${",[155,70459,20513],{"class":171},[155,70461,70462],{"class":732},"}季度的数据:`",[155,70464,1238],{"class":171},[155,70466,70467],{"class":157,"line":1871},[155,70468,70469],{"class":161},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[155,70471,70472],{"class":157,"line":1877},[155,70473,22414],{"class":171},[155,70475,70476],{"class":157,"line":1883},[155,70477,70478],{"class":161},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[155,70480,70481],{"class":157,"line":1894},[155,70482,70483],{"class":161},"        \u002F\u002F 盒子开头\n",[155,70485,70486,70489,70492,70494,70497],{"class":157,"line":1900},[155,70487,70488],{"class":171},"        document.",[155,70490,70491],{"class":226},"write",[155,70493,230],{"class":171},[155,70495,70496],{"class":732},"` \u003Cdiv class=\"box\">`",[155,70498,363],{"class":171},[155,70500,70501],{"class":157,"line":1911},[155,70502,217],{"emptyLinePlaceholder":216},[155,70504,70505],{"class":157,"line":1917},[155,70506,70507],{"class":161},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[155,70509,70510,70512,70514,70516,70518,70520,70522,70524,70526,70529,70532,70534,70536],{"class":157,"line":1927},[155,70511,2179],{"class":167},[155,70513,21561],{"class":171},[155,70515,70410],{"class":167},[155,70517,29287],{"class":171},[155,70519,317],{"class":167},[155,70521,1151],{"class":263},[155,70523,29294],{"class":171},[155,70525,20959],{"class":167},[155,70527,70528],{"class":171}," arr.",[155,70530,70531],{"class":263},"length",[155,70533,23086],{"class":171},[155,70535,22179],{"class":167},[155,70537,32269],{"class":171},[155,70539,70540,70543,70545,70547],{"class":157,"line":1933},[155,70541,70542],{"class":171},"            document.",[155,70544,70491],{"class":226},[155,70546,230],{"class":171},[155,70548,70549],{"class":732},"`\n",[155,70551,70552,70555,70557,70559,70561,70563],{"class":157,"line":1943},[155,70553,70554],{"class":732},"              \u003Cdiv style=\"height: ${",[155,70556,23749],{"class":171},[155,70558,4091],{"class":732},[155,70560,20513],{"class":171},[155,70562,2813],{"class":732},[155,70564,70565],{"class":732},"}px;\">\n",[155,70567,70568,70571,70573,70575,70577,70579],{"class":157,"line":1949},[155,70569,70570],{"class":732},"                \u003Cspan>${",[155,70572,23749],{"class":171},[155,70574,4091],{"class":732},[155,70576,20513],{"class":171},[155,70578,2813],{"class":732},[155,70580,70581],{"class":732},"}\u003C\u002Fspan>\n",[155,70583,70584,70587,70589,70591,70593],{"class":157,"line":1959},[155,70585,70586],{"class":732},"                \u003Ch4>第${",[155,70588,20513],{"class":171},[155,70590,15186],{"class":167},[155,70592,1277],{"class":263},[155,70594,70595],{"class":732},"}季度\u003C\u002Fh4>\n",[155,70597,70598],{"class":157,"line":1964},[155,70599,70600],{"class":732},"              \u003C\u002Fdiv>          \n",[155,70602,70603,70606],{"class":157,"line":1970},[155,70604,70605],{"class":732},"            `",[155,70607,363],{"class":171},[155,70609,70610],{"class":157,"line":1981},[155,70611,22414],{"class":171},[155,70613,70614],{"class":157,"line":1986},[155,70615,70616],{"class":161},"        \u002F\u002F 盒子结尾\n",[155,70618,70619,70621,70623,70625,70628],{"class":157,"line":1991},[155,70620,70488],{"class":171},[155,70622,70491],{"class":226},[155,70624,230],{"class":171},[155,70626,70627],{"class":732},"` \u003C\u002Fdiv>`",[155,70629,363],{"class":171},[155,70631,70632,70634,70636],{"class":157,"line":1997},[155,70633,70339],{"class":171},[155,70635,70376],{"class":69863},[155,70637,69870],{"class":171},[155,70639,70640,70642,70644],{"class":157,"line":2014},[155,70641,70348],{"class":171},[155,70643,70363],{"class":69863},[155,70645,69870],{"class":171},[155,70647,70648],{"class":157,"line":2046},[155,70649,217],{"emptyLinePlaceholder":216},[155,70651,70652,70654,70656],{"class":157,"line":2062},[155,70653,70348],{"class":171},[155,70655,69198],{"class":69863},[155,70657,69870],{"class":171},[14,70659,70661],{"id":70660},"_284-冒泡排序","2.8.4 冒泡排序",[146,70663,70665],{"className":69196,"code":70664,"language":69198,"meta":39,"style":39},"\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",[152,70666,70667,70677,70691,70695,70703,70718,70738,70750,70758,70762,70770,70778,70810,70843,70880,70885,70904,70909,70922,70937,70953,70957,70962,70966,70976,70985,70993,70997],{"__ignoreMap":39},[155,70668,70669,70671,70673,70675],{"class":157,"line":158},[155,70670,69860],{"class":171},[155,70672,69864],{"class":69863},[155,70674,69867],{"class":226},[155,70676,69870],{"class":171},[155,70678,70679,70681,70683,70685,70687,70689],{"class":157,"line":46},[155,70680,20959],{"class":171},[155,70682,69198],{"class":69863},[155,70684,69879],{"class":226},[155,70686,317],{"class":171},[155,70688,69884],{"class":732},[155,70690,69870],{"class":171},[155,70692,70693],{"class":157,"line":121},[155,70694,217],{"emptyLinePlaceholder":216},[155,70696,70697,70699,70701],{"class":157,"line":180},[155,70698,20959],{"class":171},[155,70700,69897],{"class":69863},[155,70702,69870],{"class":171},[155,70704,70705,70708,70710,70712,70714,70716],{"class":157,"line":194},[155,70706,70707],{"class":171},"  \u003C",[155,70709,69907],{"class":69863},[155,70711,69910],{"class":226},[155,70713,317],{"class":171},[155,70715,69915],{"class":732},[155,70717,69870],{"class":171},[155,70719,70720,70722,70724,70726,70728,70730,70732,70734,70736],{"class":157,"line":200},[155,70721,70707],{"class":171},[155,70723,69907],{"class":69863},[155,70725,34745],{"class":226},[155,70727,317],{"class":171},[155,70729,69954],{"class":732},[155,70731,69934],{"class":226},[155,70733,317],{"class":171},[155,70735,69961],{"class":732},[155,70737,69870],{"class":171},[155,70739,70740,70742,70744,70746,70748],{"class":157,"line":213},[155,70741,70707],{"class":171},[155,70743,69970],{"class":69863},[155,70745,69973],{"class":171},[155,70747,69970],{"class":69863},[155,70749,69870],{"class":171},[155,70751,70752,70754,70756],{"class":157,"line":220},[155,70753,70348],{"class":171},[155,70755,69897],{"class":69863},[155,70757,69870],{"class":171},[155,70759,70760],{"class":157,"line":245},[155,70761,217],{"emptyLinePlaceholder":216},[155,70763,70764,70766,70768],{"class":157,"line":251},[155,70765,20959],{"class":171},[155,70767,70363],{"class":69863},[155,70769,69870],{"class":171},[155,70771,70772,70774,70776],{"class":157,"line":257},[155,70773,70707],{"class":171},[155,70775,70376],{"class":69863},[155,70777,69870],{"class":171},[155,70779,70780,70783,70785,70787,70790,70792,70794,70796,70798,70800,70802,70804,70806,70808],{"class":157,"line":270},[155,70781,70782],{"class":167},"    let",[155,70784,70396],{"class":171},[155,70786,317],{"class":167},[155,70788,70789],{"class":171}," [",[155,70791,350],{"class":263},[155,70793,7589],{"class":171},[155,70795,1264],{"class":263},[155,70797,7589],{"class":171},[155,70799,4444],{"class":263},[155,70801,7589],{"class":171},[155,70803,360],{"class":263},[155,70805,7589],{"class":171},[155,70807,329],{"class":263},[155,70809,2845],{"class":171},[155,70811,70812,70814,70816,70818,70820,70822,70824,70826,70828,70830,70832,70835,70837,70839,70841],{"class":157,"line":276},[155,70813,2000],{"class":167},[155,70815,21561],{"class":171},[155,70817,70410],{"class":167},[155,70819,29287],{"class":171},[155,70821,317],{"class":167},[155,70823,1151],{"class":263},[155,70825,29294],{"class":171},[155,70827,20959],{"class":167},[155,70829,70528],{"class":171},[155,70831,70531],{"class":263},[155,70833,70834],{"class":167}," -",[155,70836,1277],{"class":263},[155,70838,23086],{"class":171},[155,70840,22179],{"class":167},[155,70842,32269],{"class":171},[155,70844,70845,70848,70850,70852,70854,70856,70858,70860,70862,70864,70866,70868,70870,70872,70874,70876,70878],{"class":157,"line":297},[155,70846,70847],{"class":167},"      for",[155,70849,21561],{"class":171},[155,70851,70410],{"class":167},[155,70853,29348],{"class":171},[155,70855,317],{"class":167},[155,70857,1151],{"class":263},[155,70859,29355],{"class":171},[155,70861,20959],{"class":167},[155,70863,70528],{"class":171},[155,70865,70531],{"class":263},[155,70867,70834],{"class":167},[155,70869,29287],{"class":171},[155,70871,2039],{"class":167},[155,70873,1277],{"class":263},[155,70875,29362],{"class":171},[155,70877,22179],{"class":167},[155,70879,32269],{"class":171},[155,70881,70882],{"class":157,"line":302},[155,70883,70884],{"class":161},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[155,70886,70887,70889,70892,70894,70897,70899,70901],{"class":157,"line":308},[155,70888,2803],{"class":167},[155,70890,70891],{"class":171}," (arr[j] ",[155,70893,1148],{"class":167},[155,70895,70896],{"class":171}," arr[j ",[155,70898,1274],{"class":167},[155,70900,1277],{"class":263},[155,70902,70903],{"class":171},"]) {\n",[155,70905,70906],{"class":157,"line":366},[155,70907,70908],{"class":161},"          \u002F\u002F 交换两个变量\n",[155,70910,70911,70914,70917,70919],{"class":157,"line":379},[155,70912,70913],{"class":167},"          let",[155,70915,70916],{"class":171}," tmp ",[155,70918,317],{"class":167},[155,70920,70921],{"class":171}," arr[j]\n",[155,70923,70924,70927,70929,70931,70933,70935],{"class":157,"line":385},[155,70925,70926],{"class":171},"          arr[j] ",[155,70928,317],{"class":167},[155,70930,70896],{"class":171},[155,70932,1274],{"class":167},[155,70934,1277],{"class":263},[155,70936,2845],{"class":171},[155,70938,70939,70942,70944,70946,70948,70950],{"class":157,"line":415},[155,70940,70941],{"class":171},"          arr[j ",[155,70943,1274],{"class":167},[155,70945,1277],{"class":263},[155,70947,24309],{"class":171},[155,70949,317],{"class":167},[155,70951,70952],{"class":171}," tmp\n",[155,70954,70955],{"class":157,"line":452},[155,70956,22414],{"class":171},[155,70958,70959],{"class":157,"line":480},[155,70960,70961],{"class":171},"      }\n",[155,70963,70964],{"class":157,"line":486},[155,70965,22074],{"class":171},[155,70967,70968,70971,70973],{"class":157,"line":499},[155,70969,70970],{"class":171},"    document.",[155,70972,70491],{"class":226},[155,70974,70975],{"class":171},"(arr)\n",[155,70977,70978,70981,70983],{"class":157,"line":505},[155,70979,70980],{"class":171},"  \u003C\u002F",[155,70982,70376],{"class":69863},[155,70984,69870],{"class":171},[155,70986,70987,70989,70991],{"class":157,"line":528},[155,70988,70348],{"class":171},[155,70990,70363],{"class":69863},[155,70992,69870],{"class":171},[155,70994,70995],{"class":157,"line":549},[155,70996,217],{"emptyLinePlaceholder":216},[155,70998,70999,71001,71003],{"class":157,"line":570},[155,71000,70348],{"class":171},[155,71002,69198],{"class":69863},[155,71004,69870],{"class":171},[24,71006,71007],{},[37,71008],{"alt":39,"src":71009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[24,71011,71012],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[24,71014,71015],{},"let arr = [4, 2, 5, 1, 3]",[24,71017,71018],{},"\u002F\u002F 1.升序排列写法",[24,71020,71021],{},"arr.sort(function (a, b) {",[24,71023,71024],{},"return a - b",[24,71026,71027],{},"})",[24,71029,71030],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[24,71032,71033],{},"\u002F\u002F 降序排列写法",[24,71035,71021],{},[24,71037,71038],{},"return b - a",[24,71040,71027],{},[24,71042,71043],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[20037,71045,71047],{"id":71046},"_29-函数","2.9 函数",[24,71049,71050],{},[37,71051],{"alt":39,"src":71052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[24,71054,71055],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[24,71057,71058],{},"函数的声明用function",[24,71060,71061],{},"函数里边可以嵌套函数",[14,71063,71065],{"id":71064},"_291-函数传参","2.9.1 函数传参",[24,71067,71068],{},[37,71069],{"alt":39,"src":71070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[24,71072,71073],{},[37,71074],{"alt":39,"src":71075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[21052,71077,71078,71081,71084,71087,71090,71093],{},[31,71079,71080],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[31,71082,71083],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[31,71085,71086],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[31,71088,71089],{},"开发中尽量保持形参和实参个数一致",[31,71091,71092],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[31,71094,71095],{},"形参只在函数中有用，所以不需要进行声明这个变量",[24,71097,71098],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[14,71100,71102],{"id":71101},"_292-函数的返回值","2.9.2 函数的返回值",[24,71104,71105],{},[37,71106],{"alt":39,"src":71107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[24,71109,71110],{},[37,71111],{"alt":39,"src":71112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[21052,71114,71115,71118,71121,71124,71127],{},[31,71116,71117],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[31,71119,71120],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[31,71122,71123],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[31,71125,71126],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[31,71128,71129],{},"断点调试:进入函数内部看执行过程F11",[14,71131,71133],{"id":71132},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[146,71135,71137],{"className":69196,"code":71136,"language":69198,"meta":39,"style":39},"    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",[152,71138,71139,71144,71149,71153,71158],{"__ignoreMap":39},[155,71140,71141],{"class":157,"line":158},[155,71142,71143],{"class":171},"    function fn(a, b) {\n",[155,71145,71146],{"class":157,"line":46},[155,71147,71148],{"class":171},"      console.log(a + b);\n",[155,71150,71151],{"class":157,"line":121},[155,71152,22074],{"class":171},[155,71154,71155],{"class":157,"line":180},[155,71156,71157],{"class":171},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[155,71159,71160],{"class":157,"line":194},[155,71161,71162],{"class":171},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[14,71164,71166],{"id":71165},"_294-作用域","2.9.4 作用域",[21052,71168,71169,71175,71180,71183,71186],{},[31,71170,71171,71172],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[20234,71173,71174],{},"作用域",[31,71176,71177],{},[20234,71178,71179],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[31,71181,71182],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[31,71184,71185],{},"函数内部可以直接所使用全局变量",[31,71187,71188],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[24,71190,34460],{},[146,71192,71194],{"className":69196,"code":71193,"language":69198,"meta":39,"style":39},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[152,71195,71196,71201,71206,71210,71215,71220,71225],{"__ignoreMap":39},[155,71197,71198],{"class":157,"line":158},[155,71199,71200],{"class":171},"    function fun() {\n",[155,71202,71203],{"class":157,"line":46},[155,71204,71205],{"class":171},"      num = 10\n",[155,71207,71208],{"class":157,"line":121},[155,71209,22074],{"class":171},[155,71211,71212],{"class":157,"line":180},[155,71213,71214],{"class":171},"    fun()\n",[155,71216,71217],{"class":157,"line":194},[155,71218,71219],{"class":171},"    console.log(num)\n",[155,71221,71222],{"class":157,"line":200},[155,71223,71224],{"class":171},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[155,71226,71227],{"class":157,"line":213},[155,71228,71229],{"class":171},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[21052,71231,71232,71235],{},[31,71233,71234],{},"函数内部的形参可以看做是局部变量",[31,71236,71237],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[24,71239,71240,71241],{},"变量访问原则： ",[20234,71242,71243],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[14,71245,71247],{"id":71246},"_295-匿名函数","2.9.5 匿名函数",[24,71249,71250],{},"函数可以分为具名函数和匿名函数",[24,71252,71253],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[28,71255,71256],{},[31,71257,71258],{},"函数表达式",[24,71260,71261],{},[37,71262],{"alt":39,"src":71263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[24,71265,71266],{},"里边也可以写参数",[24,71268,71269],{},"具名函数调用位置可以随意调整；",[24,71271,71272],{},"匿名函数函数表达式形式只能在声明后才可以使用",[28,71274,71275],{"start":46},[31,71276,71277],{},"立即执行函数",[24,71279,71280],{},[37,71281],{"alt":39,"src":71282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[24,71284,71285],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[24,71287,71288],{},"写法：两个小括号，然后在第一个小括号中写function",[24,71290,71291],{},"(function () {})();",[24,71293,71294],{},"不要落下最后的;",[24,71296,71297],{},"立即执行函数必须要加;",[24,71299,71300],{},"分号写前写后都没问题",[24,71302,71303],{},"写前：",[24,71305,71306],{},"(function() {})()",[24,71308,71309],{},";(function () {})();",[24,71311,71312],{},"写后:",[24,71314,71315],{},"(function() {})();",[24,71317,71291],{},[24,71319,71320],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[24,71322,71323],{},"还有一种写法：",[24,71325,71326],{},"(function(){}());",[24,71328,71329],{},"或者:",[24,71331,71332],{},"!function(){}();",[24,71334,71335],{},"立即执行函数有时候也是可以加名字的：",[24,71337,71338],{},"(function flexible(window,document) {}(window,document));",[24,71340,71341],{},"省一些调用方法",[14,71343,71345],{"id":71344},"_296-逻辑中断","2.9.6 逻辑中断!!!",[24,71347,71348],{},[37,71349],{"alt":39,"src":71350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[24,71352,71353],{},"这样就不用非得给x,y初始化了",[24,71355,71356],{},[37,71357],{"alt":39,"src":71358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[24,71360,71361],{},"代码执行时先看左边",[24,71363,71364],{},"例如：console.log(false && 3+5)",[24,71366,71367],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[24,71369,71370],{},"&&都是真时，就返回最后一个真值",[24,71372,71373],{},"console.log(11 && 22)",[24,71375,71376],{},"输出22",[24,71378,71379],{},"逻辑与：遇真则真",[24,71381,34460],{},[24,71383,71384],{},"let age=1",[24,71386,71387],{},"console.log(11 || age++)",[24,71389,71390],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[24,71392,71393],{},"console.log(11 || 22)",[24,71395,71396],{},"||逻辑或遇到真就直接输出，输出结果为11",[24,71398,71399],{},"||如果都是假的话，就取最后一个假的值了",[14,71401,71403],{"id":71402},"_297-转换为boolean型","2.9.7 转换为Boolean型",[24,71405,71406],{},"显示转换：",[24,71408,71409,71412,71413],{},[20234,71410,71411],{},"记忆","： ",[20234,71414,71415],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[24,71417,71418],{},"空字符串为假，其他字符串全为真",[24,71420,71421],{},[37,71422],{"alt":39,"src":71423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[24,71425,71426],{},"隐式转换：",[24,71428,71429],{},[37,71430],{"alt":39,"src":71431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[24,71433,71434],{},"隐式转换:",[24,71436,71437],{},"null+3=3",[24,71439,71440],{},"undefined+3=NaN",[24,71442,71443],{},"null==undefined 输出true,他两个都当0看",[24,71445,71446],{},"null===undefined 输出false",[24,71448,71449],{},"undefined做任何操作都是NaN",[24,71451,71452],{},"NaN不等于NaN，NaN表示计算错误",[20037,71454,71456],{"id":71455},"_210-对象","2.10 对象",[14,71458,71460],{"id":71459},"_2101-对象的介绍","2.10.1 对象的介绍",[24,71462,71463],{},"对象也是一种数据类型，里边的数据是无序的",[24,71465,71466],{},"对象由属性和方法组成",[24,71468,71469],{},[37,71470],{"alt":39,"src":71471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[24,71473,71474],{},[37,71475],{"alt":39,"src":71476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[24,71478,71479],{},[37,71480],{"alt":39,"src":71481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[14,71483,71485],{"id":71484},"_2102-对象属性","2.10.2 对象属性",[24,71487,71488],{},[37,71489],{"alt":39,"src":71490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[28,71492,71493],{},[31,71494,71495],{},"查询对象",[24,71497,71498],{},"对象名.属性 goods.uname",[24,71500,71501],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[24,71503,71504],{},"不带字符串的属性名也可以使用 对象名['属性名']",[24,71506,71507],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[24,71509,71510],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[28,71512,71513],{"start":46},[31,71514,71515],{},"重新赋值",[24,71517,71518],{},"对象名.属性=新值",[28,71520,71521],{"start":121},[31,71522,71523],{},"增加新数据",[24,71525,71518],{},[28,71527,71528],{"start":180},[31,71529,71530],{},"删除对象中的属性",[24,71532,71533],{},"delete 对象名.属性",[14,71535,71537],{"id":71536},"_2103-对象方法","2.10.3 对象方法",[24,71539,71540],{},[37,71541],{"alt":39,"src":71542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[24,71544,71545],{},"后边跟的是匿名函数",[24,71547,71548],{},"对象外面的叫函数；对象内部的叫方法",[24,71550,71551],{},[37,71552],{"alt":39,"src":71553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[14,71555,71557],{"id":71556},"_2104-遍历对象","2.10.4 遍历对象",[24,71559,71560],{},"理解为加括号的python字典遍历",[24,71562,71563],{},[37,71564],{"alt":39,"src":71565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[24,71567,71568],{},"k是字符串类型",[24,71570,71571],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[146,71573,71575],{"className":69196,"code":71574,"language":69198,"meta":39,"style":39},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[152,71576,71577,71582,71587,71592,71597],{"__ignoreMap":39},[155,71578,71579],{"class":157,"line":158},[155,71580,71581],{"class":171},"   let arr = [1, 2, 3]\n",[155,71583,71584],{"class":157,"line":46},[155,71585,71586],{"class":171},"    for (let k in arr) {\n",[155,71588,71589],{"class":157,"line":121},[155,71590,71591],{"class":171},"      console.log(k)\n",[155,71593,71594],{"class":157,"line":180},[155,71595,71596],{"class":171},"      console.log(arr[k])\n",[155,71598,71599],{"class":157,"line":194},[155,71600,22074],{"class":171},[24,71602,71603],{},[37,71604],{"alt":39,"src":71605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[24,71607,71608],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[24,71610,71611],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[24,71613,71614],{},"for in 得到的k是属性名",[70376,71616,71617],{},"\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",[24,71619,71620],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[14,71622,71624],{"id":71623},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[24,71626,71627],{},"数组中放对象信息",[146,71629,71633],{"className":71630,"code":71631,"language":71632,"meta":39,"style":39},"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",[152,71634,71635,71643,71648,71653,71658,71663,71668,71673,71678,71683,71688,71693,71698,71702,71706],{"__ignoreMap":39},[155,71636,71637,71639,71641],{"class":157,"line":158},[155,71638,20959],{"class":171},[155,71640,70376],{"class":69863},[155,71642,69870],{"class":171},[155,71644,71645],{"class":157,"line":46},[155,71646,71647],{"class":171},"    let students = [\n",[155,71649,71650],{"class":157,"line":121},[155,71651,71652],{"class":171},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[155,71654,71655],{"class":157,"line":180},[155,71656,71657],{"class":171},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[155,71659,71660],{"class":157,"line":194},[155,71661,71662],{"class":171},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[155,71664,71665],{"class":157,"line":200},[155,71666,71667],{"class":171},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[155,71669,71670],{"class":157,"line":213},[155,71671,71672],{"class":171},"    ]\n",[155,71674,71675],{"class":157,"line":220},[155,71676,71677],{"class":171},"    for (let i = 0; i \u003C students.length; i++) {\n",[155,71679,71680],{"class":157,"line":245},[155,71681,71682],{"class":171},"      for (let k in students[i]) {\n",[155,71684,71685],{"class":157,"line":251},[155,71686,71687],{"class":171},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[155,71689,71690],{"class":157,"line":257},[155,71691,71692],{"class":171},"        \u002F\u002F输出每个人的名字：\n",[155,71694,71695],{"class":157,"line":270},[155,71696,71697],{"class":171},"        \u002F\u002Fconsole.log(students[i].name)\n",[155,71699,71700],{"class":157,"line":276},[155,71701,70961],{"class":171},[155,71703,71704],{"class":157,"line":297},[155,71705,22074],{"class":171},[155,71707,71708,71710,71712],{"class":157,"line":302},[155,71709,70980],{"class":171},[155,71711,70376],{"class":69863},[155,71713,69870],{"class":171},[14,71715,71717],{"id":71716},"_2106-内置对象","2.10.6 内置对象",[24,71719,71720],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[28,71722,71723],{},[31,71724,71725],{},"数学对象Math",[24,71727,71728],{},[37,71729],{"alt":39,"src":71730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[24,71732,71733],{},[20318,71734,71737],{"href":71735,"rel":71736},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[43656],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[24,71739,71740],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[24,71742,71743],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[24,71745,71746],{},"数组不可以使用Math中的max,min来求最大值与最小值",[24,71748,71749],{},"null是一个空对象，可以认为：null类似于let obj={}",[24,71751,71752],{},"null属于对象数据类型",[28,71754,71755],{"start":46},[31,71756,71757],{},"生成任意范围随机数",[24,71759,71760],{},[37,71761],{"alt":39,"src":71762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[24,71764,71765],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[24,71767,71768],{},"乘以几就取不到几",[24,71770,71771],{},"取数组中的随机元素：",[24,71773,71774],{},"let arr = ['red', 'green', 'blue']",[24,71776,71777],{},"let random = Math.floor(Math.random() * arr.length)",[24,71779,71780],{},"console.log(arr[random])",[24,71782,71783],{},"这个函数得到的是全闭区间",[24,71785,71786],{},"function getRandom(N, M) {",[24,71788,71789],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[24,71791,2711],{},[24,71793,71794],{},"console.log(getRandom(4, 8))",[14,71796,71798],{"id":71797},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[24,71800,71801],{},[37,71802],{"alt":39,"src":71803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[24,71805,71806],{},[37,71807],{"alt":39,"src":71808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[24,71810,71811],{},[37,71812],{"alt":39,"src":71813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[24,71815,71816],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[24,71818,71819],{},[37,71820],{"alt":39,"src":71821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[24,71823,71824],{},[37,71825],{"alt":39,"src":71826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[24,71828,71829],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[24,71831,71832],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[24,71834,71835],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[20011,71837,71838],{},"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":39,"searchDepth":46,"depth":46,"links":71840},[71841,71849,71850,71851,71852,71853,71860,71864,71870,71879],{"id":69031,"depth":46,"text":69032,"children":71842},[71843,71844,71845,71846,71847,71848],{"id":69035,"depth":121,"text":69036},{"id":69052,"depth":121,"text":69053},{"id":69092,"depth":121,"text":69093},{"id":69104,"depth":121,"text":69105},{"id":69113,"depth":121,"text":69114},{"id":69161,"depth":121,"text":69162},{"id":69171,"depth":46,"text":69172},{"id":69259,"depth":46,"text":69260},{"id":69282,"depth":46,"text":69283},{"id":69294,"depth":46,"text":69295},{"id":69481,"depth":46,"text":69482,"children":71854},[71855,71856,71857,71858,71859],{"id":69485,"depth":121,"text":69486},{"id":69494,"depth":121,"text":69495},{"id":69522,"depth":121,"text":69523},{"id":69558,"depth":121,"text":69559},{"id":69583,"depth":121,"text":69584},{"id":69595,"depth":46,"text":69596,"children":71861},[71862,71863],{"id":69616,"depth":121,"text":69617},{"id":69710,"depth":121,"text":69711},{"id":69768,"depth":46,"text":69769,"children":71865},[71866,71867,71868,71869],{"id":69772,"depth":121,"text":69773},{"id":69796,"depth":121,"text":69797},{"id":69849,"depth":121,"text":69850},{"id":70660,"depth":121,"text":70661},{"id":71046,"depth":46,"text":71047,"children":71871},[71872,71873,71874,71875,71876,71877,71878],{"id":71064,"depth":121,"text":71065},{"id":71101,"depth":121,"text":71102},{"id":71132,"depth":121,"text":71133},{"id":71165,"depth":121,"text":71166},{"id":71246,"depth":121,"text":71247},{"id":71344,"depth":121,"text":71345},{"id":71402,"depth":121,"text":71403},{"id":71455,"depth":46,"text":71456,"children":71880},[71881,71882,71883,71884,71885,71886,71887],{"id":71459,"depth":121,"text":71460},{"id":71484,"depth":121,"text":71485},{"id":71536,"depth":121,"text":71537},{"id":71556,"depth":121,"text":71557},{"id":71623,"depth":121,"text":71624},{"id":71716,"depth":121,"text":71717},{"id":71797,"depth":121,"text":71798},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":69023,"description":20020},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":71894,"title":71895,"body":71896,"description":20020,"extension":20021,"meta":95236,"navigation":216,"path":95237,"seo":95238,"stem":95239,"__hash__":95240},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":71897,"toc":95176},[71898,71901,71904,71907,71912,71915,71918,71921,71925,71929,71935,71940,71948,71955,71958,71962,71967,71972,71977,71980,71983,71994,71997,72001,72004,72007,72012,72017,72022,72025,72028,72120,72123,72128,72131,72136,72139,72142,72147,72150,72155,72159,72162,72176,72180,72185,72188,72191,72195,72200,72203,72207,72211,72216,72220,72225,72228,72231,72234,72237,72240,72243,72248,72253,72281,72284,72287,72290,72295,72298,72301,72304,72307,72311,72340,72344,72349,72354,72357,72360,72363,72368,72483,72488,72493,72654,72659,72662,72666,72671,72676,72679,72682,72685,72688,72691,72694,72697,72700,72703,72706,72709,72712,72715,72718,72720,72723,72726,72729,72734,72738,73135,73138,73144,73148,73153,74435,74440,74443,74446,74449,74454,75650,75654,75660,75665,75668,75673,75678,75682,75686,75691,75694,75699,75702,75705,75709,76617,76620,76624,76845,76848,76851,76854,77080,77083,77307,77310,77314,77319,77322,77325,77553,77556,77589,77592,77596,77601,77605,77608,77611,77614,77617,77620,77623,77626,77631,78911,78915,78918,80011,80015,80018,80021,80024,80027,80031,80034,80037,80039,80047,81528,81532,81535,81538,81541,81750,81753,81757,81761,81766,81771,81774,81777,81782,81786,81791,81794,81903,81907,81912,81917,81920,81923,81927,81932,81937,81942,81945,81948,81959,81962,81967,81972,81975,81978,82051,82055,82060,82063,82065,82076,82080,82085,83411,83414,83417,83420,83422,83425,83428,83431,83434,83437,83440,83443,83446,83449,83452,83455,83458,83460,83462,83465,83469,84563,84566,84569,84585,84599,84602,84607,84613,84618,84622,84626,84631,84635,84640,85082,85087,85090,85094,85099,85102,85105,85109,85114,85118,85123,85128,85132,85137,85142,85145,85150,85155,85159,85164,85169,85273,85276,85280,85285,85651,85654,85657,85660,85663,85666,85669,85672,85675,86971,86975,86980,86985,86988,86991,86994,86997,86999,87004,87009,87012,87016,87021,87026,87031,87034,87037,87040,87043,87046,87051,87054,87058,87063,87068,87072,87077,87080,87085,87088,87091,87094,87097,87100,87105,87108,87111,87114,87117,87121,87126,87129,87133,87138,87141,87144,87148,87177,87180,87184,87188,87193,87197,87202,87205,87208,87211,87214,87217,87220,87223,87226,87229,87232,87235,87238,87241,87244,87248,87253,87258,87261,87265,87269,87274,87277,87281,87284,87287,87292,87297,87302,87307,87312,87315,87318,87323,87328,87332,87337,87340,87345,87348,87351,87354,87357,87362,87365,87374,87378,87383,87386,87389,87393,87396,87401,87405,87408,87414,87420,87424,87450,87453,89014,89017,89513,89516,89521,89526,89531,89535,89540,89545,89550,89554,89559,89562,89565,89568,89571,89575,89578,89583,89586,89591,89595,89600,89603,89608,89613,89618,89621,89624,89629,89634,89637,89640,89644,89647,89652,89655,89660,89663,89668,89673,89678,89681,89686,89751,89754,89765,89769,89774,89946,89950,89955,89958,89961,89964,89968,89979,89983,89986,89991,89996,89999,90002,90005,90008,90011,90013,90016,90019,90022,90027,90030,90035,90038,90042,90045,90048,90062,90066,90069,90124,90129,90132,90135,90140,90143,90147,90152,90282,90286,90291,90296,90377,90382,90386,90389,90394,90399,90405,90408,90411,90414,90418,90423,90426,90437,90441,90458,93505,93509,93512,93515,93518,93539,93543,93546,93554,93557,93562,93565,93568,93573,93578,93582,93603,93607,93612,93615,93618,93621,93624,93628,93633,93636,93640,93645,93648,93653,93656,93661,93664,93669,94872,94876,94881,94884,94889,95173],[10,71899,71895],{"id":71900},"_3web-apis",[24,71902,71903],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[24,71905,71906],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[24,71908,71909],{},[37,71910],{"alt":39,"src":71911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[24,71913,71914],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[24,71916,71917],{},"建议数组和对象使用 const 来声明",[24,71919,71920],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[20037,71922,71924],{"id":71923},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[14,71926,71928],{"id":71927},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[24,71930,71931,71934],{},[152,71932,71933],{},"document"," = HTML 文件解析后的对象化表示；",[24,71936,71937,71939],{},[152,71938,71933],{}," ≠ HTML 文件本身",[24,71941,71942,71947],{},[20234,71943,71944],{},[152,71945,71946],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[24,71949,71950,71954],{},[20234,71951,71952],{},[152,71953,71933],{}," ：容器里的内容，代表当前加载的网页（DOM）",[24,71956,71957],{},"document实际上为window.document的简写",[14,71959,71961],{"id":71960},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[24,71963,71964],{},[37,71965],{"alt":39,"src":71966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[24,71968,71969],{},[37,71970],{"alt":39,"src":71971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[24,71973,71974],{},[37,71975],{"alt":39,"src":71976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[24,71978,71979],{},"console.dir()",[24,71981,71982],{},"dir用来打印对象",[21052,71984,71985,71988,71991],{},[31,71986,71987],{},"任何一个标签，都是一个对象",[31,71989,71990],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[31,71992,71993],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[24,71995,71996],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[14,71998,72000],{"id":71999},"_312-获取dom对象","3.1.2 获取DoM对象",[24,72002,72003],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[24,72005,72006],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[24,72008,72009],{},[20234,72010,72011],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[28,72013,72014],{},[31,72015,72016],{},"利用CSS选择器来获取标签元素",[24,72018,72019],{},[37,72020],{"alt":39,"src":72021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[24,72023,72024],{},"里边的选择器必须必须加引号！！！",[24,72026,72027],{},"只选择第一个元素",[146,72029,72031],{"className":71630,"code":72030,"language":71632,"meta":39,"style":39},"\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",[152,72032,72033,72041,72062,72081,72089,72094,72099,72104,72112],{"__ignoreMap":39},[155,72034,72035,72037,72039],{"class":157,"line":158},[155,72036,20959],{"class":171},[155,72038,70363],{"class":69863},[155,72040,69870],{"class":171},[155,72042,72043,72045,72047,72050,72052,72055,72058,72060],{"class":157,"line":46},[155,72044,70707],{"class":171},[155,72046,70174],{"class":69863},[155,72048,72049],{"class":226}," class",[155,72051,317],{"class":171},[155,72053,72054],{"class":732},"\"box\"",[155,72056,72057],{"class":171},">123\u003C\u002F",[155,72059,70174],{"class":69863},[155,72061,69870],{"class":171},[155,72063,72064,72066,72068,72070,72072,72074,72077,72079],{"class":157,"line":121},[155,72065,70707],{"class":171},[155,72067,70174],{"class":69863},[155,72069,72049],{"class":226},[155,72071,317],{"class":171},[155,72073,72054],{"class":732},[155,72075,72076],{"class":171},">456\u003C\u002F",[155,72078,70174],{"class":69863},[155,72080,69870],{"class":171},[155,72082,72083,72085,72087],{"class":157,"line":180},[155,72084,70707],{"class":171},[155,72086,70376],{"class":69863},[155,72088,69870],{"class":171},[155,72090,72091],{"class":157,"line":194},[155,72092,72093],{"class":171},"    \u002F\u002F 1.获取匹配的第一个元素\n",[155,72095,72096],{"class":157,"line":200},[155,72097,72098],{"class":171},"    const box = document.querySelector('div')\n",[155,72100,72101],{"class":157,"line":213},[155,72102,72103],{"class":171},"    console.dir(box)\n",[155,72105,72106,72108,72110],{"class":157,"line":220},[155,72107,70980],{"class":171},[155,72109,70376],{"class":69863},[155,72111,69870],{"class":171},[155,72113,72114,72116,72118],{"class":157,"line":245},[155,72115,70348],{"class":171},[155,72117,70363],{"class":69863},[155,72119,69870],{"class":171},[24,72121,72122],{},"只选123，不选456",[24,72124,72125],{},[37,72126],{"alt":39,"src":72127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[24,72129,72130],{},"返回的是一个数组的集合，不能对其进行直接修改",[24,72132,72133],{},[37,72134],{"alt":39,"src":72135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[24,72137,72138],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[24,72140,72141],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[28,72143,72144],{"start":46},[31,72145,72146],{},"其他方法来获取标签元素",[24,72148,72149],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[24,72151,72152],{},[37,72153],{"alt":39,"src":72154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[14,72156,72158],{"id":72157},"_313-操作元素的内容","3.1.3 操作元素的内容",[24,72160,72161],{},"设置修改DOM元素内容有两种方式：",[21052,72163,72164,72167,72170,72173],{},[31,72165,72166],{},"元素.innerText=''",[31,72168,72169],{},"元素.innerHTML=''",[31,72171,72172],{},"不写字符串输出数字也是可以的",[31,72174,72175],{},"元素.innerHtml=1",[19,72177,72179],{"id":72178},"_3131-innertext","3.1.3.1 innerText",[24,72181,72182],{},[37,72183],{"alt":39,"src":72184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[24,72186,72187],{},"思路：实现了修改盒子中的内容！",[24,72189,72190],{},"它只显示纯文本，不解析标签",[19,72192,72194],{"id":72193},"_3132-innerhtml","3.1.3.2 innerHTML",[24,72196,72197],{},[37,72198],{"alt":39,"src":72199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[24,72201,72202],{},"相比于innerText，他的强大之处在于可以解析标签",[14,72204,72206],{"id":72205},"_314-操作元素属性","3.1.4 操作元素属性",[19,72208,72210],{"id":72209},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[24,72212,72213],{},[37,72214],{"alt":39,"src":72215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[19,72217,72219],{"id":72218},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[24,72221,72222],{},[37,72223],{"alt":39,"src":72224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[24,72226,72227],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[24,72229,72230],{},"div.style.backgroundColor = 'hotpink'",[24,72232,72233],{},"如果按照css的写法，-表示减，就会出错",[24,72235,72236],{},"body元素不需要再获取，直接用就行！！！！！！",[24,72238,72239],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[24,72241,72242],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[24,72244,72245],{},[37,72246],{"alt":39,"src":72247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[24,72249,72250],{},[37,72251],{"alt":39,"src":72252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[28,72254,72255,72258,72261,72264,72267,72270],{},[31,72256,72257],{},"className这个方式就是修改很多样式的时候来使用的！",[31,72259,72260],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[31,72262,72263],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[31,72265,72266],{},"className为属性名，如果还用class的话就导致与关键字冲突",[31,72268,72269],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[31,72271,72272,72273,72278],{},"解析标签的时候就变为了",[70174,72274],{"className":72275},[72276,72277],"nav","box",[72279,72280],"br",{},[24,72282,72283],{},"例子：",[70174,72285],{"className":72286},[72276],[70376,72288,72289],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[24,72291,72292],{},[37,72293],{"alt":39,"src":72294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[24,72296,72297],{},"追加和删除类名用classList",[24,72299,72300],{},"常用于类似于开关的操作",[24,72302,72303],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[24,72305,72306],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[19,72308,72310],{"id":72309},"_3143-牢记点","3.1.4.3 牢记点",[28,72312,72313,72316,72319,72322,72325,72328,72331,72334,72337],{},[31,72314,72315],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[31,72317,72318],{},"使用style属性操作css时不要忘记引号",[31,72320,72321],{},"使用className或者classList时也不要忘记引号",[31,72323,72324],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[31,72326,72327],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[31,72329,72330],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[31,72332,72333],{},"若： let arr=['1','2',3] arr[0]=1",[31,72335,72336],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[31,72338,72339],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[14,72341,72343],{"id":72342},"_315-操作表单元素","3.1.5 操作表单元素",[28,72345,72346],{},[31,72347,72348],{},"天生的属性",[24,72350,72351],{},[37,72352],{"alt":39,"src":72353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[24,72355,72356],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[24,72358,72359],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[24,72361,72362],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[24,72364,72365],{},[37,72366],{"alt":39,"src":72367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[146,72369,72371],{"className":69196,"code":72370,"language":69198,"meta":39,"style":39},"在复选框中如果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",[152,72372,72373,72378,72410,72415,72420,72425,72430,72434,72439,72444,72461,72473,72478],{"__ignoreMap":39},[155,72374,72375],{"class":157,"line":158},[155,72376,72377],{"class":171},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[155,72379,72380,72382,72385,72388,72390,72393,72395,72397,72399,72401,72403,72405,72408],{"class":157,"line":46},[155,72381,20959],{"class":171},[155,72383,72384],{"class":69863},"input",[155,72386,72387],{"class":226}," type",[155,72389,317],{"class":171},[155,72391,72392],{"class":732},"\"checkbox\"",[155,72394,34745],{"class":226},[155,72396,317],{"class":171},[155,72398,15430],{"class":732},[155,72400,34784],{"class":226},[155,72402,317],{"class":171},[155,72404,15430],{"class":732},[155,72406,72407],{"class":226}," checked",[155,72409,69870],{"class":171},[155,72411,72412],{"class":157,"line":121},[155,72413,72414],{"class":171},"不选的话：\n",[155,72416,72417],{"class":157,"line":180},[155,72418,72419],{"class":171},"const input = document.querySelector('input')\n",[155,72421,72422],{"class":157,"line":194},[155,72423,72424],{"class":171},"input.checked=false\n",[155,72426,72427],{"class":157,"line":200},[155,72428,72429],{"class":171},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[155,72431,72432],{"class":157,"line":213},[155,72433,217],{"emptyLinePlaceholder":216},[155,72435,72436],{"class":157,"line":220},[155,72437,72438],{"class":171},"禁用按钮：\n",[155,72440,72441],{"class":157,"line":245},[155,72442,72443],{"class":171},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[155,72445,72446,72448,72451,72454,72457,72459],{"class":157,"line":251},[155,72447,20959],{"class":171},[155,72449,72450],{"class":69863},"button",[155,72452,72453],{"class":226}," disabled",[155,72455,72456],{"class":171},">点击\u003C\u002F",[155,72458,72450],{"class":69863},[155,72460,69870],{"class":171},[155,72462,72463,72465,72467,72469,72471],{"class":157,"line":257},[155,72464,20959],{"class":171},[155,72466,72450],{"class":69863},[155,72468,72456],{"class":171},[155,72470,72450],{"class":69863},[155,72472,69870],{"class":171},[155,72474,72475],{"class":157,"line":270},[155,72476,72477],{"class":171},"const bt = document.querySelector('button')\n",[155,72479,72480],{"class":157,"line":276},[155,72481,72482],{"class":171},"bt.disabled = false\n",[28,72484,72485],{"start":46},[31,72486,72487],{},"自定义属性",[24,72489,72490],{},[37,72491],{"alt":39,"src":72492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[146,72494,72496],{"className":71630,"code":72495,"language":71632,"meta":39,"style":39},"\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",[152,72497,72498,72506,72534,72553,72572,72591,72610,72618,72623,72628,72633,72638,72646],{"__ignoreMap":39},[155,72499,72500,72502,72504],{"class":157,"line":158},[155,72501,20959],{"class":171},[155,72503,70363],{"class":69863},[155,72505,69870],{"class":171},[155,72507,72508,72510,72512,72515,72517,72519,72522,72524,72527,72530,72532],{"class":157,"line":46},[155,72509,70707],{"class":171},[155,72511,70174],{"class":69863},[155,72513,72514],{"class":226}," data-id",[155,72516,317],{"class":171},[155,72518,23548],{"class":732},[155,72520,72521],{"class":226}," data-spm",[155,72523,317],{"class":171},[155,72525,72526],{"class":732},"\"我不知道\"",[155,72528,72529],{"class":171},">1\u003C\u002F",[155,72531,70174],{"class":69863},[155,72533,69870],{"class":171},[155,72535,72536,72538,72540,72542,72544,72546,72549,72551],{"class":157,"line":121},[155,72537,70707],{"class":171},[155,72539,70174],{"class":69863},[155,72541,72514],{"class":226},[155,72543,317],{"class":171},[155,72545,23571],{"class":732},[155,72547,72548],{"class":171},">2\u003C\u002F",[155,72550,70174],{"class":69863},[155,72552,69870],{"class":171},[155,72554,72555,72557,72559,72561,72563,72565,72568,72570],{"class":157,"line":180},[155,72556,70707],{"class":171},[155,72558,70174],{"class":69863},[155,72560,72514],{"class":226},[155,72562,317],{"class":171},[155,72564,23584],{"class":732},[155,72566,72567],{"class":171},">3\u003C\u002F",[155,72569,70174],{"class":69863},[155,72571,69870],{"class":171},[155,72573,72574,72576,72578,72580,72582,72584,72587,72589],{"class":157,"line":194},[155,72575,70707],{"class":171},[155,72577,70174],{"class":69863},[155,72579,72514],{"class":226},[155,72581,317],{"class":171},[155,72583,23597],{"class":732},[155,72585,72586],{"class":171},">4\u003C\u002F",[155,72588,70174],{"class":69863},[155,72590,69870],{"class":171},[155,72592,72593,72595,72597,72599,72601,72603,72606,72608],{"class":157,"line":200},[155,72594,70707],{"class":171},[155,72596,70174],{"class":69863},[155,72598,72514],{"class":226},[155,72600,317],{"class":171},[155,72602,23617],{"class":732},[155,72604,72605],{"class":171},">5\u003C\u002F",[155,72607,70174],{"class":69863},[155,72609,69870],{"class":171},[155,72611,72612,72614,72616],{"class":157,"line":213},[155,72613,70707],{"class":171},[155,72615,70376],{"class":69863},[155,72617,69870],{"class":171},[155,72619,72620],{"class":157,"line":220},[155,72621,72622],{"class":171},"    const one = document.querySelector('div')\n",[155,72624,72625],{"class":157,"line":245},[155,72626,72627],{"class":171},"    console.log(one.dataset)\n",[155,72629,72630],{"class":157,"line":251},[155,72631,72632],{"class":171},"    console.log(one.dataset.id)\n",[155,72634,72635],{"class":157,"line":257},[155,72636,72637],{"class":171},"    console.log(one.dataset.spm)\n",[155,72639,72640,72642,72644],{"class":157,"line":270},[155,72641,70980],{"class":171},[155,72643,70376],{"class":69863},[155,72645,69870],{"class":171},[155,72647,72648,72650,72652],{"class":157,"line":276},[155,72649,70348],{"class":171},[155,72651,70363],{"class":69863},[155,72653,69870],{"class":171},[24,72655,72656],{},[37,72657],{"alt":39,"src":72658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[24,72660,72661],{},"document.querySelector选择的是第一个对象（元素）",[14,72663,72665],{"id":72664},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[24,72667,72668],{},[37,72669],{"alt":39,"src":72670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[24,72672,72673],{},[37,72674],{"alt":39,"src":72675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[24,72677,72678],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[70376,72680,72681],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[24,72683,72684],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[70376,72686,72687],{},"\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",[24,72689,72690],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[24,72692,72693],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[24,72695,72696],{},"单位为毫秒！！！",[24,72698,72699],{},"可以搭配匿名函数来用！！！",[24,72701,72702],{},"setInterval(function () {",[24,72704,72705],{},"alert('两秒执行一次')",[24,72707,72708],{},"}, 2000)",[24,72710,72711],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[24,72713,72714],{},"function fn() {",[24,72716,72717],{},"document.write(1)",[24,72719,2711],{},[24,72721,72722],{},"setInterval(fn, 1000)",[24,72724,72725],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[24,72727,72728],{},"setInterval('fn()', 1000)",[24,72730,72731],{},[37,72732],{"alt":39,"src":72733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[19,72735,72737],{"id":72736},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[146,72739,72741],{"className":69196,"code":72740,"language":69198,"meta":39,"style":39},"\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",[152,72742,72743,72753,72767,72771,72779,72793,72813,72825,72833,72837,72845,72882,72887,72892,72897,72905,72913,72935,72943,72948,72970,72975,72980,72991,72996,73016,73024,73039,73054,73065,73070,73080,73090,73094,73103,73107,73115,73123,73127],{"__ignoreMap":39},[155,72744,72745,72747,72749,72751],{"class":157,"line":158},[155,72746,69860],{"class":171},[155,72748,69864],{"class":69863},[155,72750,69867],{"class":226},[155,72752,69870],{"class":171},[155,72754,72755,72757,72759,72761,72763,72765],{"class":157,"line":46},[155,72756,20959],{"class":171},[155,72758,69198],{"class":69863},[155,72760,69879],{"class":226},[155,72762,317],{"class":171},[155,72764,69884],{"class":732},[155,72766,69870],{"class":171},[155,72768,72769],{"class":157,"line":121},[155,72770,217],{"emptyLinePlaceholder":216},[155,72772,72773,72775,72777],{"class":157,"line":180},[155,72774,20959],{"class":171},[155,72776,69897],{"class":69863},[155,72778,69870],{"class":171},[155,72780,72781,72783,72785,72787,72789,72791],{"class":157,"line":194},[155,72782,70707],{"class":171},[155,72784,69907],{"class":69863},[155,72786,69910],{"class":226},[155,72788,317],{"class":171},[155,72790,69915],{"class":732},[155,72792,69870],{"class":171},[155,72794,72795,72797,72799,72801,72803,72805,72807,72809,72811],{"class":157,"line":200},[155,72796,70707],{"class":171},[155,72798,69907],{"class":69863},[155,72800,34745],{"class":226},[155,72802,317],{"class":171},[155,72804,69954],{"class":732},[155,72806,69934],{"class":226},[155,72808,317],{"class":171},[155,72810,69961],{"class":732},[155,72812,69870],{"class":171},[155,72814,72815,72817,72819,72821,72823],{"class":157,"line":213},[155,72816,70707],{"class":171},[155,72818,69970],{"class":69863},[155,72820,69973],{"class":171},[155,72822,69970],{"class":69863},[155,72824,69870],{"class":171},[155,72826,72827,72829,72831],{"class":157,"line":220},[155,72828,70348],{"class":171},[155,72830,69897],{"class":69863},[155,72832,69870],{"class":171},[155,72834,72835],{"class":157,"line":245},[155,72836,217],{"emptyLinePlaceholder":216},[155,72838,72839,72841,72843],{"class":157,"line":251},[155,72840,20959],{"class":171},[155,72842,70363],{"class":69863},[155,72844,69870],{"class":171},[155,72846,72847,72849,72852,72854,72856,72858,72860,72862,72864,72867,72869,72872,72875,72877,72880],{"class":157,"line":257},[155,72848,70707],{"class":171},[155,72850,72851],{"class":69863},"textarea",[155,72853,34745],{"class":226},[155,72855,317],{"class":171},[155,72857,15430],{"class":732},[155,72859,34784],{"class":226},[155,72861,317],{"class":171},[155,72863,15430],{"class":732},[155,72865,72866],{"class":226}," cols",[155,72868,317],{"class":171},[155,72870,72871],{"class":732},"\"30\"",[155,72873,72874],{"class":226}," rows",[155,72876,317],{"class":171},[155,72878,72879],{"class":732},"\"10\"",[155,72881,69870],{"class":171},[155,72883,72884],{"class":157,"line":270},[155,72885,72886],{"class":171},"        用户注册协议\n",[155,72888,72889],{"class":157,"line":276},[155,72890,72891],{"class":171},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[155,72893,72894],{"class":157,"line":297},[155,72895,72896],{"class":171},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[155,72898,72899,72901,72903],{"class":157,"line":302},[155,72900,70339],{"class":171},[155,72902,72851],{"class":69863},[155,72904,69870],{"class":171},[155,72906,72907,72909,72911],{"class":157,"line":308},[155,72908,70707],{"class":171},[155,72910,72279],{"class":69863},[155,72912,69870],{"class":171},[155,72914,72915,72917,72919,72921,72923,72926,72928,72931,72933],{"class":157,"line":366},[155,72916,70707],{"class":171},[155,72918,72450],{"class":69863},[155,72920,72049],{"class":226},[155,72922,317],{"class":171},[155,72924,72925],{"class":732},"\"btn\"",[155,72927,72453],{"class":226},[155,72929,72930],{"class":171},">我已经阅读用户协议(5)\u003C\u002F",[155,72932,72450],{"class":69863},[155,72934,69870],{"class":171},[155,72936,72937,72939,72941],{"class":157,"line":379},[155,72938,70707],{"class":171},[155,72940,70376],{"class":69863},[155,72942,69870],{"class":171},[155,72944,72945],{"class":157,"line":385},[155,72946,72947],{"class":161},"    \u002F\u002F 1. 获取元素\n",[155,72949,72950,72952,72955,72957,72960,72963,72965,72968],{"class":157,"line":415},[155,72951,31049],{"class":167},[155,72953,72954],{"class":263}," btn",[155,72956,33391],{"class":167},[155,72958,72959],{"class":171}," document.",[155,72961,72962],{"class":226},"querySelector",[155,72964,230],{"class":171},[155,72966,72967],{"class":732},"'.btn'",[155,72969,363],{"class":171},[155,72971,72972],{"class":157,"line":452},[155,72973,72974],{"class":161},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[155,72976,72977],{"class":157,"line":480},[155,72978,72979],{"class":161},"    \u002F\u002F 2. 倒计时\n",[155,72981,72982,72984,72986,72988],{"class":157,"line":486},[155,72983,70782],{"class":167},[155,72985,29287],{"class":171},[155,72987,317],{"class":167},[155,72989,72990],{"class":263}," 5\n",[155,72992,72993],{"class":157,"line":499},[155,72994,72995],{"class":161},"    \u002F\u002F 2.1 开启定时器\n",[155,72997,72998,73000,73003,73005,73008,73010,73013],{"class":157,"line":505},[155,72999,70782],{"class":167},[155,73001,73002],{"class":171}," n ",[155,73004,317],{"class":167},[155,73006,73007],{"class":226}," setInterval",[155,73009,230],{"class":171},[155,73011,73012],{"class":167},"function",[155,73014,73015],{"class":171}," () {\n",[155,73017,73018,73021],{"class":157,"line":528},[155,73019,73020],{"class":171},"      i",[155,73022,73023],{"class":167},"--\n",[155,73025,73026,73029,73031,73034,73036],{"class":157,"line":549},[155,73027,73028],{"class":171},"      btn.innerHTML ",[155,73030,317],{"class":167},[155,73032,73033],{"class":732}," `我已经阅读用户协议(${",[155,73035,20513],{"class":171},[155,73037,73038],{"class":732},"})`\n",[155,73040,73041,73044,73047,73050,73052],{"class":157,"line":570},[155,73042,73043],{"class":167},"      if",[155,73045,73046],{"class":171}," (i ",[155,73048,73049],{"class":167},"===",[155,73051,1151],{"class":263},[155,73053,32269],{"class":171},[155,73055,73056,73059,73062],{"class":157,"line":575},[155,73057,73058],{"class":226},"        clearInterval",[155,73060,73061],{"class":171},"(n)  ",[155,73063,73064],{"class":161},"\u002F\u002F 关闭定时器\n",[155,73066,73067],{"class":157,"line":581},[155,73068,73069],{"class":161},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[155,73071,73072,73075,73077],{"class":157,"line":592},[155,73073,73074],{"class":171},"        btn.disabled ",[155,73076,317],{"class":167},[155,73078,73079],{"class":263}," false\n",[155,73081,73082,73085,73087],{"class":157,"line":610},[155,73083,73084],{"class":171},"        btn.innerHTML ",[155,73086,317],{"class":167},[155,73088,73089],{"class":732}," '同意'\n",[155,73091,73092],{"class":157,"line":622},[155,73093,70961],{"class":171},[155,73095,73096,73099,73101],{"class":157,"line":638},[155,73097,73098],{"class":171},"    }, ",[155,73100,26273],{"class":263},[155,73102,363],{"class":171},[155,73104,73105],{"class":157,"line":650},[155,73106,217],{"emptyLinePlaceholder":216},[155,73108,73109,73111,73113],{"class":157,"line":662},[155,73110,70980],{"class":171},[155,73112,70376],{"class":69863},[155,73114,69870],{"class":171},[155,73116,73117,73119,73121],{"class":157,"line":678},[155,73118,70348],{"class":171},[155,73120,70363],{"class":69863},[155,73122,69870],{"class":171},[155,73124,73125],{"class":157,"line":694},[155,73126,217],{"emptyLinePlaceholder":216},[155,73128,73129,73131,73133],{"class":157,"line":706},[155,73130,70348],{"class":171},[155,73132,69198],{"class":69863},[155,73134,69870],{"class":171},[24,73136,73137],{},"不要一直想着用死循环,避免死循环",[24,73139,73140,73143],{},[152,73141,73142],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[19,73145,73147],{"id":73146},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[28,73149,73150],{},[31,73151,73152],{},"法1",[146,73154,73156],{"className":69196,"code":73155,"language":69198,"meta":39,"style":39},"\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",[152,73157,73158,73168,73182,73186,73194,73208,73228,73240,73248,73254,73265,73276,73280,73284,73291,73303,73307,73311,73318,73330,73344,73357,73371,73375,73379,73386,73397,73408,73419,73431,73443,73455,73459,73463,73471,73481,73494,73506,73519,73523,73527,73534,73544,73556,73568,73579,73590,73600,73612,73624,73628,73632,73641,73653,73665,73693,73706,73710,73714,73721,73732,73736,73744,73752,73756,73764,73778,73793,73817,73825,73840,73853,73861,73882,73894,73906,73918,73930,73942,73954,73966,73975,73983,73991,73999,74011,74034,74053,74072,74091,74110,74129,74148,74168,74172,74192,74211,74231,74252,74263,74280,74290,74300,74310,74315,74320,74325,74330,74355,74368,74372,74395,74399,74407,74415,74423,74427],{"__ignoreMap":39},[155,73159,73160,73162,73164,73166],{"class":157,"line":158},[155,73161,69860],{"class":171},[155,73163,69864],{"class":69863},[155,73165,69867],{"class":226},[155,73167,69870],{"class":171},[155,73169,73170,73172,73174,73176,73178,73180],{"class":157,"line":46},[155,73171,20959],{"class":171},[155,73173,69198],{"class":69863},[155,73175,69879],{"class":226},[155,73177,317],{"class":171},[155,73179,69884],{"class":732},[155,73181,69870],{"class":171},[155,73183,73184],{"class":157,"line":121},[155,73185,217],{"emptyLinePlaceholder":216},[155,73187,73188,73190,73192],{"class":157,"line":180},[155,73189,20959],{"class":171},[155,73191,69897],{"class":69863},[155,73193,69870],{"class":171},[155,73195,73196,73198,73200,73202,73204,73206],{"class":157,"line":194},[155,73197,70707],{"class":171},[155,73199,69907],{"class":69863},[155,73201,69910],{"class":226},[155,73203,317],{"class":171},[155,73205,69915],{"class":732},[155,73207,69870],{"class":171},[155,73209,73210,73212,73214,73216,73218,73220,73222,73224,73226],{"class":157,"line":200},[155,73211,70707],{"class":171},[155,73213,69907],{"class":69863},[155,73215,34745],{"class":226},[155,73217,317],{"class":171},[155,73219,69954],{"class":732},[155,73221,69934],{"class":226},[155,73223,317],{"class":171},[155,73225,69961],{"class":732},[155,73227,69870],{"class":171},[155,73229,73230,73232,73234,73236,73238],{"class":157,"line":213},[155,73231,70707],{"class":171},[155,73233,69970],{"class":69863},[155,73235,69973],{"class":171},[155,73237,69970],{"class":69863},[155,73239,69870],{"class":171},[155,73241,73242,73244,73246],{"class":157,"line":220},[155,73243,70707],{"class":171},[155,73245,20011],{"class":69863},[155,73247,69870],{"class":171},[155,73249,73250,73252],{"class":157,"line":245},[155,73251,26266],{"class":69863},[155,73253,35397],{"class":171},[155,73255,73256,73259,73261,73263],{"class":157,"line":251},[155,73257,73258],{"class":263},"      padding",[155,73260,70000],{"class":171},[155,73262,1109],{"class":263},[155,73264,21206],{"class":171},[155,73266,73267,73270,73272,73274],{"class":157,"line":257},[155,73268,73269],{"class":263},"      margin",[155,73271,70000],{"class":171},[155,73273,1109],{"class":263},[155,73275,21206],{"class":171},[155,73277,73278],{"class":157,"line":270},[155,73279,22074],{"class":171},[155,73281,73282],{"class":157,"line":276},[155,73283,217],{"emptyLinePlaceholder":216},[155,73285,73286,73289],{"class":157,"line":297},[155,73287,73288],{"class":69863},"    li",[155,73290,35397],{"class":171},[155,73292,73293,73296,73298,73301],{"class":157,"line":302},[155,73294,73295],{"class":263},"      list-style",[155,73297,70000],{"class":171},[155,73299,73300],{"class":263},"none",[155,73302,21206],{"class":171},[155,73304,73305],{"class":157,"line":308},[155,73306,22074],{"class":171},[155,73308,73309],{"class":157,"line":366},[155,73310,217],{"emptyLinePlaceholder":216},[155,73312,73313,73316],{"class":157,"line":379},[155,73314,73315],{"class":226},"    .box",[155,73317,35397],{"class":171},[155,73319,73320,73323,73325,73328],{"class":157,"line":385},[155,73321,73322],{"class":263},"      position",[155,73324,70000],{"class":171},[155,73326,73327],{"class":263},"relative",[155,73329,21206],{"class":171},[155,73331,73332,73335,73337,73340,73342],{"class":157,"line":415},[155,73333,73334],{"class":263},"      width",[155,73336,70000],{"class":171},[155,73338,73339],{"class":263},"976",[155,73341,70055],{"class":167},[155,73343,21206],{"class":171},[155,73345,73346,73349,73351,73353,73355],{"class":157,"line":452},[155,73347,73348],{"class":263},"      height",[155,73350,70000],{"class":171},[155,73352,21450],{"class":263},[155,73354,70055],{"class":167},[155,73356,21206],{"class":171},[155,73358,73359,73361,73363,73365,73367,73369],{"class":157,"line":480},[155,73360,73269],{"class":263},[155,73362,70000],{"class":171},[155,73364,20389],{"class":263},[155,73366,70055],{"class":167},[155,73368,70119],{"class":263},[155,73370,21206],{"class":171},[155,73372,73373],{"class":157,"line":486},[155,73374,22074],{"class":171},[155,73376,73377],{"class":157,"line":499},[155,73378,217],{"emptyLinePlaceholder":216},[155,73380,73381,73384],{"class":157,"line":505},[155,73382,73383],{"class":226},"    .slider-footer",[155,73385,35397],{"class":171},[155,73387,73388,73390,73392,73395],{"class":157,"line":528},[155,73389,73322],{"class":263},[155,73391,70000],{"class":171},[155,73393,73394],{"class":263},"absolute",[155,73396,21206],{"class":171},[155,73398,73399,73402,73404,73406],{"class":157,"line":549},[155,73400,73401],{"class":263},"      left",[155,73403,70000],{"class":171},[155,73405,1109],{"class":263},[155,73407,21206],{"class":171},[155,73409,73410,73413,73415,73417],{"class":157,"line":570},[155,73411,73412],{"class":263},"      bottom",[155,73414,70000],{"class":171},[155,73416,1109],{"class":263},[155,73418,21206],{"class":171},[155,73420,73421,73423,73425,73427,73429],{"class":157,"line":575},[155,73422,73334],{"class":263},[155,73424,70000],{"class":171},[155,73426,20389],{"class":263},[155,73428,2938],{"class":167},[155,73430,21206],{"class":171},[155,73432,73433,73435,73437,73439,73441],{"class":157,"line":581},[155,73434,73348],{"class":263},[155,73436,70000],{"class":171},[155,73438,20638],{"class":263},[155,73440,2938],{"class":167},[155,73442,21206],{"class":171},[155,73444,73445,73448,73450,73453],{"class":157,"line":592},[155,73446,73447],{"class":263},"      background-color",[155,73449,70000],{"class":171},[155,73451,73452],{"class":263},"skyblue",[155,73454,21206],{"class":171},[155,73456,73457],{"class":157,"line":610},[155,73458,22074],{"class":171},[155,73460,73461],{"class":157,"line":622},[155,73462,217],{"emptyLinePlaceholder":216},[155,73464,73465,73467,73469],{"class":157,"line":638},[155,73466,73383],{"class":226},[155,73468,26688],{"class":69863},[155,73470,35397],{"class":171},[155,73472,73473,73475,73477,73479],{"class":157,"line":650},[155,73474,73322],{"class":263},[155,73476,70000],{"class":171},[155,73478,73394],{"class":263},[155,73480,21206],{"class":171},[155,73482,73483,73486,73488,73490,73492],{"class":157,"line":662},[155,73484,73485],{"class":263},"      font-size",[155,73487,70000],{"class":171},[155,73489,832],{"class":263},[155,73491,70055],{"class":167},[155,73493,21206],{"class":171},[155,73495,73496,73498,73500,73502,73504],{"class":157,"line":678},[155,73497,73401],{"class":263},[155,73499,70000],{"class":171},[155,73501,3458],{"class":263},[155,73503,70055],{"class":167},[155,73505,21206],{"class":171},[155,73507,73508,73511,73513,73515,73517],{"class":157,"line":694},[155,73509,73510],{"class":263},"      top",[155,73512,70000],{"class":171},[155,73514,350],{"class":263},[155,73516,70055],{"class":167},[155,73518,21206],{"class":171},[155,73520,73521],{"class":157,"line":706},[155,73522,22074],{"class":171},[155,73524,73525],{"class":157,"line":715},[155,73526,217],{"emptyLinePlaceholder":216},[155,73528,73529,73532],{"class":157,"line":720},[155,73530,73531],{"class":69863},"    ul",[155,73533,35397],{"class":171},[155,73535,73536,73538,73540,73542],{"class":157,"line":739},[155,73537,73322],{"class":263},[155,73539,70000],{"class":171},[155,73541,73394],{"class":263},[155,73543,21206],{"class":171},[155,73545,73546,73548,73550,73552,73554],{"class":157,"line":745},[155,73547,73510],{"class":263},[155,73549,70000],{"class":171},[155,73551,20837],{"class":263},[155,73553,70055],{"class":167},[155,73555,21206],{"class":171},[155,73557,73558,73560,73562,73564,73566],{"class":157,"line":773},[155,73559,73401],{"class":263},[155,73561,70000],{"class":171},[155,73563,3458],{"class":263},[155,73565,70055],{"class":167},[155,73567,21206],{"class":171},[155,73569,73570,73573,73575,73577],{"class":157,"line":779},[155,73571,73572],{"class":263},"      display",[155,73574,70000],{"class":171},[155,73576,70040],{"class":263},[155,73578,21206],{"class":171},[155,73580,73581,73584,73586,73588],{"class":157,"line":785},[155,73582,73583],{"class":263},"      justify-content",[155,73585,70000],{"class":171},[155,73587,70231],{"class":263},[155,73589,21206],{"class":171},[155,73591,73592,73594,73596,73598],{"class":157,"line":791},[155,73593,73322],{"class":263},[155,73595,70000],{"class":171},[155,73597,73394],{"class":263},[155,73599,21206],{"class":171},[155,73601,73602,73604,73606,73608,73610],{"class":157,"line":796},[155,73603,73334],{"class":263},[155,73605,70000],{"class":171},[155,73607,23860],{"class":263},[155,73609,70055],{"class":167},[155,73611,21206],{"class":171},[155,73613,73614,73616,73618,73620,73622],{"class":157,"line":802},[155,73615,73348],{"class":263},[155,73617,70000],{"class":171},[155,73619,3458],{"class":263},[155,73621,70055],{"class":167},[155,73623,21206],{"class":171},[155,73625,73626],{"class":157,"line":808},[155,73627,22074],{"class":171},[155,73629,73630],{"class":157,"line":819},[155,73631,217],{"emptyLinePlaceholder":216},[155,73633,73634,73636,73639],{"class":157,"line":1832},[155,73635,73531],{"class":69863},[155,73637,73638],{"class":69863}," li",[155,73640,35397],{"class":171},[155,73642,73643,73645,73647,73649,73651],{"class":157,"line":1838},[155,73644,73334],{"class":263},[155,73646,70000],{"class":171},[155,73648,3458],{"class":263},[155,73650,70055],{"class":167},[155,73652,21206],{"class":171},[155,73654,73655,73657,73659,73661,73663],{"class":157,"line":1844},[155,73656,73348],{"class":263},[155,73658,70000],{"class":171},[155,73660,3458],{"class":263},[155,73662,70055],{"class":167},[155,73664,21206],{"class":171},[155,73666,73667,73669,73671,73674,73676,73678,73680,73682,73684,73686,73688,73691],{"class":157,"line":1850},[155,73668,73447],{"class":263},[155,73670,70000],{"class":171},[155,73672,73673],{"class":263},"rgba",[155,73675,230],{"class":171},[155,73677,1109],{"class":263},[155,73679,7589],{"class":171},[155,73681,1109],{"class":263},[155,73683,7589],{"class":171},[155,73685,1109],{"class":263},[155,73687,7589],{"class":171},[155,73689,73690],{"class":263},".4",[155,73692,22596],{"class":171},[155,73694,73695,73698,73700,73702,73704],{"class":157,"line":1861},[155,73696,73697],{"class":263},"      border-radius",[155,73699,70000],{"class":171},[155,73701,565],{"class":263},[155,73703,70055],{"class":167},[155,73705,21206],{"class":171},[155,73707,73708],{"class":157,"line":1866},[155,73709,22074],{"class":171},[155,73711,73712],{"class":157,"line":1871},[155,73713,217],{"emptyLinePlaceholder":216},[155,73715,73716,73719],{"class":157,"line":1877},[155,73717,73718],{"class":226},"    .activate",[155,73720,35397],{"class":171},[155,73722,73723,73725,73727,73730],{"class":157,"line":1883},[155,73724,73447],{"class":263},[155,73726,70000],{"class":171},[155,73728,73729],{"class":263},"#f7f7f7",[155,73731,21206],{"class":171},[155,73733,73734],{"class":157,"line":1894},[155,73735,22074],{"class":171},[155,73737,73738,73740,73742],{"class":157,"line":1900},[155,73739,70980],{"class":171},[155,73741,20011],{"class":69863},[155,73743,69870],{"class":171},[155,73745,73746,73748,73750],{"class":157,"line":1911},[155,73747,70348],{"class":171},[155,73749,69897],{"class":69863},[155,73751,69870],{"class":171},[155,73753,73754],{"class":157,"line":1917},[155,73755,217],{"emptyLinePlaceholder":216},[155,73757,73758,73760,73762],{"class":157,"line":1927},[155,73759,20959],{"class":171},[155,73761,70363],{"class":69863},[155,73763,69870],{"class":171},[155,73765,73766,73768,73770,73772,73774,73776],{"class":157,"line":1933},[155,73767,70707],{"class":171},[155,73769,70174],{"class":69863},[155,73771,72049],{"class":226},[155,73773,317],{"class":171},[155,73775,72054],{"class":732},[155,73777,69870],{"class":171},[155,73779,73780,73782,73784,73786,73788,73791],{"class":157,"line":1943},[155,73781,69904],{"class":171},[155,73783,70174],{"class":69863},[155,73785,72049],{"class":226},[155,73787,317],{"class":171},[155,73789,73790],{"class":732},"\"slider-wrapper\"",[155,73792,69870],{"class":171},[155,73794,73795,73798,73800,73803,73805,73808,73811,73813,73815],{"class":157,"line":1949},[155,73796,73797],{"class":171},"      \u003C",[155,73799,37],{"class":69863},[155,73801,73802],{"class":226}," src",[155,73804,317],{"class":171},[155,73806,73807],{"class":732},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[155,73809,73810],{"class":226}," alt",[155,73812,317],{"class":171},[155,73814,15430],{"class":732},[155,73816,69870],{"class":171},[155,73818,73819,73821,73823],{"class":157,"line":1959},[155,73820,70339],{"class":171},[155,73822,70174],{"class":69863},[155,73824,69870],{"class":171},[155,73826,73827,73829,73831,73833,73835,73838],{"class":157,"line":1964},[155,73828,69904],{"class":171},[155,73830,70174],{"class":69863},[155,73832,72049],{"class":226},[155,73834,317],{"class":171},[155,73836,73837],{"class":732},"\"slider-footer\"",[155,73839,69870],{"class":171},[155,73841,73842,73844,73846,73849,73851],{"class":157,"line":1970},[155,73843,73797],{"class":171},[155,73845,24],{"class":69863},[155,73847,73848],{"class":171},">对人类来说会不会太超前了?\u003C\u002F",[155,73850,24],{"class":69863},[155,73852,69870],{"class":171},[155,73854,73855,73857,73859],{"class":157,"line":1981},[155,73856,73797],{"class":171},[155,73858,21052],{"class":69863},[155,73860,69870],{"class":171},[155,73862,73863,73866,73868,73870,73872,73875,73878,73880],{"class":157,"line":1986},[155,73864,73865],{"class":171},"        \u003C",[155,73867,31],{"class":69863},[155,73869,72049],{"class":226},[155,73871,317],{"class":171},[155,73873,73874],{"class":732},"\"activate\"",[155,73876,73877],{"class":171},">\u003C\u002F",[155,73879,31],{"class":69863},[155,73881,69870],{"class":171},[155,73883,73884,73886,73888,73890,73892],{"class":157,"line":1991},[155,73885,73865],{"class":171},[155,73887,31],{"class":69863},[155,73889,73877],{"class":171},[155,73891,31],{"class":69863},[155,73893,69870],{"class":171},[155,73895,73896,73898,73900,73902,73904],{"class":157,"line":1997},[155,73897,73865],{"class":171},[155,73899,31],{"class":69863},[155,73901,73877],{"class":171},[155,73903,31],{"class":69863},[155,73905,69870],{"class":171},[155,73907,73908,73910,73912,73914,73916],{"class":157,"line":2014},[155,73909,73865],{"class":171},[155,73911,31],{"class":69863},[155,73913,73877],{"class":171},[155,73915,31],{"class":69863},[155,73917,69870],{"class":171},[155,73919,73920,73922,73924,73926,73928],{"class":157,"line":2046},[155,73921,73865],{"class":171},[155,73923,31],{"class":69863},[155,73925,73877],{"class":171},[155,73927,31],{"class":69863},[155,73929,69870],{"class":171},[155,73931,73932,73934,73936,73938,73940],{"class":157,"line":2062},[155,73933,73865],{"class":171},[155,73935,31],{"class":69863},[155,73937,73877],{"class":171},[155,73939,31],{"class":69863},[155,73941,69870],{"class":171},[155,73943,73944,73946,73948,73950,73952],{"class":157,"line":2067},[155,73945,73865],{"class":171},[155,73947,31],{"class":69863},[155,73949,73877],{"class":171},[155,73951,31],{"class":69863},[155,73953,69870],{"class":171},[155,73955,73956,73958,73960,73962,73964],{"class":157,"line":2073},[155,73957,73865],{"class":171},[155,73959,31],{"class":69863},[155,73961,73877],{"class":171},[155,73963,31],{"class":69863},[155,73965,69870],{"class":171},[155,73967,73968,73971,73973],{"class":157,"line":2079},[155,73969,73970],{"class":171},"      \u003C\u002F",[155,73972,21052],{"class":69863},[155,73974,69870],{"class":171},[155,73976,73977,73979,73981],{"class":157,"line":2089},[155,73978,70339],{"class":171},[155,73980,70174],{"class":69863},[155,73982,69870],{"class":171},[155,73984,73985,73987,73989],{"class":157,"line":2095},[155,73986,70980],{"class":171},[155,73988,70174],{"class":69863},[155,73990,69870],{"class":171},[155,73992,73993,73995,73997],{"class":157,"line":2106},[155,73994,70707],{"class":171},[155,73996,70376],{"class":69863},[155,73998,69870],{"class":171},[155,74000,74001,74003,74006,74008],{"class":157,"line":2112},[155,74002,31049],{"class":167},[155,74004,74005],{"class":263}," arrImage",[155,74007,33391],{"class":167},[155,74009,74010],{"class":171}," [\n",[155,74012,74013,74016,74019,74022,74025,74028,74031],{"class":157,"line":2122},[155,74014,74015],{"class":171},"      { url: ",[155,74017,74018],{"class":732},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[155,74020,74021],{"class":171},", title: ",[155,74023,74024],{"class":732},"'对人类来说会不会太超前了?'",[155,74026,74027],{"class":171},", color: ",[155,74029,74030],{"class":732},"'rgba(100,67,68)'",[155,74032,74033],{"class":171}," },\n",[155,74035,74036,74038,74041,74043,74046,74048,74051],{"class":157,"line":2128},[155,74037,74015],{"class":171},[155,74039,74040],{"class":732},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[155,74042,74021],{"class":171},[155,74044,74045],{"class":732},"'开启剑与雪的黑暗传说!'",[155,74047,74027],{"class":171},[155,74049,74050],{"class":732},"'rgba(43,35,26)'",[155,74052,74033],{"class":171},[155,74054,74055,74057,74060,74062,74065,74067,74070],{"class":157,"line":2138},[155,74056,74015],{"class":171},[155,74058,74059],{"class":732},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[155,74061,74021],{"class":171},[155,74063,74064],{"class":732},"'真正的jo厨出现了!'",[155,74066,74027],{"class":171},[155,74068,74069],{"class":732},"'rgba(36,31,33)'",[155,74071,74033],{"class":171},[155,74073,74074,74076,74079,74081,74084,74086,74089],{"class":157,"line":2144},[155,74075,74015],{"class":171},[155,74077,74078],{"class":732},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[155,74080,74021],{"class":171},[155,74082,74083],{"class":732},"'李玉刚:让世界通过b站看到东方大国文化'",[155,74085,74027],{"class":171},[155,74087,74088],{"class":732},"'rgba(139,98,66)'",[155,74090,74033],{"class":171},[155,74092,74093,74095,74098,74100,74103,74105,74108],{"class":157,"line":2154},[155,74094,74015],{"class":171},[155,74096,74097],{"class":732},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[155,74099,74021],{"class":171},[155,74101,74102],{"class":732},"'快来分享你的寒假日常吧'",[155,74104,74027],{"class":171},[155,74106,74107],{"class":732},"'rgba(67,90,92)'",[155,74109,74033],{"class":171},[155,74111,74112,74114,74117,74119,74122,74124,74127],{"class":157,"line":2160},[155,74113,74015],{"class":171},[155,74115,74116],{"class":732},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[155,74118,74021],{"class":171},[155,74120,74121],{"class":732},"'哔哩哔哩小年YEAR'",[155,74123,74027],{"class":171},[155,74125,74126],{"class":732},"'rgba(166,131,143)'",[155,74128,74033],{"class":171},[155,74130,74131,74133,74136,74138,74141,74143,74146],{"class":157,"line":2170},[155,74132,74015],{"class":171},[155,74134,74135],{"class":732},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[155,74137,74021],{"class":171},[155,74139,74140],{"class":732},"'一站式解决你的电脑配置问题'",[155,74142,74027],{"class":171},[155,74144,74145],{"class":732},"'rgba(53,29,25)'",[155,74147,74033],{"class":171},[155,74149,74150,74152,74155,74157,74160,74162,74165],{"class":157,"line":2176},[155,74151,74015],{"class":171},[155,74153,74154],{"class":732},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[155,74156,74021],{"class":171},[155,74158,74159],{"class":732},"'谁不想和小猫咪贴贴呢?'",[155,74161,74027],{"class":171},[155,74163,74164],{"class":732},"'rgba(99,72,114)'",[155,74166,74167],{"class":171}," }\n",[155,74169,74170],{"class":157,"line":2191},[155,74171,71672],{"class":171},[155,74173,74174,74176,74179,74181,74183,74185,74187,74190],{"class":157,"line":2197},[155,74175,31049],{"class":167},[155,74177,74178],{"class":263}," img",[155,74180,33391],{"class":167},[155,74182,72959],{"class":171},[155,74184,72962],{"class":226},[155,74186,230],{"class":171},[155,74188,74189],{"class":732},"'.slider-wrapper img'",[155,74191,363],{"class":171},[155,74193,74194,74196,74198,74200,74202,74204,74206,74209],{"class":157,"line":2208},[155,74195,31049],{"class":167},[155,74197,26688],{"class":263},[155,74199,33391],{"class":167},[155,74201,72959],{"class":171},[155,74203,72962],{"class":226},[155,74205,230],{"class":171},[155,74207,74208],{"class":732},"'.slider-footer p'",[155,74210,363],{"class":171},[155,74212,74213,74215,74218,74220,74222,74224,74226,74229],{"class":157,"line":2214},[155,74214,31049],{"class":167},[155,74216,74217],{"class":263}," color",[155,74219,33391],{"class":167},[155,74221,72959],{"class":171},[155,74223,72962],{"class":226},[155,74225,230],{"class":171},[155,74227,74228],{"class":732},"'.slider-footer'",[155,74230,363],{"class":171},[155,74232,74233,74235,74238,74240,74242,74245,74247,74250],{"class":157,"line":2225},[155,74234,31049],{"class":167},[155,74236,74237],{"class":263}," lis",[155,74239,33391],{"class":167},[155,74241,72959],{"class":171},[155,74243,74244],{"class":226},"querySelectorAll",[155,74246,230],{"class":171},[155,74248,74249],{"class":732},"'.slider-footer ul li'",[155,74251,363],{"class":171},[155,74253,74254,74256,74258,74260],{"class":157,"line":2231},[155,74255,70782],{"class":167},[155,74257,29287],{"class":171},[155,74259,317],{"class":167},[155,74261,74262],{"class":263}," 1\n",[155,74264,74265,74267,74270,74272,74274,74276,74278],{"class":157,"line":2237},[155,74266,70782],{"class":167},[155,74268,74269],{"class":171}," timer ",[155,74271,317],{"class":167},[155,74273,73007],{"class":226},[155,74275,230],{"class":171},[155,74277,73012],{"class":167},[155,74279,73015],{"class":171},[155,74281,74282,74285,74287],{"class":157,"line":2243},[155,74283,74284],{"class":171},"      img.src ",[155,74286,317],{"class":167},[155,74288,74289],{"class":171}," arrImage[i].url\n",[155,74291,74292,74295,74297],{"class":157,"line":2249},[155,74293,74294],{"class":171},"      p.innerHTML ",[155,74296,317],{"class":167},[155,74298,74299],{"class":171}," arrImage[i].title\n",[155,74301,74302,74305,74307],{"class":157,"line":2260},[155,74303,74304],{"class":171},"      color.style.backgroundColor ",[155,74306,317],{"class":167},[155,74308,74309],{"class":171}," arrImage[i].color\n",[155,74311,74312],{"class":157,"line":2266},[155,74313,74314],{"class":161},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[155,74316,74317],{"class":157,"line":2286},[155,74318,74319],{"class":161},"      \u002F\u002F li.classList.add('activate')\n",[155,74321,74322],{"class":157,"line":2292},[155,74323,74324],{"class":161},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[155,74326,74327],{"class":157,"line":2303},[155,74328,74329],{"class":161},"      \u002F\u002F lis[i].classList.remove('activate')\n",[155,74331,74332,74335,74337,74339,74342,74345,74348,74350,74353],{"class":157,"line":2309},[155,74333,74334],{"class":171},"      document.",[155,74336,72962],{"class":226},[155,74338,230],{"class":171},[155,74340,74341],{"class":732},"'.activate'",[155,74343,74344],{"class":171},")?.classList.",[155,74346,74347],{"class":226},"toggle",[155,74349,230],{"class":171},[155,74351,74352],{"class":732},"'activate'",[155,74354,363],{"class":171},[155,74356,74357,74360,74362,74364,74366],{"class":157,"line":2315},[155,74358,74359],{"class":171},"      lis[i].classList.",[155,74361,25197],{"class":226},[155,74363,230],{"class":171},[155,74365,74352],{"class":732},[155,74367,363],{"class":171},[155,74369,74370],{"class":157,"line":2321},[155,74371,217],{"emptyLinePlaceholder":216},[155,74373,74374,74377,74379,74381,74383,74385,74387,74389,74392],{"class":157,"line":2327},[155,74375,74376],{"class":171},"      i ",[155,74378,317],{"class":167},[155,74380,73046],{"class":171},[155,74382,1274],{"class":167},[155,74384,1277],{"class":263},[155,74386,33541],{"class":171},[155,74388,2938],{"class":167},[155,74390,74391],{"class":171}," arrImage.",[155,74393,74394],{"class":263},"length\n",[155,74396,74397],{"class":157,"line":2333},[155,74398,217],{"emptyLinePlaceholder":216},[155,74400,74401,74403,74405],{"class":157,"line":2339},[155,74402,73098],{"class":171},[155,74404,26273],{"class":263},[155,74406,363],{"class":171},[155,74408,74409,74411,74413],{"class":157,"line":2345},[155,74410,70980],{"class":171},[155,74412,70376],{"class":69863},[155,74414,69870],{"class":171},[155,74416,74417,74419,74421],{"class":157,"line":2366},[155,74418,70348],{"class":171},[155,74420,70363],{"class":69863},[155,74422,69870],{"class":171},[155,74424,74425],{"class":157,"line":2372},[155,74426,217],{"emptyLinePlaceholder":216},[155,74428,74429,74431,74433],{"class":157,"line":2388},[155,74430,70348],{"class":171},[155,74432,69198],{"class":69863},[155,74434,69870],{"class":171},[24,74436,74437],{},[37,74438],{"alt":39,"src":74439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[24,74441,74442],{},"?.就是短路保护,确保输出正常进行",[24,74444,74445],{},"不要忘记取余%,有时候可以用",[24,74447,74448],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[28,74450,74451],{"start":46},[31,74452,74453],{},"法2",[146,74455,74457],{"className":69196,"code":74456,"language":69198,"meta":39,"style":39},"\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",[152,74458,74459,74469,74483,74487,74495,74509,74529,74541,74549,74555,74565,74575,74579,74583,74589,74599,74603,74607,74613,74623,74635,74647,74661,74665,74669,74675,74685,74695,74705,74717,74729,74739,74743,74747,74755,74765,74777,74789,74801,74805,74809,74815,74825,74837,74849,74859,74869,74879,74891,74903,74907,74911,74919,74931,74943,74969,74981,74985,74989,74995,75005,75009,75017,75025,75029,75037,75051,75065,75085,75093,75107,75119,75127,75145,75157,75169,75181,75193,75205,75217,75229,75237,75245,75253,75261,75272,75288,75304,75320,75336,75352,75368,75384,75400,75404,75409,75427,75445,75455,75460,75465,75476,75482,75497,75506,75510,75515,75524,75529,75538,75543,75548,75553,75576,75606,75610,75618,75622,75630,75638,75642],{"__ignoreMap":39},[155,74460,74461,74463,74465,74467],{"class":157,"line":158},[155,74462,69860],{"class":171},[155,74464,69864],{"class":69863},[155,74466,69867],{"class":226},[155,74468,69870],{"class":171},[155,74470,74471,74473,74475,74477,74479,74481],{"class":157,"line":46},[155,74472,20959],{"class":171},[155,74474,69198],{"class":69863},[155,74476,69879],{"class":226},[155,74478,317],{"class":171},[155,74480,69884],{"class":732},[155,74482,69870],{"class":171},[155,74484,74485],{"class":157,"line":121},[155,74486,217],{"emptyLinePlaceholder":216},[155,74488,74489,74491,74493],{"class":157,"line":180},[155,74490,20959],{"class":171},[155,74492,69897],{"class":69863},[155,74494,69870],{"class":171},[155,74496,74497,74499,74501,74503,74505,74507],{"class":157,"line":194},[155,74498,70707],{"class":171},[155,74500,69907],{"class":69863},[155,74502,69910],{"class":226},[155,74504,317],{"class":171},[155,74506,69915],{"class":732},[155,74508,69870],{"class":171},[155,74510,74511,74513,74515,74517,74519,74521,74523,74525,74527],{"class":157,"line":200},[155,74512,70707],{"class":171},[155,74514,69907],{"class":69863},[155,74516,34745],{"class":226},[155,74518,317],{"class":171},[155,74520,69954],{"class":732},[155,74522,69934],{"class":226},[155,74524,317],{"class":171},[155,74526,69961],{"class":732},[155,74528,69870],{"class":171},[155,74530,74531,74533,74535,74537,74539],{"class":157,"line":213},[155,74532,70707],{"class":171},[155,74534,69970],{"class":69863},[155,74536,69973],{"class":171},[155,74538,69970],{"class":69863},[155,74540,69870],{"class":171},[155,74542,74543,74545,74547],{"class":157,"line":220},[155,74544,70707],{"class":171},[155,74546,20011],{"class":69863},[155,74548,69870],{"class":171},[155,74550,74551,74553],{"class":157,"line":245},[155,74552,26266],{"class":69863},[155,74554,35397],{"class":171},[155,74556,74557,74559,74561,74563],{"class":157,"line":251},[155,74558,73258],{"class":263},[155,74560,70000],{"class":171},[155,74562,1109],{"class":263},[155,74564,21206],{"class":171},[155,74566,74567,74569,74571,74573],{"class":157,"line":257},[155,74568,73269],{"class":263},[155,74570,70000],{"class":171},[155,74572,1109],{"class":263},[155,74574,21206],{"class":171},[155,74576,74577],{"class":157,"line":270},[155,74578,22074],{"class":171},[155,74580,74581],{"class":157,"line":276},[155,74582,217],{"emptyLinePlaceholder":216},[155,74584,74585,74587],{"class":157,"line":297},[155,74586,73288],{"class":69863},[155,74588,35397],{"class":171},[155,74590,74591,74593,74595,74597],{"class":157,"line":302},[155,74592,73295],{"class":263},[155,74594,70000],{"class":171},[155,74596,73300],{"class":263},[155,74598,21206],{"class":171},[155,74600,74601],{"class":157,"line":308},[155,74602,22074],{"class":171},[155,74604,74605],{"class":157,"line":366},[155,74606,217],{"emptyLinePlaceholder":216},[155,74608,74609,74611],{"class":157,"line":379},[155,74610,73315],{"class":226},[155,74612,35397],{"class":171},[155,74614,74615,74617,74619,74621],{"class":157,"line":385},[155,74616,73322],{"class":263},[155,74618,70000],{"class":171},[155,74620,73327],{"class":263},[155,74622,21206],{"class":171},[155,74624,74625,74627,74629,74631,74633],{"class":157,"line":415},[155,74626,73334],{"class":263},[155,74628,70000],{"class":171},[155,74630,73339],{"class":263},[155,74632,70055],{"class":167},[155,74634,21206],{"class":171},[155,74636,74637,74639,74641,74643,74645],{"class":157,"line":452},[155,74638,73348],{"class":263},[155,74640,70000],{"class":171},[155,74642,21450],{"class":263},[155,74644,70055],{"class":167},[155,74646,21206],{"class":171},[155,74648,74649,74651,74653,74655,74657,74659],{"class":157,"line":480},[155,74650,73269],{"class":263},[155,74652,70000],{"class":171},[155,74654,20389],{"class":263},[155,74656,70055],{"class":167},[155,74658,70119],{"class":263},[155,74660,21206],{"class":171},[155,74662,74663],{"class":157,"line":486},[155,74664,22074],{"class":171},[155,74666,74667],{"class":157,"line":499},[155,74668,217],{"emptyLinePlaceholder":216},[155,74670,74671,74673],{"class":157,"line":505},[155,74672,73383],{"class":226},[155,74674,35397],{"class":171},[155,74676,74677,74679,74681,74683],{"class":157,"line":528},[155,74678,73322],{"class":263},[155,74680,70000],{"class":171},[155,74682,73394],{"class":263},[155,74684,21206],{"class":171},[155,74686,74687,74689,74691,74693],{"class":157,"line":549},[155,74688,73401],{"class":263},[155,74690,70000],{"class":171},[155,74692,1109],{"class":263},[155,74694,21206],{"class":171},[155,74696,74697,74699,74701,74703],{"class":157,"line":570},[155,74698,73412],{"class":263},[155,74700,70000],{"class":171},[155,74702,1109],{"class":263},[155,74704,21206],{"class":171},[155,74706,74707,74709,74711,74713,74715],{"class":157,"line":575},[155,74708,73334],{"class":263},[155,74710,70000],{"class":171},[155,74712,20389],{"class":263},[155,74714,2938],{"class":167},[155,74716,21206],{"class":171},[155,74718,74719,74721,74723,74725,74727],{"class":157,"line":581},[155,74720,73348],{"class":263},[155,74722,70000],{"class":171},[155,74724,20638],{"class":263},[155,74726,2938],{"class":167},[155,74728,21206],{"class":171},[155,74730,74731,74733,74735,74737],{"class":157,"line":592},[155,74732,73447],{"class":263},[155,74734,70000],{"class":171},[155,74736,73452],{"class":263},[155,74738,21206],{"class":171},[155,74740,74741],{"class":157,"line":610},[155,74742,22074],{"class":171},[155,74744,74745],{"class":157,"line":622},[155,74746,217],{"emptyLinePlaceholder":216},[155,74748,74749,74751,74753],{"class":157,"line":638},[155,74750,73383],{"class":226},[155,74752,26688],{"class":69863},[155,74754,35397],{"class":171},[155,74756,74757,74759,74761,74763],{"class":157,"line":650},[155,74758,73322],{"class":263},[155,74760,70000],{"class":171},[155,74762,73394],{"class":263},[155,74764,21206],{"class":171},[155,74766,74767,74769,74771,74773,74775],{"class":157,"line":662},[155,74768,73485],{"class":263},[155,74770,70000],{"class":171},[155,74772,832],{"class":263},[155,74774,70055],{"class":167},[155,74776,21206],{"class":171},[155,74778,74779,74781,74783,74785,74787],{"class":157,"line":678},[155,74780,73401],{"class":263},[155,74782,70000],{"class":171},[155,74784,3458],{"class":263},[155,74786,70055],{"class":167},[155,74788,21206],{"class":171},[155,74790,74791,74793,74795,74797,74799],{"class":157,"line":694},[155,74792,73510],{"class":263},[155,74794,70000],{"class":171},[155,74796,350],{"class":263},[155,74798,70055],{"class":167},[155,74800,21206],{"class":171},[155,74802,74803],{"class":157,"line":706},[155,74804,22074],{"class":171},[155,74806,74807],{"class":157,"line":715},[155,74808,217],{"emptyLinePlaceholder":216},[155,74810,74811,74813],{"class":157,"line":720},[155,74812,73531],{"class":69863},[155,74814,35397],{"class":171},[155,74816,74817,74819,74821,74823],{"class":157,"line":739},[155,74818,73322],{"class":263},[155,74820,70000],{"class":171},[155,74822,73394],{"class":263},[155,74824,21206],{"class":171},[155,74826,74827,74829,74831,74833,74835],{"class":157,"line":745},[155,74828,73510],{"class":263},[155,74830,70000],{"class":171},[155,74832,20837],{"class":263},[155,74834,70055],{"class":167},[155,74836,21206],{"class":171},[155,74838,74839,74841,74843,74845,74847],{"class":157,"line":773},[155,74840,73401],{"class":263},[155,74842,70000],{"class":171},[155,74844,3458],{"class":263},[155,74846,70055],{"class":167},[155,74848,21206],{"class":171},[155,74850,74851,74853,74855,74857],{"class":157,"line":779},[155,74852,73572],{"class":263},[155,74854,70000],{"class":171},[155,74856,70040],{"class":263},[155,74858,21206],{"class":171},[155,74860,74861,74863,74865,74867],{"class":157,"line":785},[155,74862,73583],{"class":263},[155,74864,70000],{"class":171},[155,74866,70231],{"class":263},[155,74868,21206],{"class":171},[155,74870,74871,74873,74875,74877],{"class":157,"line":791},[155,74872,73322],{"class":263},[155,74874,70000],{"class":171},[155,74876,73394],{"class":263},[155,74878,21206],{"class":171},[155,74880,74881,74883,74885,74887,74889],{"class":157,"line":796},[155,74882,73334],{"class":263},[155,74884,70000],{"class":171},[155,74886,23860],{"class":263},[155,74888,70055],{"class":167},[155,74890,21206],{"class":171},[155,74892,74893,74895,74897,74899,74901],{"class":157,"line":802},[155,74894,73348],{"class":263},[155,74896,70000],{"class":171},[155,74898,3458],{"class":263},[155,74900,70055],{"class":167},[155,74902,21206],{"class":171},[155,74904,74905],{"class":157,"line":808},[155,74906,22074],{"class":171},[155,74908,74909],{"class":157,"line":819},[155,74910,217],{"emptyLinePlaceholder":216},[155,74912,74913,74915,74917],{"class":157,"line":1832},[155,74914,73531],{"class":69863},[155,74916,73638],{"class":69863},[155,74918,35397],{"class":171},[155,74920,74921,74923,74925,74927,74929],{"class":157,"line":1838},[155,74922,73334],{"class":263},[155,74924,70000],{"class":171},[155,74926,3458],{"class":263},[155,74928,70055],{"class":167},[155,74930,21206],{"class":171},[155,74932,74933,74935,74937,74939,74941],{"class":157,"line":1844},[155,74934,73348],{"class":263},[155,74936,70000],{"class":171},[155,74938,3458],{"class":263},[155,74940,70055],{"class":167},[155,74942,21206],{"class":171},[155,74944,74945,74947,74949,74951,74953,74955,74957,74959,74961,74963,74965,74967],{"class":157,"line":1850},[155,74946,73447],{"class":263},[155,74948,70000],{"class":171},[155,74950,73673],{"class":263},[155,74952,230],{"class":171},[155,74954,1109],{"class":263},[155,74956,7589],{"class":171},[155,74958,1109],{"class":263},[155,74960,7589],{"class":171},[155,74962,1109],{"class":263},[155,74964,7589],{"class":171},[155,74966,73690],{"class":263},[155,74968,22596],{"class":171},[155,74970,74971,74973,74975,74977,74979],{"class":157,"line":1861},[155,74972,73697],{"class":263},[155,74974,70000],{"class":171},[155,74976,565],{"class":263},[155,74978,70055],{"class":167},[155,74980,21206],{"class":171},[155,74982,74983],{"class":157,"line":1866},[155,74984,22074],{"class":171},[155,74986,74987],{"class":157,"line":1871},[155,74988,217],{"emptyLinePlaceholder":216},[155,74990,74991,74993],{"class":157,"line":1877},[155,74992,73718],{"class":226},[155,74994,35397],{"class":171},[155,74996,74997,74999,75001,75003],{"class":157,"line":1883},[155,74998,73447],{"class":263},[155,75000,70000],{"class":171},[155,75002,73729],{"class":263},[155,75004,21206],{"class":171},[155,75006,75007],{"class":157,"line":1894},[155,75008,22074],{"class":171},[155,75010,75011,75013,75015],{"class":157,"line":1900},[155,75012,70980],{"class":171},[155,75014,20011],{"class":69863},[155,75016,69870],{"class":171},[155,75018,75019,75021,75023],{"class":157,"line":1911},[155,75020,70348],{"class":171},[155,75022,69897],{"class":69863},[155,75024,69870],{"class":171},[155,75026,75027],{"class":157,"line":1917},[155,75028,217],{"emptyLinePlaceholder":216},[155,75030,75031,75033,75035],{"class":157,"line":1927},[155,75032,20959],{"class":171},[155,75034,70363],{"class":69863},[155,75036,69870],{"class":171},[155,75038,75039,75041,75043,75045,75047,75049],{"class":157,"line":1933},[155,75040,70707],{"class":171},[155,75042,70174],{"class":69863},[155,75044,72049],{"class":226},[155,75046,317],{"class":171},[155,75048,72054],{"class":732},[155,75050,69870],{"class":171},[155,75052,75053,75055,75057,75059,75061,75063],{"class":157,"line":1943},[155,75054,69904],{"class":171},[155,75056,70174],{"class":69863},[155,75058,72049],{"class":226},[155,75060,317],{"class":171},[155,75062,73790],{"class":732},[155,75064,69870],{"class":171},[155,75066,75067,75069,75071,75073,75075,75077,75079,75081,75083],{"class":157,"line":1949},[155,75068,73797],{"class":171},[155,75070,37],{"class":69863},[155,75072,73802],{"class":226},[155,75074,317],{"class":171},[155,75076,73807],{"class":732},[155,75078,73810],{"class":226},[155,75080,317],{"class":171},[155,75082,15430],{"class":732},[155,75084,69870],{"class":171},[155,75086,75087,75089,75091],{"class":157,"line":1959},[155,75088,70339],{"class":171},[155,75090,70174],{"class":69863},[155,75092,69870],{"class":171},[155,75094,75095,75097,75099,75101,75103,75105],{"class":157,"line":1964},[155,75096,69904],{"class":171},[155,75098,70174],{"class":69863},[155,75100,72049],{"class":226},[155,75102,317],{"class":171},[155,75104,73837],{"class":732},[155,75106,69870],{"class":171},[155,75108,75109,75111,75113,75115,75117],{"class":157,"line":1970},[155,75110,73797],{"class":171},[155,75112,24],{"class":69863},[155,75114,73848],{"class":171},[155,75116,24],{"class":69863},[155,75118,69870],{"class":171},[155,75120,75121,75123,75125],{"class":157,"line":1981},[155,75122,73797],{"class":171},[155,75124,21052],{"class":69863},[155,75126,69870],{"class":171},[155,75128,75129,75131,75133,75135,75137,75139,75141,75143],{"class":157,"line":1986},[155,75130,73865],{"class":171},[155,75132,31],{"class":69863},[155,75134,72049],{"class":226},[155,75136,317],{"class":171},[155,75138,73874],{"class":732},[155,75140,73877],{"class":171},[155,75142,31],{"class":69863},[155,75144,69870],{"class":171},[155,75146,75147,75149,75151,75153,75155],{"class":157,"line":1991},[155,75148,73865],{"class":171},[155,75150,31],{"class":69863},[155,75152,73877],{"class":171},[155,75154,31],{"class":69863},[155,75156,69870],{"class":171},[155,75158,75159,75161,75163,75165,75167],{"class":157,"line":1997},[155,75160,73865],{"class":171},[155,75162,31],{"class":69863},[155,75164,73877],{"class":171},[155,75166,31],{"class":69863},[155,75168,69870],{"class":171},[155,75170,75171,75173,75175,75177,75179],{"class":157,"line":2014},[155,75172,73865],{"class":171},[155,75174,31],{"class":69863},[155,75176,73877],{"class":171},[155,75178,31],{"class":69863},[155,75180,69870],{"class":171},[155,75182,75183,75185,75187,75189,75191],{"class":157,"line":2046},[155,75184,73865],{"class":171},[155,75186,31],{"class":69863},[155,75188,73877],{"class":171},[155,75190,31],{"class":69863},[155,75192,69870],{"class":171},[155,75194,75195,75197,75199,75201,75203],{"class":157,"line":2062},[155,75196,73865],{"class":171},[155,75198,31],{"class":69863},[155,75200,73877],{"class":171},[155,75202,31],{"class":69863},[155,75204,69870],{"class":171},[155,75206,75207,75209,75211,75213,75215],{"class":157,"line":2067},[155,75208,73865],{"class":171},[155,75210,31],{"class":69863},[155,75212,73877],{"class":171},[155,75214,31],{"class":69863},[155,75216,69870],{"class":171},[155,75218,75219,75221,75223,75225,75227],{"class":157,"line":2073},[155,75220,73865],{"class":171},[155,75222,31],{"class":69863},[155,75224,73877],{"class":171},[155,75226,31],{"class":69863},[155,75228,69870],{"class":171},[155,75230,75231,75233,75235],{"class":157,"line":2079},[155,75232,73970],{"class":171},[155,75234,21052],{"class":69863},[155,75236,69870],{"class":171},[155,75238,75239,75241,75243],{"class":157,"line":2089},[155,75240,70339],{"class":171},[155,75242,70174],{"class":69863},[155,75244,69870],{"class":171},[155,75246,75247,75249,75251],{"class":157,"line":2095},[155,75248,70980],{"class":171},[155,75250,70174],{"class":69863},[155,75252,69870],{"class":171},[155,75254,75255,75257,75259],{"class":157,"line":2106},[155,75256,70707],{"class":171},[155,75258,70376],{"class":69863},[155,75260,69870],{"class":171},[155,75262,75263,75265,75268,75270],{"class":157,"line":2112},[155,75264,31049],{"class":167},[155,75266,75267],{"class":263}," sliderData",[155,75269,33391],{"class":167},[155,75271,74010],{"class":171},[155,75273,75274,75276,75278,75280,75282,75284,75286],{"class":157,"line":2122},[155,75275,74015],{"class":171},[155,75277,74018],{"class":732},[155,75279,74021],{"class":171},[155,75281,74024],{"class":732},[155,75283,74027],{"class":171},[155,75285,74030],{"class":732},[155,75287,74033],{"class":171},[155,75289,75290,75292,75294,75296,75298,75300,75302],{"class":157,"line":2128},[155,75291,74015],{"class":171},[155,75293,74040],{"class":732},[155,75295,74021],{"class":171},[155,75297,74045],{"class":732},[155,75299,74027],{"class":171},[155,75301,74050],{"class":732},[155,75303,74033],{"class":171},[155,75305,75306,75308,75310,75312,75314,75316,75318],{"class":157,"line":2138},[155,75307,74015],{"class":171},[155,75309,74059],{"class":732},[155,75311,74021],{"class":171},[155,75313,74064],{"class":732},[155,75315,74027],{"class":171},[155,75317,74069],{"class":732},[155,75319,74033],{"class":171},[155,75321,75322,75324,75326,75328,75330,75332,75334],{"class":157,"line":2144},[155,75323,74015],{"class":171},[155,75325,74078],{"class":732},[155,75327,74021],{"class":171},[155,75329,74083],{"class":732},[155,75331,74027],{"class":171},[155,75333,74088],{"class":732},[155,75335,74033],{"class":171},[155,75337,75338,75340,75342,75344,75346,75348,75350],{"class":157,"line":2154},[155,75339,74015],{"class":171},[155,75341,74097],{"class":732},[155,75343,74021],{"class":171},[155,75345,74102],{"class":732},[155,75347,74027],{"class":171},[155,75349,74107],{"class":732},[155,75351,74033],{"class":171},[155,75353,75354,75356,75358,75360,75362,75364,75366],{"class":157,"line":2160},[155,75355,74015],{"class":171},[155,75357,74116],{"class":732},[155,75359,74021],{"class":171},[155,75361,74121],{"class":732},[155,75363,74027],{"class":171},[155,75365,74126],{"class":732},[155,75367,74033],{"class":171},[155,75369,75370,75372,75374,75376,75378,75380,75382],{"class":157,"line":2170},[155,75371,74015],{"class":171},[155,75373,74135],{"class":732},[155,75375,74021],{"class":171},[155,75377,74140],{"class":732},[155,75379,74027],{"class":171},[155,75381,74145],{"class":732},[155,75383,74033],{"class":171},[155,75385,75386,75388,75390,75392,75394,75396,75398],{"class":157,"line":2176},[155,75387,74015],{"class":171},[155,75389,74154],{"class":732},[155,75391,74021],{"class":171},[155,75393,74159],{"class":732},[155,75395,74027],{"class":171},[155,75397,74164],{"class":732},[155,75399,74167],{"class":171},[155,75401,75402],{"class":157,"line":2191},[155,75403,71672],{"class":171},[155,75405,75406],{"class":157,"line":2197},[155,75407,75408],{"class":161},"    \u002F\u002F 1.获取元素\n",[155,75410,75411,75413,75415,75417,75419,75421,75423,75425],{"class":157,"line":2208},[155,75412,31049],{"class":167},[155,75414,74178],{"class":263},[155,75416,33391],{"class":167},[155,75418,72959],{"class":171},[155,75420,72962],{"class":226},[155,75422,230],{"class":171},[155,75424,74189],{"class":732},[155,75426,363],{"class":171},[155,75428,75429,75431,75433,75435,75437,75439,75441,75443],{"class":157,"line":2214},[155,75430,31049],{"class":167},[155,75432,26688],{"class":263},[155,75434,33391],{"class":167},[155,75436,72959],{"class":171},[155,75438,72962],{"class":226},[155,75440,230],{"class":171},[155,75442,74208],{"class":732},[155,75444,363],{"class":171},[155,75446,75447,75449,75451,75453],{"class":157,"line":2225},[155,75448,70782],{"class":167},[155,75450,29287],{"class":171},[155,75452,317],{"class":167},[155,75454,16959],{"class":263},[155,75456,75457],{"class":157,"line":2231},[155,75458,75459],{"class":161},"    \u002F\u002F 2.开启定时器\n",[155,75461,75462],{"class":157,"line":2237},[155,75463,75464],{"class":161},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[155,75466,75467,75470,75472,75474],{"class":157,"line":2243},[155,75468,75469],{"class":226},"    setInterval",[155,75471,230],{"class":171},[155,75473,73012],{"class":167},[155,75475,73015],{"class":171},[155,75477,75478,75480],{"class":157,"line":2249},[155,75479,73020],{"class":171},[155,75481,22579],{"class":167},[155,75483,75484,75486,75488,75490,75493,75495],{"class":157,"line":2260},[155,75485,73043],{"class":167},[155,75487,73046],{"class":171},[155,75489,21607],{"class":167},[155,75491,75492],{"class":171}," sliderData.",[155,75494,70531],{"class":263},[155,75496,32269],{"class":171},[155,75498,75499,75502,75504],{"class":157,"line":2266},[155,75500,75501],{"class":171},"        i ",[155,75503,317],{"class":167},[155,75505,16959],{"class":263},[155,75507,75508],{"class":157,"line":2286},[155,75509,70961],{"class":171},[155,75511,75512],{"class":157,"line":2292},[155,75513,75514],{"class":161},"      \u002F\u002F 更换图片路径\n",[155,75516,75517,75519,75521],{"class":157,"line":2303},[155,75518,74284],{"class":171},[155,75520,317],{"class":167},[155,75522,75523],{"class":171}," sliderData[i].url\n",[155,75525,75526],{"class":157,"line":2309},[155,75527,75528],{"class":161},"      \u002F\u002F 把文字写到p里面\n",[155,75530,75531,75533,75535],{"class":157,"line":2315},[155,75532,74294],{"class":171},[155,75534,317],{"class":167},[155,75536,75537],{"class":171}," sliderData[i].title\n",[155,75539,75540],{"class":157,"line":2321},[155,75541,75542],{"class":161},"      \u002F\u002F 小圆点\n",[155,75544,75545],{"class":157,"line":2327},[155,75546,75547],{"class":161},"      \u002F\u002F 先删除以前的active\n",[155,75549,75550],{"class":157,"line":2333},[155,75551,75552],{"class":161},"      \u002F\u002F 只让当前li添加active\n",[155,75554,75555,75557,75559,75561,75564,75567,75570,75572,75574],{"class":157,"line":2339},[155,75556,74334],{"class":171},[155,75558,72962],{"class":226},[155,75560,230],{"class":171},[155,75562,75563],{"class":732},"'.slider-footer .activate'",[155,75565,75566],{"class":171},").classList.",[155,75568,75569],{"class":226},"remove",[155,75571,230],{"class":171},[155,75573,74352],{"class":732},[155,75575,363],{"class":171},[155,75577,75578,75580,75582,75584,75587,75589,75591,75593,75596,75598,75600,75602,75604],{"class":157,"line":2345},[155,75579,74334],{"class":171},[155,75581,72962],{"class":226},[155,75583,230],{"class":171},[155,75585,75586],{"class":732},"`.slider-footer ul li:nth-child(${",[155,75588,20513],{"class":171},[155,75590,15186],{"class":167},[155,75592,1277],{"class":263},[155,75594,75595],{"class":732},"})`",[155,75597,75566],{"class":171},[155,75599,25197],{"class":226},[155,75601,230],{"class":171},[155,75603,74352],{"class":732},[155,75605,363],{"class":171},[155,75607,75608],{"class":157,"line":2366},[155,75609,217],{"emptyLinePlaceholder":216},[155,75611,75612,75614,75616],{"class":157,"line":2372},[155,75613,73098],{"class":171},[155,75615,26273],{"class":263},[155,75617,363],{"class":171},[155,75619,75620],{"class":157,"line":2388},[155,75621,217],{"emptyLinePlaceholder":216},[155,75623,75624,75626,75628],{"class":157,"line":2394},[155,75625,70980],{"class":171},[155,75627,70376],{"class":69863},[155,75629,69870],{"class":171},[155,75631,75632,75634,75636],{"class":157,"line":2408},[155,75633,70348],{"class":171},[155,75635,70363],{"class":69863},[155,75637,69870],{"class":171},[155,75639,75640],{"class":157,"line":2414},[155,75641,217],{"emptyLinePlaceholder":216},[155,75643,75644,75646,75648],{"class":157,"line":2429},[155,75645,70348],{"class":171},[155,75647,69198],{"class":69863},[155,75649,69870],{"class":171},[14,75651,75653],{"id":75652},"_317-重要知识点","3.1.7 重要知识点",[24,75655,75656,75657],{},"浏览器在渲染文本时， ",[20234,75658,75659],{},"没有空格或换行符就没有“断行点”",[24,75661,75662],{},[37,75663],{"alt":39,"src":75664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[24,75666,75667],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[24,75669,75670],{},[37,75671],{"alt":39,"src":75672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[24,75674,75675],{},[37,75676],{"alt":39,"src":75677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[20037,75679,75681],{"id":75680},"_32-dom事件基础","3.2 DOM事件基础",[14,75683,75685],{"id":75684},"_321-事件监听","3.2.1 事件监听",[24,75687,75688],{},[37,75689],{"alt":39,"src":75690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[24,75692,75693],{},"事件监听有响应的发生",[24,75695,75696],{},[37,75697],{"alt":39,"src":75698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[24,75700,75701],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[24,75703,75704],{},"对于有名函数,要执行的函数名后边不要加()",[14,75706,75708],{"id":75707},"_322-随机点名案例","3.2.2 随机点名案例",[146,75710,75712],{"className":69196,"code":75711,"language":69198,"meta":39,"style":39},"\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",[152,75713,75714,75724,75738,75742,75750,75764,75784,75796,75804,75810,75820,75830,75834,75838,75845,75856,75860,75864,75870,75882,75896,75906,75918,75931,75935,75939,75946,75950,75963,75975,75987,75991,75995,75999,76006,76016,76020,76024,76033,76045,76057,76072,76076,76084,76092,76096,76104,76117,76131,76144,76164,76172,76187,76207,76227,76235,76239,76247,76252,76288,76308,76313,76332,76337,76348,76353,76364,76369,76388,76403,76408,76434,76444,76453,76458,76474,76479,76484,76489,76504,76508,76512,76517,76536,76553,76561,76566,76581,76585,76589,76597,76605,76609],{"__ignoreMap":39},[155,75715,75716,75718,75720,75722],{"class":157,"line":158},[155,75717,69860],{"class":171},[155,75719,69864],{"class":69863},[155,75721,69867],{"class":226},[155,75723,69870],{"class":171},[155,75725,75726,75728,75730,75732,75734,75736],{"class":157,"line":46},[155,75727,20959],{"class":171},[155,75729,69198],{"class":69863},[155,75731,69879],{"class":226},[155,75733,317],{"class":171},[155,75735,69884],{"class":732},[155,75737,69870],{"class":171},[155,75739,75740],{"class":157,"line":121},[155,75741,217],{"emptyLinePlaceholder":216},[155,75743,75744,75746,75748],{"class":157,"line":180},[155,75745,20959],{"class":171},[155,75747,69897],{"class":69863},[155,75749,69870],{"class":171},[155,75751,75752,75754,75756,75758,75760,75762],{"class":157,"line":194},[155,75753,70707],{"class":171},[155,75755,69907],{"class":69863},[155,75757,69910],{"class":226},[155,75759,317],{"class":171},[155,75761,69915],{"class":732},[155,75763,69870],{"class":171},[155,75765,75766,75768,75770,75772,75774,75776,75778,75780,75782],{"class":157,"line":200},[155,75767,70707],{"class":171},[155,75769,69907],{"class":69863},[155,75771,34745],{"class":226},[155,75773,317],{"class":171},[155,75775,69954],{"class":732},[155,75777,69934],{"class":226},[155,75779,317],{"class":171},[155,75781,69961],{"class":732},[155,75783,69870],{"class":171},[155,75785,75786,75788,75790,75792,75794],{"class":157,"line":213},[155,75787,70707],{"class":171},[155,75789,69970],{"class":69863},[155,75791,69973],{"class":171},[155,75793,69970],{"class":69863},[155,75795,69870],{"class":171},[155,75797,75798,75800,75802],{"class":157,"line":220},[155,75799,70707],{"class":171},[155,75801,20011],{"class":69863},[155,75803,69870],{"class":171},[155,75805,75806,75808],{"class":157,"line":245},[155,75807,26266],{"class":69863},[155,75809,35397],{"class":171},[155,75811,75812,75814,75816,75818],{"class":157,"line":251},[155,75813,73269],{"class":263},[155,75815,70000],{"class":171},[155,75817,1109],{"class":263},[155,75819,21206],{"class":171},[155,75821,75822,75824,75826,75828],{"class":157,"line":257},[155,75823,73258],{"class":263},[155,75825,70000],{"class":171},[155,75827,1109],{"class":263},[155,75829,21206],{"class":171},[155,75831,75832],{"class":157,"line":270},[155,75833,22074],{"class":171},[155,75835,75836],{"class":157,"line":276},[155,75837,217],{"emptyLinePlaceholder":216},[155,75839,75840,75843],{"class":157,"line":297},[155,75841,75842],{"class":69863},"    h2",[155,75844,35397],{"class":171},[155,75846,75847,75850,75852,75854],{"class":157,"line":302},[155,75848,75849],{"class":263},"      text-align",[155,75851,70000],{"class":171},[155,75853,70155],{"class":263},[155,75855,21206],{"class":171},[155,75857,75858],{"class":157,"line":308},[155,75859,22074],{"class":171},[155,75861,75862],{"class":157,"line":366},[155,75863,217],{"emptyLinePlaceholder":216},[155,75865,75866,75868],{"class":157,"line":379},[155,75867,73315],{"class":226},[155,75869,35397],{"class":171},[155,75871,75872,75874,75876,75878,75880],{"class":157,"line":385},[155,75873,73334],{"class":263},[155,75875,70000],{"class":171},[155,75877,21450],{"class":263},[155,75879,70055],{"class":167},[155,75881,21206],{"class":171},[155,75883,75884,75886,75888,75890,75892,75894],{"class":157,"line":415},[155,75885,73269],{"class":263},[155,75887,70000],{"class":171},[155,75889,20715],{"class":263},[155,75891,70055],{"class":167},[155,75893,70119],{"class":263},[155,75895,21206],{"class":171},[155,75897,75898,75900,75902,75904],{"class":157,"line":452},[155,75899,73572],{"class":263},[155,75901,70000],{"class":171},[155,75903,70040],{"class":263},[155,75905,21206],{"class":171},[155,75907,75908,75910,75912,75914,75916],{"class":157,"line":480},[155,75909,73485],{"class":263},[155,75911,70000],{"class":171},[155,75913,20879],{"class":263},[155,75915,70055],{"class":167},[155,75917,21206],{"class":171},[155,75919,75920,75923,75925,75927,75929],{"class":157,"line":486},[155,75921,75922],{"class":263},"      line-height",[155,75924,70000],{"class":171},[155,75926,20473],{"class":263},[155,75928,70055],{"class":167},[155,75930,21206],{"class":171},[155,75932,75933],{"class":157,"line":499},[155,75934,22074],{"class":171},[155,75936,75937],{"class":157,"line":505},[155,75938,217],{"emptyLinePlaceholder":216},[155,75940,75941,75944],{"class":157,"line":528},[155,75942,75943],{"class":226},"    .qs",[155,75945,35397],{"class":171},[155,75947,75948],{"class":157,"line":549},[155,75949,217],{"emptyLinePlaceholder":216},[155,75951,75952,75954,75956,75959,75961],{"class":157,"line":570},[155,75953,73334],{"class":263},[155,75955,70000],{"class":171},[155,75957,75958],{"class":263},"450",[155,75960,70055],{"class":167},[155,75962,21206],{"class":171},[155,75964,75965,75967,75969,75971,75973],{"class":157,"line":575},[155,75966,73348],{"class":263},[155,75968,70000],{"class":171},[155,75970,20473],{"class":263},[155,75972,70055],{"class":167},[155,75974,21206],{"class":171},[155,75976,75977,75980,75982,75985],{"class":157,"line":581},[155,75978,75979],{"class":263},"      color",[155,75981,70000],{"class":171},[155,75983,75984],{"class":263},"red",[155,75986,21206],{"class":171},[155,75988,75989],{"class":157,"line":592},[155,75990,217],{"emptyLinePlaceholder":216},[155,75992,75993],{"class":157,"line":610},[155,75994,22074],{"class":171},[155,75996,75997],{"class":157,"line":622},[155,75998,217],{"emptyLinePlaceholder":216},[155,76000,76001,76004],{"class":157,"line":638},[155,76002,76003],{"class":226},"    .btns",[155,76005,35397],{"class":171},[155,76007,76008,76010,76012,76014],{"class":157,"line":650},[155,76009,75849],{"class":263},[155,76011,70000],{"class":171},[155,76013,70155],{"class":263},[155,76015,21206],{"class":171},[155,76017,76018],{"class":157,"line":662},[155,76019,22074],{"class":171},[155,76021,76022],{"class":157,"line":678},[155,76023,217],{"emptyLinePlaceholder":216},[155,76025,76026,76028,76031],{"class":157,"line":694},[155,76027,76003],{"class":226},[155,76029,76030],{"class":69863}," button",[155,76032,35397],{"class":171},[155,76034,76035,76037,76039,76041,76043],{"class":157,"line":706},[155,76036,73334],{"class":263},[155,76038,70000],{"class":171},[155,76040,523],{"class":263},[155,76042,70055],{"class":167},[155,76044,21206],{"class":171},[155,76046,76047,76049,76051,76053,76055],{"class":157,"line":715},[155,76048,73348],{"class":263},[155,76050,70000],{"class":171},[155,76052,20352],{"class":263},[155,76054,70055],{"class":167},[155,76056,21206],{"class":171},[155,76058,76059,76061,76063,76065,76068,76070],{"class":157,"line":720},[155,76060,73269],{"class":263},[155,76062,70000],{"class":171},[155,76064,1109],{"class":263},[155,76066,76067],{"class":263}," 50",[155,76069,70055],{"class":167},[155,76071,21206],{"class":171},[155,76073,76074],{"class":157,"line":739},[155,76075,22074],{"class":171},[155,76077,76078,76080,76082],{"class":157,"line":745},[155,76079,70980],{"class":171},[155,76081,20011],{"class":69863},[155,76083,69870],{"class":171},[155,76085,76086,76088,76090],{"class":157,"line":773},[155,76087,70348],{"class":171},[155,76089,69897],{"class":69863},[155,76091,69870],{"class":171},[155,76093,76094],{"class":157,"line":779},[155,76095,217],{"emptyLinePlaceholder":216},[155,76097,76098,76100,76102],{"class":157,"line":785},[155,76099,20959],{"class":171},[155,76101,70363],{"class":69863},[155,76103,69870],{"class":171},[155,76105,76106,76108,76110,76113,76115],{"class":157,"line":791},[155,76107,70707],{"class":171},[155,76109,20037],{"class":69863},[155,76111,76112],{"class":171},">随机点名\u003C\u002F",[155,76114,20037],{"class":69863},[155,76116,69870],{"class":171},[155,76118,76119,76121,76123,76125,76127,76129],{"class":157,"line":796},[155,76120,70707],{"class":171},[155,76122,70174],{"class":69863},[155,76124,72049],{"class":226},[155,76126,317],{"class":171},[155,76128,72054],{"class":732},[155,76130,69870],{"class":171},[155,76132,76133,76135,76137,76140,76142],{"class":157,"line":802},[155,76134,69904],{"class":171},[155,76136,155],{"class":69863},[155,76138,76139],{"class":171},">名字是：\u003C\u002F",[155,76141,155],{"class":69863},[155,76143,69870],{"class":171},[155,76145,76146,76148,76150,76152,76154,76157,76160,76162],{"class":157,"line":808},[155,76147,69904],{"class":171},[155,76149,70174],{"class":69863},[155,76151,72049],{"class":226},[155,76153,317],{"class":171},[155,76155,76156],{"class":732},"\"qs\"",[155,76158,76159],{"class":171},">这里显示姓名\u003C\u002F",[155,76161,70174],{"class":69863},[155,76163,69870],{"class":171},[155,76165,76166,76168,76170],{"class":157,"line":819},[155,76167,70980],{"class":171},[155,76169,70174],{"class":69863},[155,76171,69870],{"class":171},[155,76173,76174,76176,76178,76180,76182,76185],{"class":157,"line":1832},[155,76175,70707],{"class":171},[155,76177,70174],{"class":69863},[155,76179,72049],{"class":226},[155,76181,317],{"class":171},[155,76183,76184],{"class":732},"\"btns\"",[155,76186,69870],{"class":171},[155,76188,76189,76191,76193,76195,76197,76200,76203,76205],{"class":157,"line":1838},[155,76190,69904],{"class":171},[155,76192,72450],{"class":69863},[155,76194,72049],{"class":226},[155,76196,317],{"class":171},[155,76198,76199],{"class":732},"\"start\"",[155,76201,76202],{"class":171},">开始\u003C\u002F",[155,76204,72450],{"class":69863},[155,76206,69870],{"class":171},[155,76208,76209,76211,76213,76215,76217,76220,76223,76225],{"class":157,"line":1844},[155,76210,69904],{"class":171},[155,76212,72450],{"class":69863},[155,76214,72049],{"class":226},[155,76216,317],{"class":171},[155,76218,76219],{"class":732},"\"end\"",[155,76221,76222],{"class":171},">结束\u003C\u002F",[155,76224,72450],{"class":69863},[155,76226,69870],{"class":171},[155,76228,76229,76231,76233],{"class":157,"line":1850},[155,76230,70980],{"class":171},[155,76232,70174],{"class":69863},[155,76234,69870],{"class":171},[155,76236,76237],{"class":157,"line":1861},[155,76238,217],{"emptyLinePlaceholder":216},[155,76240,76241,76243,76245],{"class":157,"line":1866},[155,76242,70707],{"class":171},[155,76244,70376],{"class":69863},[155,76246,69870],{"class":171},[155,76248,76249],{"class":157,"line":1871},[155,76250,76251],{"class":161},"    \u002F\u002F 数据数组\n",[155,76253,76254,76256,76259,76261,76263,76266,76268,76271,76273,76276,76278,76281,76283,76286],{"class":157,"line":1877},[155,76255,31049],{"class":167},[155,76257,76258],{"class":263}," arr",[155,76260,33391],{"class":167},[155,76262,70789],{"class":171},[155,76264,76265],{"class":732},"'马超'",[155,76267,7589],{"class":171},[155,76269,76270],{"class":732},"'黄忠'",[155,76272,7589],{"class":171},[155,76274,76275],{"class":732},"'赵云'",[155,76277,7589],{"class":171},[155,76279,76280],{"class":732},"'关羽'",[155,76282,7589],{"class":171},[155,76284,76285],{"class":732},"'张飞'",[155,76287,2845],{"class":171},[155,76289,76290,76292,76295,76297,76299,76301,76303,76306],{"class":157,"line":1883},[155,76291,31049],{"class":167},[155,76293,76294],{"class":263}," qs",[155,76296,33391],{"class":167},[155,76298,72959],{"class":171},[155,76300,72962],{"class":226},[155,76302,230],{"class":171},[155,76304,76305],{"class":732},"'.qs'",[155,76307,363],{"class":171},[155,76309,76310],{"class":157,"line":1894},[155,76311,76312],{"class":161},"    \u002F\u002F 1.业务1.开始按钮模块\n",[155,76314,76315,76317,76319,76321,76323,76325,76327,76330],{"class":157,"line":1900},[155,76316,31049],{"class":167},[155,76318,24050],{"class":263},[155,76320,33391],{"class":167},[155,76322,72959],{"class":171},[155,76324,72962],{"class":226},[155,76326,230],{"class":171},[155,76328,76329],{"class":732},"'.start'",[155,76331,363],{"class":171},[155,76333,76334],{"class":157,"line":1911},[155,76335,76336],{"class":161},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[155,76338,76339,76341,76344,76346],{"class":157,"line":1917},[155,76340,70782],{"class":167},[155,76342,76343],{"class":171}," timerId ",[155,76345,317],{"class":167},[155,76347,16959],{"class":263},[155,76349,76350],{"class":157,"line":1927},[155,76351,76352],{"class":161},"    \u002F\u002F 随机号要全局变量\n",[155,76354,76355,76357,76360,76362],{"class":157,"line":1933},[155,76356,70782],{"class":167},[155,76358,76359],{"class":171}," random ",[155,76361,317],{"class":167},[155,76363,16959],{"class":263},[155,76365,76366],{"class":157,"line":1943},[155,76367,76368],{"class":161},"    \u002F\u002F 1.1 添加点击事件\n",[155,76370,76371,76374,76377,76379,76382,76384,76386],{"class":157,"line":1949},[155,76372,76373],{"class":171},"    start.",[155,76375,76376],{"class":226},"addEventListener",[155,76378,230],{"class":171},[155,76380,76381],{"class":732},"'click'",[155,76383,7589],{"class":171},[155,76385,73012],{"class":167},[155,76387,73015],{"class":171},[155,76389,76390,76393,76395,76397,76399,76401],{"class":157,"line":1959},[155,76391,76392],{"class":171},"      timerId ",[155,76394,317],{"class":167},[155,76396,73007],{"class":226},[155,76398,230],{"class":171},[155,76400,73012],{"class":167},[155,76402,73015],{"class":171},[155,76404,76405],{"class":157,"line":1964},[155,76406,76407],{"class":161},"        \u002F\u002F 随机数\n",[155,76409,76410,76413,76415,76418,76421,76424,76426,76428,76430,76432],{"class":157,"line":1970},[155,76411,76412],{"class":171},"        random ",[155,76414,317],{"class":167},[155,76416,76417],{"class":226}," parseInt",[155,76419,76420],{"class":171},"(Math.",[155,76422,76423],{"class":226},"random",[155,76425,32877],{"class":171},[155,76427,1563],{"class":167},[155,76429,70528],{"class":171},[155,76431,70531],{"class":263},[155,76433,363],{"class":171},[155,76435,76436,76439,76441],{"class":157,"line":1981},[155,76437,76438],{"class":171},"        qs.innerHTML ",[155,76440,317],{"class":167},[155,76442,76443],{"class":171}," arr[random]\n",[155,76445,76446,76449,76451],{"class":157,"line":1986},[155,76447,76448],{"class":171},"      }, ",[155,76450,20352],{"class":263},[155,76452,363],{"class":171},[155,76454,76455],{"class":157,"line":1991},[155,76456,76457],{"class":161},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[155,76459,76460,76462,76465,76467,76470,76472],{"class":157,"line":1997},[155,76461,73043],{"class":167},[155,76463,76464],{"class":171}," (arr.",[155,76466,70531],{"class":263},[155,76468,76469],{"class":167}," ===",[155,76471,1277],{"class":263},[155,76473,32269],{"class":171},[155,76475,76476],{"class":157,"line":2014},[155,76477,76478],{"class":161},"        \u002F\u002F start.disabled = true\n",[155,76480,76481],{"class":157,"line":2046},[155,76482,76483],{"class":161},"        \u002F\u002F end.disabled = true\n",[155,76485,76486],{"class":157,"line":2062},[155,76487,76488],{"class":161},"        \u002F\u002F 可以合起来写\n",[155,76490,76491,76494,76496,76499,76501],{"class":157,"line":2067},[155,76492,76493],{"class":171},"        start.disabled ",[155,76495,317],{"class":167},[155,76497,76498],{"class":171}," end.disabled ",[155,76500,317],{"class":167},[155,76502,76503],{"class":263}," true\n",[155,76505,76506],{"class":157,"line":2073},[155,76507,70961],{"class":171},[155,76509,76510],{"class":157,"line":2079},[155,76511,3065],{"class":171},[155,76513,76514],{"class":157,"line":2089},[155,76515,76516],{"class":161},"    \u002F\u002F 1.2 关闭按钮模块\n",[155,76518,76519,76521,76523,76525,76527,76529,76531,76534],{"class":157,"line":2095},[155,76520,31049],{"class":167},[155,76522,24066],{"class":263},[155,76524,33391],{"class":167},[155,76526,72959],{"class":171},[155,76528,72962],{"class":226},[155,76530,230],{"class":171},[155,76532,76533],{"class":732},"'.end'",[155,76535,363],{"class":171},[155,76537,76538,76541,76543,76545,76547,76549,76551],{"class":157,"line":2106},[155,76539,76540],{"class":171},"    end.",[155,76542,76376],{"class":226},[155,76544,230],{"class":171},[155,76546,76381],{"class":732},[155,76548,7589],{"class":171},[155,76550,73012],{"class":167},[155,76552,73015],{"class":171},[155,76554,76555,76558],{"class":157,"line":2112},[155,76556,76557],{"class":226},"      clearInterval",[155,76559,76560],{"class":171},"(timerId)\n",[155,76562,76563],{"class":157,"line":2122},[155,76564,76565],{"class":161},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[155,76567,76568,76571,76574,76577,76579],{"class":157,"line":2128},[155,76569,76570],{"class":171},"      arr.",[155,76572,76573],{"class":226},"splice",[155,76575,76576],{"class":171},"(random, ",[155,76578,329],{"class":263},[155,76580,363],{"class":171},[155,76582,76583],{"class":157,"line":2138},[155,76584,3065],{"class":171},[155,76586,76587],{"class":157,"line":2144},[155,76588,217],{"emptyLinePlaceholder":216},[155,76590,76591,76593,76595],{"class":157,"line":2154},[155,76592,70980],{"class":171},[155,76594,70376],{"class":69863},[155,76596,69870],{"class":171},[155,76598,76599,76601,76603],{"class":157,"line":2160},[155,76600,70348],{"class":171},[155,76602,70363],{"class":69863},[155,76604,69870],{"class":171},[155,76606,76607],{"class":157,"line":2170},[155,76608,217],{"emptyLinePlaceholder":216},[155,76610,76611,76613,76615],{"class":157,"line":2176},[155,76612,70348],{"class":171},[155,76614,69198],{"class":69863},[155,76616,69870],{"class":171},[24,76618,76619],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[14,76621,76623],{"id":76622},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[146,76625,76627],{"className":69196,"code":76626,"language":69198,"meta":39,"style":39},"\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",[152,76628,76629,76639,76653,76657,76665,76679,76699,76711,76719,76723,76731,76743,76751,76770,76787,76803,76813,76817,76825,76833,76837],{"__ignoreMap":39},[155,76630,76631,76633,76635,76637],{"class":157,"line":158},[155,76632,69860],{"class":171},[155,76634,69864],{"class":69863},[155,76636,69867],{"class":226},[155,76638,69870],{"class":171},[155,76640,76641,76643,76645,76647,76649,76651],{"class":157,"line":46},[155,76642,20959],{"class":171},[155,76644,69198],{"class":69863},[155,76646,69879],{"class":226},[155,76648,317],{"class":171},[155,76650,69884],{"class":732},[155,76652,69870],{"class":171},[155,76654,76655],{"class":157,"line":121},[155,76656,217],{"emptyLinePlaceholder":216},[155,76658,76659,76661,76663],{"class":157,"line":180},[155,76660,20959],{"class":171},[155,76662,69897],{"class":69863},[155,76664,69870],{"class":171},[155,76666,76667,76669,76671,76673,76675,76677],{"class":157,"line":194},[155,76668,70707],{"class":171},[155,76670,69907],{"class":69863},[155,76672,69910],{"class":226},[155,76674,317],{"class":171},[155,76676,69915],{"class":732},[155,76678,69870],{"class":171},[155,76680,76681,76683,76685,76687,76689,76691,76693,76695,76697],{"class":157,"line":200},[155,76682,70707],{"class":171},[155,76684,69907],{"class":69863},[155,76686,34745],{"class":226},[155,76688,317],{"class":171},[155,76690,69954],{"class":732},[155,76692,69934],{"class":226},[155,76694,317],{"class":171},[155,76696,69961],{"class":732},[155,76698,69870],{"class":171},[155,76700,76701,76703,76705,76707,76709],{"class":157,"line":213},[155,76702,70707],{"class":171},[155,76704,69970],{"class":69863},[155,76706,69973],{"class":171},[155,76708,69970],{"class":69863},[155,76710,69870],{"class":171},[155,76712,76713,76715,76717],{"class":157,"line":220},[155,76714,70348],{"class":171},[155,76716,69897],{"class":69863},[155,76718,69870],{"class":171},[155,76720,76721],{"class":157,"line":245},[155,76722,217],{"emptyLinePlaceholder":216},[155,76724,76725,76727,76729],{"class":157,"line":251},[155,76726,20959],{"class":171},[155,76728,70363],{"class":69863},[155,76730,69870],{"class":171},[155,76732,76733,76735,76737,76739,76741],{"class":157,"line":257},[155,76734,70707],{"class":171},[155,76736,72450],{"class":69863},[155,76738,72456],{"class":171},[155,76740,72450],{"class":69863},[155,76742,69870],{"class":171},[155,76744,76745,76747,76749],{"class":157,"line":270},[155,76746,70707],{"class":171},[155,76748,70376],{"class":69863},[155,76750,69870],{"class":171},[155,76752,76753,76755,76757,76759,76761,76763,76765,76768],{"class":157,"line":276},[155,76754,31049],{"class":167},[155,76756,72954],{"class":263},[155,76758,33391],{"class":167},[155,76760,72959],{"class":171},[155,76762,72962],{"class":226},[155,76764,230],{"class":171},[155,76766,76767],{"class":732},"'button'",[155,76769,363],{"class":171},[155,76771,76772,76775,76777,76779,76781,76783,76785],{"class":157,"line":297},[155,76773,76774],{"class":171},"    btn.",[155,76776,76376],{"class":226},[155,76778,230],{"class":171},[155,76780,76381],{"class":732},[155,76782,7589],{"class":171},[155,76784,73012],{"class":167},[155,76786,73015],{"class":171},[155,76788,76789,76792,76794,76796,76799,76801],{"class":157,"line":302},[155,76790,76791],{"class":167},"      const",[155,76793,22127],{"class":263},[155,76795,33391],{"class":167},[155,76797,76798],{"class":171}," Math.",[155,76800,76423],{"class":226},[155,76802,294],{"class":171},[155,76804,76805,76808,76811],{"class":157,"line":308},[155,76806,76807],{"class":171},"      console.",[155,76809,76810],{"class":226},"log",[155,76812,20106],{"class":171},[155,76814,76815],{"class":157,"line":366},[155,76816,3065],{"class":171},[155,76818,76819,76821,76823],{"class":157,"line":379},[155,76820,70980],{"class":171},[155,76822,70376],{"class":69863},[155,76824,69870],{"class":171},[155,76826,76827,76829,76831],{"class":157,"line":385},[155,76828,70348],{"class":171},[155,76830,70363],{"class":69863},[155,76832,69870],{"class":171},[155,76834,76835],{"class":157,"line":415},[155,76836,217],{"emptyLinePlaceholder":216},[155,76838,76839,76841,76843],{"class":157,"line":452},[155,76840,70348],{"class":171},[155,76842,69198],{"class":69863},[155,76844,69870],{"class":171},[24,76846,76847],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[24,76849,76850],{},"常量不可以重新赋值",[24,76852,76853],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[146,76855,76857],{"className":69196,"code":76856,"language":69198,"meta":39,"style":39},"\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",[152,76858,76859,76869,76883,76887,76895,76909,76929,76941,76949,76953,76961,76973,76981,76992,77010,77026,77040,77048,77052,77060,77068,77072],{"__ignoreMap":39},[155,76860,76861,76863,76865,76867],{"class":157,"line":158},[155,76862,69860],{"class":171},[155,76864,69864],{"class":69863},[155,76866,69867],{"class":226},[155,76868,69870],{"class":171},[155,76870,76871,76873,76875,76877,76879,76881],{"class":157,"line":46},[155,76872,20959],{"class":171},[155,76874,69198],{"class":69863},[155,76876,69879],{"class":226},[155,76878,317],{"class":171},[155,76880,69884],{"class":732},[155,76882,69870],{"class":171},[155,76884,76885],{"class":157,"line":121},[155,76886,217],{"emptyLinePlaceholder":216},[155,76888,76889,76891,76893],{"class":157,"line":180},[155,76890,20959],{"class":171},[155,76892,69897],{"class":69863},[155,76894,69870],{"class":171},[155,76896,76897,76899,76901,76903,76905,76907],{"class":157,"line":194},[155,76898,70707],{"class":171},[155,76900,69907],{"class":69863},[155,76902,69910],{"class":226},[155,76904,317],{"class":171},[155,76906,69915],{"class":732},[155,76908,69870],{"class":171},[155,76910,76911,76913,76915,76917,76919,76921,76923,76925,76927],{"class":157,"line":200},[155,76912,70707],{"class":171},[155,76914,69907],{"class":69863},[155,76916,34745],{"class":226},[155,76918,317],{"class":171},[155,76920,69954],{"class":732},[155,76922,69934],{"class":226},[155,76924,317],{"class":171},[155,76926,69961],{"class":732},[155,76928,69870],{"class":171},[155,76930,76931,76933,76935,76937,76939],{"class":157,"line":213},[155,76932,70707],{"class":171},[155,76934,69970],{"class":69863},[155,76936,69973],{"class":171},[155,76938,69970],{"class":69863},[155,76940,69870],{"class":171},[155,76942,76943,76945,76947],{"class":157,"line":220},[155,76944,70348],{"class":171},[155,76946,69897],{"class":69863},[155,76948,69870],{"class":171},[155,76950,76951],{"class":157,"line":245},[155,76952,217],{"emptyLinePlaceholder":216},[155,76954,76955,76957,76959],{"class":157,"line":251},[155,76956,20959],{"class":171},[155,76958,70363],{"class":69863},[155,76960,69870],{"class":171},[155,76962,76963,76965,76967,76969,76971],{"class":157,"line":257},[155,76964,70707],{"class":171},[155,76966,72450],{"class":69863},[155,76968,72456],{"class":171},[155,76970,72450],{"class":69863},[155,76972,69870],{"class":171},[155,76974,76975,76977,76979],{"class":157,"line":270},[155,76976,70707],{"class":171},[155,76978,70376],{"class":69863},[155,76980,69870],{"class":171},[155,76982,76983,76985,76987,76989],{"class":157,"line":276},[155,76984,31049],{"class":167},[155,76986,22127],{"class":263},[155,76988,33391],{"class":167},[155,76990,76991],{"class":263}," 10\n",[155,76993,76994,76996,76998,77000,77002,77004,77006,77008],{"class":157,"line":297},[155,76995,31049],{"class":167},[155,76997,72954],{"class":263},[155,76999,33391],{"class":167},[155,77001,72959],{"class":171},[155,77003,72962],{"class":226},[155,77005,230],{"class":171},[155,77007,76767],{"class":732},[155,77009,363],{"class":171},[155,77011,77012,77014,77016,77018,77020,77022,77024],{"class":157,"line":302},[155,77013,76774],{"class":171},[155,77015,76376],{"class":226},[155,77017,230],{"class":171},[155,77019,76381],{"class":732},[155,77021,7589],{"class":171},[155,77023,73012],{"class":167},[155,77025,73015],{"class":171},[155,77027,77028,77030,77032,77034,77036,77038],{"class":157,"line":308},[155,77029,76791],{"class":167},[155,77031,22127],{"class":263},[155,77033,33391],{"class":167},[155,77035,76798],{"class":171},[155,77037,76423],{"class":226},[155,77039,294],{"class":171},[155,77041,77042,77044,77046],{"class":157,"line":366},[155,77043,76807],{"class":171},[155,77045,76810],{"class":226},[155,77047,20106],{"class":171},[155,77049,77050],{"class":157,"line":379},[155,77051,3065],{"class":171},[155,77053,77054,77056,77058],{"class":157,"line":385},[155,77055,70980],{"class":171},[155,77057,70376],{"class":69863},[155,77059,69870],{"class":171},[155,77061,77062,77064,77066],{"class":157,"line":415},[155,77063,70348],{"class":171},[155,77065,70363],{"class":69863},[155,77067,69870],{"class":171},[155,77069,77070],{"class":157,"line":452},[155,77071,217],{"emptyLinePlaceholder":216},[155,77073,77074,77076,77078],{"class":157,"line":480},[155,77075,70348],{"class":171},[155,77077,69198],{"class":69863},[155,77079,69870],{"class":171},[24,77081,77082],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[146,77084,77086],{"className":69196,"code":77085,"language":69198,"meta":39,"style":39},"\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",[152,77087,77088,77098,77112,77116,77124,77138,77158,77170,77178,77182,77190,77202,77210,77220,77238,77254,77267,77275,77279,77287,77295,77299],{"__ignoreMap":39},[155,77089,77090,77092,77094,77096],{"class":157,"line":158},[155,77091,69860],{"class":171},[155,77093,69864],{"class":69863},[155,77095,69867],{"class":226},[155,77097,69870],{"class":171},[155,77099,77100,77102,77104,77106,77108,77110],{"class":157,"line":46},[155,77101,20959],{"class":171},[155,77103,69198],{"class":69863},[155,77105,69879],{"class":226},[155,77107,317],{"class":171},[155,77109,69884],{"class":732},[155,77111,69870],{"class":171},[155,77113,77114],{"class":157,"line":121},[155,77115,217],{"emptyLinePlaceholder":216},[155,77117,77118,77120,77122],{"class":157,"line":180},[155,77119,20959],{"class":171},[155,77121,69897],{"class":69863},[155,77123,69870],{"class":171},[155,77125,77126,77128,77130,77132,77134,77136],{"class":157,"line":194},[155,77127,70707],{"class":171},[155,77129,69907],{"class":69863},[155,77131,69910],{"class":226},[155,77133,317],{"class":171},[155,77135,69915],{"class":732},[155,77137,69870],{"class":171},[155,77139,77140,77142,77144,77146,77148,77150,77152,77154,77156],{"class":157,"line":200},[155,77141,70707],{"class":171},[155,77143,69907],{"class":69863},[155,77145,34745],{"class":226},[155,77147,317],{"class":171},[155,77149,69954],{"class":732},[155,77151,69934],{"class":226},[155,77153,317],{"class":171},[155,77155,69961],{"class":732},[155,77157,69870],{"class":171},[155,77159,77160,77162,77164,77166,77168],{"class":157,"line":213},[155,77161,70707],{"class":171},[155,77163,69970],{"class":69863},[155,77165,69973],{"class":171},[155,77167,69970],{"class":69863},[155,77169,69870],{"class":171},[155,77171,77172,77174,77176],{"class":157,"line":220},[155,77173,70348],{"class":171},[155,77175,69897],{"class":69863},[155,77177,69870],{"class":171},[155,77179,77180],{"class":157,"line":245},[155,77181,217],{"emptyLinePlaceholder":216},[155,77183,77184,77186,77188],{"class":157,"line":251},[155,77185,20959],{"class":171},[155,77187,70363],{"class":69863},[155,77189,69870],{"class":171},[155,77191,77192,77194,77196,77198,77200],{"class":157,"line":257},[155,77193,70707],{"class":171},[155,77195,72450],{"class":69863},[155,77197,72456],{"class":171},[155,77199,72450],{"class":69863},[155,77201,69870],{"class":171},[155,77203,77204,77206,77208],{"class":157,"line":270},[155,77205,70707],{"class":171},[155,77207,70376],{"class":69863},[155,77209,69870],{"class":171},[155,77211,77212,77214,77216,77218],{"class":157,"line":276},[155,77213,31049],{"class":167},[155,77215,22127],{"class":263},[155,77217,33391],{"class":167},[155,77219,76991],{"class":263},[155,77221,77222,77224,77226,77228,77230,77232,77234,77236],{"class":157,"line":297},[155,77223,31049],{"class":167},[155,77225,72954],{"class":263},[155,77227,33391],{"class":167},[155,77229,72959],{"class":171},[155,77231,72962],{"class":226},[155,77233,230],{"class":171},[155,77235,76767],{"class":732},[155,77237,363],{"class":171},[155,77239,77240,77242,77244,77246,77248,77250,77252],{"class":157,"line":302},[155,77241,76774],{"class":171},[155,77243,76376],{"class":226},[155,77245,230],{"class":171},[155,77247,76381],{"class":732},[155,77249,7589],{"class":171},[155,77251,73012],{"class":167},[155,77253,73015],{"class":171},[155,77255,77256,77259,77261,77263,77265],{"class":157,"line":308},[155,77257,77258],{"class":171},"      num ",[155,77260,317],{"class":167},[155,77262,76798],{"class":171},[155,77264,76423],{"class":226},[155,77266,294],{"class":171},[155,77268,77269,77271,77273],{"class":157,"line":366},[155,77270,76807],{"class":171},[155,77272,76810],{"class":226},[155,77274,20106],{"class":171},[155,77276,77277],{"class":157,"line":379},[155,77278,3065],{"class":171},[155,77280,77281,77283,77285],{"class":157,"line":385},[155,77282,70980],{"class":171},[155,77284,70376],{"class":69863},[155,77286,69870],{"class":171},[155,77288,77289,77291,77293],{"class":157,"line":415},[155,77290,70348],{"class":171},[155,77292,70363],{"class":69863},[155,77294,69870],{"class":171},[155,77296,77297],{"class":157,"line":452},[155,77298,217],{"emptyLinePlaceholder":216},[155,77300,77301,77303,77305],{"class":157,"line":480},[155,77302,70348],{"class":171},[155,77304,69198],{"class":69863},[155,77306,69870],{"class":171},[24,77308,77309],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[14,77311,77313],{"id":77312},"_324-事件监听版本","3.2.4 事件监听版本",[24,77315,77316],{},[37,77317],{"alt":39,"src":77318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[24,77320,77321],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[24,77323,77324],{},"这种方式会覆盖前边的事件监听:",[146,77326,77328],{"className":69196,"code":77327,"language":69198,"meta":39,"style":39},"\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",[152,77329,77330,77340,77354,77358,77366,77380,77400,77412,77420,77424,77432,77444,77452,77470,77484,77495,77499,77511,77521,77525,77533,77541,77545],{"__ignoreMap":39},[155,77331,77332,77334,77336,77338],{"class":157,"line":158},[155,77333,69860],{"class":171},[155,77335,69864],{"class":69863},[155,77337,69867],{"class":226},[155,77339,69870],{"class":171},[155,77341,77342,77344,77346,77348,77350,77352],{"class":157,"line":46},[155,77343,20959],{"class":171},[155,77345,69198],{"class":69863},[155,77347,69879],{"class":226},[155,77349,317],{"class":171},[155,77351,69884],{"class":732},[155,77353,69870],{"class":171},[155,77355,77356],{"class":157,"line":121},[155,77357,217],{"emptyLinePlaceholder":216},[155,77359,77360,77362,77364],{"class":157,"line":180},[155,77361,20959],{"class":171},[155,77363,69897],{"class":69863},[155,77365,69870],{"class":171},[155,77367,77368,77370,77372,77374,77376,77378],{"class":157,"line":194},[155,77369,70707],{"class":171},[155,77371,69907],{"class":69863},[155,77373,69910],{"class":226},[155,77375,317],{"class":171},[155,77377,69915],{"class":732},[155,77379,69870],{"class":171},[155,77381,77382,77384,77386,77388,77390,77392,77394,77396,77398],{"class":157,"line":200},[155,77383,70707],{"class":171},[155,77385,69907],{"class":69863},[155,77387,34745],{"class":226},[155,77389,317],{"class":171},[155,77391,69954],{"class":732},[155,77393,69934],{"class":226},[155,77395,317],{"class":171},[155,77397,69961],{"class":732},[155,77399,69870],{"class":171},[155,77401,77402,77404,77406,77408,77410],{"class":157,"line":213},[155,77403,70707],{"class":171},[155,77405,69970],{"class":69863},[155,77407,69973],{"class":171},[155,77409,69970],{"class":69863},[155,77411,69870],{"class":171},[155,77413,77414,77416,77418],{"class":157,"line":220},[155,77415,70348],{"class":171},[155,77417,69897],{"class":69863},[155,77419,69870],{"class":171},[155,77421,77422],{"class":157,"line":245},[155,77423,217],{"emptyLinePlaceholder":216},[155,77425,77426,77428,77430],{"class":157,"line":251},[155,77427,20959],{"class":171},[155,77429,70363],{"class":69863},[155,77431,69870],{"class":171},[155,77433,77434,77436,77438,77440,77442],{"class":157,"line":257},[155,77435,70707],{"class":171},[155,77437,72450],{"class":69863},[155,77439,72456],{"class":171},[155,77441,72450],{"class":69863},[155,77443,69870],{"class":171},[155,77445,77446,77448,77450],{"class":157,"line":270},[155,77447,70707],{"class":171},[155,77449,70376],{"class":69863},[155,77451,69870],{"class":171},[155,77453,77454,77456,77458,77460,77462,77464,77466,77468],{"class":157,"line":276},[155,77455,31049],{"class":167},[155,77457,72954],{"class":263},[155,77459,33391],{"class":167},[155,77461,72959],{"class":171},[155,77463,72962],{"class":226},[155,77465,230],{"class":171},[155,77467,76767],{"class":732},[155,77469,363],{"class":171},[155,77471,77472,77474,77477,77479,77482],{"class":157,"line":297},[155,77473,76774],{"class":171},[155,77475,77476],{"class":226},"onclick",[155,77478,33391],{"class":167},[155,77480,77481],{"class":167}," function",[155,77483,73015],{"class":171},[155,77485,77486,77489,77491,77493],{"class":157,"line":302},[155,77487,77488],{"class":226},"      alert",[155,77490,230],{"class":171},[155,77492,4416],{"class":263},[155,77494,363],{"class":171},[155,77496,77497],{"class":157,"line":308},[155,77498,22074],{"class":171},[155,77500,77501,77503,77505,77507,77509],{"class":157,"line":366},[155,77502,76774],{"class":171},[155,77504,77476],{"class":226},[155,77506,33391],{"class":167},[155,77508,77481],{"class":167},[155,77510,73015],{"class":171},[155,77512,77513,77515,77517,77519],{"class":157,"line":379},[155,77514,77488],{"class":226},[155,77516,230],{"class":171},[155,77518,20806],{"class":263},[155,77520,363],{"class":171},[155,77522,77523],{"class":157,"line":385},[155,77524,22074],{"class":171},[155,77526,77527,77529,77531],{"class":157,"line":415},[155,77528,70980],{"class":171},[155,77530,70376],{"class":69863},[155,77532,69870],{"class":171},[155,77534,77535,77537,77539],{"class":157,"line":452},[155,77536,70348],{"class":171},[155,77538,70363],{"class":69863},[155,77540,69870],{"class":171},[155,77542,77543],{"class":157,"line":480},[155,77544,217],{"emptyLinePlaceholder":216},[155,77546,77547,77549,77551],{"class":157,"line":486},[155,77548,70348],{"class":171},[155,77550,69198],{"class":69863},[155,77552,69870],{"class":171},[24,77554,77555],{},"只要点击就输出结果为22,前边11被覆盖了",[146,77557,77559],{"className":69196,"code":77558,"language":69198,"meta":39,"style":39},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[152,77560,77561,77566,77571,77575,77580,77585],{"__ignoreMap":39},[155,77562,77563],{"class":157,"line":158},[155,77564,77565],{"class":171},"  btn.addEventListener('click', function () {\n",[155,77567,77568],{"class":157,"line":46},[155,77569,77570],{"class":171},"      alert(11)\n",[155,77572,77573],{"class":157,"line":121},[155,77574,3065],{"class":171},[155,77576,77577],{"class":157,"line":180},[155,77578,77579],{"class":171},"    btn.addEventListener('click', function () {\n",[155,77581,77582],{"class":157,"line":194},[155,77583,77584],{"class":171},"      alert(22)\n",[155,77586,77587],{"class":157,"line":200},[155,77588,3065],{"class":171},[24,77590,77591],{},"点击第一次输出11,第二次点击为22",[14,77593,77595],{"id":77594},"_325-事件类型","3.2.5 事件类型",[24,77597,77598],{},[37,77599],{"alt":39,"src":77600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[19,77602,77604],{"id":77603},"_3251-鼠标事件","3.2.5.1 鼠标事件",[24,77606,77607],{},"补充知识:",[24,77609,77610],{},"轮播图自动播放模块,可以使用",[24,77612,77613],{},"let timerId = setInterval(function () {",[24,77615,77616],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[24,77618,77619],{},"用js方法模拟进行点击事件,click必须加()",[24,77621,77622],{},"next.click()",[24,77624,77625],{},"}, 1000)",[24,77627,77628],{},[37,77629],{"alt":39,"src":77630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[146,77632,77634],{"className":71630,"code":77633,"language":71632,"meta":39,"style":39},"\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",[152,77635,77636,77640,77650,77664,77668,77676,77691,77711,77731,77744,77752,77757,77762,77766,77770,77775,77780,77785,77790,77794,77798,77803,77808,77813,77817,77821,77826,77830,77835,77840,77844,77848,77853,77858,77863,77868,77873,77877,77881,77886,77891,77896,77901,77906,77910,77914,77919,77924,77929,77934,77939,77944,77949,77954,77959,77964,77968,77972,77977,77982,77986,77990,77995,78000,78004,78009,78014,78018,78022,78027,78031,78036,78041,78045,78050,78054,78058,78063,78068,78073,78078,78083,78088,78093,78097,78101,78105,78110,78115,78120,78125,78129,78137,78145,78149,78157,78172,78186,78207,78215,78229,78242,78257,78276,78288,78300,78312,78324,78336,78348,78360,78368,78383,78407,78431,78439,78447,78455,78463,78468,78473,78478,78483,78488,78493,78498,78503,78508,78513,78517,78522,78527,78532,78537,78542,78547,78552,78557,78562,78566,78571,78576,78581,78586,78591,78596,78601,78606,78611,78616,78621,78626,78630,78634,78639,78644,78649,78653,78658,78663,78668,78673,78678,78682,78687,78691,78695,78699,78703,78707,78711,78716,78721,78726,78731,78736,78741,78746,78751,78756,78760,78764,78769,78774,78779,78784,78789,78793,78798,78803,78808,78813,78818,78823,78827,78831,78836,78840,78845,78849,78854,78859,78864,78869,78874,78879,78883,78891,78899,78903],{"__ignoreMap":39},[155,77637,77638],{"class":157,"line":158},[155,77639,217],{"emptyLinePlaceholder":216},[155,77641,77642,77644,77646,77648],{"class":157,"line":46},[155,77643,69860],{"class":171},[155,77645,69864],{"class":167},[155,77647,69867],{"class":263},[155,77649,69870],{"class":171},[155,77651,77652,77654,77656,77658,77660,77662],{"class":157,"line":121},[155,77653,20959],{"class":171},[155,77655,69198],{"class":69863},[155,77657,69879],{"class":226},[155,77659,317],{"class":171},[155,77661,69884],{"class":732},[155,77663,69870],{"class":171},[155,77665,77666],{"class":157,"line":180},[155,77667,217],{"emptyLinePlaceholder":216},[155,77669,77670,77672,77674],{"class":157,"line":194},[155,77671,20959],{"class":171},[155,77673,69897],{"class":69863},[155,77675,69870],{"class":171},[155,77677,77678,77680,77682,77684,77686,77688],{"class":157,"line":200},[155,77679,70707],{"class":171},[155,77681,69907],{"class":69863},[155,77683,69910],{"class":226},[155,77685,317],{"class":171},[155,77687,69915],{"class":732},[155,77689,77690],{"class":171}," \u002F>\n",[155,77692,77693,77695,77697,77699,77701,77703,77705,77707,77709],{"class":157,"line":213},[155,77694,70707],{"class":171},[155,77696,69907],{"class":69863},[155,77698,69926],{"class":226},[155,77700,317],{"class":171},[155,77702,69931],{"class":732},[155,77704,69934],{"class":226},[155,77706,317],{"class":171},[155,77708,69939],{"class":732},[155,77710,77690],{"class":171},[155,77712,77713,77715,77717,77719,77721,77723,77725,77727,77729],{"class":157,"line":220},[155,77714,70707],{"class":171},[155,77716,69907],{"class":69863},[155,77718,34745],{"class":226},[155,77720,317],{"class":171},[155,77722,69954],{"class":732},[155,77724,69934],{"class":226},[155,77726,317],{"class":171},[155,77728,69961],{"class":732},[155,77730,77690],{"class":171},[155,77732,77733,77735,77737,77740,77742],{"class":157,"line":245},[155,77734,70707],{"class":171},[155,77736,69970],{"class":69863},[155,77738,77739],{"class":171},">轮播图点击切换\u003C\u002F",[155,77741,69970],{"class":69863},[155,77743,69870],{"class":171},[155,77745,77746,77748,77750],{"class":157,"line":251},[155,77747,70707],{"class":171},[155,77749,20011],{"class":69863},[155,77751,69870],{"class":171},[155,77753,77754],{"class":157,"line":257},[155,77755,77756],{"class":171},"    * {\n",[155,77758,77759],{"class":157,"line":270},[155,77760,77761],{"class":171},"      box-sizing: border-box;\n",[155,77763,77764],{"class":157,"line":276},[155,77765,22074],{"class":171},[155,77767,77768],{"class":157,"line":297},[155,77769,217],{"emptyLinePlaceholder":216},[155,77771,77772],{"class":157,"line":302},[155,77773,77774],{"class":171},"    .slider {\n",[155,77776,77777],{"class":157,"line":308},[155,77778,77779],{"class":171},"      width: 560px;\n",[155,77781,77782],{"class":157,"line":366},[155,77783,77784],{"class":171},"      height: 400px;\n",[155,77786,77787],{"class":157,"line":379},[155,77788,77789],{"class":171},"      overflow: hidden;\n",[155,77791,77792],{"class":157,"line":385},[155,77793,22074],{"class":171},[155,77795,77796],{"class":157,"line":415},[155,77797,217],{"emptyLinePlaceholder":216},[155,77799,77800],{"class":157,"line":452},[155,77801,77802],{"class":171},"    .slider-wrapper {\n",[155,77804,77805],{"class":157,"line":480},[155,77806,77807],{"class":171},"      width: 100%;\n",[155,77809,77810],{"class":157,"line":486},[155,77811,77812],{"class":171},"      height: 320px;\n",[155,77814,77815],{"class":157,"line":499},[155,77816,22074],{"class":171},[155,77818,77819],{"class":157,"line":505},[155,77820,217],{"emptyLinePlaceholder":216},[155,77822,77823],{"class":157,"line":528},[155,77824,77825],{"class":171},"    .slider-wrapper img {\n",[155,77827,77828],{"class":157,"line":549},[155,77829,77807],{"class":171},[155,77831,77832],{"class":157,"line":570},[155,77833,77834],{"class":171},"      height: 100%;\n",[155,77836,77837],{"class":157,"line":575},[155,77838,77839],{"class":171},"      display: block;\n",[155,77841,77842],{"class":157,"line":581},[155,77843,22074],{"class":171},[155,77845,77846],{"class":157,"line":592},[155,77847,217],{"emptyLinePlaceholder":216},[155,77849,77850],{"class":157,"line":610},[155,77851,77852],{"class":171},"    .slider-footer {\n",[155,77854,77855],{"class":157,"line":622},[155,77856,77857],{"class":171},"      height: 80px;\n",[155,77859,77860],{"class":157,"line":638},[155,77861,77862],{"class":171},"      background-color: rgb(100, 67, 68);\n",[155,77864,77865],{"class":157,"line":650},[155,77866,77867],{"class":171},"      padding: 12px 12px 0 12px;\n",[155,77869,77870],{"class":157,"line":662},[155,77871,77872],{"class":171},"      position: relative;\n",[155,77874,77875],{"class":157,"line":678},[155,77876,22074],{"class":171},[155,77878,77879],{"class":157,"line":694},[155,77880,217],{"emptyLinePlaceholder":216},[155,77882,77883],{"class":157,"line":706},[155,77884,77885],{"class":171},"    .slider-footer .toggle {\n",[155,77887,77888],{"class":157,"line":715},[155,77889,77890],{"class":171},"      position: absolute;\n",[155,77892,77893],{"class":157,"line":720},[155,77894,77895],{"class":171},"      right: 0;\n",[155,77897,77898],{"class":157,"line":739},[155,77899,77900],{"class":171},"      top: 12px;\n",[155,77902,77903],{"class":157,"line":745},[155,77904,77905],{"class":171},"      display: flex;\n",[155,77907,77908],{"class":157,"line":773},[155,77909,22074],{"class":171},[155,77911,77912],{"class":157,"line":779},[155,77913,217],{"emptyLinePlaceholder":216},[155,77915,77916],{"class":157,"line":785},[155,77917,77918],{"class":171},"    .slider-footer .toggle button {\n",[155,77920,77921],{"class":157,"line":791},[155,77922,77923],{"class":171},"      margin-right: 12px;\n",[155,77925,77926],{"class":157,"line":796},[155,77927,77928],{"class":171},"      width: 28px;\n",[155,77930,77931],{"class":157,"line":802},[155,77932,77933],{"class":171},"      height: 28px;\n",[155,77935,77936],{"class":157,"line":808},[155,77937,77938],{"class":171},"      appearance: none;\n",[155,77940,77941],{"class":157,"line":819},[155,77942,77943],{"class":171},"      border: none;\n",[155,77945,77946],{"class":157,"line":1832},[155,77947,77948],{"class":171},"      background: rgba(255, 255, 255, 0.1);\n",[155,77950,77951],{"class":157,"line":1838},[155,77952,77953],{"class":171},"      color: #fff;\n",[155,77955,77956],{"class":157,"line":1844},[155,77957,77958],{"class":171},"      border-radius: 4px;\n",[155,77960,77961],{"class":157,"line":1850},[155,77962,77963],{"class":171},"      cursor: pointer;\n",[155,77965,77966],{"class":157,"line":1861},[155,77967,22074],{"class":171},[155,77969,77970],{"class":157,"line":1866},[155,77971,217],{"emptyLinePlaceholder":216},[155,77973,77974],{"class":157,"line":1871},[155,77975,77976],{"class":171},"    .slider-footer .toggle button:hover {\n",[155,77978,77979],{"class":157,"line":1877},[155,77980,77981],{"class":171},"      background: rgba(255, 255, 255, 0.2);\n",[155,77983,77984],{"class":157,"line":1883},[155,77985,22074],{"class":171},[155,77987,77988],{"class":157,"line":1894},[155,77989,217],{"emptyLinePlaceholder":216},[155,77991,77992],{"class":157,"line":1900},[155,77993,77994],{"class":171},"    .slider-footer p {\n",[155,77996,77997],{"class":157,"line":1911},[155,77998,77999],{"class":171},"      margin: 0;\n",[155,78001,78002],{"class":157,"line":1917},[155,78003,77953],{"class":171},[155,78005,78006],{"class":157,"line":1927},[155,78007,78008],{"class":171},"      font-size: 18px;\n",[155,78010,78011],{"class":157,"line":1933},[155,78012,78013],{"class":171},"      margin-bottom: 10px;\n",[155,78015,78016],{"class":157,"line":1943},[155,78017,22074],{"class":171},[155,78019,78020],{"class":157,"line":1949},[155,78021,217],{"emptyLinePlaceholder":216},[155,78023,78024],{"class":157,"line":1959},[155,78025,78026],{"class":171},"    .slider-indicator {\n",[155,78028,78029],{"class":157,"line":1964},[155,78030,77999],{"class":171},[155,78032,78033],{"class":157,"line":1970},[155,78034,78035],{"class":171},"      padding: 0;\n",[155,78037,78038],{"class":157,"line":1981},[155,78039,78040],{"class":171},"      list-style: none;\n",[155,78042,78043],{"class":157,"line":1986},[155,78044,77905],{"class":171},[155,78046,78047],{"class":157,"line":1991},[155,78048,78049],{"class":171},"      align-items: center;\n",[155,78051,78052],{"class":157,"line":1997},[155,78053,22074],{"class":171},[155,78055,78056],{"class":157,"line":2014},[155,78057,217],{"emptyLinePlaceholder":216},[155,78059,78060],{"class":157,"line":2046},[155,78061,78062],{"class":171},"    .slider-indicator li {\n",[155,78064,78065],{"class":157,"line":2062},[155,78066,78067],{"class":171},"      width: 8px;\n",[155,78069,78070],{"class":157,"line":2067},[155,78071,78072],{"class":171},"      height: 8px;\n",[155,78074,78075],{"class":157,"line":2073},[155,78076,78077],{"class":171},"      margin: 4px;\n",[155,78079,78080],{"class":157,"line":2079},[155,78081,78082],{"class":171},"      border-radius: 50%;\n",[155,78084,78085],{"class":157,"line":2089},[155,78086,78087],{"class":171},"      background: #fff;\n",[155,78089,78090],{"class":157,"line":2095},[155,78091,78092],{"class":171},"      opacity: 0.4;\n",[155,78094,78095],{"class":157,"line":2106},[155,78096,77963],{"class":171},[155,78098,78099],{"class":157,"line":2112},[155,78100,22074],{"class":171},[155,78102,78103],{"class":157,"line":2122},[155,78104,217],{"emptyLinePlaceholder":216},[155,78106,78107],{"class":157,"line":2128},[155,78108,78109],{"class":171},"    .slider-indicator li.active {\n",[155,78111,78112],{"class":157,"line":2138},[155,78113,78114],{"class":171},"      width: 12px;\n",[155,78116,78117],{"class":157,"line":2144},[155,78118,78119],{"class":171},"      height: 12px;\n",[155,78121,78122],{"class":157,"line":2154},[155,78123,78124],{"class":171},"      opacity: 1;\n",[155,78126,78127],{"class":157,"line":2160},[155,78128,22074],{"class":171},[155,78130,78131,78133,78135],{"class":157,"line":2170},[155,78132,70980],{"class":171},[155,78134,20011],{"class":69863},[155,78136,69870],{"class":171},[155,78138,78139,78141,78143],{"class":157,"line":2176},[155,78140,70348],{"class":171},[155,78142,69897],{"class":69863},[155,78144,69870],{"class":171},[155,78146,78147],{"class":157,"line":2191},[155,78148,217],{"emptyLinePlaceholder":216},[155,78150,78151,78153,78155],{"class":157,"line":2197},[155,78152,20959],{"class":171},[155,78154,70363],{"class":69863},[155,78156,69870],{"class":171},[155,78158,78159,78161,78163,78165,78167,78170],{"class":157,"line":2208},[155,78160,70707],{"class":171},[155,78162,70174],{"class":69863},[155,78164,72049],{"class":226},[155,78166,317],{"class":171},[155,78168,78169],{"class":732},"\"slider\"",[155,78171,69870],{"class":171},[155,78173,78174,78176,78178,78180,78182,78184],{"class":157,"line":2214},[155,78175,69904],{"class":171},[155,78177,70174],{"class":69863},[155,78179,72049],{"class":226},[155,78181,317],{"class":171},[155,78183,73790],{"class":732},[155,78185,69870],{"class":171},[155,78187,78188,78190,78192,78194,78196,78199,78201,78203,78205],{"class":157,"line":2225},[155,78189,73797],{"class":171},[155,78191,37],{"class":69863},[155,78193,73802],{"class":226},[155,78195,317],{"class":171},[155,78197,78198],{"class":732},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[155,78200,73810],{"class":226},[155,78202,317],{"class":171},[155,78204,15430],{"class":732},[155,78206,77690],{"class":171},[155,78208,78209,78211,78213],{"class":157,"line":2231},[155,78210,70339],{"class":171},[155,78212,70174],{"class":69863},[155,78214,69870],{"class":171},[155,78216,78217,78219,78221,78223,78225,78227],{"class":157,"line":2237},[155,78218,69904],{"class":171},[155,78220,70174],{"class":69863},[155,78222,72049],{"class":226},[155,78224,317],{"class":171},[155,78226,73837],{"class":732},[155,78228,69870],{"class":171},[155,78230,78231,78233,78235,78238,78240],{"class":157,"line":2243},[155,78232,73797],{"class":171},[155,78234,24],{"class":69863},[155,78236,78237],{"class":171},">对人类来说会不会太超前了？\u003C\u002F",[155,78239,24],{"class":69863},[155,78241,69870],{"class":171},[155,78243,78244,78246,78248,78250,78252,78255],{"class":157,"line":2249},[155,78245,73797],{"class":171},[155,78247,21052],{"class":69863},[155,78249,72049],{"class":226},[155,78251,317],{"class":171},[155,78253,78254],{"class":732},"\"slider-indicator\"",[155,78256,69870],{"class":171},[155,78258,78259,78261,78263,78265,78267,78270,78272,78274],{"class":157,"line":2260},[155,78260,73865],{"class":171},[155,78262,31],{"class":69863},[155,78264,72049],{"class":226},[155,78266,317],{"class":171},[155,78268,78269],{"class":732},"\"active\"",[155,78271,73877],{"class":171},[155,78273,31],{"class":69863},[155,78275,69870],{"class":171},[155,78277,78278,78280,78282,78284,78286],{"class":157,"line":2266},[155,78279,73865],{"class":171},[155,78281,31],{"class":69863},[155,78283,73877],{"class":171},[155,78285,31],{"class":69863},[155,78287,69870],{"class":171},[155,78289,78290,78292,78294,78296,78298],{"class":157,"line":2286},[155,78291,73865],{"class":171},[155,78293,31],{"class":69863},[155,78295,73877],{"class":171},[155,78297,31],{"class":69863},[155,78299,69870],{"class":171},[155,78301,78302,78304,78306,78308,78310],{"class":157,"line":2292},[155,78303,73865],{"class":171},[155,78305,31],{"class":69863},[155,78307,73877],{"class":171},[155,78309,31],{"class":69863},[155,78311,69870],{"class":171},[155,78313,78314,78316,78318,78320,78322],{"class":157,"line":2303},[155,78315,73865],{"class":171},[155,78317,31],{"class":69863},[155,78319,73877],{"class":171},[155,78321,31],{"class":69863},[155,78323,69870],{"class":171},[155,78325,78326,78328,78330,78332,78334],{"class":157,"line":2309},[155,78327,73865],{"class":171},[155,78329,31],{"class":69863},[155,78331,73877],{"class":171},[155,78333,31],{"class":69863},[155,78335,69870],{"class":171},[155,78337,78338,78340,78342,78344,78346],{"class":157,"line":2315},[155,78339,73865],{"class":171},[155,78341,31],{"class":69863},[155,78343,73877],{"class":171},[155,78345,31],{"class":69863},[155,78347,69870],{"class":171},[155,78349,78350,78352,78354,78356,78358],{"class":157,"line":2321},[155,78351,73865],{"class":171},[155,78353,31],{"class":69863},[155,78355,73877],{"class":171},[155,78357,31],{"class":69863},[155,78359,69870],{"class":171},[155,78361,78362,78364,78366],{"class":157,"line":2327},[155,78363,73970],{"class":171},[155,78365,21052],{"class":69863},[155,78367,69870],{"class":171},[155,78369,78370,78372,78374,78376,78378,78381],{"class":157,"line":2333},[155,78371,73797],{"class":171},[155,78373,70174],{"class":69863},[155,78375,72049],{"class":226},[155,78377,317],{"class":171},[155,78379,78380],{"class":732},"\"toggle\"",[155,78382,69870],{"class":171},[155,78384,78385,78387,78389,78391,78393,78396,78398,78401,78403,78405],{"class":157,"line":2339},[155,78386,73865],{"class":171},[155,78388,72450],{"class":69863},[155,78390,72049],{"class":226},[155,78392,317],{"class":171},[155,78394,78395],{"class":732},"\"prev\"",[155,78397,1148],{"class":171},[155,78399,78400],{"class":263},"&lt;",[155,78402,70348],{"class":171},[155,78404,72450],{"class":69863},[155,78406,69870],{"class":171},[155,78408,78409,78411,78413,78415,78417,78420,78422,78425,78427,78429],{"class":157,"line":2345},[155,78410,73865],{"class":171},[155,78412,72450],{"class":69863},[155,78414,72049],{"class":226},[155,78416,317],{"class":171},[155,78418,78419],{"class":732},"\"next\"",[155,78421,1148],{"class":171},[155,78423,78424],{"class":263},"&gt;",[155,78426,70348],{"class":171},[155,78428,72450],{"class":69863},[155,78430,69870],{"class":171},[155,78432,78433,78435,78437],{"class":157,"line":2366},[155,78434,73970],{"class":171},[155,78436,70174],{"class":69863},[155,78438,69870],{"class":171},[155,78440,78441,78443,78445],{"class":157,"line":2372},[155,78442,70339],{"class":171},[155,78444,70174],{"class":69863},[155,78446,69870],{"class":171},[155,78448,78449,78451,78453],{"class":157,"line":2388},[155,78450,70980],{"class":171},[155,78452,70174],{"class":69863},[155,78454,69870],{"class":171},[155,78456,78457,78459,78461],{"class":157,"line":2394},[155,78458,70707],{"class":171},[155,78460,70376],{"class":69863},[155,78462,69870],{"class":171},[155,78464,78465],{"class":157,"line":2408},[155,78466,78467],{"class":171},"    \u002F\u002F 1. 初始数据\n",[155,78469,78470],{"class":157,"line":2414},[155,78471,78472],{"class":171},"    const data = [\n",[155,78474,78475],{"class":157,"line":2429},[155,78476,78477],{"class":171},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[155,78479,78480],{"class":157,"line":2435},[155,78481,78482],{"class":171},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[155,78484,78485],{"class":157,"line":2444},[155,78486,78487],{"class":171},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[155,78489,78490],{"class":157,"line":2450},[155,78491,78492],{"class":171},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[155,78494,78495],{"class":157,"line":2459},[155,78496,78497],{"class":171},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[155,78499,78500],{"class":157,"line":2465},[155,78501,78502],{"class":171},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[155,78504,78505],{"class":157,"line":2471},[155,78506,78507],{"class":171},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[155,78509,78510],{"class":157,"line":2480},[155,78511,78512],{"class":171},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[155,78514,78515],{"class":157,"line":2486},[155,78516,71672],{"class":171},[155,78518,78519],{"class":157,"line":2497},[155,78520,78521],{"class":171},"    \u002F\u002F 获取元素\n",[155,78523,78524],{"class":157,"line":2503},[155,78525,78526],{"class":171},"    const img = document.querySelector('.slider-wrapper img')\n",[155,78528,78529],{"class":157,"line":2522},[155,78530,78531],{"class":171},"    const p = document.querySelector('.slider-footer p')\n",[155,78533,78534],{"class":157,"line":2528},[155,78535,78536],{"class":171},"    const footer = document.querySelector('.slider-footer')\n",[155,78538,78539],{"class":157,"line":2539},[155,78540,78541],{"class":171},"    \u002F\u002F 1. 右按钮业务\n",[155,78543,78544],{"class":157,"line":2545},[155,78545,78546],{"class":171},"    \u002F\u002F 1.1 获取右侧按钮 \n",[155,78548,78549],{"class":157,"line":2565},[155,78550,78551],{"class":171},"    const next = document.querySelector('.next')\n",[155,78553,78554],{"class":157,"line":2581},[155,78555,78556],{"class":171},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[155,78558,78559],{"class":157,"line":2587},[155,78560,78561],{"class":171},"    \u002F\u002F 1.2 注册点击事件\n",[155,78563,78564],{"class":157,"line":2601},[155,78565,217],{"emptyLinePlaceholder":216},[155,78567,78568],{"class":157,"line":2607},[155,78569,78570],{"class":171},"    next.addEventListener('click', function () {\n",[155,78572,78573],{"class":157,"line":2613},[155,78574,78575],{"class":171},"      \u002F\u002F console.log(11)\n",[155,78577,78578],{"class":157,"line":2624},[155,78579,78580],{"class":171},"      i++\n",[155,78582,78583],{"class":157,"line":2630},[155,78584,78585],{"class":171},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[155,78587,78588],{"class":157,"line":2636},[155,78589,78590],{"class":171},"      \u002F\u002F if (i >= 8) {\n",[155,78592,78593],{"class":157,"line":2646},[155,78594,78595],{"class":171},"      \u002F\u002F   i = 0\n",[155,78597,78598],{"class":157,"line":2652},[155,78599,78600],{"class":171},"      \u002F\u002F }\n",[155,78602,78603],{"class":157,"line":2663},[155,78604,78605],{"class":171},"      i = i >= data.length ? 0 : i\n",[155,78607,78608],{"class":157,"line":2669},[155,78609,78610],{"class":171},"      \u002F\u002F 1.3 得到对应的对象\n",[155,78612,78613],{"class":157,"line":2679},[155,78614,78615],{"class":171},"      \u002F\u002F console.log(data[i])\n",[155,78617,78618],{"class":157,"line":2684},[155,78619,78620],{"class":171},"      \u002F\u002F 调用函数\n",[155,78622,78623],{"class":157,"line":2690},[155,78624,78625],{"class":171},"      toggle()\n",[155,78627,78628],{"class":157,"line":2742},[155,78629,3065],{"class":171},[155,78631,78632],{"class":157,"line":2789},[155,78633,217],{"emptyLinePlaceholder":216},[155,78635,78636],{"class":157,"line":2794},[155,78637,78638],{"class":171},"    \u002F\u002F 2. 左侧按钮业务\n",[155,78640,78641],{"class":157,"line":2800},[155,78642,78643],{"class":171},"    \u002F\u002F 2.1 获取左侧按钮 \n",[155,78645,78646],{"class":157,"line":2821},[155,78647,78648],{"class":171},"    const prev = document.querySelector('.prev')\n",[155,78650,78651],{"class":157,"line":2827},[155,78652,78561],{"class":171},[155,78654,78655],{"class":157,"line":2848},[155,78656,78657],{"class":171},"    prev.addEventListener('click', function () {\n",[155,78659,78660],{"class":157,"line":2854},[155,78661,78662],{"class":171},"      i--\n",[155,78664,78665],{"class":157,"line":2860},[155,78666,78667],{"class":171},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[155,78669,78670],{"class":157,"line":2870},[155,78671,78672],{"class":171},"      \u002F\u002F if (i \u003C 0) {\n",[155,78674,78675],{"class":157,"line":2875},[155,78676,78677],{"class":171},"      \u002F\u002F   i = 7\n",[155,78679,78680],{"class":157,"line":2881},[155,78681,78600],{"class":171},[155,78683,78684],{"class":157,"line":2897},[155,78685,78686],{"class":171},"      i = i \u003C 0 ? data.length - 1 : i\n",[155,78688,78689],{"class":157,"line":2945},[155,78690,78610],{"class":171},[155,78692,78693],{"class":157,"line":2951},[155,78694,78615],{"class":171},[155,78696,78697],{"class":157,"line":2957},[155,78698,78620],{"class":171},[155,78700,78701],{"class":157,"line":2963},[155,78702,78625],{"class":171},[155,78704,78705],{"class":157,"line":2974},[155,78706,3065],{"class":171},[155,78708,78709],{"class":157,"line":2980},[155,78710,217],{"emptyLinePlaceholder":216},[155,78712,78713],{"class":157,"line":2986},[155,78714,78715],{"class":171},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[155,78717,78718],{"class":157,"line":2992},[155,78719,78720],{"class":171},"    function toggle() {\n",[155,78722,78723],{"class":157,"line":3011},[155,78724,78725],{"class":171},"      \u002F\u002F 1.4 渲染对应的数据\n",[155,78727,78728],{"class":157,"line":3026},[155,78729,78730],{"class":171},"      img.src = data[i].url\n",[155,78732,78733],{"class":157,"line":3035},[155,78734,78735],{"class":171},"      p.innerHTML = data[i].title\n",[155,78737,78738],{"class":157,"line":3044},[155,78739,78740],{"class":171},"      footer.style.backgroundColor = data[i].color\n",[155,78742,78743],{"class":157,"line":3053},[155,78744,78745],{"class":171},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[155,78747,78748],{"class":157,"line":3062},[155,78749,78750],{"class":171},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[155,78752,78753],{"class":157,"line":3068},[155,78754,78755],{"class":171},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[155,78757,78758],{"class":157,"line":3074},[155,78759,22074],{"class":171},[155,78761,78762],{"class":157,"line":3082},[155,78763,217],{"emptyLinePlaceholder":216},[155,78765,78766],{"class":157,"line":3087},[155,78767,78768],{"class":171},"    \u002F\u002F 3. 自动播放模块\n",[155,78770,78771],{"class":157,"line":3093},[155,78772,78773],{"class":171},"    let timerId = setInterval(function () {\n",[155,78775,78776],{"class":157,"line":3104},[155,78777,78778],{"class":171},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[155,78780,78781],{"class":157,"line":3110},[155,78782,78783],{"class":171},"      next.click()\n",[155,78785,78786],{"class":157,"line":3130},[155,78787,78788],{"class":171},"    }, 1000)\n",[155,78790,78791],{"class":157,"line":3136},[155,78792,217],{"emptyLinePlaceholder":216},[155,78794,78795],{"class":157,"line":3142},[155,78796,78797],{"class":171},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[155,78799,78800],{"class":157,"line":3148},[155,78801,78802],{"class":171},"    const slider = document.querySelector('.slider')\n",[155,78804,78805],{"class":157,"line":3165},[155,78806,78807],{"class":171},"    \u002F\u002F 注册事件\n",[155,78809,78810],{"class":157,"line":3171},[155,78811,78812],{"class":171},"    slider.addEventListener('mouseenter', function () {\n",[155,78814,78815],{"class":157,"line":3177},[155,78816,78817],{"class":171},"      \u002F\u002F 停止定时器\n",[155,78819,78820],{"class":157,"line":3183},[155,78821,78822],{"class":171},"      clearInterval(timerId)\n",[155,78824,78825],{"class":157,"line":3189},[155,78826,3065],{"class":171},[155,78828,78829],{"class":157,"line":3195},[155,78830,217],{"emptyLinePlaceholder":216},[155,78832,78833],{"class":157,"line":3222},[155,78834,78835],{"class":171},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[155,78837,78838],{"class":157,"line":3246},[155,78839,78807],{"class":171},[155,78841,78842],{"class":157,"line":3252},[155,78843,78844],{"class":171},"    slider.addEventListener('mouseleave', function () {\n",[155,78846,78847],{"class":157,"line":3258},[155,78848,78817],{"class":171},[155,78850,78851],{"class":157,"line":3264},[155,78852,78853],{"class":171},"      if (timerId) clearInterval(timerId)\n",[155,78855,78856],{"class":157,"line":3275},[155,78857,78858],{"class":171},"      \u002F\u002F 开启定时器\n",[155,78860,78861],{"class":157,"line":3286},[155,78862,78863],{"class":171},"      timerId = setInterval(function () {\n",[155,78865,78866],{"class":157,"line":3292},[155,78867,78868],{"class":171},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[155,78870,78871],{"class":157,"line":3309},[155,78872,78873],{"class":171},"        next.click()\n",[155,78875,78876],{"class":157,"line":3332},[155,78877,78878],{"class":171},"      }, 1000)\n",[155,78880,78881],{"class":157,"line":3355},[155,78882,3065],{"class":171},[155,78884,78885,78887,78889],{"class":157,"line":3361},[155,78886,70980],{"class":171},[155,78888,70376],{"class":69863},[155,78890,69870],{"class":171},[155,78892,78893,78895,78897],{"class":157,"line":3366},[155,78894,70348],{"class":171},[155,78896,70363],{"class":69863},[155,78898,69870],{"class":171},[155,78900,78901],{"class":157,"line":3375},[155,78902,217],{"emptyLinePlaceholder":216},[155,78904,78905,78907,78909],{"class":157,"line":3385},[155,78906,70348],{"class":171},[155,78908,69198],{"class":69863},[155,78910,69870],{"class":171},[19,78912,78914],{"id":78913},"_3252-焦点事件","3.2.5.2 焦点事件",[24,78916,78917],{},"小米搜索框案例：",[146,78919,78921],{"className":69196,"code":78920,"language":69198,"meta":39,"style":39},"\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",[152,78922,78923,78933,78947,78951,78959,78973,78993,79013,79025,79033,79039,79049,79059,79071,79075,79079,79086,79090,79101,79105,79109,79116,79127,79140,79154,79158,79162,79171,79183,79195,79209,79222,79235,79253,79264,79268,79272,79281,79298,79302,79306,79313,79323,79333,79344,79357,79369,79385,79396,79408,79412,79416,79424,79435,79452,79464,79476,79487,79491,79495,79506,79517,79521,79529,79533,79541,79545,79553,79568,79591,79606,79637,79664,79691,79718,79745,79772,79799,79808,79816,79824,79829,79849,79869,79874,79879,79897,79902,79912,79917,79931,79936,79941,79958,79967,79979,79983,79991,79999,80003],{"__ignoreMap":39},[155,78924,78925,78927,78929,78931],{"class":157,"line":158},[155,78926,69860],{"class":171},[155,78928,69864],{"class":69863},[155,78930,69867],{"class":226},[155,78932,69870],{"class":171},[155,78934,78935,78937,78939,78941,78943,78945],{"class":157,"line":46},[155,78936,20959],{"class":171},[155,78938,69198],{"class":69863},[155,78940,69879],{"class":226},[155,78942,317],{"class":171},[155,78944,69884],{"class":732},[155,78946,69870],{"class":171},[155,78948,78949],{"class":157,"line":121},[155,78950,217],{"emptyLinePlaceholder":216},[155,78952,78953,78955,78957],{"class":157,"line":180},[155,78954,20959],{"class":171},[155,78956,69897],{"class":69863},[155,78958,69870],{"class":171},[155,78960,78961,78963,78965,78967,78969,78971],{"class":157,"line":194},[155,78962,69904],{"class":171},[155,78964,69907],{"class":69863},[155,78966,69910],{"class":226},[155,78968,317],{"class":171},[155,78970,69915],{"class":732},[155,78972,69870],{"class":171},[155,78974,78975,78977,78979,78981,78983,78985,78987,78989,78991],{"class":157,"line":200},[155,78976,69904],{"class":171},[155,78978,69907],{"class":69863},[155,78980,69926],{"class":226},[155,78982,317],{"class":171},[155,78984,69931],{"class":732},[155,78986,69934],{"class":226},[155,78988,317],{"class":171},[155,78990,69939],{"class":732},[155,78992,69870],{"class":171},[155,78994,78995,78997,78999,79001,79003,79005,79007,79009,79011],{"class":157,"line":213},[155,78996,69904],{"class":171},[155,78998,69907],{"class":69863},[155,79000,34745],{"class":226},[155,79002,317],{"class":171},[155,79004,69954],{"class":732},[155,79006,69934],{"class":226},[155,79008,317],{"class":171},[155,79010,69961],{"class":732},[155,79012,69870],{"class":171},[155,79014,79015,79017,79019,79021,79023],{"class":157,"line":220},[155,79016,69904],{"class":171},[155,79018,69970],{"class":69863},[155,79020,69973],{"class":171},[155,79022,69970],{"class":69863},[155,79024,69870],{"class":171},[155,79026,79027,79029,79031],{"class":157,"line":245},[155,79028,69904],{"class":171},[155,79030,20011],{"class":69863},[155,79032,69870],{"class":171},[155,79034,79035,79037],{"class":157,"line":251},[155,79036,69990],{"class":69863},[155,79038,35397],{"class":171},[155,79040,79041,79043,79045,79047],{"class":157,"line":257},[155,79042,69997],{"class":263},[155,79044,70000],{"class":171},[155,79046,1109],{"class":263},[155,79048,21206],{"class":171},[155,79050,79051,79053,79055,79057],{"class":157,"line":270},[155,79052,70009],{"class":263},[155,79054,70000],{"class":171},[155,79056,1109],{"class":263},[155,79058,21206],{"class":171},[155,79060,79061,79064,79066,79069],{"class":157,"line":276},[155,79062,79063],{"class":263},"            box-sizing",[155,79065,70000],{"class":171},[155,79067,79068],{"class":263},"border-box",[155,79070,21206],{"class":171},[155,79072,79073],{"class":157,"line":297},[155,79074,22414],{"class":171},[155,79076,79077],{"class":157,"line":302},[155,79078,217],{"emptyLinePlaceholder":216},[155,79080,79081,79084],{"class":157,"line":308},[155,79082,79083],{"class":69863},"        ul",[155,79085,35397],{"class":171},[155,79087,79088],{"class":157,"line":366},[155,79089,217],{"emptyLinePlaceholder":216},[155,79091,79092,79095,79097,79099],{"class":157,"line":379},[155,79093,79094],{"class":263},"            list-style",[155,79096,70000],{"class":171},[155,79098,73300],{"class":263},[155,79100,21206],{"class":171},[155,79102,79103],{"class":157,"line":385},[155,79104,22414],{"class":171},[155,79106,79107],{"class":157,"line":415},[155,79108,217],{"emptyLinePlaceholder":216},[155,79110,79111,79114],{"class":157,"line":452},[155,79112,79113],{"class":226},"        .mi",[155,79115,35397],{"class":171},[155,79117,79118,79121,79123,79125],{"class":157,"line":480},[155,79119,79120],{"class":263},"            position",[155,79122,70000],{"class":171},[155,79124,73327],{"class":263},[155,79126,21206],{"class":171},[155,79128,79129,79131,79133,79136,79138],{"class":157,"line":486},[155,79130,70047],{"class":263},[155,79132,70000],{"class":171},[155,79134,79135],{"class":263},"223",[155,79137,70055],{"class":167},[155,79139,21206],{"class":171},[155,79141,79142,79144,79146,79148,79150,79152],{"class":157,"line":499},[155,79143,69997],{"class":263},[155,79145,70000],{"class":171},[155,79147,20389],{"class":263},[155,79149,70055],{"class":167},[155,79151,70119],{"class":263},[155,79153,21206],{"class":171},[155,79155,79156],{"class":157,"line":505},[155,79157,22414],{"class":171},[155,79159,79160],{"class":157,"line":528},[155,79161,217],{"emptyLinePlaceholder":216},[155,79163,79164,79166,79169],{"class":157,"line":549},[155,79165,79113],{"class":226},[155,79167,79168],{"class":69863}," input",[155,79170,35397],{"class":171},[155,79172,79173,79175,79177,79179,79181],{"class":157,"line":570},[155,79174,70047],{"class":263},[155,79176,70000],{"class":171},[155,79178,79135],{"class":263},[155,79180,70055],{"class":167},[155,79182,21206],{"class":171},[155,79184,79185,79187,79189,79191,79193],{"class":157,"line":575},[155,79186,70062],{"class":263},[155,79188,70000],{"class":171},[155,79190,11979],{"class":263},[155,79192,70055],{"class":167},[155,79194,21206],{"class":171},[155,79196,79197,79199,79201,79203,79205,79207],{"class":157,"line":581},[155,79198,70009],{"class":263},[155,79200,70000],{"class":171},[155,79202,1109],{"class":263},[155,79204,21925],{"class":263},[155,79206,70055],{"class":167},[155,79208,21206],{"class":171},[155,79210,79211,79214,79216,79218,79220],{"class":157,"line":592},[155,79212,79213],{"class":263},"            font-size",[155,79215,70000],{"class":171},[155,79217,20613],{"class":263},[155,79219,70055],{"class":167},[155,79221,21206],{"class":171},[155,79223,79224,79227,79229,79231,79233],{"class":157,"line":610},[155,79225,79226],{"class":263},"            line-height",[155,79228,70000],{"class":171},[155,79230,11979],{"class":263},[155,79232,70055],{"class":167},[155,79234,21206],{"class":171},[155,79236,79237,79240,79242,79244,79246,79248,79251],{"class":157,"line":622},[155,79238,79239],{"class":263},"            border",[155,79241,70000],{"class":171},[155,79243,329],{"class":263},[155,79245,70055],{"class":167},[155,79247,70084],{"class":263},[155,79249,79250],{"class":263}," #e0e0e0",[155,79252,21206],{"class":171},[155,79254,79255,79258,79260,79262],{"class":157,"line":638},[155,79256,79257],{"class":263},"            outline",[155,79259,70000],{"class":171},[155,79261,73300],{"class":263},[155,79263,21206],{"class":171},[155,79265,79266],{"class":157,"line":650},[155,79267,22414],{"class":171},[155,79269,79270],{"class":157,"line":662},[155,79271,217],{"emptyLinePlaceholder":216},[155,79273,79274,79276,79279],{"class":157,"line":678},[155,79275,79113],{"class":226},[155,79277,79278],{"class":226}," .search",[155,79280,35397],{"class":171},[155,79282,79283,79285,79287,79289,79291,79293,79296],{"class":157,"line":694},[155,79284,79239],{"class":263},[155,79286,70000],{"class":171},[155,79288,329],{"class":263},[155,79290,70055],{"class":167},[155,79292,70084],{"class":263},[155,79294,79295],{"class":263}," #ff6700",[155,79297,21206],{"class":171},[155,79299,79300],{"class":157,"line":706},[155,79301,22414],{"class":171},[155,79303,79304],{"class":157,"line":715},[155,79305,217],{"emptyLinePlaceholder":216},[155,79307,79308,79311],{"class":157,"line":720},[155,79309,79310],{"class":226},"        .result-list",[155,79312,35397],{"class":171},[155,79314,79315,79317,79319,79321],{"class":157,"line":739},[155,79316,70035],{"class":263},[155,79318,70000],{"class":171},[155,79320,73300],{"class":263},[155,79322,21206],{"class":171},[155,79324,79325,79327,79329,79331],{"class":157,"line":745},[155,79326,79120],{"class":263},[155,79328,70000],{"class":171},[155,79330,73394],{"class":263},[155,79332,21206],{"class":171},[155,79334,79335,79338,79340,79342],{"class":157,"line":773},[155,79336,79337],{"class":263},"            left",[155,79339,70000],{"class":171},[155,79341,1109],{"class":263},[155,79343,21206],{"class":171},[155,79345,79346,79349,79351,79353,79355],{"class":157,"line":779},[155,79347,79348],{"class":263},"            top",[155,79350,70000],{"class":171},[155,79352,11979],{"class":263},[155,79354,70055],{"class":167},[155,79356,21206],{"class":171},[155,79358,79359,79361,79363,79365,79367],{"class":157,"line":785},[155,79360,70047],{"class":263},[155,79362,70000],{"class":171},[155,79364,79135],{"class":263},[155,79366,70055],{"class":167},[155,79368,21206],{"class":171},[155,79370,79371,79373,79375,79377,79379,79381,79383],{"class":157,"line":791},[155,79372,79239],{"class":263},[155,79374,70000],{"class":171},[155,79376,329],{"class":263},[155,79378,70055],{"class":167},[155,79380,70084],{"class":263},[155,79382,79295],{"class":263},[155,79384,21206],{"class":171},[155,79386,79387,79390,79392,79394],{"class":157,"line":796},[155,79388,79389],{"class":263},"            border-top",[155,79391,70000],{"class":171},[155,79393,1109],{"class":263},[155,79395,21206],{"class":171},[155,79397,79398,79401,79403,79406],{"class":157,"line":802},[155,79399,79400],{"class":263},"            background",[155,79402,70000],{"class":171},[155,79404,79405],{"class":263},"#fff",[155,79407,21206],{"class":171},[155,79409,79410],{"class":157,"line":808},[155,79411,22414],{"class":171},[155,79413,79414],{"class":157,"line":819},[155,79415,217],{"emptyLinePlaceholder":216},[155,79417,79418,79420,79422],{"class":157,"line":1832},[155,79419,79310],{"class":226},[155,79421,21311],{"class":69863},[155,79423,35397],{"class":171},[155,79425,79426,79428,79430,79433],{"class":157,"line":1838},[155,79427,70035],{"class":263},[155,79429,70000],{"class":171},[155,79431,79432],{"class":263},"block",[155,79434,21206],{"class":171},[155,79436,79437,79439,79441,79443,79445,79448,79450],{"class":157,"line":1844},[155,79438,70009],{"class":263},[155,79440,70000],{"class":171},[155,79442,340],{"class":263},[155,79444,70055],{"class":167},[155,79446,79447],{"class":263}," 15",[155,79449,70055],{"class":167},[155,79451,21206],{"class":171},[155,79453,79454,79456,79458,79460,79462],{"class":157,"line":1850},[155,79455,79213],{"class":263},[155,79457,70000],{"class":171},[155,79459,1231],{"class":263},[155,79461,70055],{"class":167},[155,79463,21206],{"class":171},[155,79465,79466,79469,79471,79474],{"class":157,"line":1861},[155,79467,79468],{"class":263},"            color",[155,79470,70000],{"class":171},[155,79472,79473],{"class":263},"#424242",[155,79475,21206],{"class":171},[155,79477,79478,79481,79483,79485],{"class":157,"line":1866},[155,79479,79480],{"class":263},"            text-decoration",[155,79482,70000],{"class":171},[155,79484,73300],{"class":263},[155,79486,21206],{"class":171},[155,79488,79489],{"class":157,"line":1871},[155,79490,22414],{"class":171},[155,79492,79493],{"class":157,"line":1877},[155,79494,217],{"emptyLinePlaceholder":216},[155,79496,79497,79499,79501,79504],{"class":157,"line":1883},[155,79498,79310],{"class":226},[155,79500,21311],{"class":69863},[155,79502,79503],{"class":226},":hover",[155,79505,35397],{"class":171},[155,79507,79508,79510,79512,79515],{"class":157,"line":1894},[155,79509,70203],{"class":263},[155,79511,70000],{"class":171},[155,79513,79514],{"class":263},"#eee",[155,79516,21206],{"class":171},[155,79518,79519],{"class":157,"line":1900},[155,79520,22414],{"class":171},[155,79522,79523,79525,79527],{"class":157,"line":1911},[155,79524,70339],{"class":171},[155,79526,20011],{"class":69863},[155,79528,69870],{"class":171},[155,79530,79531],{"class":157,"line":1917},[155,79532,217],{"emptyLinePlaceholder":216},[155,79534,79535,79537,79539],{"class":157,"line":1927},[155,79536,70348],{"class":171},[155,79538,69897],{"class":69863},[155,79540,69870],{"class":171},[155,79542,79543],{"class":157,"line":1933},[155,79544,217],{"emptyLinePlaceholder":216},[155,79546,79547,79549,79551],{"class":157,"line":1943},[155,79548,20959],{"class":171},[155,79550,70363],{"class":69863},[155,79552,69870],{"class":171},[155,79554,79555,79557,79559,79561,79563,79566],{"class":157,"line":1949},[155,79556,69904],{"class":171},[155,79558,70174],{"class":69863},[155,79560,72049],{"class":226},[155,79562,317],{"class":171},[155,79564,79565],{"class":732},"\"mi\"",[155,79567,69870],{"class":171},[155,79569,79570,79572,79574,79576,79578,79581,79584,79586,79589],{"class":157,"line":1959},[155,79571,73865],{"class":171},[155,79573,72384],{"class":69863},[155,79575,72387],{"class":226},[155,79577,317],{"class":171},[155,79579,79580],{"class":732},"\"search\"",[155,79582,79583],{"class":226}," placeholder",[155,79585,317],{"class":171},[155,79587,79588],{"class":732},"\"小米笔记本\"",[155,79590,69870],{"class":171},[155,79592,79593,79595,79597,79599,79601,79604],{"class":157,"line":1964},[155,79594,73865],{"class":171},[155,79596,21052],{"class":69863},[155,79598,72049],{"class":226},[155,79600,317],{"class":171},[155,79602,79603],{"class":732},"\"result-list\"",[155,79605,69870],{"class":171},[155,79607,79608,79611,79613,79616,79618,79621,79623,79626,79629,79631,79633,79635],{"class":157,"line":1970},[155,79609,79610],{"class":171},"            \u003C",[155,79612,31],{"class":69863},[155,79614,79615],{"class":171},">\u003C",[155,79617,20318],{"class":69863},[155,79619,79620],{"class":226}," href",[155,79622,317],{"class":171},[155,79624,79625],{"class":732},"\"#\"",[155,79627,79628],{"class":171},">全部商品\u003C\u002F",[155,79630,20318],{"class":69863},[155,79632,73877],{"class":171},[155,79634,31],{"class":69863},[155,79636,69870],{"class":171},[155,79638,79639,79641,79643,79645,79647,79649,79651,79653,79656,79658,79660,79662],{"class":157,"line":1981},[155,79640,79610],{"class":171},[155,79642,31],{"class":69863},[155,79644,79615],{"class":171},[155,79646,20318],{"class":69863},[155,79648,79620],{"class":226},[155,79650,317],{"class":171},[155,79652,79625],{"class":732},[155,79654,79655],{"class":171},">小米11\u003C\u002F",[155,79657,20318],{"class":69863},[155,79659,73877],{"class":171},[155,79661,31],{"class":69863},[155,79663,69870],{"class":171},[155,79665,79666,79668,79670,79672,79674,79676,79678,79680,79683,79685,79687,79689],{"class":157,"line":1986},[155,79667,79610],{"class":171},[155,79669,31],{"class":69863},[155,79671,79615],{"class":171},[155,79673,20318],{"class":69863},[155,79675,79620],{"class":226},[155,79677,317],{"class":171},[155,79679,79625],{"class":732},[155,79681,79682],{"class":171},">小米10S\u003C\u002F",[155,79684,20318],{"class":69863},[155,79686,73877],{"class":171},[155,79688,31],{"class":69863},[155,79690,69870],{"class":171},[155,79692,79693,79695,79697,79699,79701,79703,79705,79707,79710,79712,79714,79716],{"class":157,"line":1991},[155,79694,79610],{"class":171},[155,79696,31],{"class":69863},[155,79698,79615],{"class":171},[155,79700,20318],{"class":69863},[155,79702,79620],{"class":226},[155,79704,317],{"class":171},[155,79706,79625],{"class":732},[155,79708,79709],{"class":171},">小米笔记本\u003C\u002F",[155,79711,20318],{"class":69863},[155,79713,73877],{"class":171},[155,79715,31],{"class":69863},[155,79717,69870],{"class":171},[155,79719,79720,79722,79724,79726,79728,79730,79732,79734,79737,79739,79741,79743],{"class":157,"line":1997},[155,79721,79610],{"class":171},[155,79723,31],{"class":69863},[155,79725,79615],{"class":171},[155,79727,20318],{"class":69863},[155,79729,79620],{"class":226},[155,79731,317],{"class":171},[155,79733,79625],{"class":732},[155,79735,79736],{"class":171},">小米手机\u003C\u002F",[155,79738,20318],{"class":69863},[155,79740,73877],{"class":171},[155,79742,31],{"class":69863},[155,79744,69870],{"class":171},[155,79746,79747,79749,79751,79753,79755,79757,79759,79761,79764,79766,79768,79770],{"class":157,"line":2014},[155,79748,79610],{"class":171},[155,79750,31],{"class":69863},[155,79752,79615],{"class":171},[155,79754,20318],{"class":69863},[155,79756,79620],{"class":226},[155,79758,317],{"class":171},[155,79760,79625],{"class":732},[155,79762,79763],{"class":171},">黑鲨4\u003C\u002F",[155,79765,20318],{"class":69863},[155,79767,73877],{"class":171},[155,79769,31],{"class":69863},[155,79771,69870],{"class":171},[155,79773,79774,79776,79778,79780,79782,79784,79786,79788,79791,79793,79795,79797],{"class":157,"line":2046},[155,79775,79610],{"class":171},[155,79777,31],{"class":69863},[155,79779,79615],{"class":171},[155,79781,20318],{"class":69863},[155,79783,79620],{"class":226},[155,79785,317],{"class":171},[155,79787,79625],{"class":732},[155,79789,79790],{"class":171},">空调\u003C\u002F",[155,79792,20318],{"class":69863},[155,79794,73877],{"class":171},[155,79796,31],{"class":69863},[155,79798,69870],{"class":171},[155,79800,79801,79804,79806],{"class":157,"line":2062},[155,79802,79803],{"class":171},"        \u003C\u002F",[155,79805,21052],{"class":69863},[155,79807,69870],{"class":171},[155,79809,79810,79812,79814],{"class":157,"line":2067},[155,79811,70339],{"class":171},[155,79813,70174],{"class":69863},[155,79815,69870],{"class":171},[155,79817,79818,79820,79822],{"class":157,"line":2073},[155,79819,69904],{"class":171},[155,79821,70376],{"class":69863},[155,79823,69870],{"class":171},[155,79825,79826],{"class":157,"line":2079},[155,79827,79828],{"class":161},"        \u002F\u002F 1. 获取元素\n",[155,79830,79831,79834,79836,79838,79840,79842,79844,79847],{"class":157,"line":2089},[155,79832,79833],{"class":167},"        const",[155,79835,79168],{"class":263},[155,79837,33391],{"class":167},[155,79839,72959],{"class":171},[155,79841,72962],{"class":226},[155,79843,230],{"class":171},[155,79845,79846],{"class":732},"'[type=search]'",[155,79848,363],{"class":171},[155,79850,79851,79853,79856,79858,79860,79862,79864,79867],{"class":157,"line":2095},[155,79852,79833],{"class":167},[155,79854,79855],{"class":263}," ul",[155,79857,33391],{"class":167},[155,79859,72959],{"class":171},[155,79861,72962],{"class":226},[155,79863,230],{"class":171},[155,79865,79866],{"class":732},"'.result-list'",[155,79868,363],{"class":171},[155,79870,79871],{"class":157,"line":2106},[155,79872,79873],{"class":161},"        \u002F\u002F console.log(input)\n",[155,79875,79876],{"class":157,"line":2112},[155,79877,79878],{"class":161},"        \u002F\u002F 2. 监听事件 获得焦点\n",[155,79880,79881,79884,79886,79888,79891,79893,79895],{"class":157,"line":2122},[155,79882,79883],{"class":171},"        input.",[155,79885,76376],{"class":226},[155,79887,230],{"class":171},[155,79889,79890],{"class":732},"'focus'",[155,79892,7589],{"class":171},[155,79894,73012],{"class":167},[155,79896,73015],{"class":171},[155,79898,79899],{"class":157,"line":2128},[155,79900,79901],{"class":161},"            \u002F\u002F ul显示\n",[155,79903,79904,79907,79909],{"class":157,"line":2138},[155,79905,79906],{"class":171},"            ul.style.display ",[155,79908,317],{"class":167},[155,79910,79911],{"class":732}," 'block'\n",[155,79913,79914],{"class":157,"line":2144},[155,79915,79916],{"class":161},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[155,79918,79919,79922,79924,79926,79929],{"class":157,"line":2154},[155,79920,79921],{"class":171},"            input.classList.",[155,79923,25197],{"class":226},[155,79925,230],{"class":171},[155,79927,79928],{"class":732},"'search'",[155,79930,363],{"class":171},[155,79932,79933],{"class":157,"line":2160},[155,79934,79935],{"class":171},"        })\n",[155,79937,79938],{"class":157,"line":2170},[155,79939,79940],{"class":161},"        \u002F\u002F 3. 监听事件 失去焦点\n",[155,79942,79943,79945,79947,79949,79952,79954,79956],{"class":157,"line":2176},[155,79944,79883],{"class":171},[155,79946,76376],{"class":226},[155,79948,230],{"class":171},[155,79950,79951],{"class":732},"'blur'",[155,79953,7589],{"class":171},[155,79955,73012],{"class":167},[155,79957,73015],{"class":171},[155,79959,79960,79962,79964],{"class":157,"line":2191},[155,79961,79906],{"class":171},[155,79963,317],{"class":167},[155,79965,79966],{"class":732}," 'none'\n",[155,79968,79969,79971,79973,79975,79977],{"class":157,"line":2197},[155,79970,79921],{"class":171},[155,79972,75569],{"class":226},[155,79974,230],{"class":171},[155,79976,79928],{"class":732},[155,79978,363],{"class":171},[155,79980,79981],{"class":157,"line":2208},[155,79982,79935],{"class":171},[155,79984,79985,79987,79989],{"class":157,"line":2214},[155,79986,70339],{"class":171},[155,79988,70376],{"class":69863},[155,79990,69870],{"class":171},[155,79992,79993,79995,79997],{"class":157,"line":2225},[155,79994,70348],{"class":171},[155,79996,70363],{"class":69863},[155,79998,69870],{"class":171},[155,80000,80001],{"class":157,"line":2231},[155,80002,217],{"emptyLinePlaceholder":216},[155,80004,80005,80007,80009],{"class":157,"line":2237},[155,80006,70348],{"class":171},[155,80008,69198],{"class":69863},[155,80010,69870],{"class":171},[19,80012,80014],{"id":80013},"_3253-键盘事件","3.2.5.3 键盘事件",[24,80016,80017],{},"评论字数统计案例",[24,80019,80020],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[24,80022,80023],{},"牢记focus伪类选择器",[69907,80025],{"charSet":80026},"UTF-8",[69907,80028],{"name":80029,"content":80030},"viewport","width=device-width, initial-scale=1.0",[69970,80032,80033],{},"Document",[20011,80035,80036],{},"\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",[72384,80038],{"type":25051},[21052,80040,80041,80044],{},[31,80042,80043],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[31,80045,80046],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[146,80048,80050],{"className":69196,"code":80049,"language":69198,"meta":39,"style":39},"\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",[152,80051,80052,80062,80076,80080,80088,80102,80122,80142,80155,80163,80170,80183,80197,80207,80217,80221,80225,80232,80244,80256,80268,80280,80309,80322,80326,80330,80339,80350,80362,80373,80384,80396,80407,80419,80435,80447,80451,80455,80466,80477,80487,80499,80503,80507,80515,80526,80536,80547,80559,80572,80584,80596,80600,80604,80613,80625,80636,80649,80660,80674,80678,80682,80689,80701,80713,80723,80727,80731,80740,80752,80762,80766,80770,80781,80791,80810,80823,80827,80831,80841,80851,80855,80859,80870,80881,80893,80905,80909,80913,80924,80935,80949,80953,80957,80968,80978,80990,80994,81002,81010,81014,81022,81037,81056,81096,81109,81117,81131,81151,81159,81174,81197,81215,81230,81250,81270,81290,81298,81306,81314,81322,81342,81362,81367,81384,81393,81397,81402,81418,81426,81430,81435,81452,81457,81482,81486,81490,81495,81500,81508,81516,81520],{"__ignoreMap":39},[155,80053,80054,80056,80058,80060],{"class":157,"line":158},[155,80055,69860],{"class":171},[155,80057,69864],{"class":69863},[155,80059,69867],{"class":226},[155,80061,69870],{"class":171},[155,80063,80064,80066,80068,80070,80072,80074],{"class":157,"line":46},[155,80065,20959],{"class":171},[155,80067,69198],{"class":69863},[155,80069,69879],{"class":226},[155,80071,317],{"class":171},[155,80073,69884],{"class":732},[155,80075,69870],{"class":171},[155,80077,80078],{"class":157,"line":121},[155,80079,217],{"emptyLinePlaceholder":216},[155,80081,80082,80084,80086],{"class":157,"line":180},[155,80083,20959],{"class":171},[155,80085,69897],{"class":69863},[155,80087,69870],{"class":171},[155,80089,80090,80092,80094,80096,80098,80100],{"class":157,"line":194},[155,80091,70707],{"class":171},[155,80093,69907],{"class":69863},[155,80095,69910],{"class":226},[155,80097,317],{"class":171},[155,80099,69915],{"class":732},[155,80101,69870],{"class":171},[155,80103,80104,80106,80108,80110,80112,80114,80116,80118,80120],{"class":157,"line":200},[155,80105,70707],{"class":171},[155,80107,69907],{"class":69863},[155,80109,69926],{"class":226},[155,80111,317],{"class":171},[155,80113,69931],{"class":732},[155,80115,69934],{"class":226},[155,80117,317],{"class":171},[155,80119,69939],{"class":732},[155,80121,69870],{"class":171},[155,80123,80124,80126,80128,80130,80132,80134,80136,80138,80140],{"class":157,"line":213},[155,80125,70707],{"class":171},[155,80127,69907],{"class":69863},[155,80129,34745],{"class":226},[155,80131,317],{"class":171},[155,80133,69954],{"class":732},[155,80135,69934],{"class":226},[155,80137,317],{"class":171},[155,80139,69961],{"class":732},[155,80141,69870],{"class":171},[155,80143,80144,80146,80148,80151,80153],{"class":157,"line":220},[155,80145,70707],{"class":171},[155,80147,69970],{"class":69863},[155,80149,80150],{"class":171},">评论回车发布\u003C\u002F",[155,80152,69970],{"class":69863},[155,80154,69870],{"class":171},[155,80156,80157,80159,80161],{"class":157,"line":245},[155,80158,70707],{"class":171},[155,80160,20011],{"class":69863},[155,80162,69870],{"class":171},[155,80164,80165,80168],{"class":157,"line":251},[155,80166,80167],{"class":226},"    .wrapper",[155,80169,35397],{"class":171},[155,80171,80172,80175,80177,80179,80181],{"class":157,"line":257},[155,80173,80174],{"class":263},"      min-width",[155,80176,70000],{"class":171},[155,80178,518],{"class":263},[155,80180,70055],{"class":167},[155,80182,21206],{"class":171},[155,80184,80185,80188,80190,80193,80195],{"class":157,"line":270},[155,80186,80187],{"class":263},"      max-width",[155,80189,70000],{"class":171},[155,80191,80192],{"class":263},"800",[155,80194,70055],{"class":167},[155,80196,21206],{"class":171},[155,80198,80199,80201,80203,80205],{"class":157,"line":276},[155,80200,73572],{"class":263},[155,80202,70000],{"class":171},[155,80204,70040],{"class":263},[155,80206,21206],{"class":171},[155,80208,80209,80211,80213,80215],{"class":157,"line":297},[155,80210,73583],{"class":263},[155,80212,70000],{"class":171},[155,80214,70143],{"class":263},[155,80216,21206],{"class":171},[155,80218,80219],{"class":157,"line":302},[155,80220,22074],{"class":171},[155,80222,80223],{"class":157,"line":308},[155,80224,217],{"emptyLinePlaceholder":216},[155,80226,80227,80230],{"class":157,"line":366},[155,80228,80229],{"class":226},"    .avatar",[155,80231,35397],{"class":171},[155,80233,80234,80236,80238,80240,80242],{"class":157,"line":379},[155,80235,73334],{"class":263},[155,80237,70000],{"class":171},[155,80239,11979],{"class":263},[155,80241,70055],{"class":167},[155,80243,21206],{"class":171},[155,80245,80246,80248,80250,80252,80254],{"class":157,"line":385},[155,80247,73348],{"class":263},[155,80249,70000],{"class":171},[155,80251,11979],{"class":263},[155,80253,70055],{"class":167},[155,80255,21206],{"class":171},[155,80257,80258,80260,80262,80264,80266],{"class":157,"line":415},[155,80259,73697],{"class":263},[155,80261,70000],{"class":171},[155,80263,20715],{"class":263},[155,80265,2938],{"class":167},[155,80267,21206],{"class":171},[155,80269,80270,80273,80275,80278],{"class":157,"line":452},[155,80271,80272],{"class":263},"      overflow",[155,80274,70000],{"class":171},[155,80276,80277],{"class":263},"hidden",[155,80279,21206],{"class":171},[155,80281,80282,80285,80287,80290,80292,80295,80297,80300,80302,80304,80307],{"class":157,"line":480},[155,80283,80284],{"class":263},"      background",[155,80286,70000],{"class":171},[155,80288,80289],{"class":263},"url",[155,80291,230],{"class":171},[155,80293,80294],{"class":323},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[155,80296,33541],{"class":171},[155,80298,80299],{"class":263},"no-repeat",[155,80301,36937],{"class":263},[155,80303,44770],{"class":171},[155,80305,80306],{"class":263},"cover",[155,80308,21206],{"class":171},[155,80310,80311,80314,80316,80318,80320],{"class":157,"line":486},[155,80312,80313],{"class":263},"      margin-right",[155,80315,70000],{"class":171},[155,80317,3458],{"class":263},[155,80319,70055],{"class":167},[155,80321,21206],{"class":171},[155,80323,80324],{"class":157,"line":499},[155,80325,22074],{"class":171},[155,80327,80328],{"class":157,"line":505},[155,80329,217],{"emptyLinePlaceholder":216},[155,80331,80332,80334,80337],{"class":157,"line":528},[155,80333,80167],{"class":226},[155,80335,80336],{"class":69863}," textarea",[155,80338,35397],{"class":171},[155,80340,80341,80344,80346,80348],{"class":157,"line":549},[155,80342,80343],{"class":263},"      outline",[155,80345,70000],{"class":171},[155,80347,73300],{"class":263},[155,80349,21206],{"class":171},[155,80351,80352,80355,80357,80360],{"class":157,"line":570},[155,80353,80354],{"class":263},"      border-color",[155,80356,70000],{"class":171},[155,80358,80359],{"class":263},"transparent",[155,80361,21206],{"class":171},[155,80363,80364,80367,80369,80371],{"class":157,"line":575},[155,80365,80366],{"class":263},"      resize",[155,80368,70000],{"class":171},[155,80370,73300],{"class":263},[155,80372,21206],{"class":171},[155,80374,80375,80377,80379,80382],{"class":157,"line":581},[155,80376,80284],{"class":263},[155,80378,70000],{"class":171},[155,80380,80381],{"class":263},"#f5f5f5",[155,80383,21206],{"class":171},[155,80385,80386,80388,80390,80392,80394],{"class":157,"line":592},[155,80387,73697],{"class":263},[155,80389,70000],{"class":171},[155,80391,1264],{"class":263},[155,80393,70055],{"class":167},[155,80395,21206],{"class":171},[155,80397,80398,80401,80403,80405],{"class":157,"line":610},[155,80399,80400],{"class":263},"      flex",[155,80402,70000],{"class":171},[155,80404,329],{"class":263},[155,80406,21206],{"class":171},[155,80408,80409,80411,80413,80415,80417],{"class":157,"line":622},[155,80410,73258],{"class":263},[155,80412,70000],{"class":171},[155,80414,565],{"class":263},[155,80416,70055],{"class":167},[155,80418,21206],{"class":171},[155,80420,80421,80424,80426,80428,80431,80433],{"class":157,"line":638},[155,80422,80423],{"class":263},"      transition",[155,80425,70000],{"class":171},[155,80427,47910],{"class":263},[155,80429,80430],{"class":263}," 0.5",[155,80432,20753],{"class":167},[155,80434,21206],{"class":171},[155,80436,80437,80439,80441,80443,80445],{"class":157,"line":650},[155,80438,73348],{"class":263},[155,80440,70000],{"class":171},[155,80442,14194],{"class":263},[155,80444,70055],{"class":167},[155,80446,21206],{"class":171},[155,80448,80449],{"class":157,"line":662},[155,80450,22074],{"class":171},[155,80452,80453],{"class":157,"line":678},[155,80454,217],{"emptyLinePlaceholder":216},[155,80456,80457,80459,80461,80464],{"class":157,"line":694},[155,80458,80167],{"class":226},[155,80460,80336],{"class":69863},[155,80462,80463],{"class":226},":focus",[155,80465,35397],{"class":171},[155,80467,80468,80470,80472,80475],{"class":157,"line":706},[155,80469,80354],{"class":263},[155,80471,70000],{"class":171},[155,80473,80474],{"class":263},"#e4e4e4",[155,80476,21206],{"class":171},[155,80478,80479,80481,80483,80485],{"class":157,"line":715},[155,80480,80284],{"class":263},[155,80482,70000],{"class":171},[155,80484,79405],{"class":263},[155,80486,21206],{"class":171},[155,80488,80489,80491,80493,80495,80497],{"class":157,"line":720},[155,80490,73348],{"class":263},[155,80492,70000],{"class":171},[155,80494,20715],{"class":263},[155,80496,70055],{"class":167},[155,80498,21206],{"class":171},[155,80500,80501],{"class":157,"line":739},[155,80502,22074],{"class":171},[155,80504,80505],{"class":157,"line":745},[155,80506,217],{"emptyLinePlaceholder":216},[155,80508,80509,80511,80513],{"class":157,"line":773},[155,80510,80167],{"class":226},[155,80512,76030],{"class":69863},[155,80514,35397],{"class":171},[155,80516,80517,80519,80521,80524],{"class":157,"line":779},[155,80518,80284],{"class":263},[155,80520,70000],{"class":171},[155,80522,80523],{"class":263},"#00aeec",[155,80525,21206],{"class":171},[155,80527,80528,80530,80532,80534],{"class":157,"line":785},[155,80529,75979],{"class":263},[155,80531,70000],{"class":171},[155,80533,79405],{"class":263},[155,80535,21206],{"class":171},[155,80537,80538,80541,80543,80545],{"class":157,"line":791},[155,80539,80540],{"class":263},"      border",[155,80542,70000],{"class":171},[155,80544,73300],{"class":263},[155,80546,21206],{"class":171},[155,80548,80549,80551,80553,80555,80557],{"class":157,"line":796},[155,80550,73697],{"class":263},[155,80552,70000],{"class":171},[155,80554,1264],{"class":263},[155,80556,70055],{"class":167},[155,80558,21206],{"class":171},[155,80560,80561,80564,80566,80568,80570],{"class":157,"line":802},[155,80562,80563],{"class":263},"      margin-left",[155,80565,70000],{"class":171},[155,80567,565],{"class":263},[155,80569,70055],{"class":167},[155,80571,21206],{"class":171},[155,80573,80574,80576,80578,80580,80582],{"class":157,"line":808},[155,80575,73334],{"class":263},[155,80577,70000],{"class":171},[155,80579,20431],{"class":263},[155,80581,70055],{"class":167},[155,80583,21206],{"class":171},[155,80585,80586,80589,80591,80594],{"class":157,"line":819},[155,80587,80588],{"class":263},"      cursor",[155,80590,70000],{"class":171},[155,80592,80593],{"class":263},"pointer",[155,80595,21206],{"class":171},[155,80597,80598],{"class":157,"line":1832},[155,80599,22074],{"class":171},[155,80601,80602],{"class":157,"line":1838},[155,80603,217],{"emptyLinePlaceholder":216},[155,80605,80606,80608,80611],{"class":157,"line":1844},[155,80607,80167],{"class":226},[155,80609,80610],{"class":226}," .total",[155,80612,35397],{"class":171},[155,80614,80615,80617,80619,80621,80623],{"class":157,"line":1850},[155,80616,80313],{"class":263},[155,80618,70000],{"class":171},[155,80620,20672],{"class":263},[155,80622,70055],{"class":167},[155,80624,21206],{"class":171},[155,80626,80627,80629,80631,80634],{"class":157,"line":1861},[155,80628,75979],{"class":263},[155,80630,70000],{"class":171},[155,80632,80633],{"class":263},"#999",[155,80635,21206],{"class":171},[155,80637,80638,80641,80643,80645,80647],{"class":157,"line":1866},[155,80639,80640],{"class":263},"      margin-top",[155,80642,70000],{"class":171},[155,80644,350],{"class":263},[155,80646,70055],{"class":167},[155,80648,21206],{"class":171},[155,80650,80651,80654,80656,80658],{"class":157,"line":1871},[155,80652,80653],{"class":263},"      opacity",[155,80655,70000],{"class":171},[155,80657,1109],{"class":263},[155,80659,21206],{"class":171},[155,80661,80662,80664,80666,80668,80670,80672],{"class":157,"line":1877},[155,80663,80423],{"class":263},[155,80665,70000],{"class":171},[155,80667,47910],{"class":263},[155,80669,80430],{"class":263},[155,80671,20753],{"class":167},[155,80673,21206],{"class":171},[155,80675,80676],{"class":157,"line":1883},[155,80677,22074],{"class":171},[155,80679,80680],{"class":157,"line":1894},[155,80681,217],{"emptyLinePlaceholder":216},[155,80683,80684,80687],{"class":157,"line":1900},[155,80685,80686],{"class":226},"    .list",[155,80688,35397],{"class":171},[155,80690,80691,80693,80695,80697,80699],{"class":157,"line":1911},[155,80692,80174],{"class":263},[155,80694,70000],{"class":171},[155,80696,518],{"class":263},[155,80698,70055],{"class":167},[155,80700,21206],{"class":171},[155,80702,80703,80705,80707,80709,80711],{"class":157,"line":1917},[155,80704,80187],{"class":263},[155,80706,70000],{"class":171},[155,80708,80192],{"class":263},[155,80710,70055],{"class":167},[155,80712,21206],{"class":171},[155,80714,80715,80717,80719,80721],{"class":157,"line":1927},[155,80716,73572],{"class":263},[155,80718,70000],{"class":171},[155,80720,70040],{"class":263},[155,80722,21206],{"class":171},[155,80724,80725],{"class":157,"line":1933},[155,80726,22074],{"class":171},[155,80728,80729],{"class":157,"line":1943},[155,80730,217],{"emptyLinePlaceholder":216},[155,80732,80733,80735,80738],{"class":157,"line":1949},[155,80734,80686],{"class":226},[155,80736,80737],{"class":226}," .item",[155,80739,35397],{"class":171},[155,80741,80742,80744,80746,80748,80750],{"class":157,"line":1959},[155,80743,73334],{"class":263},[155,80745,70000],{"class":171},[155,80747,20389],{"class":263},[155,80749,2938],{"class":167},[155,80751,21206],{"class":171},[155,80753,80754,80756,80758,80760],{"class":157,"line":1964},[155,80755,73572],{"class":263},[155,80757,70000],{"class":171},[155,80759,70040],{"class":263},[155,80761,21206],{"class":171},[155,80763,80764],{"class":157,"line":1970},[155,80765,22074],{"class":171},[155,80767,80768],{"class":157,"line":1981},[155,80769,217],{"emptyLinePlaceholder":216},[155,80771,80772,80774,80776,80779],{"class":157,"line":1986},[155,80773,80686],{"class":226},[155,80775,80737],{"class":226},[155,80777,80778],{"class":226}," .info",[155,80780,35397],{"class":171},[155,80782,80783,80785,80787,80789],{"class":157,"line":1991},[155,80784,80400],{"class":263},[155,80786,70000],{"class":171},[155,80788,329],{"class":263},[155,80790,21206],{"class":171},[155,80792,80793,80796,80798,80800,80802,80805,80808],{"class":157,"line":1997},[155,80794,80795],{"class":263},"      border-bottom",[155,80797,70000],{"class":171},[155,80799,329],{"class":263},[155,80801,70055],{"class":167},[155,80803,80804],{"class":263}," dashed",[155,80806,80807],{"class":263}," #e4e4e4",[155,80809,21206],{"class":171},[155,80811,80812,80815,80817,80819,80821],{"class":157,"line":2014},[155,80813,80814],{"class":263},"      padding-bottom",[155,80816,70000],{"class":171},[155,80818,565],{"class":263},[155,80820,70055],{"class":167},[155,80822,21206],{"class":171},[155,80824,80825],{"class":157,"line":2046},[155,80826,22074],{"class":171},[155,80828,80829],{"class":157,"line":2062},[155,80830,217],{"emptyLinePlaceholder":216},[155,80832,80833,80835,80837,80839],{"class":157,"line":2067},[155,80834,80686],{"class":226},[155,80836,80737],{"class":226},[155,80838,26688],{"class":69863},[155,80840,35397],{"class":171},[155,80842,80843,80845,80847,80849],{"class":157,"line":2073},[155,80844,73269],{"class":263},[155,80846,70000],{"class":171},[155,80848,1109],{"class":263},[155,80850,21206],{"class":171},[155,80852,80853],{"class":157,"line":2079},[155,80854,22074],{"class":171},[155,80856,80857],{"class":157,"line":2089},[155,80858,217],{"emptyLinePlaceholder":216},[155,80860,80861,80863,80865,80868],{"class":157,"line":2095},[155,80862,80686],{"class":226},[155,80864,80737],{"class":226},[155,80866,80867],{"class":226}," .name",[155,80869,35397],{"class":171},[155,80871,80872,80874,80876,80879],{"class":157,"line":2106},[155,80873,75979],{"class":263},[155,80875,70000],{"class":171},[155,80877,80878],{"class":263},"#FB7299",[155,80880,21206],{"class":171},[155,80882,80883,80885,80887,80889,80891],{"class":157,"line":2112},[155,80884,73485],{"class":263},[155,80886,70000],{"class":171},[155,80888,20613],{"class":263},[155,80890,70055],{"class":167},[155,80892,21206],{"class":171},[155,80894,80895,80898,80900,80903],{"class":157,"line":2122},[155,80896,80897],{"class":263},"      font-weight",[155,80899,70000],{"class":171},[155,80901,80902],{"class":263},"bold",[155,80904,21206],{"class":171},[155,80906,80907],{"class":157,"line":2128},[155,80908,22074],{"class":171},[155,80910,80911],{"class":157,"line":2138},[155,80912,217],{"emptyLinePlaceholder":216},[155,80914,80915,80917,80919,80922],{"class":157,"line":2144},[155,80916,80686],{"class":226},[155,80918,80737],{"class":226},[155,80920,80921],{"class":226}," .text",[155,80923,35397],{"class":171},[155,80925,80926,80928,80930,80933],{"class":157,"line":2154},[155,80927,75979],{"class":263},[155,80929,70000],{"class":171},[155,80931,80932],{"class":263},"#333",[155,80934,21206],{"class":171},[155,80936,80937,80939,80941,80943,80945,80947],{"class":157,"line":2160},[155,80938,73258],{"class":263},[155,80940,70000],{"class":171},[155,80942,565],{"class":263},[155,80944,70055],{"class":167},[155,80946,1151],{"class":263},[155,80948,21206],{"class":171},[155,80950,80951],{"class":157,"line":2170},[155,80952,22074],{"class":171},[155,80954,80955],{"class":157,"line":2176},[155,80956,217],{"emptyLinePlaceholder":216},[155,80958,80959,80961,80963,80966],{"class":157,"line":2191},[155,80960,80686],{"class":226},[155,80962,80737],{"class":226},[155,80964,80965],{"class":226}," .time",[155,80967,35397],{"class":171},[155,80969,80970,80972,80974,80976],{"class":157,"line":2197},[155,80971,75979],{"class":263},[155,80973,70000],{"class":171},[155,80975,80633],{"class":263},[155,80977,21206],{"class":171},[155,80979,80980,80982,80984,80986,80988],{"class":157,"line":2208},[155,80981,73485],{"class":263},[155,80983,70000],{"class":171},[155,80985,1231],{"class":263},[155,80987,70055],{"class":167},[155,80989,21206],{"class":171},[155,80991,80992],{"class":157,"line":2214},[155,80993,22074],{"class":171},[155,80995,80996,80998,81000],{"class":157,"line":2225},[155,80997,70980],{"class":171},[155,80999,20011],{"class":69863},[155,81001,69870],{"class":171},[155,81003,81004,81006,81008],{"class":157,"line":2231},[155,81005,70348],{"class":171},[155,81007,69897],{"class":69863},[155,81009,69870],{"class":171},[155,81011,81012],{"class":157,"line":2237},[155,81013,217],{"emptyLinePlaceholder":216},[155,81015,81016,81018,81020],{"class":157,"line":2243},[155,81017,20959],{"class":171},[155,81019,70363],{"class":69863},[155,81021,69870],{"class":171},[155,81023,81024,81026,81028,81030,81032,81035],{"class":157,"line":2249},[155,81025,70707],{"class":171},[155,81027,70174],{"class":69863},[155,81029,72049],{"class":226},[155,81031,317],{"class":171},[155,81033,81034],{"class":732},"\"wrapper\"",[155,81036,69870],{"class":171},[155,81038,81039,81041,81043,81045,81047,81050,81052,81054],{"class":157,"line":2260},[155,81040,69904],{"class":171},[155,81042,20513],{"class":69863},[155,81044,72049],{"class":226},[155,81046,317],{"class":171},[155,81048,81049],{"class":732},"\"avatar\"",[155,81051,73877],{"class":171},[155,81053,20513],{"class":69863},[155,81055,69870],{"class":171},[155,81057,81058,81060,81062,81064,81066,81069,81071,81073,81076,81078,81080,81082,81085,81087,81090,81092,81094],{"class":157,"line":2266},[155,81059,69904],{"class":171},[155,81061,72851],{"class":69863},[155,81063,34784],{"class":226},[155,81065,317],{"class":171},[155,81067,81068],{"class":732},"\"tx\"",[155,81070,79583],{"class":226},[155,81072,317],{"class":171},[155,81074,81075],{"class":732},"\"发一条友善的评论\"",[155,81077,72874],{"class":226},[155,81079,317],{"class":171},[155,81081,23571],{"class":732},[155,81083,81084],{"class":226}," maxlength",[155,81086,317],{"class":171},[155,81088,81089],{"class":732},"\"200\"",[155,81091,73877],{"class":171},[155,81093,72851],{"class":69863},[155,81095,69870],{"class":171},[155,81097,81098,81100,81102,81105,81107],{"class":157,"line":2286},[155,81099,69904],{"class":171},[155,81101,72450],{"class":69863},[155,81103,81104],{"class":171},">发布\u003C\u002F",[155,81106,72450],{"class":69863},[155,81108,69870],{"class":171},[155,81110,81111,81113,81115],{"class":157,"line":2292},[155,81112,70980],{"class":171},[155,81114,70174],{"class":69863},[155,81116,69870],{"class":171},[155,81118,81119,81121,81123,81125,81127,81129],{"class":157,"line":2303},[155,81120,70707],{"class":171},[155,81122,70174],{"class":69863},[155,81124,72049],{"class":226},[155,81126,317],{"class":171},[155,81128,81034],{"class":732},[155,81130,69870],{"class":171},[155,81132,81133,81135,81137,81139,81141,81144,81147,81149],{"class":157,"line":2309},[155,81134,69904],{"class":171},[155,81136,155],{"class":69863},[155,81138,72049],{"class":226},[155,81140,317],{"class":171},[155,81142,81143],{"class":732},"\"total\"",[155,81145,81146],{"class":171},">0\u002F200字\u003C\u002F",[155,81148,155],{"class":69863},[155,81150,69870],{"class":171},[155,81152,81153,81155,81157],{"class":157,"line":2315},[155,81154,70980],{"class":171},[155,81156,70174],{"class":69863},[155,81158,69870],{"class":171},[155,81160,81161,81163,81165,81167,81169,81172],{"class":157,"line":2321},[155,81162,70707],{"class":171},[155,81164,70174],{"class":69863},[155,81166,72049],{"class":226},[155,81168,317],{"class":171},[155,81170,81171],{"class":732},"\"list\"",[155,81173,69870],{"class":171},[155,81175,81176,81178,81180,81182,81184,81187,81190,81192,81195],{"class":157,"line":2327},[155,81177,69904],{"class":171},[155,81179,70174],{"class":69863},[155,81181,72049],{"class":226},[155,81183,317],{"class":171},[155,81185,81186],{"class":732},"\"item\"",[155,81188,81189],{"class":226}," style",[155,81191,317],{"class":171},[155,81193,81194],{"class":732},"\"display: none;\"",[155,81196,69870],{"class":171},[155,81198,81199,81201,81203,81205,81207,81209,81211,81213],{"class":157,"line":2333},[155,81200,73797],{"class":171},[155,81202,20513],{"class":69863},[155,81204,72049],{"class":226},[155,81206,317],{"class":171},[155,81208,81049],{"class":732},[155,81210,73877],{"class":171},[155,81212,20513],{"class":69863},[155,81214,69870],{"class":171},[155,81216,81217,81219,81221,81223,81225,81228],{"class":157,"line":2339},[155,81218,73797],{"class":171},[155,81220,70174],{"class":69863},[155,81222,72049],{"class":226},[155,81224,317],{"class":171},[155,81226,81227],{"class":732},"\"info\"",[155,81229,69870],{"class":171},[155,81231,81232,81234,81236,81238,81240,81243,81246,81248],{"class":157,"line":2345},[155,81233,73865],{"class":171},[155,81235,24],{"class":69863},[155,81237,72049],{"class":226},[155,81239,317],{"class":171},[155,81241,81242],{"class":732},"\"name\"",[155,81244,81245],{"class":171},">清风徐来\u003C\u002F",[155,81247,24],{"class":69863},[155,81249,69870],{"class":171},[155,81251,81252,81254,81256,81258,81260,81263,81266,81268],{"class":157,"line":2366},[155,81253,73865],{"class":171},[155,81255,24],{"class":69863},[155,81257,72049],{"class":226},[155,81259,317],{"class":171},[155,81261,81262],{"class":732},"\"text\"",[155,81264,81265],{"class":171},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[155,81267,24],{"class":69863},[155,81269,69870],{"class":171},[155,81271,81272,81274,81276,81278,81280,81283,81286,81288],{"class":157,"line":2372},[155,81273,73865],{"class":171},[155,81275,24],{"class":69863},[155,81277,72049],{"class":226},[155,81279,317],{"class":171},[155,81281,81282],{"class":732},"\"time\"",[155,81284,81285],{"class":171},">2022-10-10 20:29:21\u003C\u002F",[155,81287,24],{"class":69863},[155,81289,69870],{"class":171},[155,81291,81292,81294,81296],{"class":157,"line":2388},[155,81293,73970],{"class":171},[155,81295,70174],{"class":69863},[155,81297,69870],{"class":171},[155,81299,81300,81302,81304],{"class":157,"line":2394},[155,81301,70339],{"class":171},[155,81303,70174],{"class":69863},[155,81305,69870],{"class":171},[155,81307,81308,81310,81312],{"class":157,"line":2408},[155,81309,70980],{"class":171},[155,81311,70174],{"class":69863},[155,81313,69870],{"class":171},[155,81315,81316,81318,81320],{"class":157,"line":2414},[155,81317,70707],{"class":171},[155,81319,70376],{"class":69863},[155,81321,69870],{"class":171},[155,81323,81324,81326,81329,81331,81333,81335,81337,81340],{"class":157,"line":2429},[155,81325,31049],{"class":167},[155,81327,81328],{"class":263}," tx",[155,81330,33391],{"class":167},[155,81332,72959],{"class":171},[155,81334,72962],{"class":226},[155,81336,230],{"class":171},[155,81338,81339],{"class":732},"'#tx'",[155,81341,363],{"class":171},[155,81343,81344,81346,81349,81351,81353,81355,81357,81360],{"class":157,"line":2435},[155,81345,31049],{"class":167},[155,81347,81348],{"class":263}," total",[155,81350,33391],{"class":167},[155,81352,72959],{"class":171},[155,81354,72962],{"class":226},[155,81356,230],{"class":171},[155,81358,81359],{"class":732},"'.total'",[155,81361,363],{"class":171},[155,81363,81364],{"class":157,"line":2444},[155,81365,81366],{"class":161},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[155,81368,81369,81372,81374,81376,81378,81380,81382],{"class":157,"line":2450},[155,81370,81371],{"class":171},"    tx.",[155,81373,76376],{"class":226},[155,81375,230],{"class":171},[155,81377,79890],{"class":732},[155,81379,7589],{"class":171},[155,81381,73012],{"class":167},[155,81383,73015],{"class":171},[155,81385,81386,81389,81391],{"class":157,"line":2459},[155,81387,81388],{"class":171},"      total.style.opacity ",[155,81390,317],{"class":167},[155,81392,74262],{"class":263},[155,81394,81395],{"class":157,"line":2465},[155,81396,3065],{"class":171},[155,81398,81399],{"class":157,"line":2471},[155,81400,81401],{"class":161},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[155,81403,81404,81406,81408,81410,81412,81414,81416],{"class":157,"line":2480},[155,81405,81371],{"class":171},[155,81407,76376],{"class":226},[155,81409,230],{"class":171},[155,81411,79951],{"class":732},[155,81413,7589],{"class":171},[155,81415,73012],{"class":167},[155,81417,73015],{"class":171},[155,81419,81420,81422,81424],{"class":157,"line":2486},[155,81421,81388],{"class":171},[155,81423,317],{"class":167},[155,81425,16959],{"class":263},[155,81427,81428],{"class":157,"line":2497},[155,81429,3065],{"class":171},[155,81431,81432],{"class":157,"line":2503},[155,81433,81434],{"class":161},"    \u002F\u002F 3. 检测用户输入\n",[155,81436,81437,81439,81441,81443,81446,81448,81450],{"class":157,"line":2522},[155,81438,81371],{"class":171},[155,81440,76376],{"class":226},[155,81442,230],{"class":171},[155,81444,81445],{"class":732},"'input'",[155,81447,7589],{"class":171},[155,81449,73012],{"class":167},[155,81451,73015],{"class":171},[155,81453,81454],{"class":157,"line":2528},[155,81455,81456],{"class":161},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[155,81458,81459,81462,81464,81467,81470,81472,81475,81477,81479],{"class":157,"line":2539},[155,81460,81461],{"class":171},"      total.innerHTML ",[155,81463,317],{"class":167},[155,81465,81466],{"class":732}," `${",[155,81468,81469],{"class":171},"tx",[155,81471,236],{"class":732},[155,81473,81474],{"class":171},"value",[155,81476,236],{"class":732},[155,81478,70531],{"class":263},[155,81480,81481],{"class":732},"}\u002F200字`\n",[155,81483,81484],{"class":157,"line":2545},[155,81485,3065],{"class":171},[155,81487,81488],{"class":157,"line":2565},[155,81489,217],{"emptyLinePlaceholder":216},[155,81491,81492],{"class":157,"line":2581},[155,81493,81494],{"class":161},"    \u002F\u002F const str = 'andy'\n",[155,81496,81497],{"class":157,"line":2587},[155,81498,81499],{"class":161},"    \u002F\u002F console.log(str.length)\n",[155,81501,81502,81504,81506],{"class":157,"line":2601},[155,81503,70980],{"class":171},[155,81505,70376],{"class":69863},[155,81507,69870],{"class":171},[155,81509,81510,81512,81514],{"class":157,"line":2607},[155,81511,70348],{"class":171},[155,81513,70363],{"class":69863},[155,81515,69870],{"class":171},[155,81517,81518],{"class":157,"line":2613},[155,81519,217],{"emptyLinePlaceholder":216},[155,81521,81522,81524,81526],{"class":157,"line":2624},[155,81523,70348],{"class":171},[155,81525,69198],{"class":69863},[155,81527,69870],{"class":171},[19,81529,81531],{"id":81530},"_3254-change事件","3.2.5.4 change事件",[24,81533,81534],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[24,81536,81537],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[24,81539,81540],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[146,81542,81544],{"className":69196,"code":81543,"language":69198,"meta":39,"style":39},"\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",[152,81545,81546,81556,81570,81574,81582,81596,81616,81628,81636,81640,81648,81662,81670,81688,81706,81718,81722,81730,81738,81742],{"__ignoreMap":39},[155,81547,81548,81550,81552,81554],{"class":157,"line":158},[155,81549,69860],{"class":171},[155,81551,69864],{"class":69863},[155,81553,69867],{"class":226},[155,81555,69870],{"class":171},[155,81557,81558,81560,81562,81564,81566,81568],{"class":157,"line":46},[155,81559,20959],{"class":171},[155,81561,69198],{"class":69863},[155,81563,69879],{"class":226},[155,81565,317],{"class":171},[155,81567,69884],{"class":732},[155,81569,69870],{"class":171},[155,81571,81572],{"class":157,"line":121},[155,81573,217],{"emptyLinePlaceholder":216},[155,81575,81576,81578,81580],{"class":157,"line":180},[155,81577,20959],{"class":171},[155,81579,69897],{"class":69863},[155,81581,69870],{"class":171},[155,81583,81584,81586,81588,81590,81592,81594],{"class":157,"line":194},[155,81585,70707],{"class":171},[155,81587,69907],{"class":69863},[155,81589,69910],{"class":226},[155,81591,317],{"class":171},[155,81593,69915],{"class":732},[155,81595,69870],{"class":171},[155,81597,81598,81600,81602,81604,81606,81608,81610,81612,81614],{"class":157,"line":200},[155,81599,70707],{"class":171},[155,81601,69907],{"class":69863},[155,81603,34745],{"class":226},[155,81605,317],{"class":171},[155,81607,69954],{"class":732},[155,81609,69934],{"class":226},[155,81611,317],{"class":171},[155,81613,69961],{"class":732},[155,81615,69870],{"class":171},[155,81617,81618,81620,81622,81624,81626],{"class":157,"line":213},[155,81619,70707],{"class":171},[155,81621,69970],{"class":69863},[155,81623,69973],{"class":171},[155,81625,69970],{"class":69863},[155,81627,69870],{"class":171},[155,81629,81630,81632,81634],{"class":157,"line":220},[155,81631,70348],{"class":171},[155,81633,69897],{"class":69863},[155,81635,69870],{"class":171},[155,81637,81638],{"class":157,"line":245},[155,81639,217],{"emptyLinePlaceholder":216},[155,81641,81642,81644,81646],{"class":157,"line":251},[155,81643,20959],{"class":171},[155,81645,70363],{"class":69863},[155,81647,69870],{"class":171},[155,81649,81650,81652,81654,81656,81658,81660],{"class":157,"line":257},[155,81651,70707],{"class":171},[155,81653,72384],{"class":69863},[155,81655,72387],{"class":226},[155,81657,317],{"class":171},[155,81659,81262],{"class":732},[155,81661,69870],{"class":171},[155,81663,81664,81666,81668],{"class":157,"line":270},[155,81665,70707],{"class":171},[155,81667,70376],{"class":69863},[155,81669,69870],{"class":171},[155,81671,81672,81674,81676,81678,81680,81682,81684,81686],{"class":157,"line":276},[155,81673,31049],{"class":167},[155,81675,79168],{"class":263},[155,81677,33391],{"class":167},[155,81679,72959],{"class":171},[155,81681,72962],{"class":226},[155,81683,230],{"class":171},[155,81685,81445],{"class":732},[155,81687,363],{"class":171},[155,81689,81690,81693,81695,81697,81700,81702,81704],{"class":157,"line":297},[155,81691,81692],{"class":171},"    input.",[155,81694,76376],{"class":226},[155,81696,230],{"class":171},[155,81698,81699],{"class":732},"'change'",[155,81701,7589],{"class":171},[155,81703,73012],{"class":167},[155,81705,73015],{"class":171},[155,81707,81708,81710,81712,81714,81716],{"class":157,"line":302},[155,81709,76807],{"class":171},[155,81711,76810],{"class":226},[155,81713,230],{"class":171},[155,81715,20655],{"class":263},[155,81717,363],{"class":171},[155,81719,81720],{"class":157,"line":308},[155,81721,3065],{"class":171},[155,81723,81724,81726,81728],{"class":157,"line":366},[155,81725,70980],{"class":171},[155,81727,70376],{"class":69863},[155,81729,69870],{"class":171},[155,81731,81732,81734,81736],{"class":157,"line":379},[155,81733,70348],{"class":171},[155,81735,70363],{"class":69863},[155,81737,69870],{"class":171},[155,81739,81740],{"class":157,"line":385},[155,81741,217],{"emptyLinePlaceholder":216},[155,81743,81744,81746,81748],{"class":157,"line":415},[155,81745,70348],{"class":171},[155,81747,69198],{"class":69863},[155,81749,69870],{"class":171},[24,81751,81752],{},"总结：内容发生改变才回去触发",[14,81754,81756],{"id":81755},"_326-事件对象","3.2.6 事件对象",[19,81758,81760],{"id":81759},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[24,81762,81763],{},[37,81764],{"alt":39,"src":81765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[24,81767,81768],{},[37,81769],{"alt":39,"src":81770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[24,81772,81773],{},"点击一次，就输出了事件对象，它是个对象",[24,81775,81776],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[24,81778,81779],{},[37,81780],{"alt":39,"src":81781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[19,81783,81785],{"id":81784},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[24,81787,81788],{},[37,81789],{"alt":39,"src":81790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[24,81792,81793],{},"实现按特殊字符才是实现打印输出效果：",[146,81795,81797],{"className":71630,"code":81796,"language":71632,"meta":39,"style":39},"\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",[152,81798,81799,81807,81812,81826,81834,81839,81844,81849,81854,81859,81864,81869,81874,81879,81883,81887,81895],{"__ignoreMap":39},[155,81800,81801,81803,81805],{"class":157,"line":158},[155,81802,20959],{"class":171},[155,81804,70363],{"class":69863},[155,81806,69870],{"class":171},[155,81808,81809],{"class":157,"line":46},[155,81810,81811],{"class":161},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[155,81813,81814,81816,81818,81820,81822,81824],{"class":157,"line":121},[155,81815,70707],{"class":171},[155,81817,72384],{"class":69863},[155,81819,72387],{"class":226},[155,81821,317],{"class":171},[155,81823,81262],{"class":732},[155,81825,69870],{"class":171},[155,81827,81828,81830,81832],{"class":157,"line":180},[155,81829,70707],{"class":171},[155,81831,70376],{"class":69863},[155,81833,69870],{"class":171},[155,81835,81836],{"class":157,"line":194},[155,81837,81838],{"class":171},"    \u002F\u002F const btn = document.querySelector('button')\n",[155,81840,81841],{"class":157,"line":200},[155,81842,81843],{"class":171},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[155,81845,81846],{"class":157,"line":213},[155,81847,81848],{"class":171},"    \u002F\u002F   console.log(e);\n",[155,81850,81851],{"class":157,"line":220},[155,81852,81853],{"class":171},"    \u002F\u002F })\n",[155,81855,81856],{"class":157,"line":245},[155,81857,81858],{"class":171},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[155,81860,81861],{"class":157,"line":251},[155,81862,81863],{"class":171},"    const input = document.querySelector('input')\n",[155,81865,81866],{"class":157,"line":257},[155,81867,81868],{"class":171},"    input.addEventListener('keyup', function (e) {\n",[155,81870,81871],{"class":157,"line":270},[155,81872,81873],{"class":171},"      if (e.key === 'Enter') {\n",[155,81875,81876],{"class":157,"line":276},[155,81877,81878],{"class":171},"        console.log('我按下了回车键')\n",[155,81880,81881],{"class":157,"line":297},[155,81882,70961],{"class":171},[155,81884,81885],{"class":157,"line":302},[155,81886,3065],{"class":171},[155,81888,81889,81891,81893],{"class":157,"line":308},[155,81890,70980],{"class":171},[155,81892,70376],{"class":69863},[155,81894,69870],{"class":171},[155,81896,81897,81899,81901],{"class":157,"line":366},[155,81898,70348],{"class":171},[155,81900,70363],{"class":69863},[155,81902,69870],{"class":171},[19,81904,81906],{"id":81905},"_3263-trim方法","3.2.6.3 trim方法",[24,81908,81909],{},[37,81910],{"alt":39,"src":81911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[24,81913,81914],{},[37,81915],{"alt":39,"src":81916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[24,81918,81919],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[24,81921,81922],{},"str.trim()",[14,81924,81926],{"id":81925},"_327-环境对象","3.2.7 环境对象",[24,81928,81929],{},[37,81930],{"alt":39,"src":81931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[24,81933,81934],{},[37,81935],{"alt":39,"src":81936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[24,81938,81939],{},[37,81940],{"alt":39,"src":81941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[24,81943,81944],{},"实际函数调用是window.fn()",[24,81946,81947],{},"普通函数里面this指向的是window",[21052,81949,81950,81953,81956],{},[31,81951,81952],{},"在普通函数下，this指向的是window",[31,81954,81955],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[31,81957,81958],{},"箭头函数没有this",[24,81960,81961],{},"粗略记法就是：谁调用，this就指向谁",[24,81963,81964],{},[37,81965],{"alt":39,"src":81966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[24,81968,81969],{},[37,81970],{"alt":39,"src":81971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[24,81973,81974],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[24,81976,81977],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[146,81979,81981],{"className":71630,"code":81980,"language":71632,"meta":39,"style":39},"\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",[152,81982,81983,81991,82003,82011,82016,82021,82026,82031,82035,82043],{"__ignoreMap":39},[155,81984,81985,81987,81989],{"class":157,"line":158},[155,81986,20959],{"class":171},[155,81988,70363],{"class":69863},[155,81990,69870],{"class":171},[155,81992,81993,81995,81997,81999,82001],{"class":157,"line":46},[155,81994,70707],{"class":171},[155,81996,72450],{"class":69863},[155,81998,72456],{"class":171},[155,82000,72450],{"class":69863},[155,82002,69870],{"class":171},[155,82004,82005,82007,82009],{"class":157,"line":121},[155,82006,70707],{"class":171},[155,82008,70376],{"class":69863},[155,82010,69870],{"class":171},[155,82012,82013],{"class":157,"line":180},[155,82014,82015],{"class":171},"    const button = document.querySelector('button')\n",[155,82017,82018],{"class":157,"line":194},[155,82019,82020],{"class":171},"    button.addEventListener('click', function () {\n",[155,82022,82023],{"class":157,"line":200},[155,82024,82025],{"class":171},"      \u002F\u002F console.log(this);\n",[155,82027,82028],{"class":157,"line":213},[155,82029,82030],{"class":171},"      this.style.color = 'pink'\n",[155,82032,82033],{"class":157,"line":220},[155,82034,3065],{"class":171},[155,82036,82037,82039,82041],{"class":157,"line":245},[155,82038,70980],{"class":171},[155,82040,70376],{"class":69863},[155,82042,69870],{"class":171},[155,82044,82045,82047,82049],{"class":157,"line":251},[155,82046,70348],{"class":171},[155,82048,70363],{"class":69863},[155,82050,69870],{"class":171},[14,82052,82054],{"id":82053},"_328-回调函数","3.2.8 回调函数",[24,82056,82057],{},[37,82058],{"alt":39,"src":82059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[24,82061,82062],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[24,82064,31160],{},[21052,82066,82067,82070,82073],{},[31,82068,82069],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[31,82071,82072],{},"回调函数本质还是函数，只不过把它当成参数使用",[31,82074,82075],{},"使用匿名函数做为回调函数比较常见",[14,82077,82079],{"id":82078},"_329-tab栏切换","3.2.9 tab栏切换",[24,82081,82082],{},[37,82083],{"alt":39,"src":82084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[146,82086,82088],{"className":69196,"code":82087,"language":69198,"meta":39,"style":39},"\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",[152,82089,82090,82100,82114,82118,82126,82140,82160,82180,82193,82201,82207,82217,82227,82231,82235,82242,82255,82268,82280,82296,82300,82304,82311,82323,82335,82347,82357,82367,82371,82375,82384,82396,82407,82419,82423,82427,82435,82445,82455,82465,82469,82473,82483,82497,82509,82513,82517,82529,82540,82557,82567,82571,82575,82590,82601,82611,82615,82619,82626,82641,82645,82649,82657,82667,82671,82675,82684,82694,82698,82706,82714,82718,82726,82741,82756,82769,82777,82811,82838,82865,82892,82919,82927,82935,82950,82987,83022,83057,83092,83127,83135,83143,83151,83156,83161,83181,83186,83215,83220,83225,83243,83248,83253,83258,83280,83285,83301,83305,83310,83315,83336,83341,83370,83374,83379,83383,83391,83399,83403],{"__ignoreMap":39},[155,82091,82092,82094,82096,82098],{"class":157,"line":158},[155,82093,69860],{"class":171},[155,82095,69864],{"class":69863},[155,82097,69867],{"class":226},[155,82099,69870],{"class":171},[155,82101,82102,82104,82106,82108,82110,82112],{"class":157,"line":46},[155,82103,20959],{"class":171},[155,82105,69198],{"class":69863},[155,82107,69879],{"class":226},[155,82109,317],{"class":171},[155,82111,69884],{"class":732},[155,82113,69870],{"class":171},[155,82115,82116],{"class":157,"line":121},[155,82117,217],{"emptyLinePlaceholder":216},[155,82119,82120,82122,82124],{"class":157,"line":180},[155,82121,20959],{"class":171},[155,82123,69897],{"class":69863},[155,82125,69870],{"class":171},[155,82127,82128,82130,82132,82134,82136,82138],{"class":157,"line":194},[155,82129,70707],{"class":171},[155,82131,69907],{"class":69863},[155,82133,69910],{"class":226},[155,82135,317],{"class":171},[155,82137,69915],{"class":732},[155,82139,77690],{"class":171},[155,82141,82142,82144,82146,82148,82150,82152,82154,82156,82158],{"class":157,"line":200},[155,82143,70707],{"class":171},[155,82145,69907],{"class":69863},[155,82147,69926],{"class":226},[155,82149,317],{"class":171},[155,82151,69931],{"class":732},[155,82153,69934],{"class":226},[155,82155,317],{"class":171},[155,82157,69939],{"class":732},[155,82159,77690],{"class":171},[155,82161,82162,82164,82166,82168,82170,82172,82174,82176,82178],{"class":157,"line":213},[155,82163,70707],{"class":171},[155,82165,69907],{"class":69863},[155,82167,34745],{"class":226},[155,82169,317],{"class":171},[155,82171,69954],{"class":732},[155,82173,69934],{"class":226},[155,82175,317],{"class":171},[155,82177,69961],{"class":732},[155,82179,77690],{"class":171},[155,82181,82182,82184,82186,82189,82191],{"class":157,"line":220},[155,82183,70707],{"class":171},[155,82185,69970],{"class":69863},[155,82187,82188],{"class":171},">tab栏切换\u003C\u002F",[155,82190,69970],{"class":69863},[155,82192,69870],{"class":171},[155,82194,82195,82197,82199],{"class":157,"line":245},[155,82196,70707],{"class":171},[155,82198,20011],{"class":69863},[155,82200,69870],{"class":171},[155,82202,82203,82205],{"class":157,"line":251},[155,82204,26266],{"class":69863},[155,82206,35397],{"class":171},[155,82208,82209,82211,82213,82215],{"class":157,"line":257},[155,82210,73269],{"class":263},[155,82212,70000],{"class":171},[155,82214,1109],{"class":263},[155,82216,21206],{"class":171},[155,82218,82219,82221,82223,82225],{"class":157,"line":270},[155,82220,73258],{"class":263},[155,82222,70000],{"class":171},[155,82224,1109],{"class":263},[155,82226,21206],{"class":171},[155,82228,82229],{"class":157,"line":276},[155,82230,22074],{"class":171},[155,82232,82233],{"class":157,"line":297},[155,82234,217],{"emptyLinePlaceholder":216},[155,82236,82237,82240],{"class":157,"line":302},[155,82238,82239],{"class":226},"    .tab",[155,82241,35397],{"class":171},[155,82243,82244,82246,82248,82251,82253],{"class":157,"line":308},[155,82245,73334],{"class":263},[155,82247,70000],{"class":171},[155,82249,82250],{"class":263},"590",[155,82252,70055],{"class":167},[155,82254,21206],{"class":171},[155,82256,82257,82259,82261,82264,82266],{"class":157,"line":366},[155,82258,73348],{"class":263},[155,82260,70000],{"class":171},[155,82262,82263],{"class":263},"340",[155,82265,70055],{"class":167},[155,82267,21206],{"class":171},[155,82269,82270,82272,82274,82276,82278],{"class":157,"line":379},[155,82271,73269],{"class":263},[155,82273,70000],{"class":171},[155,82275,3458],{"class":263},[155,82277,70055],{"class":167},[155,82279,21206],{"class":171},[155,82281,82282,82284,82286,82288,82290,82292,82294],{"class":157,"line":385},[155,82283,80540],{"class":263},[155,82285,70000],{"class":171},[155,82287,329],{"class":263},[155,82289,70055],{"class":167},[155,82291,70084],{"class":263},[155,82293,80807],{"class":263},[155,82295,21206],{"class":171},[155,82297,82298],{"class":157,"line":415},[155,82299,22074],{"class":171},[155,82301,82302],{"class":157,"line":452},[155,82303,217],{"emptyLinePlaceholder":216},[155,82305,82306,82309],{"class":157,"line":480},[155,82307,82308],{"class":226},"    .tab-nav",[155,82310,35397],{"class":171},[155,82312,82313,82315,82317,82319,82321],{"class":157,"line":486},[155,82314,73334],{"class":263},[155,82316,70000],{"class":171},[155,82318,20389],{"class":263},[155,82320,2938],{"class":167},[155,82322,21206],{"class":171},[155,82324,82325,82327,82329,82331,82333],{"class":157,"line":499},[155,82326,73348],{"class":263},[155,82328,70000],{"class":171},[155,82330,2932],{"class":263},[155,82332,70055],{"class":167},[155,82334,21206],{"class":171},[155,82336,82337,82339,82341,82343,82345],{"class":157,"line":505},[155,82338,75922],{"class":263},[155,82340,70000],{"class":171},[155,82342,2932],{"class":263},[155,82344,70055],{"class":167},[155,82346,21206],{"class":171},[155,82348,82349,82351,82353,82355],{"class":157,"line":528},[155,82350,73572],{"class":263},[155,82352,70000],{"class":171},[155,82354,70040],{"class":263},[155,82356,21206],{"class":171},[155,82358,82359,82361,82363,82365],{"class":157,"line":549},[155,82360,73583],{"class":263},[155,82362,70000],{"class":171},[155,82364,70231],{"class":263},[155,82366,21206],{"class":171},[155,82368,82369],{"class":157,"line":570},[155,82370,22074],{"class":171},[155,82372,82373],{"class":157,"line":575},[155,82374,217],{"emptyLinePlaceholder":216},[155,82376,82377,82379,82382],{"class":157,"line":581},[155,82378,82308],{"class":226},[155,82380,82381],{"class":69863}," h3",[155,82383,35397],{"class":171},[155,82385,82386,82388,82390,82392,82394],{"class":157,"line":592},[155,82387,73485],{"class":263},[155,82389,70000],{"class":171},[155,82391,12010],{"class":263},[155,82393,70055],{"class":167},[155,82395,21206],{"class":171},[155,82397,82398,82400,82402,82405],{"class":157,"line":610},[155,82399,80897],{"class":263},[155,82401,70000],{"class":171},[155,82403,82404],{"class":263},"normal",[155,82406,21206],{"class":171},[155,82408,82409,82411,82413,82415,82417],{"class":157,"line":622},[155,82410,80563],{"class":263},[155,82412,70000],{"class":171},[155,82414,3458],{"class":263},[155,82416,70055],{"class":167},[155,82418,21206],{"class":171},[155,82420,82421],{"class":157,"line":638},[155,82422,22074],{"class":171},[155,82424,82425],{"class":157,"line":650},[155,82426,217],{"emptyLinePlaceholder":216},[155,82428,82429,82431,82433],{"class":157,"line":662},[155,82430,82308],{"class":226},[155,82432,79855],{"class":69863},[155,82434,35397],{"class":171},[155,82436,82437,82439,82441,82443],{"class":157,"line":678},[155,82438,73295],{"class":263},[155,82440,70000],{"class":171},[155,82442,73300],{"class":263},[155,82444,21206],{"class":171},[155,82446,82447,82449,82451,82453],{"class":157,"line":694},[155,82448,73572],{"class":263},[155,82450,70000],{"class":171},[155,82452,70040],{"class":263},[155,82454,21206],{"class":171},[155,82456,82457,82459,82461,82463],{"class":157,"line":706},[155,82458,73583],{"class":263},[155,82460,70000],{"class":171},[155,82462,70143],{"class":263},[155,82464,21206],{"class":171},[155,82466,82467],{"class":157,"line":715},[155,82468,22074],{"class":171},[155,82470,82471],{"class":157,"line":720},[155,82472,217],{"emptyLinePlaceholder":216},[155,82474,82475,82477,82479,82481],{"class":157,"line":739},[155,82476,82308],{"class":226},[155,82478,79855],{"class":69863},[155,82480,73638],{"class":69863},[155,82482,35397],{"class":171},[155,82484,82485,82487,82489,82491,82493,82495],{"class":157,"line":745},[155,82486,73269],{"class":263},[155,82488,70000],{"class":171},[155,82490,1109],{"class":263},[155,82492,28799],{"class":263},[155,82494,70055],{"class":167},[155,82496,21206],{"class":171},[155,82498,82499,82501,82503,82505,82507],{"class":157,"line":773},[155,82500,73485],{"class":263},[155,82502,70000],{"class":171},[155,82504,20613],{"class":263},[155,82506,70055],{"class":167},[155,82508,21206],{"class":171},[155,82510,82511],{"class":157,"line":779},[155,82512,22074],{"class":171},[155,82514,82515],{"class":157,"line":785},[155,82516,217],{"emptyLinePlaceholder":216},[155,82518,82519,82521,82523,82525,82527],{"class":157,"line":791},[155,82520,82308],{"class":226},[155,82522,79855],{"class":69863},[155,82524,73638],{"class":69863},[155,82526,21311],{"class":69863},[155,82528,35397],{"class":171},[155,82530,82531,82534,82536,82538],{"class":157,"line":796},[155,82532,82533],{"class":263},"      text-decoration",[155,82535,70000],{"class":171},[155,82537,73300],{"class":263},[155,82539,21206],{"class":171},[155,82541,82542,82544,82546,82548,82550,82552,82555],{"class":157,"line":802},[155,82543,80795],{"class":263},[155,82545,70000],{"class":171},[155,82547,360],{"class":263},[155,82549,70055],{"class":167},[155,82551,70084],{"class":263},[155,82553,82554],{"class":263}," transparent",[155,82556,21206],{"class":171},[155,82558,82559,82561,82563,82565],{"class":157,"line":808},[155,82560,75979],{"class":263},[155,82562,70000],{"class":171},[155,82564,80932],{"class":263},[155,82566,21206],{"class":171},[155,82568,82569],{"class":157,"line":819},[155,82570,22074],{"class":171},[155,82572,82573],{"class":157,"line":1832},[155,82574,217],{"emptyLinePlaceholder":216},[155,82576,82577,82579,82581,82583,82585,82588],{"class":157,"line":1838},[155,82578,82308],{"class":226},[155,82580,79855],{"class":69863},[155,82582,73638],{"class":69863},[155,82584,21311],{"class":69863},[155,82586,82587],{"class":226},".active",[155,82589,35397],{"class":171},[155,82591,82592,82594,82596,82599],{"class":157,"line":1844},[155,82593,80354],{"class":263},[155,82595,70000],{"class":171},[155,82597,82598],{"class":263},"#e1251b",[155,82600,21206],{"class":171},[155,82602,82603,82605,82607,82609],{"class":157,"line":1850},[155,82604,75979],{"class":263},[155,82606,70000],{"class":171},[155,82608,82598],{"class":263},[155,82610,21206],{"class":171},[155,82612,82613],{"class":157,"line":1861},[155,82614,22074],{"class":171},[155,82616,82617],{"class":157,"line":1866},[155,82618,217],{"emptyLinePlaceholder":216},[155,82620,82621,82624],{"class":157,"line":1871},[155,82622,82623],{"class":226},"    .tab-content",[155,82625,35397],{"class":171},[155,82627,82628,82630,82632,82634,82637,82639],{"class":157,"line":1877},[155,82629,73258],{"class":263},[155,82631,70000],{"class":171},[155,82633,1109],{"class":263},[155,82635,82636],{"class":263}," 16",[155,82638,70055],{"class":167},[155,82640,21206],{"class":171},[155,82642,82643],{"class":157,"line":1883},[155,82644,22074],{"class":171},[155,82646,82647],{"class":157,"line":1894},[155,82648,217],{"emptyLinePlaceholder":216},[155,82650,82651,82653,82655],{"class":157,"line":1900},[155,82652,82623],{"class":226},[155,82654,80737],{"class":226},[155,82656,35397],{"class":171},[155,82658,82659,82661,82663,82665],{"class":157,"line":1911},[155,82660,73572],{"class":263},[155,82662,70000],{"class":171},[155,82664,73300],{"class":263},[155,82666,21206],{"class":171},[155,82668,82669],{"class":157,"line":1917},[155,82670,22074],{"class":171},[155,82672,82673],{"class":157,"line":1927},[155,82674,217],{"emptyLinePlaceholder":216},[155,82676,82677,82679,82682],{"class":157,"line":1933},[155,82678,82623],{"class":226},[155,82680,82681],{"class":226}," .item.active",[155,82683,35397],{"class":171},[155,82685,82686,82688,82690,82692],{"class":157,"line":1943},[155,82687,73572],{"class":263},[155,82689,70000],{"class":171},[155,82691,79432],{"class":263},[155,82693,21206],{"class":171},[155,82695,82696],{"class":157,"line":1949},[155,82697,22074],{"class":171},[155,82699,82700,82702,82704],{"class":157,"line":1959},[155,82701,70980],{"class":171},[155,82703,20011],{"class":69863},[155,82705,69870],{"class":171},[155,82707,82708,82710,82712],{"class":157,"line":1964},[155,82709,70348],{"class":171},[155,82711,69897],{"class":69863},[155,82713,69870],{"class":171},[155,82715,82716],{"class":157,"line":1970},[155,82717,217],{"emptyLinePlaceholder":216},[155,82719,82720,82722,82724],{"class":157,"line":1981},[155,82721,20959],{"class":171},[155,82723,70363],{"class":69863},[155,82725,69870],{"class":171},[155,82727,82728,82730,82732,82734,82736,82739],{"class":157,"line":1986},[155,82729,70707],{"class":171},[155,82731,70174],{"class":69863},[155,82733,72049],{"class":226},[155,82735,317],{"class":171},[155,82737,82738],{"class":732},"\"tab\"",[155,82740,69870],{"class":171},[155,82742,82743,82745,82747,82749,82751,82754],{"class":157,"line":1991},[155,82744,69904],{"class":171},[155,82746,70174],{"class":69863},[155,82748,72049],{"class":226},[155,82750,317],{"class":171},[155,82752,82753],{"class":732},"\"tab-nav\"",[155,82755,69870],{"class":171},[155,82757,82758,82760,82762,82765,82767],{"class":157,"line":1997},[155,82759,73797],{"class":171},[155,82761,14],{"class":69863},[155,82763,82764],{"class":171},">每日特价\u003C\u002F",[155,82766,14],{"class":69863},[155,82768,69870],{"class":171},[155,82770,82771,82773,82775],{"class":157,"line":2014},[155,82772,73797],{"class":171},[155,82774,21052],{"class":69863},[155,82776,69870],{"class":171},[155,82778,82779,82781,82783,82785,82787,82789,82791,82793,82795,82797,82800,82803,82805,82807,82809],{"class":157,"line":2046},[155,82780,73865],{"class":171},[155,82782,31],{"class":69863},[155,82784,79615],{"class":171},[155,82786,20318],{"class":69863},[155,82788,72049],{"class":226},[155,82790,317],{"class":171},[155,82792,78269],{"class":732},[155,82794,79620],{"class":226},[155,82796,317],{"class":171},[155,82798,82799],{"class":732},"\"javascript:;\"",[155,82801,82802],{"class":171},">精选\u003C\u002F",[155,82804,20318],{"class":69863},[155,82806,73877],{"class":171},[155,82808,31],{"class":69863},[155,82810,69870],{"class":171},[155,82812,82813,82815,82817,82819,82821,82823,82825,82827,82830,82832,82834,82836],{"class":157,"line":2062},[155,82814,73865],{"class":171},[155,82816,31],{"class":69863},[155,82818,79615],{"class":171},[155,82820,20318],{"class":69863},[155,82822,79620],{"class":226},[155,82824,317],{"class":171},[155,82826,82799],{"class":732},[155,82828,82829],{"class":171},">美食\u003C\u002F",[155,82831,20318],{"class":69863},[155,82833,73877],{"class":171},[155,82835,31],{"class":69863},[155,82837,69870],{"class":171},[155,82839,82840,82842,82844,82846,82848,82850,82852,82854,82857,82859,82861,82863],{"class":157,"line":2067},[155,82841,73865],{"class":171},[155,82843,31],{"class":69863},[155,82845,79615],{"class":171},[155,82847,20318],{"class":69863},[155,82849,79620],{"class":226},[155,82851,317],{"class":171},[155,82853,82799],{"class":732},[155,82855,82856],{"class":171},">百货\u003C\u002F",[155,82858,20318],{"class":69863},[155,82860,73877],{"class":171},[155,82862,31],{"class":69863},[155,82864,69870],{"class":171},[155,82866,82867,82869,82871,82873,82875,82877,82879,82881,82884,82886,82888,82890],{"class":157,"line":2073},[155,82868,73865],{"class":171},[155,82870,31],{"class":69863},[155,82872,79615],{"class":171},[155,82874,20318],{"class":69863},[155,82876,79620],{"class":226},[155,82878,317],{"class":171},[155,82880,82799],{"class":732},[155,82882,82883],{"class":171},">个护\u003C\u002F",[155,82885,20318],{"class":69863},[155,82887,73877],{"class":171},[155,82889,31],{"class":69863},[155,82891,69870],{"class":171},[155,82893,82894,82896,82898,82900,82902,82904,82906,82908,82911,82913,82915,82917],{"class":157,"line":2079},[155,82895,73865],{"class":171},[155,82897,31],{"class":69863},[155,82899,79615],{"class":171},[155,82901,20318],{"class":69863},[155,82903,79620],{"class":226},[155,82905,317],{"class":171},[155,82907,82799],{"class":732},[155,82909,82910],{"class":171},">预告\u003C\u002F",[155,82912,20318],{"class":69863},[155,82914,73877],{"class":171},[155,82916,31],{"class":69863},[155,82918,69870],{"class":171},[155,82920,82921,82923,82925],{"class":157,"line":2089},[155,82922,73970],{"class":171},[155,82924,21052],{"class":69863},[155,82926,69870],{"class":171},[155,82928,82929,82931,82933],{"class":157,"line":2095},[155,82930,70339],{"class":171},[155,82932,70174],{"class":69863},[155,82934,69870],{"class":171},[155,82936,82937,82939,82941,82943,82945,82948],{"class":157,"line":2106},[155,82938,69904],{"class":171},[155,82940,70174],{"class":69863},[155,82942,72049],{"class":226},[155,82944,317],{"class":171},[155,82946,82947],{"class":732},"\"tab-content\"",[155,82949,69870],{"class":171},[155,82951,82952,82954,82956,82958,82960,82963,82965,82967,82969,82971,82974,82976,82978,82980,82983,82985],{"class":157,"line":2112},[155,82953,73797],{"class":171},[155,82955,70174],{"class":69863},[155,82957,72049],{"class":226},[155,82959,317],{"class":171},[155,82961,82962],{"class":732},"\"item active\"",[155,82964,79615],{"class":171},[155,82966,37],{"class":69863},[155,82968,73802],{"class":226},[155,82970,317],{"class":171},[155,82972,82973],{"class":732},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[155,82975,73810],{"class":226},[155,82977,317],{"class":171},[155,82979,15430],{"class":732},[155,82981,82982],{"class":171}," \u002F>\u003C\u002F",[155,82984,70174],{"class":69863},[155,82986,69870],{"class":171},[155,82988,82989,82991,82993,82995,82997,82999,83001,83003,83005,83007,83010,83012,83014,83016,83018,83020],{"class":157,"line":2122},[155,82990,73797],{"class":171},[155,82992,70174],{"class":69863},[155,82994,72049],{"class":226},[155,82996,317],{"class":171},[155,82998,81186],{"class":732},[155,83000,79615],{"class":171},[155,83002,37],{"class":69863},[155,83004,73802],{"class":226},[155,83006,317],{"class":171},[155,83008,83009],{"class":732},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[155,83011,73810],{"class":226},[155,83013,317],{"class":171},[155,83015,15430],{"class":732},[155,83017,82982],{"class":171},[155,83019,70174],{"class":69863},[155,83021,69870],{"class":171},[155,83023,83024,83026,83028,83030,83032,83034,83036,83038,83040,83042,83045,83047,83049,83051,83053,83055],{"class":157,"line":2128},[155,83025,73797],{"class":171},[155,83027,70174],{"class":69863},[155,83029,72049],{"class":226},[155,83031,317],{"class":171},[155,83033,81186],{"class":732},[155,83035,79615],{"class":171},[155,83037,37],{"class":69863},[155,83039,73802],{"class":226},[155,83041,317],{"class":171},[155,83043,83044],{"class":732},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[155,83046,73810],{"class":226},[155,83048,317],{"class":171},[155,83050,15430],{"class":732},[155,83052,82982],{"class":171},[155,83054,70174],{"class":69863},[155,83056,69870],{"class":171},[155,83058,83059,83061,83063,83065,83067,83069,83071,83073,83075,83077,83080,83082,83084,83086,83088,83090],{"class":157,"line":2138},[155,83060,73797],{"class":171},[155,83062,70174],{"class":69863},[155,83064,72049],{"class":226},[155,83066,317],{"class":171},[155,83068,81186],{"class":732},[155,83070,79615],{"class":171},[155,83072,37],{"class":69863},[155,83074,73802],{"class":226},[155,83076,317],{"class":171},[155,83078,83079],{"class":732},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[155,83081,73810],{"class":226},[155,83083,317],{"class":171},[155,83085,15430],{"class":732},[155,83087,82982],{"class":171},[155,83089,70174],{"class":69863},[155,83091,69870],{"class":171},[155,83093,83094,83096,83098,83100,83102,83104,83106,83108,83110,83112,83115,83117,83119,83121,83123,83125],{"class":157,"line":2144},[155,83095,73797],{"class":171},[155,83097,70174],{"class":69863},[155,83099,72049],{"class":226},[155,83101,317],{"class":171},[155,83103,81186],{"class":732},[155,83105,79615],{"class":171},[155,83107,37],{"class":69863},[155,83109,73802],{"class":226},[155,83111,317],{"class":171},[155,83113,83114],{"class":732},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[155,83116,73810],{"class":226},[155,83118,317],{"class":171},[155,83120,15430],{"class":732},[155,83122,82982],{"class":171},[155,83124,70174],{"class":69863},[155,83126,69870],{"class":171},[155,83128,83129,83131,83133],{"class":157,"line":2154},[155,83130,70339],{"class":171},[155,83132,70174],{"class":69863},[155,83134,69870],{"class":171},[155,83136,83137,83139,83141],{"class":157,"line":2160},[155,83138,70980],{"class":171},[155,83140,70174],{"class":69863},[155,83142,69870],{"class":171},[155,83144,83145,83147,83149],{"class":157,"line":2170},[155,83146,70707],{"class":171},[155,83148,70376],{"class":69863},[155,83150,69870],{"class":171},[155,83152,83153],{"class":157,"line":2176},[155,83154,83155],{"class":161},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[155,83157,83158],{"class":157,"line":2191},[155,83159,83160],{"class":161},"    \u002F\u002F 1.1 获取 a 元素 \n",[155,83162,83163,83165,83168,83170,83172,83174,83176,83179],{"class":157,"line":2197},[155,83164,31049],{"class":167},[155,83166,83167],{"class":263}," as",[155,83169,33391],{"class":167},[155,83171,72959],{"class":171},[155,83173,74244],{"class":226},[155,83175,230],{"class":171},[155,83177,83178],{"class":732},"'.tab-nav a'",[155,83180,363],{"class":171},[155,83182,83183],{"class":157,"line":2208},[155,83184,83185],{"class":161},"    \u002F\u002F console.log(as) \n",[155,83187,83188,83190,83192,83194,83196,83198,83200,83202,83204,83207,83209,83211,83213],{"class":157,"line":2214},[155,83189,2000],{"class":167},[155,83191,21561],{"class":171},[155,83193,70410],{"class":167},[155,83195,29287],{"class":171},[155,83197,317],{"class":167},[155,83199,1151],{"class":263},[155,83201,29294],{"class":171},[155,83203,20959],{"class":167},[155,83205,83206],{"class":171}," as.",[155,83208,70531],{"class":263},[155,83210,23086],{"class":171},[155,83212,22179],{"class":167},[155,83214,32269],{"class":171},[155,83216,83217],{"class":157,"line":2225},[155,83218,83219],{"class":161},"      \u002F\u002F console.log(as[i])\n",[155,83221,83222],{"class":157,"line":2231},[155,83223,83224],{"class":161},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[155,83226,83227,83230,83232,83234,83237,83239,83241],{"class":157,"line":2237},[155,83228,83229],{"class":171},"      as[i].",[155,83231,76376],{"class":226},[155,83233,230],{"class":171},[155,83235,83236],{"class":732},"'mouseenter'",[155,83238,7589],{"class":171},[155,83240,73012],{"class":167},[155,83242,73015],{"class":171},[155,83244,83245],{"class":157,"line":2243},[155,83246,83247],{"class":161},"        \u002F\u002F console.log('鼠标经过')\n",[155,83249,83250],{"class":157,"line":2249},[155,83251,83252],{"class":161},"        \u002F\u002F 排他思想  \n",[155,83254,83255],{"class":157,"line":2260},[155,83256,83257],{"class":161},"        \u002F\u002F 干掉别人 移除类active\n",[155,83259,83260,83262,83264,83266,83269,83271,83273,83275,83278],{"class":157,"line":2266},[155,83261,70488],{"class":171},[155,83263,72962],{"class":226},[155,83265,230],{"class":171},[155,83267,83268],{"class":732},"'.tab-nav .active'",[155,83270,75566],{"class":171},[155,83272,75569],{"class":226},[155,83274,230],{"class":171},[155,83276,83277],{"class":732},"'active'",[155,83279,363],{"class":171},[155,83281,83282],{"class":157,"line":2286},[155,83283,83284],{"class":161},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[155,83286,83287,83290,83293,83295,83297,83299],{"class":157,"line":2292},[155,83288,83289],{"class":263},"        this",[155,83291,83292],{"class":171},".classList.",[155,83294,25197],{"class":226},[155,83296,230],{"class":171},[155,83298,83277],{"class":732},[155,83300,363],{"class":171},[155,83302,83303],{"class":157,"line":2303},[155,83304,217],{"emptyLinePlaceholder":216},[155,83306,83307],{"class":157,"line":2309},[155,83308,83309],{"class":161},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[155,83311,83312],{"class":157,"line":2315},[155,83313,83314],{"class":161},"        \u002F\u002F 干掉别人\n",[155,83316,83317,83319,83321,83323,83326,83328,83330,83332,83334],{"class":157,"line":2321},[155,83318,70488],{"class":171},[155,83320,72962],{"class":226},[155,83322,230],{"class":171},[155,83324,83325],{"class":732},"'.tab-content .active'",[155,83327,75566],{"class":171},[155,83329,75569],{"class":226},[155,83331,230],{"class":171},[155,83333,83277],{"class":732},[155,83335,363],{"class":171},[155,83337,83338],{"class":157,"line":2327},[155,83339,83340],{"class":161},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[155,83342,83343,83345,83347,83349,83352,83354,83356,83358,83360,83362,83364,83366,83368],{"class":157,"line":2333},[155,83344,70488],{"class":171},[155,83346,72962],{"class":226},[155,83348,230],{"class":171},[155,83350,83351],{"class":732},"`.tab-content .item:nth-child(${",[155,83353,20513],{"class":171},[155,83355,15186],{"class":167},[155,83357,1277],{"class":263},[155,83359,75595],{"class":732},[155,83361,75566],{"class":171},[155,83363,25197],{"class":226},[155,83365,230],{"class":171},[155,83367,83277],{"class":732},[155,83369,363],{"class":171},[155,83371,83372],{"class":157,"line":2339},[155,83373,217],{"emptyLinePlaceholder":216},[155,83375,83376],{"class":157,"line":2345},[155,83377,83378],{"class":171},"      })\n",[155,83380,83381],{"class":157,"line":2366},[155,83382,22074],{"class":171},[155,83384,83385,83387,83389],{"class":157,"line":2372},[155,83386,70980],{"class":171},[155,83388,70376],{"class":69863},[155,83390,69870],{"class":171},[155,83392,83393,83395,83397],{"class":157,"line":2388},[155,83394,70348],{"class":171},[155,83396,70363],{"class":69863},[155,83398,69870],{"class":171},[155,83400,83401],{"class":157,"line":2394},[155,83402,217],{"emptyLinePlaceholder":216},[155,83404,83405,83407,83409],{"class":157,"line":2408},[155,83406,70348],{"class":171},[155,83408,69198],{"class":69863},[155,83410,69870],{"class":171},[24,83412,83413],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[24,83415,83416],{},"在监听事件中，this指向的就是他的调用者",[24,83418,83419],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[24,83421,72283],{},[24,83423,83424],{},"(function () {",[24,83426,83427],{},"const list = document.querySelector('.xtx-elevator-list')",[24,83429,83430],{},"list.addEventListener('click', function (e) {",[24,83432,83433],{},"if (e.target.tagName === 'A') {",[24,83435,83436],{},"\u002F\u002F 排他思想",[24,83438,83439],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[24,83441,83442],{},"const old = document.querySelector('.xtx-elevator-list .active')",[24,83444,83445],{},"\u002F\u002F console.log(old);",[24,83447,83448],{},"\u002F\u002F 判断",[24,83450,83451],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[24,83453,83454],{},"if (old) old.classList.remove('active')",[24,83456,83457],{},"e.target.classList.add('active')",[24,83459,2711],{},[24,83461,71027],{},[24,83463,83464],{},"})();",[14,83466,83468],{"id":83467},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[146,83470,83472],{"className":69196,"code":83471,"language":69198,"meta":39,"style":39},"\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",[152,83473,83474,83484,83488,83496,83500,83514,83528,83540,83548,83554,83564,83574,83578,83582,83589,83601,83612,83629,83642,83656,83666,83670,83674,83681,83692,83710,83720,83732,83736,83740,83747,83764,83775,83787,83791,83795,83802,83814,83818,83826,83834,83838,83846,83854,83862,83877,83921,83929,83942,83955,83968,83976,83984,83992,84020,84028,84040,84053,84066,84074,84082,84090,84116,84124,84137,84149,84162,84170,84178,84186,84212,84220,84233,84245,84258,84266,84274,84282,84287,84307,84312,84332,84337,84354,84359,84367,84372,84401,84414,84418,84422,84427,84431,84459,84464,84481,84486,84491,84496,84501,84527,84531,84535,84543,84551,84555],{"__ignoreMap":39},[155,83475,83476,83478,83480,83482],{"class":157,"line":158},[155,83477,69860],{"class":171},[155,83479,69864],{"class":69863},[155,83481,69867],{"class":226},[155,83483,69870],{"class":171},[155,83485,83486],{"class":157,"line":46},[155,83487,217],{"emptyLinePlaceholder":216},[155,83489,83490,83492,83494],{"class":157,"line":121},[155,83491,20959],{"class":171},[155,83493,69198],{"class":69863},[155,83495,69870],{"class":171},[155,83497,83498],{"class":157,"line":180},[155,83499,217],{"emptyLinePlaceholder":216},[155,83501,83502,83504,83506,83508,83510,83512],{"class":157,"line":194},[155,83503,20959],{"class":171},[155,83505,69897],{"class":69863},[155,83507,69879],{"class":226},[155,83509,317],{"class":171},[155,83511,69884],{"class":732},[155,83513,69870],{"class":171},[155,83515,83516,83518,83520,83522,83524,83526],{"class":157,"line":200},[155,83517,70707],{"class":171},[155,83519,69907],{"class":69863},[155,83521,69910],{"class":226},[155,83523,317],{"class":171},[155,83525,69915],{"class":732},[155,83527,69870],{"class":171},[155,83529,83530,83532,83534,83536,83538],{"class":157,"line":213},[155,83531,70707],{"class":171},[155,83533,69970],{"class":69863},[155,83535,73877],{"class":171},[155,83537,69970],{"class":69863},[155,83539,69870],{"class":171},[155,83541,83542,83544,83546],{"class":157,"line":220},[155,83543,70707],{"class":171},[155,83545,20011],{"class":69863},[155,83547,69870],{"class":171},[155,83549,83550,83552],{"class":157,"line":245},[155,83551,26266],{"class":69863},[155,83553,35397],{"class":171},[155,83555,83556,83558,83560,83562],{"class":157,"line":251},[155,83557,73269],{"class":263},[155,83559,70000],{"class":171},[155,83561,1109],{"class":263},[155,83563,21206],{"class":171},[155,83565,83566,83568,83570,83572],{"class":157,"line":257},[155,83567,73258],{"class":263},[155,83569,70000],{"class":171},[155,83571,1109],{"class":263},[155,83573,21206],{"class":171},[155,83575,83576],{"class":157,"line":270},[155,83577,22074],{"class":171},[155,83579,83580],{"class":157,"line":276},[155,83581,217],{"emptyLinePlaceholder":216},[155,83583,83584,83587],{"class":157,"line":297},[155,83585,83586],{"class":69863},"    table",[155,83588,35397],{"class":171},[155,83590,83591,83594,83596,83599],{"class":157,"line":302},[155,83592,83593],{"class":263},"      border-collapse",[155,83595,70000],{"class":171},[155,83597,83598],{"class":263},"collapse",[155,83600,21206],{"class":171},[155,83602,83603,83606,83608,83610],{"class":157,"line":308},[155,83604,83605],{"class":263},"      border-spacing",[155,83607,70000],{"class":171},[155,83609,1109],{"class":263},[155,83611,21206],{"class":171},[155,83613,83614,83616,83618,83620,83622,83624,83627],{"class":157,"line":366},[155,83615,80540],{"class":263},[155,83617,70000],{"class":171},[155,83619,329],{"class":263},[155,83621,70055],{"class":167},[155,83623,70084],{"class":263},[155,83625,83626],{"class":263}," #c0c0c0",[155,83628,21206],{"class":171},[155,83630,83631,83633,83635,83638,83640],{"class":157,"line":379},[155,83632,73334],{"class":263},[155,83634,70000],{"class":171},[155,83636,83637],{"class":263},"500",[155,83639,70055],{"class":167},[155,83641,21206],{"class":171},[155,83643,83644,83646,83648,83650,83652,83654],{"class":157,"line":385},[155,83645,73269],{"class":263},[155,83647,70000],{"class":171},[155,83649,20389],{"class":263},[155,83651,70055],{"class":167},[155,83653,70119],{"class":263},[155,83655,21206],{"class":171},[155,83657,83658,83660,83662,83664],{"class":157,"line":415},[155,83659,75849],{"class":263},[155,83661,70000],{"class":171},[155,83663,70155],{"class":263},[155,83665,21206],{"class":171},[155,83667,83668],{"class":157,"line":452},[155,83669,22074],{"class":171},[155,83671,83672],{"class":157,"line":480},[155,83673,217],{"emptyLinePlaceholder":216},[155,83675,83676,83679],{"class":157,"line":486},[155,83677,83678],{"class":69863},"    th",[155,83680,35397],{"class":171},[155,83682,83683,83685,83687,83690],{"class":157,"line":499},[155,83684,73447],{"class":263},[155,83686,70000],{"class":171},[155,83688,83689],{"class":263},"#09c",[155,83691,21206],{"class":171},[155,83693,83694,83697,83699,83701,83703,83705,83708],{"class":157,"line":505},[155,83695,83696],{"class":263},"      font",[155,83698,70000],{"class":171},[155,83700,80902],{"class":263},[155,83702,82636],{"class":263},[155,83704,70055],{"class":167},[155,83706,83707],{"class":732}," \"微软雅黑\"",[155,83709,21206],{"class":171},[155,83711,83712,83714,83716,83718],{"class":157,"line":528},[155,83713,75979],{"class":263},[155,83715,70000],{"class":171},[155,83717,79405],{"class":263},[155,83719,21206],{"class":171},[155,83721,83722,83724,83726,83728,83730],{"class":157,"line":549},[155,83723,73348],{"class":263},[155,83725,70000],{"class":171},[155,83727,12010],{"class":263},[155,83729,70055],{"class":167},[155,83731,21206],{"class":171},[155,83733,83734],{"class":157,"line":570},[155,83735,22074],{"class":171},[155,83737,83738],{"class":157,"line":575},[155,83739,217],{"emptyLinePlaceholder":216},[155,83741,83742,83745],{"class":157,"line":581},[155,83743,83744],{"class":69863},"    td",[155,83746,35397],{"class":171},[155,83748,83749,83751,83753,83755,83757,83759,83762],{"class":157,"line":592},[155,83750,80540],{"class":263},[155,83752,70000],{"class":171},[155,83754,329],{"class":263},[155,83756,70055],{"class":167},[155,83758,70084],{"class":263},[155,83760,83761],{"class":263}," #d0d0d0",[155,83763,21206],{"class":171},[155,83765,83766,83768,83770,83773],{"class":157,"line":610},[155,83767,75979],{"class":263},[155,83769,70000],{"class":171},[155,83771,83772],{"class":263},"#404060",[155,83774,21206],{"class":171},[155,83776,83777,83779,83781,83783,83785],{"class":157,"line":622},[155,83778,73258],{"class":263},[155,83780,70000],{"class":171},[155,83782,565],{"class":263},[155,83784,70055],{"class":167},[155,83786,21206],{"class":171},[155,83788,83789],{"class":157,"line":638},[155,83790,22074],{"class":171},[155,83792,83793],{"class":157,"line":650},[155,83794,217],{"emptyLinePlaceholder":216},[155,83796,83797,83800],{"class":157,"line":662},[155,83798,83799],{"class":226},"    .allCheck",[155,83801,35397],{"class":171},[155,83803,83804,83806,83808,83810,83812],{"class":157,"line":678},[155,83805,73334],{"class":263},[155,83807,70000],{"class":171},[155,83809,20672],{"class":263},[155,83811,70055],{"class":167},[155,83813,21206],{"class":171},[155,83815,83816],{"class":157,"line":694},[155,83817,22074],{"class":171},[155,83819,83820,83822,83824],{"class":157,"line":706},[155,83821,70980],{"class":171},[155,83823,20011],{"class":69863},[155,83825,69870],{"class":171},[155,83827,83828,83830,83832],{"class":157,"line":715},[155,83829,70348],{"class":171},[155,83831,69897],{"class":69863},[155,83833,69870],{"class":171},[155,83835,83836],{"class":157,"line":720},[155,83837,217],{"emptyLinePlaceholder":216},[155,83839,83840,83842,83844],{"class":157,"line":739},[155,83841,20959],{"class":171},[155,83843,70363],{"class":69863},[155,83845,69870],{"class":171},[155,83847,83848,83850,83852],{"class":157,"line":745},[155,83849,70707],{"class":171},[155,83851,20222],{"class":69863},[155,83853,69870],{"class":171},[155,83855,83856,83858,83860],{"class":157,"line":773},[155,83857,69904],{"class":171},[155,83859,20228],{"class":69863},[155,83861,69870],{"class":171},[155,83863,83864,83866,83868,83870,83872,83875],{"class":157,"line":779},[155,83865,73797],{"class":171},[155,83867,20231],{"class":69863},[155,83869,72049],{"class":226},[155,83871,317],{"class":171},[155,83873,83874],{"class":732},"\"allCheck\"",[155,83876,69870],{"class":171},[155,83878,83879,83881,83883,83885,83887,83889,83891,83893,83895,83897,83899,83902,83905,83907,83909,83911,83914,83917,83919],{"class":157,"line":785},[155,83880,73865],{"class":171},[155,83882,72384],{"class":69863},[155,83884,72387],{"class":226},[155,83886,317],{"class":171},[155,83888,72392],{"class":732},[155,83890,34745],{"class":226},[155,83892,317],{"class":171},[155,83894,15430],{"class":732},[155,83896,34784],{"class":226},[155,83898,317],{"class":171},[155,83900,83901],{"class":732},"\"checkAll\"",[155,83903,83904],{"class":171},"> \u003C",[155,83906,155],{"class":69863},[155,83908,72049],{"class":226},[155,83910,317],{"class":171},[155,83912,83913],{"class":732},"\"all\"",[155,83915,83916],{"class":171},">全选\u003C\u002F",[155,83918,155],{"class":69863},[155,83920,69870],{"class":171},[155,83922,83923,83925,83927],{"class":157,"line":791},[155,83924,73970],{"class":171},[155,83926,20231],{"class":69863},[155,83928,69870],{"class":171},[155,83930,83931,83933,83935,83938,83940],{"class":157,"line":796},[155,83932,73797],{"class":171},[155,83934,20231],{"class":69863},[155,83936,83937],{"class":171},">商品\u003C\u002F",[155,83939,20231],{"class":69863},[155,83941,69870],{"class":171},[155,83943,83944,83946,83948,83951,83953],{"class":157,"line":802},[155,83945,73797],{"class":171},[155,83947,20231],{"class":69863},[155,83949,83950],{"class":171},">商家\u003C\u002F",[155,83952,20231],{"class":69863},[155,83954,69870],{"class":171},[155,83956,83957,83959,83961,83964,83966],{"class":157,"line":808},[155,83958,73797],{"class":171},[155,83960,20231],{"class":69863},[155,83962,83963],{"class":171},">价格\u003C\u002F",[155,83965,20231],{"class":69863},[155,83967,69870],{"class":171},[155,83969,83970,83972,83974],{"class":157,"line":819},[155,83971,70339],{"class":171},[155,83973,20228],{"class":69863},[155,83975,69870],{"class":171},[155,83977,83978,83980,83982],{"class":157,"line":1832},[155,83979,69904],{"class":171},[155,83981,20228],{"class":69863},[155,83983,69870],{"class":171},[155,83985,83986,83988,83990],{"class":157,"line":1838},[155,83987,73797],{"class":171},[155,83989,20274],{"class":69863},[155,83991,69870],{"class":171},[155,83993,83994,83996,83998,84000,84002,84004,84006,84008,84011,84013,84015,84018],{"class":157,"line":1844},[155,83995,73865],{"class":171},[155,83997,72384],{"class":69863},[155,83999,72387],{"class":226},[155,84001,317],{"class":171},[155,84003,72392],{"class":732},[155,84005,34745],{"class":226},[155,84007,317],{"class":171},[155,84009,84010],{"class":732},"\"check\"",[155,84012,72049],{"class":226},[155,84014,317],{"class":171},[155,84016,84017],{"class":732},"\"ck\"",[155,84019,69870],{"class":171},[155,84021,84022,84024,84026],{"class":157,"line":1850},[155,84023,73970],{"class":171},[155,84025,20274],{"class":69863},[155,84027,69870],{"class":171},[155,84029,84030,84032,84034,84036,84038],{"class":157,"line":1861},[155,84031,73797],{"class":171},[155,84033,20274],{"class":69863},[155,84035,79736],{"class":171},[155,84037,20274],{"class":69863},[155,84039,69870],{"class":171},[155,84041,84042,84044,84046,84049,84051],{"class":157,"line":1866},[155,84043,73797],{"class":171},[155,84045,20274],{"class":69863},[155,84047,84048],{"class":171},">小米\u003C\u002F",[155,84050,20274],{"class":69863},[155,84052,69870],{"class":171},[155,84054,84055,84057,84059,84062,84064],{"class":157,"line":1871},[155,84056,73797],{"class":171},[155,84058,20274],{"class":69863},[155,84060,84061],{"class":171},">￥1999\u003C\u002F",[155,84063,20274],{"class":69863},[155,84065,69870],{"class":171},[155,84067,84068,84070,84072],{"class":157,"line":1877},[155,84069,70339],{"class":171},[155,84071,20228],{"class":69863},[155,84073,69870],{"class":171},[155,84075,84076,84078,84080],{"class":157,"line":1883},[155,84077,69904],{"class":171},[155,84079,20228],{"class":69863},[155,84081,69870],{"class":171},[155,84083,84084,84086,84088],{"class":157,"line":1894},[155,84085,73797],{"class":171},[155,84087,20274],{"class":69863},[155,84089,69870],{"class":171},[155,84091,84092,84094,84096,84098,84100,84102,84104,84106,84108,84110,84112,84114],{"class":157,"line":1900},[155,84093,73865],{"class":171},[155,84095,72384],{"class":69863},[155,84097,72387],{"class":226},[155,84099,317],{"class":171},[155,84101,72392],{"class":732},[155,84103,34745],{"class":226},[155,84105,317],{"class":171},[155,84107,84010],{"class":732},[155,84109,72049],{"class":226},[155,84111,317],{"class":171},[155,84113,84017],{"class":732},[155,84115,69870],{"class":171},[155,84117,84118,84120,84122],{"class":157,"line":1911},[155,84119,73970],{"class":171},[155,84121,20274],{"class":69863},[155,84123,69870],{"class":171},[155,84125,84126,84128,84130,84133,84135],{"class":157,"line":1917},[155,84127,73797],{"class":171},[155,84129,20274],{"class":69863},[155,84131,84132],{"class":171},">小米净水器\u003C\u002F",[155,84134,20274],{"class":69863},[155,84136,69870],{"class":171},[155,84138,84139,84141,84143,84145,84147],{"class":157,"line":1927},[155,84140,73797],{"class":171},[155,84142,20274],{"class":69863},[155,84144,84048],{"class":171},[155,84146,20274],{"class":69863},[155,84148,69870],{"class":171},[155,84150,84151,84153,84155,84158,84160],{"class":157,"line":1933},[155,84152,73797],{"class":171},[155,84154,20274],{"class":69863},[155,84156,84157],{"class":171},">￥4999\u003C\u002F",[155,84159,20274],{"class":69863},[155,84161,69870],{"class":171},[155,84163,84164,84166,84168],{"class":157,"line":1943},[155,84165,70339],{"class":171},[155,84167,20228],{"class":69863},[155,84169,69870],{"class":171},[155,84171,84172,84174,84176],{"class":157,"line":1949},[155,84173,69904],{"class":171},[155,84175,20228],{"class":69863},[155,84177,69870],{"class":171},[155,84179,84180,84182,84184],{"class":157,"line":1959},[155,84181,73797],{"class":171},[155,84183,20274],{"class":69863},[155,84185,69870],{"class":171},[155,84187,84188,84190,84192,84194,84196,84198,84200,84202,84204,84206,84208,84210],{"class":157,"line":1964},[155,84189,73865],{"class":171},[155,84191,72384],{"class":69863},[155,84193,72387],{"class":226},[155,84195,317],{"class":171},[155,84197,72392],{"class":732},[155,84199,34745],{"class":226},[155,84201,317],{"class":171},[155,84203,84010],{"class":732},[155,84205,72049],{"class":226},[155,84207,317],{"class":171},[155,84209,84017],{"class":732},[155,84211,69870],{"class":171},[155,84213,84214,84216,84218],{"class":157,"line":1970},[155,84215,73970],{"class":171},[155,84217,20274],{"class":69863},[155,84219,69870],{"class":171},[155,84221,84222,84224,84226,84229,84231],{"class":157,"line":1981},[155,84223,73797],{"class":171},[155,84225,20274],{"class":69863},[155,84227,84228],{"class":171},">小米电视\u003C\u002F",[155,84230,20274],{"class":69863},[155,84232,69870],{"class":171},[155,84234,84235,84237,84239,84241,84243],{"class":157,"line":1986},[155,84236,73797],{"class":171},[155,84238,20274],{"class":69863},[155,84240,84048],{"class":171},[155,84242,20274],{"class":69863},[155,84244,69870],{"class":171},[155,84246,84247,84249,84251,84254,84256],{"class":157,"line":1991},[155,84248,73797],{"class":171},[155,84250,20274],{"class":69863},[155,84252,84253],{"class":171},">￥5999\u003C\u002F",[155,84255,20274],{"class":69863},[155,84257,69870],{"class":171},[155,84259,84260,84262,84264],{"class":157,"line":1997},[155,84261,70339],{"class":171},[155,84263,20228],{"class":69863},[155,84265,69870],{"class":171},[155,84267,84268,84270,84272],{"class":157,"line":2014},[155,84269,70980],{"class":171},[155,84271,20222],{"class":69863},[155,84273,69870],{"class":171},[155,84275,84276,84278,84280],{"class":157,"line":2046},[155,84277,70707],{"class":171},[155,84279,70376],{"class":69863},[155,84281,69870],{"class":171},[155,84283,84284],{"class":157,"line":2062},[155,84285,84286],{"class":161},"    \u002F\u002F 1. 获取大复选框\n",[155,84288,84289,84291,84294,84296,84298,84300,84302,84305],{"class":157,"line":2067},[155,84290,31049],{"class":167},[155,84292,84293],{"class":263}," checkAll",[155,84295,33391],{"class":167},[155,84297,72959],{"class":171},[155,84299,72962],{"class":226},[155,84301,230],{"class":171},[155,84303,84304],{"class":732},"'#checkAll'",[155,84306,363],{"class":171},[155,84308,84309],{"class":157,"line":2073},[155,84310,84311],{"class":161},"    \u002F\u002F 2. 获取所有的小复选框\n",[155,84313,84314,84316,84319,84321,84323,84325,84327,84330],{"class":157,"line":2079},[155,84315,31049],{"class":167},[155,84317,84318],{"class":263}," cks",[155,84320,33391],{"class":167},[155,84322,72959],{"class":171},[155,84324,74244],{"class":226},[155,84326,230],{"class":171},[155,84328,84329],{"class":732},"'.ck'",[155,84331,363],{"class":171},[155,84333,84334],{"class":157,"line":2089},[155,84335,84336],{"class":161},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[155,84338,84339,84342,84344,84346,84348,84350,84352],{"class":157,"line":2095},[155,84340,84341],{"class":171},"    checkAll.",[155,84343,76376],{"class":226},[155,84345,230],{"class":171},[155,84347,76381],{"class":732},[155,84349,7589],{"class":171},[155,84351,73012],{"class":167},[155,84353,73015],{"class":171},[155,84355,84356],{"class":157,"line":2106},[155,84357,84358],{"class":161},"      \u002F\u002F 得到当前大复选框的选中状态\n",[155,84360,84361,84364],{"class":157,"line":2112},[155,84362,84363],{"class":161},"      \u002F\u002F console.log(checkAll.checked)",[155,84365,84366],{"class":161},"  \u002F\u002F 得到 是 true 或者是 false\n",[155,84368,84369],{"class":157,"line":2122},[155,84370,84371],{"class":161},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[155,84373,84374,84376,84378,84380,84382,84384,84386,84388,84390,84393,84395,84397,84399],{"class":157,"line":2128},[155,84375,70847],{"class":167},[155,84377,21561],{"class":171},[155,84379,70410],{"class":167},[155,84381,29287],{"class":171},[155,84383,317],{"class":167},[155,84385,1151],{"class":263},[155,84387,29294],{"class":171},[155,84389,20959],{"class":167},[155,84391,84392],{"class":171}," cks.",[155,84394,70531],{"class":263},[155,84396,23086],{"class":171},[155,84398,22179],{"class":167},[155,84400,32269],{"class":171},[155,84402,84403,84406,84408,84411],{"class":157,"line":2138},[155,84404,84405],{"class":171},"        cks[i].checked ",[155,84407,317],{"class":167},[155,84409,84410],{"class":263}," this",[155,84412,84413],{"class":171},".checked\n",[155,84415,84416],{"class":157,"line":2144},[155,84417,70961],{"class":171},[155,84419,84420],{"class":157,"line":2154},[155,84421,3065],{"class":171},[155,84423,84424],{"class":157,"line":2160},[155,84425,84426],{"class":161},"    \u002F\u002F 5. 小复选框控制大复选框\n",[155,84428,84429],{"class":157,"line":2170},[155,84430,217],{"emptyLinePlaceholder":216},[155,84432,84433,84435,84437,84439,84441,84443,84445,84447,84449,84451,84453,84455,84457],{"class":157,"line":2176},[155,84434,2000],{"class":167},[155,84436,21561],{"class":171},[155,84438,70410],{"class":167},[155,84440,29287],{"class":171},[155,84442,317],{"class":167},[155,84444,1151],{"class":263},[155,84446,29294],{"class":171},[155,84448,20959],{"class":167},[155,84450,84392],{"class":171},[155,84452,70531],{"class":263},[155,84454,23086],{"class":171},[155,84456,22179],{"class":167},[155,84458,32269],{"class":171},[155,84460,84461],{"class":157,"line":2191},[155,84462,84463],{"class":161},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[155,84465,84466,84469,84471,84473,84475,84477,84479],{"class":157,"line":2197},[155,84467,84468],{"class":171},"      cks[i].",[155,84470,76376],{"class":226},[155,84472,230],{"class":171},[155,84474,76381],{"class":732},[155,84476,7589],{"class":171},[155,84478,73012],{"class":167},[155,84480,73015],{"class":171},[155,84482,84483],{"class":157,"line":2208},[155,84484,84485],{"class":161},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[155,84487,84488],{"class":157,"line":2214},[155,84489,84490],{"class":161},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[155,84492,84493],{"class":157,"line":2225},[155,84494,84495],{"class":161},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[155,84497,84498],{"class":157,"line":2231},[155,84499,84500],{"class":161},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[155,84502,84503,84506,84508,84510,84512,84514,84517,84519,84521,84523,84525],{"class":157,"line":2237},[155,84504,84505],{"class":171},"        checkAll.checked ",[155,84507,317],{"class":167},[155,84509,72959],{"class":171},[155,84511,74244],{"class":226},[155,84513,230],{"class":171},[155,84515,84516],{"class":732},"'.ck:checked'",[155,84518,288],{"class":171},[155,84520,70531],{"class":263},[155,84522,76469],{"class":167},[155,84524,84392],{"class":171},[155,84526,74394],{"class":263},[155,84528,84529],{"class":157,"line":2243},[155,84530,83378],{"class":171},[155,84532,84533],{"class":157,"line":2249},[155,84534,22074],{"class":171},[155,84536,84537,84539,84541],{"class":157,"line":2260},[155,84538,70980],{"class":171},[155,84540,70376],{"class":69863},[155,84542,69870],{"class":171},[155,84544,84545,84547,84549],{"class":157,"line":2266},[155,84546,70348],{"class":171},[155,84548,70363],{"class":69863},[155,84550,69870],{"class":171},[155,84552,84553],{"class":157,"line":2286},[155,84554,217],{"emptyLinePlaceholder":216},[155,84556,84557,84559,84561],{"class":157,"line":2292},[155,84558,70348],{"class":171},[155,84560,69198],{"class":69863},[155,84562,69870],{"class":171},[24,84564,84565],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[24,84567,84568],{},"用好之间比较得到的布尔值！！！",[24,84570,84571,84572,84575,84576,21561,84579,2028,84581,84584],{},"在 JS 里访问的时候，",[152,84573,84574],{},"checkbox.checked"," 是一个 ",[20234,84577,84578],{},"布尔值",[152,84580,21275],{},[152,84582,84583],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[24,84586,84587,84588,84591,84592],{},"HTML 的 ",[152,84589,84590],{},"checked=\"checked\""," 只是 ",[20234,84593,84594,84595,84598],{},"初始值；JS 的 ",[152,84596,84597],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[24,84600,84601],{},"：checked是一个伪类选择器",[24,84603,84604],{},[37,84605],{"alt":39,"src":84606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[24,84608,84609,84612],{},[84610,84611],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[24,84614,84615],{},[37,84616],{"alt":39,"src":84617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[20037,84619,84621],{"id":84620},"_33-dom事件进阶","3.3 DOM事件进阶",[14,84623,84625],{"id":84624},"_331-事件流","3.3.1 事件流",[24,84627,84628],{},[37,84629],{"alt":39,"src":84630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[19,84632,84634],{"id":84633},"_3311-事件捕获","3.3.1.1 事件捕获",[24,84636,84637],{},[37,84638],{"alt":39,"src":84639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[146,84641,84643],{"className":69196,"code":84642,"language":69198,"meta":39,"style":39},"\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",[152,84644,84645,84655,84669,84673,84681,84695,84715,84727,84735,84742,84754,84766,84776,84780,84784,84791,84803,84815,84825,84829,84837,84845,84849,84857,84872,84891,84899,84907,84927,84947,84963,84974,84982,84999,85010,85018,85035,85046,85054,85062,85070,85074],{"__ignoreMap":39},[155,84646,84647,84649,84651,84653],{"class":157,"line":158},[155,84648,69860],{"class":171},[155,84650,69864],{"class":69863},[155,84652,69867],{"class":226},[155,84654,69870],{"class":171},[155,84656,84657,84659,84661,84663,84665,84667],{"class":157,"line":46},[155,84658,20959],{"class":171},[155,84660,69198],{"class":69863},[155,84662,69879],{"class":226},[155,84664,317],{"class":171},[155,84666,69884],{"class":732},[155,84668,69870],{"class":171},[155,84670,84671],{"class":157,"line":121},[155,84672,217],{"emptyLinePlaceholder":216},[155,84674,84675,84677,84679],{"class":157,"line":180},[155,84676,20959],{"class":171},[155,84678,69897],{"class":69863},[155,84680,69870],{"class":171},[155,84682,84683,84685,84687,84689,84691,84693],{"class":157,"line":194},[155,84684,70707],{"class":171},[155,84686,69907],{"class":69863},[155,84688,69910],{"class":226},[155,84690,317],{"class":171},[155,84692,69915],{"class":732},[155,84694,69870],{"class":171},[155,84696,84697,84699,84701,84703,84705,84707,84709,84711,84713],{"class":157,"line":200},[155,84698,70707],{"class":171},[155,84700,69907],{"class":69863},[155,84702,34745],{"class":226},[155,84704,317],{"class":171},[155,84706,69954],{"class":732},[155,84708,69934],{"class":226},[155,84710,317],{"class":171},[155,84712,69961],{"class":732},[155,84714,69870],{"class":171},[155,84716,84717,84719,84721,84723,84725],{"class":157,"line":213},[155,84718,70707],{"class":171},[155,84720,69970],{"class":69863},[155,84722,69973],{"class":171},[155,84724,69970],{"class":69863},[155,84726,69870],{"class":171},[155,84728,84729,84731,84733],{"class":157,"line":220},[155,84730,70707],{"class":171},[155,84732,20011],{"class":69863},[155,84734,69870],{"class":171},[155,84736,84737,84740],{"class":157,"line":245},[155,84738,84739],{"class":226},"    .father",[155,84741,35397],{"class":171},[155,84743,84744,84746,84748,84750,84752],{"class":157,"line":251},[155,84745,73334],{"class":263},[155,84747,70000],{"class":171},[155,84749,83637],{"class":263},[155,84751,70055],{"class":167},[155,84753,21206],{"class":171},[155,84755,84756,84758,84760,84762,84764],{"class":157,"line":257},[155,84757,73348],{"class":263},[155,84759,70000],{"class":171},[155,84761,83637],{"class":263},[155,84763,70055],{"class":167},[155,84765,21206],{"class":171},[155,84767,84768,84770,84772,84774],{"class":157,"line":270},[155,84769,73447],{"class":263},[155,84771,70000],{"class":171},[155,84773,70208],{"class":263},[155,84775,21206],{"class":171},[155,84777,84778],{"class":157,"line":276},[155,84779,22074],{"class":171},[155,84781,84782],{"class":157,"line":297},[155,84783,217],{"emptyLinePlaceholder":216},[155,84785,84786,84789],{"class":157,"line":302},[155,84787,84788],{"class":226},"    .son",[155,84790,35397],{"class":171},[155,84792,84793,84795,84797,84799,84801],{"class":157,"line":308},[155,84794,73334],{"class":263},[155,84796,70000],{"class":171},[155,84798,21619],{"class":263},[155,84800,70055],{"class":167},[155,84802,21206],{"class":171},[155,84804,84805,84807,84809,84811,84813],{"class":157,"line":366},[155,84806,73348],{"class":263},[155,84808,70000],{"class":171},[155,84810,21619],{"class":263},[155,84812,70055],{"class":167},[155,84814,21206],{"class":171},[155,84816,84817,84819,84821,84823],{"class":157,"line":379},[155,84818,73447],{"class":263},[155,84820,70000],{"class":171},[155,84822,73452],{"class":263},[155,84824,21206],{"class":171},[155,84826,84827],{"class":157,"line":385},[155,84828,22074],{"class":171},[155,84830,84831,84833,84835],{"class":157,"line":415},[155,84832,70980],{"class":171},[155,84834,20011],{"class":69863},[155,84836,69870],{"class":171},[155,84838,84839,84841,84843],{"class":157,"line":452},[155,84840,70348],{"class":171},[155,84842,69897],{"class":69863},[155,84844,69870],{"class":171},[155,84846,84847],{"class":157,"line":480},[155,84848,217],{"emptyLinePlaceholder":216},[155,84850,84851,84853,84855],{"class":157,"line":486},[155,84852,20959],{"class":171},[155,84854,70363],{"class":69863},[155,84856,69870],{"class":171},[155,84858,84859,84861,84863,84865,84867,84870],{"class":157,"line":499},[155,84860,70707],{"class":171},[155,84862,70174],{"class":69863},[155,84864,72049],{"class":226},[155,84866,317],{"class":171},[155,84868,84869],{"class":732},"\"father\"",[155,84871,69870],{"class":171},[155,84873,84874,84876,84878,84880,84882,84885,84887,84889],{"class":157,"line":505},[155,84875,69904],{"class":171},[155,84877,70174],{"class":69863},[155,84879,72049],{"class":226},[155,84881,317],{"class":171},[155,84883,84884],{"class":732},"\"son\"",[155,84886,73877],{"class":171},[155,84888,70174],{"class":69863},[155,84890,69870],{"class":171},[155,84892,84893,84895,84897],{"class":157,"line":528},[155,84894,70980],{"class":171},[155,84896,70174],{"class":69863},[155,84898,69870],{"class":171},[155,84900,84901,84903,84905],{"class":157,"line":549},[155,84902,70707],{"class":171},[155,84904,70376],{"class":69863},[155,84906,69870],{"class":171},[155,84908,84909,84911,84914,84916,84918,84920,84922,84925],{"class":157,"line":570},[155,84910,31049],{"class":167},[155,84912,84913],{"class":263}," fa",[155,84915,33391],{"class":167},[155,84917,72959],{"class":171},[155,84919,72962],{"class":226},[155,84921,230],{"class":171},[155,84923,84924],{"class":732},"'.father'",[155,84926,363],{"class":171},[155,84928,84929,84931,84934,84936,84938,84940,84942,84945],{"class":157,"line":575},[155,84930,31049],{"class":167},[155,84932,84933],{"class":263}," son",[155,84935,33391],{"class":167},[155,84937,72959],{"class":171},[155,84939,72962],{"class":226},[155,84941,230],{"class":171},[155,84943,84944],{"class":732},"'.son'",[155,84946,363],{"class":171},[155,84948,84949,84951,84953,84955,84957,84959,84961],{"class":157,"line":581},[155,84950,70970],{"class":171},[155,84952,76376],{"class":226},[155,84954,230],{"class":171},[155,84956,76381],{"class":732},[155,84958,7589],{"class":171},[155,84960,73012],{"class":167},[155,84962,73015],{"class":171},[155,84964,84965,84967,84969,84972],{"class":157,"line":592},[155,84966,77488],{"class":226},[155,84968,230],{"class":171},[155,84970,84971],{"class":732},"'woshiu1'",[155,84973,363],{"class":171},[155,84975,84976,84978,84980],{"class":157,"line":610},[155,84977,73098],{"class":171},[155,84979,21275],{"class":263},[155,84981,363],{"class":171},[155,84983,84984,84987,84989,84991,84993,84995,84997],{"class":157,"line":622},[155,84985,84986],{"class":171},"    fa.",[155,84988,76376],{"class":226},[155,84990,230],{"class":171},[155,84992,76381],{"class":732},[155,84994,7589],{"class":171},[155,84996,73012],{"class":167},[155,84998,73015],{"class":171},[155,85000,85001,85003,85005,85008],{"class":157,"line":638},[155,85002,77488],{"class":226},[155,85004,230],{"class":171},[155,85006,85007],{"class":732},"'1'",[155,85009,363],{"class":171},[155,85011,85012,85014,85016],{"class":157,"line":650},[155,85013,73098],{"class":171},[155,85015,21275],{"class":263},[155,85017,363],{"class":171},[155,85019,85020,85023,85025,85027,85029,85031,85033],{"class":157,"line":662},[155,85021,85022],{"class":171},"    son.",[155,85024,76376],{"class":226},[155,85026,230],{"class":171},[155,85028,76381],{"class":732},[155,85030,7589],{"class":171},[155,85032,73012],{"class":167},[155,85034,73015],{"class":171},[155,85036,85037,85039,85041,85044],{"class":157,"line":678},[155,85038,77488],{"class":226},[155,85040,230],{"class":171},[155,85042,85043],{"class":732},"'2'",[155,85045,363],{"class":171},[155,85047,85048,85050,85052],{"class":157,"line":694},[155,85049,73098],{"class":171},[155,85051,21275],{"class":263},[155,85053,363],{"class":171},[155,85055,85056,85058,85060],{"class":157,"line":706},[155,85057,70980],{"class":171},[155,85059,70376],{"class":69863},[155,85061,69870],{"class":171},[155,85063,85064,85066,85068],{"class":157,"line":715},[155,85065,70348],{"class":171},[155,85067,70363],{"class":69863},[155,85069,69870],{"class":171},[155,85071,85072],{"class":157,"line":720},[155,85073,217],{"emptyLinePlaceholder":216},[155,85075,85076,85078,85080],{"class":157,"line":739},[155,85077,70348],{"class":171},[155,85079,69198],{"class":69863},[155,85081,69870],{"class":171},[24,85083,85084],{},[37,85085],{"alt":39,"src":85086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[24,85088,85089],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[19,85091,85093],{"id":85092},"_3312-事件冒泡","3.3.1.2 事件冒泡",[24,85095,85096],{},[37,85097],{"alt":39,"src":85098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[24,85100,85101],{},"反着来",[24,85103,85104],{},"注意是同名事件，比如都是‘click’",[19,85106,85108],{"id":85107},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[24,85110,85111],{},[37,85112],{"alt":39,"src":85113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[19,85115,85117],{"id":85116},"_3314-解绑事件","3.3.1.4 解绑事件",[24,85119,85120],{},[37,85121],{"alt":39,"src":85122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[24,85124,85125],{},[37,85126],{"alt":39,"src":85127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[19,85129,85131],{"id":85130},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[28,85133,85134],{},[31,85135,85136],{},"事件类型的区别",[24,85138,85139],{},[37,85140],{"alt":39,"src":85141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[24,85143,85144],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[28,85146,85147],{"start":46},[31,85148,85149],{},"注册事件的区别",[24,85151,85152],{},[37,85153],{"alt":39,"src":85154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[19,85156,85158],{"id":85157},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[24,85160,85161],{},[37,85162],{"alt":39,"src":85163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[24,85165,85166],{},[37,85167],{"alt":39,"src":85168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[146,85170,85172],{"className":71630,"code":85171,"language":71632,"meta":39,"style":39},"\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",[152,85173,85174,85182,85199,85222,85230,85235,85240,85245,85249,85257,85265],{"__ignoreMap":39},[155,85175,85176,85178,85180],{"class":157,"line":158},[155,85177,20959],{"class":171},[155,85179,70363],{"class":69863},[155,85181,69870],{"class":171},[155,85183,85184,85186,85189,85192,85194,85197],{"class":157,"line":46},[155,85185,70707],{"class":171},[155,85187,85188],{"class":69863},"form",[155,85190,85191],{"class":226}," action",[155,85193,317],{"class":171},[155,85195,85196],{"class":732},"\"http:\u002F\u002Fwww.itcast.cn\"",[155,85198,69870],{"class":171},[155,85200,85201,85203,85205,85207,85209,85212,85215,85217,85220],{"class":157,"line":121},[155,85202,69904],{"class":171},[155,85204,72384],{"class":69863},[155,85206,72387],{"class":226},[155,85208,317],{"class":171},[155,85210,85211],{"class":732},"\"submit\"",[155,85213,85214],{"class":226}," value",[155,85216,317],{"class":171},[155,85218,85219],{"class":732},"\"免费注册\"",[155,85221,69870],{"class":171},[155,85223,85224,85226,85228],{"class":157,"line":180},[155,85225,69904],{"class":171},[155,85227,70376],{"class":69863},[155,85229,69870],{"class":171},[155,85231,85232],{"class":157,"line":194},[155,85233,85234],{"class":171},"      const form = document.querySelector('form')\n",[155,85236,85237],{"class":157,"line":200},[155,85238,85239],{"class":171},"      form.addEventListener('submit', function (e) {\n",[155,85241,85242],{"class":157,"line":213},[155,85243,85244],{"class":171},"        e.preventDefault()\n",[155,85246,85247],{"class":157,"line":220},[155,85248,83378],{"class":171},[155,85250,85251,85253,85255],{"class":157,"line":245},[155,85252,70339],{"class":171},[155,85254,70376],{"class":69863},[155,85256,69870],{"class":171},[155,85258,85259,85261,85263],{"class":157,"line":251},[155,85260,70980],{"class":171},[155,85262,85188],{"class":69863},[155,85264,69870],{"class":171},[155,85266,85267,85269,85271],{"class":157,"line":257},[155,85268,70348],{"class":171},[155,85270,70363],{"class":69863},[155,85272,69870],{"class":171},[24,85274,85275],{},"点击不在跳转！！！",[14,85277,85279],{"id":85278},"_332-事件委托","3.3.2 事件委托",[24,85281,85282],{},[37,85283],{"alt":39,"src":85284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[146,85286,85288],{"className":69196,"code":85287,"language":69198,"meta":39,"style":39},"\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",[152,85289,85290,85300,85314,85318,85326,85340,85360,85372,85380,85384,85392,85400,85412,85424,85436,85448,85460,85473,85481,85489,85494,85513,85534,85539,85544,85549,85554,85563,85567,85577,85581,85586,85591,85605,85615,85619,85623,85631,85639,85643],{"__ignoreMap":39},[155,85291,85292,85294,85296,85298],{"class":157,"line":158},[155,85293,69860],{"class":171},[155,85295,69864],{"class":69863},[155,85297,69867],{"class":226},[155,85299,69870],{"class":171},[155,85301,85302,85304,85306,85308,85310,85312],{"class":157,"line":46},[155,85303,20959],{"class":171},[155,85305,69198],{"class":69863},[155,85307,69879],{"class":226},[155,85309,317],{"class":171},[155,85311,69884],{"class":732},[155,85313,69870],{"class":171},[155,85315,85316],{"class":157,"line":121},[155,85317,217],{"emptyLinePlaceholder":216},[155,85319,85320,85322,85324],{"class":157,"line":180},[155,85321,20959],{"class":171},[155,85323,69897],{"class":69863},[155,85325,69870],{"class":171},[155,85327,85328,85330,85332,85334,85336,85338],{"class":157,"line":194},[155,85329,70707],{"class":171},[155,85331,69907],{"class":69863},[155,85333,69910],{"class":226},[155,85335,317],{"class":171},[155,85337,69915],{"class":732},[155,85339,69870],{"class":171},[155,85341,85342,85344,85346,85348,85350,85352,85354,85356,85358],{"class":157,"line":200},[155,85343,70707],{"class":171},[155,85345,69907],{"class":69863},[155,85347,34745],{"class":226},[155,85349,317],{"class":171},[155,85351,69954],{"class":732},[155,85353,69934],{"class":226},[155,85355,317],{"class":171},[155,85357,69961],{"class":732},[155,85359,69870],{"class":171},[155,85361,85362,85364,85366,85368,85370],{"class":157,"line":213},[155,85363,70707],{"class":171},[155,85365,69970],{"class":69863},[155,85367,69973],{"class":171},[155,85369,69970],{"class":69863},[155,85371,69870],{"class":171},[155,85373,85374,85376,85378],{"class":157,"line":220},[155,85375,70348],{"class":171},[155,85377,69897],{"class":69863},[155,85379,69870],{"class":171},[155,85381,85382],{"class":157,"line":245},[155,85383,217],{"emptyLinePlaceholder":216},[155,85385,85386,85388,85390],{"class":157,"line":251},[155,85387,20959],{"class":171},[155,85389,70363],{"class":69863},[155,85391,69870],{"class":171},[155,85393,85394,85396,85398],{"class":157,"line":257},[155,85395,70707],{"class":171},[155,85397,21052],{"class":69863},[155,85399,69870],{"class":171},[155,85401,85402,85404,85406,85408,85410],{"class":157,"line":270},[155,85403,69904],{"class":171},[155,85405,31],{"class":69863},[155,85407,72529],{"class":171},[155,85409,31],{"class":69863},[155,85411,69870],{"class":171},[155,85413,85414,85416,85418,85420,85422],{"class":157,"line":276},[155,85415,69904],{"class":171},[155,85417,31],{"class":69863},[155,85419,72548],{"class":171},[155,85421,31],{"class":69863},[155,85423,69870],{"class":171},[155,85425,85426,85428,85430,85432,85434],{"class":157,"line":297},[155,85427,69904],{"class":171},[155,85429,31],{"class":69863},[155,85431,72567],{"class":171},[155,85433,31],{"class":69863},[155,85435,69870],{"class":171},[155,85437,85438,85440,85442,85444,85446],{"class":157,"line":302},[155,85439,69904],{"class":171},[155,85441,31],{"class":69863},[155,85443,72586],{"class":171},[155,85445,31],{"class":69863},[155,85447,69870],{"class":171},[155,85449,85450,85452,85454,85456,85458],{"class":157,"line":308},[155,85451,69904],{"class":171},[155,85453,31],{"class":69863},[155,85455,72605],{"class":171},[155,85457,31],{"class":69863},[155,85459,69870],{"class":171},[155,85461,85462,85464,85466,85469,85471],{"class":157,"line":366},[155,85463,69904],{"class":171},[155,85465,24],{"class":69863},[155,85467,85468],{"class":171},">我不需要变色\u003C\u002F",[155,85470,24],{"class":69863},[155,85472,69870],{"class":171},[155,85474,85475,85477,85479],{"class":157,"line":379},[155,85476,70980],{"class":171},[155,85478,21052],{"class":69863},[155,85480,69870],{"class":171},[155,85482,85483,85485,85487],{"class":157,"line":385},[155,85484,70707],{"class":171},[155,85486,70376],{"class":69863},[155,85488,69870],{"class":171},[155,85490,85491],{"class":157,"line":415},[155,85492,85493],{"class":161},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[155,85495,85496,85498,85500,85502,85504,85506,85508,85511],{"class":157,"line":452},[155,85497,31049],{"class":167},[155,85499,79855],{"class":263},[155,85501,33391],{"class":167},[155,85503,72959],{"class":171},[155,85505,72962],{"class":226},[155,85507,230],{"class":171},[155,85509,85510],{"class":732},"'ul'",[155,85512,363],{"class":171},[155,85514,85515,85518,85520,85522,85524,85526,85528,85530,85532],{"class":157,"line":480},[155,85516,85517],{"class":171},"    ul.",[155,85519,76376],{"class":226},[155,85521,230],{"class":171},[155,85523,76381],{"class":732},[155,85525,7589],{"class":171},[155,85527,73012],{"class":167},[155,85529,21561],{"class":171},[155,85531,20161],{"class":323},[155,85533,32269],{"class":171},[155,85535,85536],{"class":157,"line":486},[155,85537,85538],{"class":161},"      \u002F\u002F alert(1)\n",[155,85540,85541],{"class":157,"line":499},[155,85542,85543],{"class":161},"      \u002F\u002F e.target就是我们点击的对象\n",[155,85545,85546],{"class":157,"line":505},[155,85547,85548],{"class":161},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[155,85550,85551],{"class":157,"line":528},[155,85552,85553],{"class":161},"      \u002F\u002F e.target.style.color = 'red'\n",[155,85555,85556,85558,85560],{"class":157,"line":549},[155,85557,76807],{"class":171},[155,85559,76810],{"class":226},[155,85561,85562],{"class":171},"(e)\n",[155,85564,85565],{"class":157,"line":570},[155,85566,217],{"emptyLinePlaceholder":216},[155,85568,85569,85571,85574],{"class":157,"line":575},[155,85570,76807],{"class":171},[155,85572,85573],{"class":226},"dir",[155,85575,85576],{"class":171},"(e.target)\n",[155,85578,85579],{"class":157,"line":581},[155,85580,217],{"emptyLinePlaceholder":216},[155,85582,85583],{"class":157,"line":592},[155,85584,85585],{"class":161},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[155,85587,85588],{"class":157,"line":610},[155,85589,85590],{"class":161},"      \u002F\u002F 通过tagName来进行判断\n",[155,85592,85593,85595,85598,85600,85603],{"class":157,"line":622},[155,85594,73043],{"class":167},[155,85596,85597],{"class":171}," (e.target.tagName ",[155,85599,73049],{"class":167},[155,85601,85602],{"class":732}," 'LI'",[155,85604,32269],{"class":171},[155,85606,85607,85610,85612],{"class":157,"line":638},[155,85608,85609],{"class":171},"        e.target.style.color ",[155,85611,317],{"class":167},[155,85613,85614],{"class":732}," 'red'\n",[155,85616,85617],{"class":157,"line":650},[155,85618,70961],{"class":171},[155,85620,85621],{"class":157,"line":662},[155,85622,3065],{"class":171},[155,85624,85625,85627,85629],{"class":157,"line":678},[155,85626,70980],{"class":171},[155,85628,70376],{"class":69863},[155,85630,69870],{"class":171},[155,85632,85633,85635,85637],{"class":157,"line":694},[155,85634,70348],{"class":171},[155,85636,70363],{"class":69863},[155,85638,69870],{"class":171},[155,85640,85641],{"class":157,"line":706},[155,85642,217],{"emptyLinePlaceholder":216},[155,85644,85645,85647,85649],{"class":157,"line":715},[155,85646,70348],{"class":171},[155,85648,69198],{"class":69863},[155,85650,69870],{"class":171},[24,85652,85653],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[24,85655,85656],{},"if(e.target.ragName==='P') {}",[24,85658,85659],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[24,85661,85662],{},"通过事件委托的方式实现tab栏切换改造：",[24,85664,85665],{},"一定要记住自定义属性！！！！！！",[24,85667,85668],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[24,85670,85671],{},"id是自定义的属性名",[24,85673,85674],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[146,85676,85678],{"className":69196,"code":85677,"language":69198,"meta":39,"style":39},"\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",[152,85679,85680,85690,85704,85708,85716,85730,85750,85770,85782,85790,85796,85806,85816,85820,85824,85830,85842,85854,85866,85882,85886,85890,85896,85908,85920,85932,85942,85952,85956,85960,85968,85980,85990,86002,86006,86010,86018,86028,86038,86048,86052,86056,86066,86080,86092,86096,86100,86112,86122,86138,86148,86152,86156,86170,86180,86190,86194,86198,86204,86218,86222,86226,86234,86244,86248,86252,86261,86271,86275,86283,86291,86295,86303,86317,86331,86343,86351,86390,86422,86454,86486,86518,86526,86534,86548,86582,86616,86650,86684,86718,86726,86734,86742,86747,86752,86771,86776,86796,86804,86809,86822,86843,86856,86860,86865,86870,86883,86903,86931,86935,86939,86943,86951,86959,86963],{"__ignoreMap":39},[155,85681,85682,85684,85686,85688],{"class":157,"line":158},[155,85683,69860],{"class":171},[155,85685,69864],{"class":69863},[155,85687,69867],{"class":226},[155,85689,69870],{"class":171},[155,85691,85692,85694,85696,85698,85700,85702],{"class":157,"line":46},[155,85693,20959],{"class":171},[155,85695,69198],{"class":69863},[155,85697,69879],{"class":226},[155,85699,317],{"class":171},[155,85701,69884],{"class":732},[155,85703,69870],{"class":171},[155,85705,85706],{"class":157,"line":121},[155,85707,217],{"emptyLinePlaceholder":216},[155,85709,85710,85712,85714],{"class":157,"line":180},[155,85711,20959],{"class":171},[155,85713,69897],{"class":69863},[155,85715,69870],{"class":171},[155,85717,85718,85720,85722,85724,85726,85728],{"class":157,"line":194},[155,85719,70707],{"class":171},[155,85721,69907],{"class":69863},[155,85723,69910],{"class":226},[155,85725,317],{"class":171},[155,85727,69915],{"class":732},[155,85729,77690],{"class":171},[155,85731,85732,85734,85736,85738,85740,85742,85744,85746,85748],{"class":157,"line":200},[155,85733,70707],{"class":171},[155,85735,69907],{"class":69863},[155,85737,69926],{"class":226},[155,85739,317],{"class":171},[155,85741,69931],{"class":732},[155,85743,69934],{"class":226},[155,85745,317],{"class":171},[155,85747,69939],{"class":732},[155,85749,77690],{"class":171},[155,85751,85752,85754,85756,85758,85760,85762,85764,85766,85768],{"class":157,"line":213},[155,85753,70707],{"class":171},[155,85755,69907],{"class":69863},[155,85757,34745],{"class":226},[155,85759,317],{"class":171},[155,85761,69954],{"class":732},[155,85763,69934],{"class":226},[155,85765,317],{"class":171},[155,85767,69961],{"class":732},[155,85769,77690],{"class":171},[155,85771,85772,85774,85776,85778,85780],{"class":157,"line":220},[155,85773,70707],{"class":171},[155,85775,69970],{"class":69863},[155,85777,82188],{"class":171},[155,85779,69970],{"class":69863},[155,85781,69870],{"class":171},[155,85783,85784,85786,85788],{"class":157,"line":245},[155,85785,70707],{"class":171},[155,85787,20011],{"class":69863},[155,85789,69870],{"class":171},[155,85791,85792,85794],{"class":157,"line":251},[155,85793,26266],{"class":69863},[155,85795,35397],{"class":171},[155,85797,85798,85800,85802,85804],{"class":157,"line":257},[155,85799,73269],{"class":263},[155,85801,70000],{"class":171},[155,85803,1109],{"class":263},[155,85805,21206],{"class":171},[155,85807,85808,85810,85812,85814],{"class":157,"line":270},[155,85809,73258],{"class":263},[155,85811,70000],{"class":171},[155,85813,1109],{"class":263},[155,85815,21206],{"class":171},[155,85817,85818],{"class":157,"line":276},[155,85819,22074],{"class":171},[155,85821,85822],{"class":157,"line":297},[155,85823,217],{"emptyLinePlaceholder":216},[155,85825,85826,85828],{"class":157,"line":302},[155,85827,82239],{"class":226},[155,85829,35397],{"class":171},[155,85831,85832,85834,85836,85838,85840],{"class":157,"line":308},[155,85833,73334],{"class":263},[155,85835,70000],{"class":171},[155,85837,82250],{"class":263},[155,85839,70055],{"class":167},[155,85841,21206],{"class":171},[155,85843,85844,85846,85848,85850,85852],{"class":157,"line":366},[155,85845,73348],{"class":263},[155,85847,70000],{"class":171},[155,85849,82263],{"class":263},[155,85851,70055],{"class":167},[155,85853,21206],{"class":171},[155,85855,85856,85858,85860,85862,85864],{"class":157,"line":379},[155,85857,73269],{"class":263},[155,85859,70000],{"class":171},[155,85861,3458],{"class":263},[155,85863,70055],{"class":167},[155,85865,21206],{"class":171},[155,85867,85868,85870,85872,85874,85876,85878,85880],{"class":157,"line":385},[155,85869,80540],{"class":263},[155,85871,70000],{"class":171},[155,85873,329],{"class":263},[155,85875,70055],{"class":167},[155,85877,70084],{"class":263},[155,85879,80807],{"class":263},[155,85881,21206],{"class":171},[155,85883,85884],{"class":157,"line":415},[155,85885,22074],{"class":171},[155,85887,85888],{"class":157,"line":452},[155,85889,217],{"emptyLinePlaceholder":216},[155,85891,85892,85894],{"class":157,"line":480},[155,85893,82308],{"class":226},[155,85895,35397],{"class":171},[155,85897,85898,85900,85902,85904,85906],{"class":157,"line":486},[155,85899,73334],{"class":263},[155,85901,70000],{"class":171},[155,85903,20389],{"class":263},[155,85905,2938],{"class":167},[155,85907,21206],{"class":171},[155,85909,85910,85912,85914,85916,85918],{"class":157,"line":499},[155,85911,73348],{"class":263},[155,85913,70000],{"class":171},[155,85915,2932],{"class":263},[155,85917,70055],{"class":167},[155,85919,21206],{"class":171},[155,85921,85922,85924,85926,85928,85930],{"class":157,"line":505},[155,85923,75922],{"class":263},[155,85925,70000],{"class":171},[155,85927,2932],{"class":263},[155,85929,70055],{"class":167},[155,85931,21206],{"class":171},[155,85933,85934,85936,85938,85940],{"class":157,"line":528},[155,85935,73572],{"class":263},[155,85937,70000],{"class":171},[155,85939,70040],{"class":263},[155,85941,21206],{"class":171},[155,85943,85944,85946,85948,85950],{"class":157,"line":549},[155,85945,73583],{"class":263},[155,85947,70000],{"class":171},[155,85949,70231],{"class":263},[155,85951,21206],{"class":171},[155,85953,85954],{"class":157,"line":570},[155,85955,22074],{"class":171},[155,85957,85958],{"class":157,"line":575},[155,85959,217],{"emptyLinePlaceholder":216},[155,85961,85962,85964,85966],{"class":157,"line":581},[155,85963,82308],{"class":226},[155,85965,82381],{"class":69863},[155,85967,35397],{"class":171},[155,85969,85970,85972,85974,85976,85978],{"class":157,"line":592},[155,85971,73485],{"class":263},[155,85973,70000],{"class":171},[155,85975,12010],{"class":263},[155,85977,70055],{"class":167},[155,85979,21206],{"class":171},[155,85981,85982,85984,85986,85988],{"class":157,"line":610},[155,85983,80897],{"class":263},[155,85985,70000],{"class":171},[155,85987,82404],{"class":263},[155,85989,21206],{"class":171},[155,85991,85992,85994,85996,85998,86000],{"class":157,"line":622},[155,85993,80563],{"class":263},[155,85995,70000],{"class":171},[155,85997,3458],{"class":263},[155,85999,70055],{"class":167},[155,86001,21206],{"class":171},[155,86003,86004],{"class":157,"line":638},[155,86005,22074],{"class":171},[155,86007,86008],{"class":157,"line":650},[155,86009,217],{"emptyLinePlaceholder":216},[155,86011,86012,86014,86016],{"class":157,"line":662},[155,86013,82308],{"class":226},[155,86015,79855],{"class":69863},[155,86017,35397],{"class":171},[155,86019,86020,86022,86024,86026],{"class":157,"line":678},[155,86021,73295],{"class":263},[155,86023,70000],{"class":171},[155,86025,73300],{"class":263},[155,86027,21206],{"class":171},[155,86029,86030,86032,86034,86036],{"class":157,"line":694},[155,86031,73572],{"class":263},[155,86033,70000],{"class":171},[155,86035,70040],{"class":263},[155,86037,21206],{"class":171},[155,86039,86040,86042,86044,86046],{"class":157,"line":706},[155,86041,73583],{"class":263},[155,86043,70000],{"class":171},[155,86045,70143],{"class":263},[155,86047,21206],{"class":171},[155,86049,86050],{"class":157,"line":715},[155,86051,22074],{"class":171},[155,86053,86054],{"class":157,"line":720},[155,86055,217],{"emptyLinePlaceholder":216},[155,86057,86058,86060,86062,86064],{"class":157,"line":739},[155,86059,82308],{"class":226},[155,86061,79855],{"class":69863},[155,86063,73638],{"class":69863},[155,86065,35397],{"class":171},[155,86067,86068,86070,86072,86074,86076,86078],{"class":157,"line":745},[155,86069,73269],{"class":263},[155,86071,70000],{"class":171},[155,86073,1109],{"class":263},[155,86075,28799],{"class":263},[155,86077,70055],{"class":167},[155,86079,21206],{"class":171},[155,86081,86082,86084,86086,86088,86090],{"class":157,"line":773},[155,86083,73485],{"class":263},[155,86085,70000],{"class":171},[155,86087,20613],{"class":263},[155,86089,70055],{"class":167},[155,86091,21206],{"class":171},[155,86093,86094],{"class":157,"line":779},[155,86095,22074],{"class":171},[155,86097,86098],{"class":157,"line":785},[155,86099,217],{"emptyLinePlaceholder":216},[155,86101,86102,86104,86106,86108,86110],{"class":157,"line":791},[155,86103,82308],{"class":226},[155,86105,79855],{"class":69863},[155,86107,73638],{"class":69863},[155,86109,21311],{"class":69863},[155,86111,35397],{"class":171},[155,86113,86114,86116,86118,86120],{"class":157,"line":796},[155,86115,82533],{"class":263},[155,86117,70000],{"class":171},[155,86119,73300],{"class":263},[155,86121,21206],{"class":171},[155,86123,86124,86126,86128,86130,86132,86134,86136],{"class":157,"line":802},[155,86125,80795],{"class":263},[155,86127,70000],{"class":171},[155,86129,360],{"class":263},[155,86131,70055],{"class":167},[155,86133,70084],{"class":263},[155,86135,82554],{"class":263},[155,86137,21206],{"class":171},[155,86139,86140,86142,86144,86146],{"class":157,"line":808},[155,86141,75979],{"class":263},[155,86143,70000],{"class":171},[155,86145,80932],{"class":263},[155,86147,21206],{"class":171},[155,86149,86150],{"class":157,"line":819},[155,86151,22074],{"class":171},[155,86153,86154],{"class":157,"line":1832},[155,86155,217],{"emptyLinePlaceholder":216},[155,86157,86158,86160,86162,86164,86166,86168],{"class":157,"line":1838},[155,86159,82308],{"class":226},[155,86161,79855],{"class":69863},[155,86163,73638],{"class":69863},[155,86165,21311],{"class":69863},[155,86167,82587],{"class":226},[155,86169,35397],{"class":171},[155,86171,86172,86174,86176,86178],{"class":157,"line":1844},[155,86173,80354],{"class":263},[155,86175,70000],{"class":171},[155,86177,82598],{"class":263},[155,86179,21206],{"class":171},[155,86181,86182,86184,86186,86188],{"class":157,"line":1850},[155,86183,75979],{"class":263},[155,86185,70000],{"class":171},[155,86187,82598],{"class":263},[155,86189,21206],{"class":171},[155,86191,86192],{"class":157,"line":1861},[155,86193,22074],{"class":171},[155,86195,86196],{"class":157,"line":1866},[155,86197,217],{"emptyLinePlaceholder":216},[155,86199,86200,86202],{"class":157,"line":1871},[155,86201,82623],{"class":226},[155,86203,35397],{"class":171},[155,86205,86206,86208,86210,86212,86214,86216],{"class":157,"line":1877},[155,86207,73258],{"class":263},[155,86209,70000],{"class":171},[155,86211,1109],{"class":263},[155,86213,82636],{"class":263},[155,86215,70055],{"class":167},[155,86217,21206],{"class":171},[155,86219,86220],{"class":157,"line":1883},[155,86221,22074],{"class":171},[155,86223,86224],{"class":157,"line":1894},[155,86225,217],{"emptyLinePlaceholder":216},[155,86227,86228,86230,86232],{"class":157,"line":1900},[155,86229,82623],{"class":226},[155,86231,80737],{"class":226},[155,86233,35397],{"class":171},[155,86235,86236,86238,86240,86242],{"class":157,"line":1911},[155,86237,73572],{"class":263},[155,86239,70000],{"class":171},[155,86241,73300],{"class":263},[155,86243,21206],{"class":171},[155,86245,86246],{"class":157,"line":1917},[155,86247,22074],{"class":171},[155,86249,86250],{"class":157,"line":1927},[155,86251,217],{"emptyLinePlaceholder":216},[155,86253,86254,86256,86259],{"class":157,"line":1933},[155,86255,82623],{"class":226},[155,86257,86258],{"class":226}," .active",[155,86260,35397],{"class":171},[155,86262,86263,86265,86267,86269],{"class":157,"line":1943},[155,86264,73572],{"class":263},[155,86266,70000],{"class":171},[155,86268,79432],{"class":263},[155,86270,21206],{"class":171},[155,86272,86273],{"class":157,"line":1949},[155,86274,22074],{"class":171},[155,86276,86277,86279,86281],{"class":157,"line":1959},[155,86278,70980],{"class":171},[155,86280,20011],{"class":69863},[155,86282,69870],{"class":171},[155,86284,86285,86287,86289],{"class":157,"line":1964},[155,86286,70348],{"class":171},[155,86288,69897],{"class":69863},[155,86290,69870],{"class":171},[155,86292,86293],{"class":157,"line":1970},[155,86294,217],{"emptyLinePlaceholder":216},[155,86296,86297,86299,86301],{"class":157,"line":1981},[155,86298,20959],{"class":171},[155,86300,70363],{"class":69863},[155,86302,69870],{"class":171},[155,86304,86305,86307,86309,86311,86313,86315],{"class":157,"line":1986},[155,86306,70707],{"class":171},[155,86308,70174],{"class":69863},[155,86310,72049],{"class":226},[155,86312,317],{"class":171},[155,86314,82738],{"class":732},[155,86316,69870],{"class":171},[155,86318,86319,86321,86323,86325,86327,86329],{"class":157,"line":1991},[155,86320,69904],{"class":171},[155,86322,70174],{"class":69863},[155,86324,72049],{"class":226},[155,86326,317],{"class":171},[155,86328,82753],{"class":732},[155,86330,69870],{"class":171},[155,86332,86333,86335,86337,86339,86341],{"class":157,"line":1997},[155,86334,73797],{"class":171},[155,86336,14],{"class":69863},[155,86338,82764],{"class":171},[155,86340,14],{"class":69863},[155,86342,69870],{"class":171},[155,86344,86345,86347,86349],{"class":157,"line":2014},[155,86346,73797],{"class":171},[155,86348,21052],{"class":69863},[155,86350,69870],{"class":171},[155,86352,86353,86355,86357,86359,86361,86363,86365,86367,86369,86371,86373,86375,86377,86380,86382,86384,86386,86388],{"class":157,"line":2046},[155,86354,73865],{"class":171},[155,86356,31],{"class":69863},[155,86358,79615],{"class":171},[155,86360,20318],{"class":69863},[155,86362,72049],{"class":226},[155,86364,317],{"class":171},[155,86366,78269],{"class":732},[155,86368,79620],{"class":226},[155,86370,317],{"class":171},[155,86372,82799],{"class":732},[155,86374,72514],{"class":226},[155,86376,317],{"class":171},[155,86378,86379],{"class":732},"\"0\"",[155,86381,82802],{"class":171},[155,86383,20318],{"class":69863},[155,86385,73877],{"class":171},[155,86387,31],{"class":69863},[155,86389,69870],{"class":171},[155,86391,86392,86394,86396,86398,86400,86402,86404,86406,86408,86410,86412,86414,86416,86418,86420],{"class":157,"line":2062},[155,86393,73865],{"class":171},[155,86395,31],{"class":69863},[155,86397,79615],{"class":171},[155,86399,20318],{"class":69863},[155,86401,79620],{"class":226},[155,86403,317],{"class":171},[155,86405,82799],{"class":732},[155,86407,72514],{"class":226},[155,86409,317],{"class":171},[155,86411,23548],{"class":732},[155,86413,82829],{"class":171},[155,86415,20318],{"class":69863},[155,86417,73877],{"class":171},[155,86419,31],{"class":69863},[155,86421,69870],{"class":171},[155,86423,86424,86426,86428,86430,86432,86434,86436,86438,86440,86442,86444,86446,86448,86450,86452],{"class":157,"line":2067},[155,86425,73865],{"class":171},[155,86427,31],{"class":69863},[155,86429,79615],{"class":171},[155,86431,20318],{"class":69863},[155,86433,79620],{"class":226},[155,86435,317],{"class":171},[155,86437,82799],{"class":732},[155,86439,72514],{"class":226},[155,86441,317],{"class":171},[155,86443,23571],{"class":732},[155,86445,82856],{"class":171},[155,86447,20318],{"class":69863},[155,86449,73877],{"class":171},[155,86451,31],{"class":69863},[155,86453,69870],{"class":171},[155,86455,86456,86458,86460,86462,86464,86466,86468,86470,86472,86474,86476,86478,86480,86482,86484],{"class":157,"line":2073},[155,86457,73865],{"class":171},[155,86459,31],{"class":69863},[155,86461,79615],{"class":171},[155,86463,20318],{"class":69863},[155,86465,79620],{"class":226},[155,86467,317],{"class":171},[155,86469,82799],{"class":732},[155,86471,72514],{"class":226},[155,86473,317],{"class":171},[155,86475,23584],{"class":732},[155,86477,82883],{"class":171},[155,86479,20318],{"class":69863},[155,86481,73877],{"class":171},[155,86483,31],{"class":69863},[155,86485,69870],{"class":171},[155,86487,86488,86490,86492,86494,86496,86498,86500,86502,86504,86506,86508,86510,86512,86514,86516],{"class":157,"line":2079},[155,86489,73865],{"class":171},[155,86491,31],{"class":69863},[155,86493,79615],{"class":171},[155,86495,20318],{"class":69863},[155,86497,79620],{"class":226},[155,86499,317],{"class":171},[155,86501,82799],{"class":732},[155,86503,72514],{"class":226},[155,86505,317],{"class":171},[155,86507,23597],{"class":732},[155,86509,82910],{"class":171},[155,86511,20318],{"class":69863},[155,86513,73877],{"class":171},[155,86515,31],{"class":69863},[155,86517,69870],{"class":171},[155,86519,86520,86522,86524],{"class":157,"line":2089},[155,86521,73970],{"class":171},[155,86523,21052],{"class":69863},[155,86525,69870],{"class":171},[155,86527,86528,86530,86532],{"class":157,"line":2095},[155,86529,70339],{"class":171},[155,86531,70174],{"class":69863},[155,86533,69870],{"class":171},[155,86535,86536,86538,86540,86542,86544,86546],{"class":157,"line":2106},[155,86537,69904],{"class":171},[155,86539,70174],{"class":69863},[155,86541,72049],{"class":226},[155,86543,317],{"class":171},[155,86545,82947],{"class":732},[155,86547,69870],{"class":171},[155,86549,86550,86552,86554,86556,86558,86560,86562,86564,86566,86568,86570,86572,86574,86576,86578,86580],{"class":157,"line":2112},[155,86551,73797],{"class":171},[155,86553,70174],{"class":69863},[155,86555,72049],{"class":226},[155,86557,317],{"class":171},[155,86559,82962],{"class":732},[155,86561,79615],{"class":171},[155,86563,37],{"class":69863},[155,86565,73802],{"class":226},[155,86567,317],{"class":171},[155,86569,82973],{"class":732},[155,86571,73810],{"class":226},[155,86573,317],{"class":171},[155,86575,15430],{"class":732},[155,86577,82982],{"class":171},[155,86579,70174],{"class":69863},[155,86581,69870],{"class":171},[155,86583,86584,86586,86588,86590,86592,86594,86596,86598,86600,86602,86604,86606,86608,86610,86612,86614],{"class":157,"line":2122},[155,86585,73797],{"class":171},[155,86587,70174],{"class":69863},[155,86589,72049],{"class":226},[155,86591,317],{"class":171},[155,86593,81186],{"class":732},[155,86595,79615],{"class":171},[155,86597,37],{"class":69863},[155,86599,73802],{"class":226},[155,86601,317],{"class":171},[155,86603,83009],{"class":732},[155,86605,73810],{"class":226},[155,86607,317],{"class":171},[155,86609,15430],{"class":732},[155,86611,82982],{"class":171},[155,86613,70174],{"class":69863},[155,86615,69870],{"class":171},[155,86617,86618,86620,86622,86624,86626,86628,86630,86632,86634,86636,86638,86640,86642,86644,86646,86648],{"class":157,"line":2128},[155,86619,73797],{"class":171},[155,86621,70174],{"class":69863},[155,86623,72049],{"class":226},[155,86625,317],{"class":171},[155,86627,81186],{"class":732},[155,86629,79615],{"class":171},[155,86631,37],{"class":69863},[155,86633,73802],{"class":226},[155,86635,317],{"class":171},[155,86637,83044],{"class":732},[155,86639,73810],{"class":226},[155,86641,317],{"class":171},[155,86643,15430],{"class":732},[155,86645,82982],{"class":171},[155,86647,70174],{"class":69863},[155,86649,69870],{"class":171},[155,86651,86652,86654,86656,86658,86660,86662,86664,86666,86668,86670,86672,86674,86676,86678,86680,86682],{"class":157,"line":2138},[155,86653,73797],{"class":171},[155,86655,70174],{"class":69863},[155,86657,72049],{"class":226},[155,86659,317],{"class":171},[155,86661,81186],{"class":732},[155,86663,79615],{"class":171},[155,86665,37],{"class":69863},[155,86667,73802],{"class":226},[155,86669,317],{"class":171},[155,86671,83079],{"class":732},[155,86673,73810],{"class":226},[155,86675,317],{"class":171},[155,86677,15430],{"class":732},[155,86679,82982],{"class":171},[155,86681,70174],{"class":69863},[155,86683,69870],{"class":171},[155,86685,86686,86688,86690,86692,86694,86696,86698,86700,86702,86704,86706,86708,86710,86712,86714,86716],{"class":157,"line":2144},[155,86687,73797],{"class":171},[155,86689,70174],{"class":69863},[155,86691,72049],{"class":226},[155,86693,317],{"class":171},[155,86695,81186],{"class":732},[155,86697,79615],{"class":171},[155,86699,37],{"class":69863},[155,86701,73802],{"class":226},[155,86703,317],{"class":171},[155,86705,83114],{"class":732},[155,86707,73810],{"class":226},[155,86709,317],{"class":171},[155,86711,15430],{"class":732},[155,86713,82982],{"class":171},[155,86715,70174],{"class":69863},[155,86717,69870],{"class":171},[155,86719,86720,86722,86724],{"class":157,"line":2154},[155,86721,70339],{"class":171},[155,86723,70174],{"class":69863},[155,86725,69870],{"class":171},[155,86727,86728,86730,86732],{"class":157,"line":2160},[155,86729,70980],{"class":171},[155,86731,70174],{"class":69863},[155,86733,69870],{"class":171},[155,86735,86736,86738,86740],{"class":157,"line":2170},[155,86737,70707],{"class":171},[155,86739,70376],{"class":69863},[155,86741,69870],{"class":171},[155,86743,86744],{"class":157,"line":2176},[155,86745,86746],{"class":161},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[155,86748,86749],{"class":157,"line":2191},[155,86750,86751],{"class":161},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[155,86753,86754,86756,86758,86760,86762,86764,86766,86769],{"class":157,"line":2197},[155,86755,31049],{"class":167},[155,86757,79855],{"class":263},[155,86759,33391],{"class":167},[155,86761,72959],{"class":171},[155,86763,72962],{"class":226},[155,86765,230],{"class":171},[155,86767,86768],{"class":732},"'.tab-nav ul'",[155,86770,363],{"class":171},[155,86772,86773],{"class":157,"line":2208},[155,86774,86775],{"class":161},"    \u002F\u002F 2.添加事件\n",[155,86777,86778,86780,86782,86784,86786,86788,86790,86792,86794],{"class":157,"line":2214},[155,86779,85517],{"class":171},[155,86781,76376],{"class":226},[155,86783,230],{"class":171},[155,86785,76381],{"class":732},[155,86787,7589],{"class":171},[155,86789,73012],{"class":167},[155,86791,21561],{"class":171},[155,86793,20161],{"class":323},[155,86795,32269],{"class":171},[155,86797,86798,86800,86802],{"class":157,"line":2225},[155,86799,76807],{"class":171},[155,86801,85573],{"class":226},[155,86803,85576],{"class":171},[155,86805,86806],{"class":157,"line":2231},[155,86807,86808],{"class":161},"      \u002F\u002Fe.targer是我们点击的对象\n",[155,86810,86811,86813,86815,86817,86820],{"class":157,"line":2237},[155,86812,73043],{"class":167},[155,86814,85597],{"class":171},[155,86816,73049],{"class":167},[155,86818,86819],{"class":732}," 'A'",[155,86821,32269],{"class":171},[155,86823,86824,86826,86828,86830,86833,86835,86837,86839,86841],{"class":157,"line":2243},[155,86825,70488],{"class":171},[155,86827,72962],{"class":226},[155,86829,230],{"class":171},[155,86831,86832],{"class":732},"'.active'",[155,86834,75566],{"class":171},[155,86836,75569],{"class":226},[155,86838,230],{"class":171},[155,86840,83277],{"class":732},[155,86842,363],{"class":171},[155,86844,86845,86848,86850,86852,86854],{"class":157,"line":2249},[155,86846,86847],{"class":171},"        e.target.classList.",[155,86849,25197],{"class":226},[155,86851,230],{"class":171},[155,86853,83277],{"class":732},[155,86855,363],{"class":171},[155,86857,86858],{"class":157,"line":2260},[155,86859,217],{"emptyLinePlaceholder":216},[155,86861,86862],{"class":157,"line":2266},[155,86863,86864],{"class":161},"        \u002F\u002F 下面大盒子模块\n",[155,86866,86867],{"class":157,"line":2286},[155,86868,86869],{"class":161},"        \u002F\u002F console.log(e.target.dataset.id)\n",[155,86871,86872,86874,86876,86878,86880],{"class":157,"line":2292},[155,86873,79833],{"class":167},[155,86875,22907],{"class":263},[155,86877,33391],{"class":167},[155,86879,15186],{"class":167},[155,86881,86882],{"class":171},"e.target.dataset.id\n",[155,86884,86885,86887,86889,86891,86893,86895,86897,86899,86901],{"class":157,"line":2303},[155,86886,70488],{"class":171},[155,86888,72962],{"class":226},[155,86890,230],{"class":171},[155,86892,83325],{"class":732},[155,86894,75566],{"class":171},[155,86896,75569],{"class":226},[155,86898,230],{"class":171},[155,86900,83277],{"class":732},[155,86902,363],{"class":171},[155,86904,86905,86907,86909,86911,86913,86915,86917,86919,86921,86923,86925,86927,86929],{"class":157,"line":2309},[155,86906,70488],{"class":171},[155,86908,72962],{"class":226},[155,86910,230],{"class":171},[155,86912,83351],{"class":732},[155,86914,20513],{"class":171},[155,86916,15186],{"class":167},[155,86918,1277],{"class":263},[155,86920,75595],{"class":732},[155,86922,75566],{"class":171},[155,86924,25197],{"class":226},[155,86926,230],{"class":171},[155,86928,83277],{"class":732},[155,86930,363],{"class":171},[155,86932,86933],{"class":157,"line":2315},[155,86934,217],{"emptyLinePlaceholder":216},[155,86936,86937],{"class":157,"line":2321},[155,86938,70961],{"class":171},[155,86940,86941],{"class":157,"line":2327},[155,86942,3065],{"class":171},[155,86944,86945,86947,86949],{"class":157,"line":2333},[155,86946,70980],{"class":171},[155,86948,70376],{"class":69863},[155,86950,69870],{"class":171},[155,86952,86953,86955,86957],{"class":157,"line":2339},[155,86954,70348],{"class":171},[155,86956,70363],{"class":69863},[155,86958,69870],{"class":171},[155,86960,86961],{"class":157,"line":2345},[155,86962,217],{"emptyLinePlaceholder":216},[155,86964,86965,86967,86969],{"class":157,"line":2366},[155,86966,70348],{"class":171},[155,86968,69198],{"class":69863},[155,86970,69870],{"class":171},[14,86972,86974],{"id":86973},"_333-页面加载事件","3.3.3 页面加载事件",[28,86976,86977],{},[31,86978,86979],{},"load",[24,86981,86982],{},[37,86983],{"alt":39,"src":86984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[24,86986,86987],{},"window代表整个窗口，比document还要大",[24,86989,86990],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[24,86992,86993],{},"img.addEventListener('load', function () {",[24,86995,86996],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[24,86998,71027],{},[28,87000,87001],{"start":46},[31,87002,87003],{},"DOMContentLoaded",[24,87005,87006],{},[37,87007],{"alt":39,"src":87008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[24,87010,87011],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[14,87013,87015],{"id":87014},"_334-元素滚动事件","3.3.4 元素滚动事件",[24,87017,87018],{},[37,87019],{"alt":39,"src":87020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[24,87022,87023],{},[37,87024],{"alt":39,"src":87025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[24,87027,87028],{},[37,87029],{"alt":39,"src":87030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[24,87032,87033],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[24,87035,87036],{},"获得的是数字型数据，不带单位",[24,87038,87039],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[24,87041,87042],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[24,87044,87045],{},"它是通过document.documentElement来获取",[24,87047,87048],{},[37,87049],{"alt":39,"src":87050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[24,87052,87053],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[14,87055,87057],{"id":87056},"_335-页面缩放事件","3.3.5 页面缩放事件",[24,87059,87060],{},[37,87061],{"alt":39,"src":87062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[24,87064,87065],{},[37,87066],{"alt":39,"src":87067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[14,87069,87071],{"id":87070},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[24,87073,87074],{},[37,87075],{"alt":39,"src":87076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[24,87078,87079],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[24,87081,87082],{},[37,87083],{"alt":39,"src":87084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[24,87086,87087],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[24,87089,87090],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[24,87092,87093],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[24,87095,87096],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[24,87098,87099],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[24,87101,87102],{},[37,87103],{"alt":39,"src":87104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[24,87106,87107],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[24,87109,87110],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[24,87112,87113],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[24,87115,87116],{},"e.pageX-box.getBoundingClientRect()",[14,87118,87120],{"id":87119},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[24,87122,87123],{},[37,87124],{"alt":39,"src":87125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[24,87127,87128],{},"这个是相对于视口来说的，它是个方法，不是属性值",[14,87130,87132],{"id":87131},"_338-总结","3.3.8 总结",[24,87134,87135],{},[37,87136],{"alt":39,"src":87137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[24,87139,87140],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[24,87142,87143],{},"修改盒子的宽高只能通过width和height来实现",[14,87145,87147],{"id":87146},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[146,87149,87151],{"className":69196,"code":87150,"language":69198,"meta":39,"style":39},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[152,87152,87153,87158,87163,87168,87173],{"__ignoreMap":39},[155,87154,87155],{"class":157,"line":158},[155,87156,87157],{"class":171},"\u002F* 页面滑动 *\u002F\n",[155,87159,87160],{"class":157,"line":46},[155,87161,87162],{"class":171},"html {\n",[155,87164,87165],{"class":157,"line":121},[155,87166,87167],{"class":171},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[155,87169,87170],{"class":157,"line":180},[155,87171,87172],{"class":171},"  scroll-behavior: smooth;\n",[155,87174,87175],{"class":157,"line":194},[155,87176,21475],{"class":171},[24,87178,87179],{},"默认是auto",[14,87181,87183],{"id":87182},"_3310-日期对象","3.3.10 日期对象",[19,87185,87187],{"id":87186},"_33101-实例化","3.3.10.1 实例化",[24,87189,87190],{},[37,87191],{"alt":39,"src":87192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[19,87194,87196],{"id":87195},"_33102-时期对象方法","3.3.10.2 时期对象方法",[24,87198,87199],{},[37,87200],{"alt":39,"src":87201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[24,87203,87204],{},"月份+1",[24,87206,87207],{},"老外认为第一天为0，星期天",[24,87209,87210],{},"方法使用的时候必须要跟括号",[24,87212,87213],{},"快速获得日期",[24,87215,87216],{},"\u002F\u002F 得到年月日",[24,87218,87219],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[24,87221,87222],{},"\u002F\u002F 得到当地日期",[24,87224,87225],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[24,87227,87228],{},"\u002F\u002F 得到当地时间",[24,87230,87231],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[24,87233,87234],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[24,87236,87237],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[70376,87239,87240],{},"\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",[24,87242,87243],{},"学会去封装函数！",[19,87245,87247],{"id":87246},"_33103-时间戳","3.3.10.3 时间戳",[24,87249,87250],{},[37,87251],{"alt":39,"src":87252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[24,87254,87255],{},[37,87256],{"alt":39,"src":87257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[24,87259,87260],{},"三种方法记住一个就可以",[14,87262,87264],{"id":87263},"_3311-节点操作","3.3.11 节点操作",[19,87266,87268],{"id":87267},"_33111-dom节点","3.3.11.1 DOM节点",[24,87270,87271],{},[37,87272],{"alt":39,"src":87273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[24,87275,87276],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[19,87278,87280],{"id":87279},"_33112-查找节点","3.3.11.2 查找节点",[24,87282,87283],{},"前边的document.querySelector()是获取的元素",[24,87285,87286],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[24,87288,87289],{},[37,87290],{"alt":39,"src":87291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[28,87293,87294],{},[31,87295,87296],{},"父节点",[24,87298,87299],{},[37,87300],{"alt":39,"src":87301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[28,87303,87304],{"start":46},[31,87305,87306],{},"子节点",[24,87308,87309],{},[37,87310],{"alt":39,"src":87311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[24,87313,87314],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[24,87316,87317],{},"children获得的是伪数组，是亲儿子",[28,87319,87320],{"start":121},[31,87321,87322],{},"兄弟节点",[24,87324,87325],{},[37,87326],{"alt":39,"src":87327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[19,87329,87331],{"id":87330},"_33113-增加节点","3.3.11.3 增加节点",[24,87333,87334],{},[37,87335],{"alt":39,"src":87336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[24,87338,87339],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[24,87341,87342],{},[37,87343],{"alt":39,"src":87344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[24,87346,87347],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[24,87349,87350],{},"下面是写法的部分展示，就按照下边的格式来写",[24,87352,87353],{},"例：",[70376,87355,87356],{},"\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",[24,87358,87359],{},[37,87360],{"alt":39,"src":87361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[24,87363,87364],{},"false只克隆标签，里边的内容不会克隆过来",[146,87366,87368],{"className":69196,"code":87367,"language":69198,"meta":39,"style":39},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[152,87369,87370],{"__ignoreMap":39},[155,87371,87372],{"class":157,"line":158},[155,87373,87367],{"class":171},[19,87375,87377],{"id":87376},"_33114-删除节点","3.3.11.4 删除节点",[24,87379,87380],{},[37,87381],{"alt":39,"src":87382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[24,87384,87385],{},"父亲删儿子",[24,87387,87388],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[14,87390,87392],{"id":87391},"_3312-m端事件","3.3.12 M端事件",[24,87394,87395],{},"M端就是移动端",[24,87397,87398],{},[37,87399],{"alt":39,"src":87400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[14,87402,87404],{"id":87403},"_3313-插件","3.3.13 插件",[24,87406,87407],{},"要熟悉官网！！！",[24,87409,87410],{},[20318,87411,87412],{"href":87412,"rel":87413},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[43656],[24,87415,87416],{},[20318,87417,87418],{"href":87418,"rel":87419},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[43656],[14,87421,87423],{"id":87422},"_3314-学生信息表","3.3.14 学生信息表",[28,87425,87426,87429,87432,87435,87438,87441,87444,87447],{},[31,87427,87428],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[31,87430,87431],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[31,87433,87434],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[31,87436,87437],{},"用好表单元素自带的属性，value,name等",[31,87439,87440],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[31,87442,87443],{},"不要忘记事件对象",[31,87445,87446],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[31,87448,87449],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[24,87451,87452],{},"结构：",[146,87454,87456],{"className":69196,"code":87455,"language":69198,"meta":39,"style":39},"\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",[152,87457,87458,87468,87482,87486,87494,87508,87528,87549,87562,87586,87594,87598,87606,87619,87640,87668,87696,87701,87723,87743,87762,87770,87798,87820,87840,87860,87880,87900,87920,87928,87948,87956,87960,87973,87981,87989,87997,88010,88023,88036,88049,88062,88075,88088,88096,88104,88112,88117,88122,88127,88132,88137,88142,88147,88152,88157,88162,88167,88172,88177,88185,88193,88201,88205,88225,88244,88264,88284,88304,88324,88328,88333,88353,88358,88368,88373,88378,88398,88420,88425,88435,88439,88443,88448,88453,88482,88496,88511,88515,88519,88523,88528,88539,88552,88557,88562,88567,88572,88577,88581,88586,88591,88600,88605,88610,88622,88627,88634,88638,88643,88653,88658,88668,88673,88701,88722,88732,88752,88770,88787,88804,88821,88838,88842,88852,88857,88862,88867,88878,88882,88886,88890,88895,88900,88921,88933,88938,88943,88948,88962,88967,88974,88978,88982,88990,88994,89002,89006],{"__ignoreMap":39},[155,87459,87460,87462,87464,87466],{"class":157,"line":158},[155,87461,69860],{"class":171},[155,87463,69864],{"class":69863},[155,87465,69867],{"class":226},[155,87467,69870],{"class":171},[155,87469,87470,87472,87474,87476,87478,87480],{"class":157,"line":46},[155,87471,20959],{"class":171},[155,87473,69198],{"class":69863},[155,87475,69879],{"class":226},[155,87477,317],{"class":171},[155,87479,69884],{"class":732},[155,87481,69870],{"class":171},[155,87483,87484],{"class":157,"line":121},[155,87485,217],{"emptyLinePlaceholder":216},[155,87487,87488,87490,87492],{"class":157,"line":180},[155,87489,20959],{"class":171},[155,87491,69897],{"class":69863},[155,87493,69870],{"class":171},[155,87495,87496,87498,87500,87502,87504,87506],{"class":157,"line":194},[155,87497,70707],{"class":171},[155,87499,69907],{"class":69863},[155,87501,69910],{"class":226},[155,87503,317],{"class":171},[155,87505,69915],{"class":732},[155,87507,77690],{"class":171},[155,87509,87510,87512,87514,87516,87518,87520,87522,87524,87526],{"class":157,"line":200},[155,87511,70707],{"class":171},[155,87513,69907],{"class":69863},[155,87515,34745],{"class":226},[155,87517,317],{"class":171},[155,87519,69954],{"class":732},[155,87521,69934],{"class":226},[155,87523,317],{"class":171},[155,87525,69961],{"class":732},[155,87527,77690],{"class":171},[155,87529,87530,87532,87534,87536,87538,87540,87542,87544,87547],{"class":157,"line":213},[155,87531,70707],{"class":171},[155,87533,69907],{"class":69863},[155,87535,69926],{"class":226},[155,87537,317],{"class":171},[155,87539,69931],{"class":732},[155,87541,69934],{"class":226},[155,87543,317],{"class":171},[155,87545,87546],{"class":732},"\"ie=edge\"",[155,87548,77690],{"class":171},[155,87550,87551,87553,87555,87558,87560],{"class":157,"line":220},[155,87552,70707],{"class":171},[155,87554,69970],{"class":69863},[155,87556,87557],{"class":171},">学生信息管理\u003C\u002F",[155,87559,69970],{"class":69863},[155,87561,69870],{"class":171},[155,87563,87564,87566,87569,87572,87574,87577,87579,87581,87584],{"class":157,"line":245},[155,87565,70707],{"class":171},[155,87567,87568],{"class":69863},"link",[155,87570,87571],{"class":226}," rel",[155,87573,317],{"class":171},[155,87575,87576],{"class":732},"\"stylesheet\"",[155,87578,79620],{"class":226},[155,87580,317],{"class":171},[155,87582,87583],{"class":732},"\"css\u002Findex.css\"",[155,87585,77690],{"class":171},[155,87587,87588,87590,87592],{"class":157,"line":251},[155,87589,70348],{"class":171},[155,87591,69897],{"class":69863},[155,87593,69870],{"class":171},[155,87595,87596],{"class":157,"line":257},[155,87597,217],{"emptyLinePlaceholder":216},[155,87599,87600,87602,87604],{"class":157,"line":270},[155,87601,20959],{"class":171},[155,87603,70363],{"class":69863},[155,87605,69870],{"class":171},[155,87607,87608,87610,87612,87615,87617],{"class":157,"line":276},[155,87609,70707],{"class":171},[155,87611,10],{"class":69863},[155,87613,87614],{"class":171},">新增学员\u003C\u002F",[155,87616,10],{"class":69863},[155,87618,69870],{"class":171},[155,87620,87621,87623,87625,87627,87629,87631,87634,87636,87638],{"class":157,"line":297},[155,87622,70707],{"class":171},[155,87624,85188],{"class":69863},[155,87626,72049],{"class":226},[155,87628,317],{"class":171},[155,87630,81227],{"class":732},[155,87632,87633],{"class":226}," autocomplete",[155,87635,317],{"class":171},[155,87637,1313],{"class":732},[155,87639,69870],{"class":171},[155,87641,87642,87645,87647,87649,87651,87653,87655,87657,87660,87662,87664,87666],{"class":157,"line":302},[155,87643,87644],{"class":171},"    姓名：\u003C",[155,87646,72384],{"class":69863},[155,87648,72387],{"class":226},[155,87650,317],{"class":171},[155,87652,81262],{"class":732},[155,87654,72049],{"class":226},[155,87656,317],{"class":171},[155,87658,87659],{"class":732},"\"uname\"",[155,87661,34745],{"class":226},[155,87663,317],{"class":171},[155,87665,87659],{"class":732},[155,87667,77690],{"class":171},[155,87669,87670,87673,87675,87677,87679,87681,87683,87685,87688,87690,87692,87694],{"class":157,"line":308},[155,87671,87672],{"class":171},"    年龄：\u003C",[155,87674,72384],{"class":69863},[155,87676,72387],{"class":226},[155,87678,317],{"class":171},[155,87680,81262],{"class":732},[155,87682,72049],{"class":226},[155,87684,317],{"class":171},[155,87686,87687],{"class":732},"\"age\"",[155,87689,34745],{"class":226},[155,87691,317],{"class":171},[155,87693,87687],{"class":732},[155,87695,77690],{"class":171},[155,87697,87698],{"class":157,"line":366},[155,87699,87700],{"class":171},"    性别:\n",[155,87702,87703,87705,87708,87710,87712,87715,87717,87719,87721],{"class":157,"line":379},[155,87704,69904],{"class":171},[155,87706,87707],{"class":69863},"select",[155,87709,34745],{"class":226},[155,87711,317],{"class":171},[155,87713,87714],{"class":732},"\"gender\"",[155,87716,72049],{"class":226},[155,87718,317],{"class":171},[155,87720,87714],{"class":732},[155,87722,69870],{"class":171},[155,87724,87725,87727,87730,87732,87734,87736,87739,87741],{"class":157,"line":385},[155,87726,73797],{"class":171},[155,87728,87729],{"class":69863},"option",[155,87731,85214],{"class":226},[155,87733,317],{"class":171},[155,87735,29790],{"class":732},[155,87737,87738],{"class":171},">男\u003C\u002F",[155,87740,87729],{"class":69863},[155,87742,69870],{"class":171},[155,87744,87745,87747,87749,87751,87753,87755,87758,87760],{"class":157,"line":415},[155,87746,73797],{"class":171},[155,87748,87729],{"class":69863},[155,87750,85214],{"class":226},[155,87752,317],{"class":171},[155,87754,29859],{"class":732},[155,87756,87757],{"class":171},">女\u003C\u002F",[155,87759,87729],{"class":69863},[155,87761,69870],{"class":171},[155,87763,87764,87766,87768],{"class":157,"line":452},[155,87765,70339],{"class":171},[155,87767,87707],{"class":69863},[155,87769,69870],{"class":171},[155,87771,87772,87775,87777,87779,87781,87783,87785,87787,87790,87792,87794,87796],{"class":157,"line":480},[155,87773,87774],{"class":171},"    薪资：\u003C",[155,87776,72384],{"class":69863},[155,87778,72387],{"class":226},[155,87780,317],{"class":171},[155,87782,81262],{"class":732},[155,87784,72049],{"class":226},[155,87786,317],{"class":171},[155,87788,87789],{"class":732},"\"salary\"",[155,87791,34745],{"class":226},[155,87793,317],{"class":171},[155,87795,87789],{"class":732},[155,87797,77690],{"class":171},[155,87799,87800,87803,87805,87807,87809,87812,87814,87816,87818],{"class":157,"line":486},[155,87801,87802],{"class":171},"    就业城市：\u003C",[155,87804,87707],{"class":69863},[155,87806,34745],{"class":226},[155,87808,317],{"class":171},[155,87810,87811],{"class":732},"\"city\"",[155,87813,72049],{"class":226},[155,87815,317],{"class":171},[155,87817,87811],{"class":732},[155,87819,69870],{"class":171},[155,87821,87822,87824,87826,87828,87830,87833,87836,87838],{"class":157,"line":499},[155,87823,73797],{"class":171},[155,87825,87729],{"class":69863},[155,87827,85214],{"class":226},[155,87829,317],{"class":171},[155,87831,87832],{"class":732},"\"北京\"",[155,87834,87835],{"class":171},">北京\u003C\u002F",[155,87837,87729],{"class":69863},[155,87839,69870],{"class":171},[155,87841,87842,87844,87846,87848,87850,87853,87856,87858],{"class":157,"line":505},[155,87843,73797],{"class":171},[155,87845,87729],{"class":69863},[155,87847,85214],{"class":226},[155,87849,317],{"class":171},[155,87851,87852],{"class":732},"\"上海\"",[155,87854,87855],{"class":171},">上海\u003C\u002F",[155,87857,87729],{"class":69863},[155,87859,69870],{"class":171},[155,87861,87862,87864,87866,87868,87870,87873,87876,87878],{"class":157,"line":528},[155,87863,73797],{"class":171},[155,87865,87729],{"class":69863},[155,87867,85214],{"class":226},[155,87869,317],{"class":171},[155,87871,87872],{"class":732},"\"广州\"",[155,87874,87875],{"class":171},">广州\u003C\u002F",[155,87877,87729],{"class":69863},[155,87879,69870],{"class":171},[155,87881,87882,87884,87886,87888,87890,87893,87896,87898],{"class":157,"line":549},[155,87883,73797],{"class":171},[155,87885,87729],{"class":69863},[155,87887,85214],{"class":226},[155,87889,317],{"class":171},[155,87891,87892],{"class":732},"\"深圳\"",[155,87894,87895],{"class":171},">深圳\u003C\u002F",[155,87897,87729],{"class":69863},[155,87899,69870],{"class":171},[155,87901,87902,87904,87906,87908,87910,87913,87916,87918],{"class":157,"line":570},[155,87903,73797],{"class":171},[155,87905,87729],{"class":69863},[155,87907,85214],{"class":226},[155,87909,317],{"class":171},[155,87911,87912],{"class":732},"\"曹县\"",[155,87914,87915],{"class":171},">曹县\u003C\u002F",[155,87917,87729],{"class":69863},[155,87919,69870],{"class":171},[155,87921,87922,87924,87926],{"class":157,"line":575},[155,87923,70339],{"class":171},[155,87925,87707],{"class":69863},[155,87927,69870],{"class":171},[155,87929,87930,87932,87934,87936,87938,87941,87944,87946],{"class":157,"line":581},[155,87931,69904],{"class":171},[155,87933,72450],{"class":69863},[155,87935,72049],{"class":226},[155,87937,317],{"class":171},[155,87939,87940],{"class":732},"\"add\"",[155,87942,87943],{"class":171},">录入\u003C\u002F",[155,87945,72450],{"class":69863},[155,87947,69870],{"class":171},[155,87949,87950,87952,87954],{"class":157,"line":592},[155,87951,70980],{"class":171},[155,87953,85188],{"class":69863},[155,87955,69870],{"class":171},[155,87957,87958],{"class":157,"line":610},[155,87959,217],{"emptyLinePlaceholder":216},[155,87961,87962,87964,87966,87969,87971],{"class":157,"line":622},[155,87963,70707],{"class":171},[155,87965,10],{"class":69863},[155,87967,87968],{"class":171},">就业榜\u003C\u002F",[155,87970,10],{"class":69863},[155,87972,69870],{"class":171},[155,87974,87975,87977,87979],{"class":157,"line":638},[155,87976,70707],{"class":171},[155,87978,20222],{"class":69863},[155,87980,69870],{"class":171},[155,87982,87983,87985,87987],{"class":157,"line":650},[155,87984,69904],{"class":171},[155,87986,20225],{"class":69863},[155,87988,69870],{"class":171},[155,87990,87991,87993,87995],{"class":157,"line":662},[155,87992,73797],{"class":171},[155,87994,20228],{"class":69863},[155,87996,69870],{"class":171},[155,87998,87999,88001,88003,88006,88008],{"class":157,"line":678},[155,88000,73865],{"class":171},[155,88002,20231],{"class":69863},[155,88004,88005],{"class":171},">序号\u003C\u002F",[155,88007,20231],{"class":69863},[155,88009,69870],{"class":171},[155,88011,88012,88014,88016,88019,88021],{"class":157,"line":694},[155,88013,73865],{"class":171},[155,88015,20231],{"class":69863},[155,88017,88018],{"class":171},">姓名\u003C\u002F",[155,88020,20231],{"class":69863},[155,88022,69870],{"class":171},[155,88024,88025,88027,88029,88032,88034],{"class":157,"line":706},[155,88026,73865],{"class":171},[155,88028,20231],{"class":69863},[155,88030,88031],{"class":171},">年龄\u003C\u002F",[155,88033,20231],{"class":69863},[155,88035,69870],{"class":171},[155,88037,88038,88040,88042,88045,88047],{"class":157,"line":715},[155,88039,73865],{"class":171},[155,88041,20231],{"class":69863},[155,88043,88044],{"class":171},">性别\u003C\u002F",[155,88046,20231],{"class":69863},[155,88048,69870],{"class":171},[155,88050,88051,88053,88055,88058,88060],{"class":157,"line":720},[155,88052,73865],{"class":171},[155,88054,20231],{"class":69863},[155,88056,88057],{"class":171},">薪资\u003C\u002F",[155,88059,20231],{"class":69863},[155,88061,69870],{"class":171},[155,88063,88064,88066,88068,88071,88073],{"class":157,"line":739},[155,88065,73865],{"class":171},[155,88067,20231],{"class":69863},[155,88069,88070],{"class":171},">就业城市\u003C\u002F",[155,88072,20231],{"class":69863},[155,88074,69870],{"class":171},[155,88076,88077,88079,88081,88084,88086],{"class":157,"line":745},[155,88078,73865],{"class":171},[155,88080,20231],{"class":69863},[155,88082,88083],{"class":171},">操作\u003C\u002F",[155,88085,20231],{"class":69863},[155,88087,69870],{"class":171},[155,88089,88090,88092,88094],{"class":157,"line":773},[155,88091,73970],{"class":171},[155,88093,20228],{"class":69863},[155,88095,69870],{"class":171},[155,88097,88098,88100,88102],{"class":157,"line":779},[155,88099,70339],{"class":171},[155,88101,20225],{"class":69863},[155,88103,69870],{"class":171},[155,88105,88106,88108,88110],{"class":157,"line":785},[155,88107,69904],{"class":171},[155,88109,20269],{"class":69863},[155,88111,69870],{"class":171},[155,88113,88114],{"class":157,"line":791},[155,88115,88116],{"class":161},"      \u003C!-- \n",[155,88118,88119],{"class":157,"line":796},[155,88120,88121],{"class":161},"        \u003Ctr>\n",[155,88123,88124],{"class":157,"line":802},[155,88125,88126],{"class":161},"          \u003Ctd>1001\u003C\u002Ftd>\n",[155,88128,88129],{"class":157,"line":808},[155,88130,88131],{"class":161},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[155,88133,88134],{"class":157,"line":819},[155,88135,88136],{"class":161},"          \u003Ctd>19\u003C\u002Ftd>\n",[155,88138,88139],{"class":157,"line":1832},[155,88140,88141],{"class":161},"          \u003Ctd>男\u003C\u002Ftd>\n",[155,88143,88144],{"class":157,"line":1838},[155,88145,88146],{"class":161},"          \u003Ctd>15000\u003C\u002Ftd>\n",[155,88148,88149],{"class":157,"line":1844},[155,88150,88151],{"class":161},"          \u003Ctd>上海\u003C\u002Ftd>\n",[155,88153,88154],{"class":157,"line":1850},[155,88155,88156],{"class":161},"          \u003Ctd>\n",[155,88158,88159],{"class":157,"line":1861},[155,88160,88161],{"class":161},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[155,88163,88164],{"class":157,"line":1866},[155,88165,88166],{"class":161},"          \u003C\u002Ftd>\n",[155,88168,88169],{"class":157,"line":1871},[155,88170,88171],{"class":161},"        \u003C\u002Ftr> \n",[155,88173,88174],{"class":157,"line":1877},[155,88175,88176],{"class":161},"        -->\n",[155,88178,88179,88181,88183],{"class":157,"line":1883},[155,88180,70339],{"class":171},[155,88182,20269],{"class":69863},[155,88184,69870],{"class":171},[155,88186,88187,88189,88191],{"class":157,"line":1894},[155,88188,70980],{"class":171},[155,88190,20222],{"class":69863},[155,88192,69870],{"class":171},[155,88194,88195,88197,88199],{"class":157,"line":1900},[155,88196,70707],{"class":171},[155,88198,70376],{"class":69863},[155,88200,69870],{"class":171},[155,88202,88203],{"class":157,"line":1911},[155,88204,78521],{"class":161},[155,88206,88207,88209,88212,88214,88216,88218,88220,88223],{"class":157,"line":1917},[155,88208,31049],{"class":167},[155,88210,88211],{"class":263}," uname",[155,88213,33391],{"class":167},[155,88215,72959],{"class":171},[155,88217,72962],{"class":226},[155,88219,230],{"class":171},[155,88221,88222],{"class":732},"'.uname'",[155,88224,363],{"class":171},[155,88226,88227,88229,88231,88233,88235,88237,88239,88242],{"class":157,"line":1927},[155,88228,31049],{"class":167},[155,88230,35514],{"class":263},[155,88232,33391],{"class":167},[155,88234,72959],{"class":171},[155,88236,72962],{"class":226},[155,88238,230],{"class":171},[155,88240,88241],{"class":732},"'.age'",[155,88243,363],{"class":171},[155,88245,88246,88248,88251,88253,88255,88257,88259,88262],{"class":157,"line":1933},[155,88247,31049],{"class":167},[155,88249,88250],{"class":263}," gender",[155,88252,33391],{"class":167},[155,88254,72959],{"class":171},[155,88256,72962],{"class":226},[155,88258,230],{"class":171},[155,88260,88261],{"class":732},"'.gender'",[155,88263,363],{"class":171},[155,88265,88266,88268,88271,88273,88275,88277,88279,88282],{"class":157,"line":1943},[155,88267,31049],{"class":167},[155,88269,88270],{"class":263}," salary",[155,88272,33391],{"class":167},[155,88274,72959],{"class":171},[155,88276,72962],{"class":226},[155,88278,230],{"class":171},[155,88280,88281],{"class":732},"'.salary'",[155,88283,363],{"class":171},[155,88285,88286,88288,88291,88293,88295,88297,88299,88302],{"class":157,"line":1949},[155,88287,31049],{"class":167},[155,88289,88290],{"class":263}," city",[155,88292,33391],{"class":167},[155,88294,72959],{"class":171},[155,88296,72962],{"class":226},[155,88298,230],{"class":171},[155,88300,88301],{"class":732},"'.city'",[155,88303,363],{"class":171},[155,88305,88306,88308,88311,88313,88315,88317,88319,88322],{"class":157,"line":1959},[155,88307,31049],{"class":167},[155,88309,88310],{"class":263}," tbody",[155,88312,33391],{"class":167},[155,88314,72959],{"class":171},[155,88316,72962],{"class":226},[155,88318,230],{"class":171},[155,88320,88321],{"class":732},"'tbody'",[155,88323,363],{"class":171},[155,88325,88326],{"class":157,"line":1964},[155,88327,217],{"emptyLinePlaceholder":216},[155,88329,88330],{"class":157,"line":1970},[155,88331,88332],{"class":161},"    \u002F\u002F 获取所有带有name属性的元素\n",[155,88334,88335,88337,88340,88342,88344,88346,88348,88351],{"class":157,"line":1981},[155,88336,31049],{"class":167},[155,88338,88339],{"class":263}," items",[155,88341,33391],{"class":167},[155,88343,72959],{"class":171},[155,88345,74244],{"class":226},[155,88347,230],{"class":171},[155,88349,88350],{"class":732},"'[name]'",[155,88352,363],{"class":171},[155,88354,88355],{"class":157,"line":1986},[155,88356,88357],{"class":161},"    \u002F\u002F 声明一个空的数组\n",[155,88359,88360,88362,88364,88366],{"class":157,"line":1991},[155,88361,31049],{"class":167},[155,88363,76258],{"class":263},[155,88365,33391],{"class":167},[155,88367,70401],{"class":171},[155,88369,88370],{"class":157,"line":1997},[155,88371,88372],{"class":161},"    \u002F\u002F 1.录入模块\n",[155,88374,88375],{"class":157,"line":2014},[155,88376,88377],{"class":161},"    \u002F\u002F 1.1这是一个表单提交事件\n",[155,88379,88380,88382,88385,88387,88389,88391,88393,88396],{"class":157,"line":2046},[155,88381,31049],{"class":167},[155,88383,88384],{"class":263}," info",[155,88386,33391],{"class":167},[155,88388,72959],{"class":171},[155,88390,72962],{"class":226},[155,88392,230],{"class":171},[155,88394,88395],{"class":732},"'.info'",[155,88397,363],{"class":171},[155,88399,88400,88403,88405,88407,88410,88412,88414,88416,88418],{"class":157,"line":2062},[155,88401,88402],{"class":171},"    info.",[155,88404,76376],{"class":226},[155,88406,230],{"class":171},[155,88408,88409],{"class":732},"'submit'",[155,88411,7589],{"class":171},[155,88413,73012],{"class":167},[155,88415,21561],{"class":171},[155,88417,20161],{"class":323},[155,88419,32269],{"class":171},[155,88421,88422],{"class":157,"line":2067},[155,88423,88424],{"class":161},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[155,88426,88427,88430,88433],{"class":157,"line":2073},[155,88428,88429],{"class":171},"      e.",[155,88431,88432],{"class":226},"preventDefault",[155,88434,294],{"class":171},[155,88436,88437],{"class":157,"line":2079},[155,88438,78575],{"class":161},[155,88440,88441],{"class":157,"line":2089},[155,88442,217],{"emptyLinePlaceholder":216},[155,88444,88445],{"class":157,"line":2095},[155,88446,88447],{"class":161},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[155,88449,88450],{"class":157,"line":2106},[155,88451,88452],{"class":161},"      \u002F\u002F 先遍历循环\n",[155,88454,88455,88457,88459,88461,88463,88465,88467,88469,88471,88474,88476,88478,88480],{"class":157,"line":2112},[155,88456,70847],{"class":167},[155,88458,21561],{"class":171},[155,88460,70410],{"class":167},[155,88462,29287],{"class":171},[155,88464,317],{"class":167},[155,88466,1151],{"class":263},[155,88468,29294],{"class":171},[155,88470,20959],{"class":167},[155,88472,88473],{"class":171}," items.",[155,88475,70531],{"class":263},[155,88477,23086],{"class":171},[155,88479,22179],{"class":167},[155,88481,32269],{"class":171},[155,88483,88484,88486,88489,88491,88494],{"class":157,"line":2122},[155,88485,2803],{"class":167},[155,88487,88488],{"class":171}," (items[i].value ",[155,88490,73049],{"class":167},[155,88492,88493],{"class":732}," ''",[155,88495,32269],{"class":171},[155,88497,88498,88501,88504,88506,88509],{"class":157,"line":2128},[155,88499,88500],{"class":167},"          return",[155,88502,88503],{"class":226}," alert",[155,88505,230],{"class":171},[155,88507,88508],{"class":732},"'输入内容不能为空'",[155,88510,363],{"class":171},[155,88512,88513],{"class":157,"line":2138},[155,88514,22414],{"class":171},[155,88516,88517],{"class":157,"line":2144},[155,88518,70961],{"class":171},[155,88520,88521],{"class":157,"line":2154},[155,88522,217],{"emptyLinePlaceholder":216},[155,88524,88525],{"class":157,"line":2160},[155,88526,88527],{"class":161},"      \u002F\u002F 创建新的对象\n",[155,88529,88530,88532,88535,88537],{"class":157,"line":2170},[155,88531,76791],{"class":167},[155,88533,88534],{"class":263}," obj",[155,88536,33391],{"class":167},[155,88538,35397],{"class":171},[155,88540,88541,88544,88546,88548,88550],{"class":157,"line":2176},[155,88542,88543],{"class":171},"        stuID: arr.",[155,88545,70531],{"class":263},[155,88547,15186],{"class":167},[155,88549,1277],{"class":263},[155,88551,990],{"class":171},[155,88553,88554],{"class":157,"line":2191},[155,88555,88556],{"class":171},"        uname: uname.value,\n",[155,88558,88559],{"class":157,"line":2197},[155,88560,88561],{"class":171},"        age: age.value,\n",[155,88563,88564],{"class":157,"line":2208},[155,88565,88566],{"class":171},"        gender: gender.value,\n",[155,88568,88569],{"class":157,"line":2214},[155,88570,88571],{"class":171},"        salary: salary.value,\n",[155,88573,88574],{"class":157,"line":2225},[155,88575,88576],{"class":171},"        city: city.value\n",[155,88578,88579],{"class":157,"line":2231},[155,88580,70961],{"class":171},[155,88582,88583],{"class":157,"line":2237},[155,88584,88585],{"class":161},"      \u002F\u002F console.log(obj);\n",[155,88587,88588],{"class":157,"line":2243},[155,88589,88590],{"class":161},"      \u002F\u002F 追加到数组里面\n",[155,88592,88593,88595,88597],{"class":157,"line":2249},[155,88594,76570],{"class":171},[155,88596,70447],{"class":226},[155,88598,88599],{"class":171},"(obj)\n",[155,88601,88602],{"class":157,"line":2260},[155,88603,88604],{"class":161},"      \u002F\u002F console.log(arr);\n",[155,88606,88607],{"class":157,"line":2266},[155,88608,88609],{"class":161},"      \u002F\u002F 清空表单  reset重置表单\n",[155,88611,88612,88615,88617,88620],{"class":157,"line":2286},[155,88613,88614],{"class":263},"      this",[155,88616,236],{"class":171},[155,88618,88619],{"class":226},"reset",[155,88621,294],{"class":171},[155,88623,88624],{"class":157,"line":2292},[155,88625,88626],{"class":161},"      \u002F\u002F 调用渲染函数\n",[155,88628,88629,88632],{"class":157,"line":2303},[155,88630,88631],{"class":226},"      render",[155,88633,294],{"class":171},[155,88635,88636],{"class":157,"line":2309},[155,88637,3065],{"class":171},[155,88639,88640],{"class":157,"line":2315},[155,88641,88642],{"class":161},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[155,88644,88645,88648,88651],{"class":157,"line":2321},[155,88646,88647],{"class":167},"    function",[155,88649,88650],{"class":226}," render",[155,88652,30681],{"class":171},[155,88654,88655],{"class":157,"line":2327},[155,88656,88657],{"class":161},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[155,88659,88660,88663,88665],{"class":157,"line":2333},[155,88661,88662],{"class":171},"      tbody.innerHTML ",[155,88664,317],{"class":167},[155,88666,88667],{"class":732}," ''\n",[155,88669,88670],{"class":157,"line":2339},[155,88671,88672],{"class":161},"      \u002F\u002F 遍历数组\n",[155,88674,88675,88677,88679,88681,88683,88685,88687,88689,88691,88693,88695,88697,88699],{"class":157,"line":2345},[155,88676,70847],{"class":167},[155,88678,21561],{"class":171},[155,88680,70410],{"class":167},[155,88682,29287],{"class":171},[155,88684,317],{"class":167},[155,88686,1151],{"class":263},[155,88688,29294],{"class":171},[155,88690,20959],{"class":167},[155,88692,70528],{"class":171},[155,88694,70531],{"class":263},[155,88696,23086],{"class":171},[155,88698,22179],{"class":167},[155,88700,32269],{"class":171},[155,88702,88703,88705,88708,88710,88712,88715,88717,88720],{"class":157,"line":2366},[155,88704,79833],{"class":167},[155,88706,88707],{"class":263}," tr",[155,88709,33391],{"class":167},[155,88711,72959],{"class":171},[155,88713,88714],{"class":226},"createElement",[155,88716,230],{"class":171},[155,88718,88719],{"class":732},"'tr'",[155,88721,363],{"class":171},[155,88723,88724,88727,88729],{"class":157,"line":2372},[155,88725,88726],{"class":171},"        tr.innerHTML ",[155,88728,317],{"class":167},[155,88730,88731],{"class":732}," `\n",[155,88733,88734,88737,88739,88741,88743,88746,88749],{"class":157,"line":2388},[155,88735,88736],{"class":732},"        \u003Ctd>${",[155,88738,23749],{"class":171},[155,88740,4091],{"class":732},[155,88742,20513],{"class":171},[155,88744,88745],{"class":732},"].",[155,88747,88748],{"class":171},"stuID",[155,88750,88751],{"class":732},"}\u003C\u002Ftd>\n",[155,88753,88754,88757,88759,88761,88763,88765,88768],{"class":157,"line":2394},[155,88755,88756],{"class":732},"          \u003Ctd>${",[155,88758,23749],{"class":171},[155,88760,4091],{"class":732},[155,88762,20513],{"class":171},[155,88764,88745],{"class":732},[155,88766,88767],{"class":171},"uname",[155,88769,88751],{"class":732},[155,88771,88772,88774,88776,88778,88780,88782,88785],{"class":157,"line":2408},[155,88773,88756],{"class":732},[155,88775,23749],{"class":171},[155,88777,4091],{"class":732},[155,88779,20513],{"class":171},[155,88781,88745],{"class":732},[155,88783,88784],{"class":171},"age",[155,88786,88751],{"class":732},[155,88788,88789,88791,88793,88795,88797,88799,88802],{"class":157,"line":2414},[155,88790,88756],{"class":732},[155,88792,23749],{"class":171},[155,88794,4091],{"class":732},[155,88796,20513],{"class":171},[155,88798,88745],{"class":732},[155,88800,88801],{"class":171},"gender",[155,88803,88751],{"class":732},[155,88805,88806,88808,88810,88812,88814,88816,88819],{"class":157,"line":2429},[155,88807,88756],{"class":732},[155,88809,23749],{"class":171},[155,88811,4091],{"class":732},[155,88813,20513],{"class":171},[155,88815,88745],{"class":732},[155,88817,88818],{"class":171},"salary",[155,88820,88751],{"class":732},[155,88822,88823,88825,88827,88829,88831,88833,88836],{"class":157,"line":2435},[155,88824,88756],{"class":732},[155,88826,23749],{"class":171},[155,88828,4091],{"class":732},[155,88830,20513],{"class":171},[155,88832,88745],{"class":732},[155,88834,88835],{"class":171},"city",[155,88837,88751],{"class":732},[155,88839,88840],{"class":157,"line":2444},[155,88841,88156],{"class":732},[155,88843,88844,88847,88849],{"class":157,"line":2450},[155,88845,88846],{"class":732},"            \u003Ca href=\"javascript:\" data-id=${",[155,88848,20513],{"class":171},[155,88850,88851],{"class":732},"}>删除\u003C\u002Fa>\n",[155,88853,88854],{"class":157,"line":2459},[155,88855,88856],{"class":732},"          \u003C\u002Ftd> \n",[155,88858,88859],{"class":157,"line":2465},[155,88860,88861],{"class":732},"          `\n",[155,88863,88864],{"class":157,"line":2471},[155,88865,88866],{"class":161},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[155,88868,88869,88872,88875],{"class":157,"line":2480},[155,88870,88871],{"class":171},"        tbody.",[155,88873,88874],{"class":226},"appendChild",[155,88876,88877],{"class":171},"(tr)\n",[155,88879,88880],{"class":157,"line":2486},[155,88881,70961],{"class":171},[155,88883,88884],{"class":157,"line":2497},[155,88885,22074],{"class":171},[155,88887,88888],{"class":157,"line":2503},[155,88889,217],{"emptyLinePlaceholder":216},[155,88891,88892],{"class":157,"line":2522},[155,88893,88894],{"class":161},"    \u002F\u002F 3.删除委托\n",[155,88896,88897],{"class":157,"line":2528},[155,88898,88899],{"class":161},"    \u002F\u002F 3.1 事件委托 tbody\n",[155,88901,88902,88905,88907,88909,88911,88913,88915,88917,88919],{"class":157,"line":2539},[155,88903,88904],{"class":171},"    tbody.",[155,88906,76376],{"class":226},[155,88908,230],{"class":171},[155,88910,76381],{"class":732},[155,88912,7589],{"class":171},[155,88914,73012],{"class":167},[155,88916,21561],{"class":171},[155,88918,20161],{"class":323},[155,88920,32269],{"class":171},[155,88922,88923,88925,88927,88929,88931],{"class":157,"line":2545},[155,88924,73043],{"class":167},[155,88926,85597],{"class":171},[155,88928,73049],{"class":167},[155,88930,86819],{"class":732},[155,88932,32269],{"class":171},[155,88934,88935],{"class":157,"line":2565},[155,88936,88937],{"class":161},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[155,88939,88940],{"class":157,"line":2581},[155,88941,88942],{"class":161},"        \u002F\u002F console.log(e.target.dataset.id);\n",[155,88944,88945],{"class":157,"line":2587},[155,88946,88947],{"class":161},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[155,88949,88950,88953,88955,88958,88960],{"class":157,"line":2601},[155,88951,88952],{"class":171},"        arr.",[155,88954,76573],{"class":226},[155,88956,88957],{"class":171},"(e.target.dataset.id, ",[155,88959,329],{"class":263},[155,88961,363],{"class":171},[155,88963,88964],{"class":157,"line":2607},[155,88965,88966],{"class":161},"        \u002F\u002F 重新渲染一次\n",[155,88968,88969,88972],{"class":157,"line":2613},[155,88970,88971],{"class":226},"        render",[155,88973,294],{"class":171},[155,88975,88976],{"class":157,"line":2624},[155,88977,70961],{"class":171},[155,88979,88980],{"class":157,"line":2630},[155,88981,3065],{"class":171},[155,88983,88984,88986,88988],{"class":157,"line":2636},[155,88985,70980],{"class":171},[155,88987,70376],{"class":69863},[155,88989,69870],{"class":171},[155,88991,88992],{"class":157,"line":2646},[155,88993,217],{"emptyLinePlaceholder":216},[155,88995,88996,88998,89000],{"class":157,"line":2652},[155,88997,70348],{"class":171},[155,88999,70363],{"class":69863},[155,89001,69870],{"class":171},[155,89003,89004],{"class":157,"line":2663},[155,89005,217],{"emptyLinePlaceholder":216},[155,89007,89008,89010,89012],{"class":157,"line":2669},[155,89009,70348],{"class":171},[155,89011,69198],{"class":69863},[155,89013,69870],{"class":171},[24,89015,89016],{},"样式：",[146,89018,89022],{"className":89019,"code":89020,"language":89021,"meta":39,"style":39},"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",[152,89023,89024,89029,89039,89048,89052,89056,89061,89071,89076,89080,89085,89095,89100,89109,89113,89117,89122,89127,89137,89147,89152,89156,89161,89170,89180,89185,89195,89205,89209,89214,89222,89226,89231,89236,89241,89249,89258,89262,89267,89276,89280,89285,89294,89298,89303,89312,89321,89329,89333,89338,89347,89357,89366,89376,89382,89391,89401,89411,89415,89420,89429,89437,89447,89455,89464,89473,89483,89491,89495,89500,89509],{"__ignoreMap":39},[155,89025,89026],{"class":157,"line":158},[155,89027,89028],{"class":171},"* {\n",[155,89030,89031,89034,89036],{"class":157,"line":46},[155,89032,89033],{"class":69863},"  margin",[155,89035,70000],{"class":171},[155,89037,89038],{"class":732},"0;\n",[155,89040,89041,89044,89046],{"class":157,"line":121},[155,89042,89043],{"class":732},"  padding",[155,89045,70000],{"class":171},[155,89047,89038],{"class":732},[155,89049,89050],{"class":157,"line":180},[155,89051,21475],{"class":171},[155,89053,89054],{"class":157,"line":194},[155,89055,217],{"emptyLinePlaceholder":216},[155,89057,89058],{"class":157,"line":200},[155,89059,89060],{"class":732},"a {\n",[155,89062,89063,89066,89068],{"class":157,"line":213},[155,89064,89065],{"class":69863},"  text-decoration",[155,89067,70000],{"class":171},[155,89069,89070],{"class":732},"none;\n",[155,89072,89073],{"class":157,"line":220},[155,89074,89075],{"class":732},"  color:#721c24;\n",[155,89077,89078],{"class":157,"line":245},[155,89079,21475],{"class":171},[155,89081,89082],{"class":157,"line":251},[155,89083,89084],{"class":732},"h1 {\n",[155,89086,89087,89090,89092],{"class":157,"line":257},[155,89088,89089],{"class":69863},"  text-align",[155,89091,70000],{"class":171},[155,89093,89094],{"class":732},"center;\n",[155,89096,89097],{"class":157,"line":270},[155,89098,89099],{"class":732},"  color:#333;\n",[155,89101,89102,89104,89106],{"class":157,"line":276},[155,89103,89033],{"class":69863},[155,89105,70000],{"class":171},[155,89107,89108],{"class":732},"20px 0;\n",[155,89110,89111],{"class":157,"line":297},[155,89112,22551],{"class":171},[155,89114,89115],{"class":157,"line":302},[155,89116,21475],{"class":171},[155,89118,89119],{"class":157,"line":308},[155,89120,89121],{"class":732},"table {\n",[155,89123,89124],{"class":157,"line":366},[155,89125,89126],{"class":732},"  margin:0 auto;\n",[155,89128,89129,89132,89134],{"class":157,"line":379},[155,89130,89131],{"class":69863},"  width",[155,89133,70000],{"class":171},[155,89135,89136],{"class":732},"800px;\n",[155,89138,89139,89142,89144],{"class":157,"line":385},[155,89140,89141],{"class":69863},"  border-collapse",[155,89143,70000],{"class":171},[155,89145,89146],{"class":732},"collapse;\n",[155,89148,89149],{"class":157,"line":415},[155,89150,89151],{"class":732},"  color:#004085;\n",[155,89153,89154],{"class":157,"line":452},[155,89155,21475],{"class":171},[155,89157,89158],{"class":157,"line":480},[155,89159,89160],{"class":732},"th {\n",[155,89162,89163,89165,89167],{"class":157,"line":486},[155,89164,89043],{"class":69863},[155,89166,70000],{"class":171},[155,89168,89169],{"class":732},"10px;\n",[155,89171,89172,89175,89177],{"class":157,"line":499},[155,89173,89174],{"class":69863},"  background",[155,89176,70000],{"class":171},[155,89178,89179],{"class":161},"#cfe5ff;\n",[155,89181,89182],{"class":157,"line":505},[155,89183,89184],{"class":171},"  \n",[155,89186,89187,89190,89192],{"class":157,"line":528},[155,89188,89189],{"class":69863},"  font-size",[155,89191,70000],{"class":171},[155,89193,89194],{"class":732},"20px;\n",[155,89196,89197,89200,89202],{"class":157,"line":549},[155,89198,89199],{"class":69863},"  font-weight",[155,89201,70000],{"class":171},[155,89203,89204],{"class":732},"400;\n",[155,89206,89207],{"class":157,"line":570},[155,89208,21475],{"class":171},[155,89210,89211],{"class":157,"line":575},[155,89212,89213],{"class":732},"td,th {\n",[155,89215,89216,89219],{"class":157,"line":581},[155,89217,89218],{"class":732},"  border:1px solid",[155,89220,89221],{"class":161}," #b8daff;\n",[155,89223,89224],{"class":157,"line":592},[155,89225,21475],{"class":171},[155,89227,89228],{"class":157,"line":610},[155,89229,89230],{"class":732},"td {\n",[155,89232,89233],{"class":157,"line":622},[155,89234,89235],{"class":732},"  padding:10px;\n",[155,89237,89238],{"class":157,"line":638},[155,89239,89240],{"class":732},"  color:#666;\n",[155,89242,89243,89245,89247],{"class":157,"line":650},[155,89244,89089],{"class":69863},[155,89246,70000],{"class":171},[155,89248,89094],{"class":732},[155,89250,89251,89253,89255],{"class":157,"line":662},[155,89252,89189],{"class":69863},[155,89254,70000],{"class":171},[155,89256,89257],{"class":732},"16px;\n",[155,89259,89260],{"class":157,"line":678},[155,89261,21475],{"class":171},[155,89263,89264],{"class":157,"line":694},[155,89265,89266],{"class":732},"tbody tr {\n",[155,89268,89269,89271,89273],{"class":157,"line":706},[155,89270,89174],{"class":69863},[155,89272,70000],{"class":171},[155,89274,89275],{"class":161},"#fff;\n",[155,89277,89278],{"class":157,"line":715},[155,89279,21475],{"class":171},[155,89281,89282],{"class":157,"line":720},[155,89283,89284],{"class":732},"tbody tr:hover {\n",[155,89286,89287,89289,89291],{"class":157,"line":739},[155,89288,89174],{"class":69863},[155,89290,70000],{"class":171},[155,89292,89293],{"class":161},"#e1ecf8;\n",[155,89295,89296],{"class":157,"line":745},[155,89297,21475],{"class":171},[155,89299,89300],{"class":157,"line":773},[155,89301,89302],{"class":732},".info {\n",[155,89304,89305,89307,89309],{"class":157,"line":779},[155,89306,89131],{"class":69863},[155,89308,70000],{"class":171},[155,89310,89311],{"class":732},"900px;\n",[155,89313,89314,89316,89318],{"class":157,"line":785},[155,89315,89033],{"class":69863},[155,89317,70000],{"class":171},[155,89319,89320],{"class":732},"50px auto;\n",[155,89322,89323,89325,89327],{"class":157,"line":791},[155,89324,89089],{"class":69863},[155,89326,70000],{"class":171},[155,89328,89094],{"class":732},[155,89330,89331],{"class":157,"line":796},[155,89332,21475],{"class":171},[155,89334,89335],{"class":157,"line":802},[155,89336,89337],{"class":732},".info  input, .info select {\n",[155,89339,89340,89342,89344],{"class":157,"line":808},[155,89341,89131],{"class":69863},[155,89343,70000],{"class":171},[155,89345,89346],{"class":732},"80px;\n",[155,89348,89349,89352,89354],{"class":157,"line":819},[155,89350,89351],{"class":69863},"  height",[155,89353,70000],{"class":171},[155,89355,89356],{"class":732},"27px;\n",[155,89358,89359,89362,89364],{"class":157,"line":1832},[155,89360,89361],{"class":69863},"  outline",[155,89363,70000],{"class":171},[155,89365,89070],{"class":732},[155,89367,89368,89371,89373],{"class":157,"line":1838},[155,89369,89370],{"class":69863},"  border-radius",[155,89372,70000],{"class":171},[155,89374,89375],{"class":732},"5px;\n",[155,89377,89378,89380],{"class":157,"line":1844},[155,89379,89218],{"class":732},[155,89381,89221],{"class":161},[155,89383,89384,89387,89389],{"class":157,"line":1850},[155,89385,89386],{"class":69863},"  padding-left",[155,89388,70000],{"class":171},[155,89390,89375],{"class":732},[155,89392,89393,89396,89398],{"class":157,"line":1861},[155,89394,89395],{"class":69863},"  box-sizing",[155,89397,70000],{"class":171},[155,89399,89400],{"class":732},"border-box;\n",[155,89402,89403,89406,89408],{"class":157,"line":1866},[155,89404,89405],{"class":69863},"  margin-right",[155,89407,70000],{"class":171},[155,89409,89410],{"class":732},"15px;\n",[155,89412,89413],{"class":157,"line":1871},[155,89414,21475],{"class":171},[155,89416,89417],{"class":157,"line":1877},[155,89418,89419],{"class":732},".info button {\n",[155,89421,89422,89424,89426],{"class":157,"line":1883},[155,89423,89131],{"class":69863},[155,89425,70000],{"class":171},[155,89427,89428],{"class":732},"60px;\n",[155,89430,89431,89433,89435],{"class":157,"line":1894},[155,89432,89351],{"class":69863},[155,89434,70000],{"class":171},[155,89436,89356],{"class":732},[155,89438,89439,89442,89444],{"class":157,"line":1900},[155,89440,89441],{"class":69863},"  background-color",[155,89443,70000],{"class":171},[155,89445,89446],{"class":161},"#004085;\n",[155,89448,89449,89451,89453],{"class":157,"line":1911},[155,89450,89361],{"class":69863},[155,89452,70000],{"class":171},[155,89454,89070],{"class":732},[155,89456,89457,89460,89462],{"class":157,"line":1917},[155,89458,89459],{"class":69863},"  border",[155,89461,70000],{"class":171},[155,89463,89038],{"class":732},[155,89465,89466,89469,89471],{"class":157,"line":1927},[155,89467,89468],{"class":69863},"  color",[155,89470,70000],{"class":171},[155,89472,89275],{"class":161},[155,89474,89475,89478,89480],{"class":157,"line":1933},[155,89476,89477],{"class":69863},"  cursor",[155,89479,70000],{"class":171},[155,89481,89482],{"class":732},"pointer;\n",[155,89484,89485,89487,89489],{"class":157,"line":1943},[155,89486,89370],{"class":69863},[155,89488,70000],{"class":171},[155,89490,89375],{"class":732},[155,89492,89493],{"class":157,"line":1949},[155,89494,21475],{"class":171},[155,89496,89497],{"class":157,"line":1959},[155,89498,89499],{"class":732},".info .age {\n",[155,89501,89502,89504,89506],{"class":157,"line":1964},[155,89503,89131],{"class":69863},[155,89505,70000],{"class":171},[155,89507,89508],{"class":732},"50px;\n",[155,89510,89511],{"class":157,"line":1970},[155,89512,21475],{"class":171},[24,89514,89515],{},"思路：",[24,89517,89518],{},[37,89519],{"alt":39,"src":89520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[24,89522,89523],{},[37,89524],{"alt":39,"src":89525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[24,89527,89528],{},[37,89529],{"alt":39,"src":89530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[14,89532,89534],{"id":89533},"_3315-重绘回流","3.3.15 重绘回流",[24,89536,89537],{},[37,89538],{"alt":39,"src":89539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[24,89541,89542],{},[37,89543],{"alt":39,"src":89544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[24,89546,89547],{},[37,89548],{"alt":39,"src":89549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[20037,89551,89553],{"id":89552},"_34-bom","3.4 BOM",[24,89555,89556],{},[37,89557],{"alt":39,"src":89558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[24,89560,89561],{},"平时写的document省略了window而已，实际上是window.document",[24,89563,89564],{},"函数也是这样，调用的时候实际为window.fn()",[24,89566,89567],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[24,89569,89570],{},"window大部分情况下可以省略",[14,89572,89574],{"id":89573},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[24,89576,89577],{},"只执行一次",[24,89579,89580],{},[37,89581],{"alt":39,"src":89582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[24,89584,89585],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[24,89587,89588],{},[37,89589],{"alt":39,"src":89590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[14,89592,89594],{"id":89593},"_342-js执行机制","3.4.2 JS执行机制",[24,89596,89597],{},[37,89598],{"alt":39,"src":89599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[24,89601,89602],{},"两个的结果都是1111 3333 2222",[24,89604,89605],{},[37,89606],{"alt":39,"src":89607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[24,89609,89610],{},[37,89611],{"alt":39,"src":89612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[24,89614,89615],{},[37,89616],{"alt":39,"src":89617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[24,89619,89620],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[24,89622,89623],{},"工作流程：",[24,89625,89626],{},[37,89627],{"alt":39,"src":89628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[24,89630,89631],{},[37,89632],{"alt":39,"src":89633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[24,89635,89636],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[24,89638,89639],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[14,89641,89643],{"id":89642},"_343-location对象","3.4.3 location对象",[24,89645,89646],{},"location对象属于window这个全局对象下的，可以 省略window",[24,89648,89649],{},[37,89650],{"alt":39,"src":89651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[24,89653,89654],{},"href可以跳转页面",[28,89656,89657],{},[31,89658,89659],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[24,89661,89662],{},"search得到提交信息之后网站后边的地址",[24,89664,89665],{},[37,89666],{"alt":39,"src":89667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[24,89669,89670],{},[37,89671],{"alt":39,"src":89672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[28,89674,89675],{"start":46},[31,89676,89677],{},"hash:这个获取单页面应用#后边的地址",[24,89679,89680],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[24,89682,89683],{},[37,89684],{"alt":39,"src":89685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[146,89687,89689],{"className":71630,"code":89688,"language":71632,"meta":39,"style":39},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[152,89690,89691,89711,89731],{"__ignoreMap":39},[155,89692,89693,89695,89697,89699,89701,89704,89707,89709],{"class":157,"line":158},[155,89694,70707],{"class":171},[155,89696,20318],{"class":69863},[155,89698,79620],{"class":226},[155,89700,317],{"class":171},[155,89702,89703],{"class":732},"\"#\u002Fmy\"",[155,89705,89706],{"class":171},">我的\u003C\u002F",[155,89708,20318],{"class":69863},[155,89710,69870],{"class":171},[155,89712,89713,89715,89717,89719,89721,89724,89727,89729],{"class":157,"line":46},[155,89714,70707],{"class":171},[155,89716,20318],{"class":69863},[155,89718,79620],{"class":226},[155,89720,317],{"class":171},[155,89722,89723],{"class":732},"\"#\u002Ffriend\"",[155,89725,89726],{"class":171},">关注\u003C\u002F",[155,89728,20318],{"class":69863},[155,89730,69870],{"class":171},[155,89732,89733,89735,89737,89739,89741,89744,89747,89749],{"class":157,"line":121},[155,89734,70707],{"class":171},[155,89736,20318],{"class":69863},[155,89738,79620],{"class":226},[155,89740,317],{"class":171},[155,89742,89743],{"class":732},"\"#\u002Fdownload\"",[155,89745,89746],{"class":171},">下载\u003C\u002F",[155,89748,20318],{"class":69863},[155,89750,69870],{"class":171},[24,89752,89753],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[28,89755,89756],{"start":121},[31,89757,89758,89759,89761,89762,89764],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[72279,89760],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[72279,89763],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[14,89766,89768],{"id":89767},"_345-navigator对象","3.4.5 navigator对象",[24,89770,89771],{},[37,89772],{"alt":39,"src":89773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[146,89775,89779],{"className":89776,"code":89777,"language":89778,"meta":39,"style":39},"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",[152,89780,89781,89786,89797,89809,89814,89865,89906,89911,89924,89936,89941],{"__ignoreMap":39},[155,89782,89783],{"class":157,"line":158},[155,89784,89785],{"class":161},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[155,89787,89788,89790,89792,89794],{"class":157,"line":46},[155,89789,20306],{"class":167},[155,89791,230],{"class":171},[155,89793,73012],{"class":167},[155,89795,89796],{"class":171}," () { \n",[155,89798,89799,89801,89804,89806],{"class":157,"line":121},[155,89800,26655],{"class":167},[155,89802,89803],{"class":263}," userAgent",[155,89805,33391],{"class":167},[155,89807,89808],{"class":171}," navigator.userAgent \n",[155,89810,89811],{"class":157,"line":180},[155,89812,89813],{"class":161},"\u002F\u002F 验证是否为Android或iPhone \n",[155,89815,89816,89818,89821,89823,89826,89829,89831,89833,89836,89838,89841,89845,89847,89849,89851,89854,89856,89858,89860,89862],{"class":157,"line":194},[155,89817,26655],{"class":167},[155,89819,89820],{"class":263}," android",[155,89822,33391],{"class":167},[155,89824,89825],{"class":171}," userAgent.",[155,89827,89828],{"class":226},"match",[155,89830,230],{"class":171},[155,89832,2028],{"class":732},[155,89834,89835],{"class":17606},"(Android);",[155,89837,21031],{"class":167},[155,89839,89840],{"class":263},"[\\s",[155,89842,89844],{"class":89843},"snhLl","\\\u002F",[155,89846,2813],{"class":263},[155,89848,1274],{"class":167},[155,89850,230],{"class":17606},[155,89852,89853],{"class":263},"[\\d.]",[155,89855,1274],{"class":167},[155,89857,20501],{"class":17606},[155,89859,21031],{"class":167},[155,89861,2028],{"class":732},[155,89863,89864],{"class":171},") \n",[155,89866,89867,89869,89872,89874,89876,89878,89880,89882,89885,89888,89891,89893,89895,89898,89900,89902,89904],{"class":157,"line":200},[155,89868,26655],{"class":167},[155,89870,89871],{"class":263}," iphone",[155,89873,33391],{"class":167},[155,89875,89825],{"class":171},[155,89877,89828],{"class":226},[155,89879,230],{"class":171},[155,89881,2028],{"class":732},[155,89883,89884],{"class":17606},"(iPhone",[155,89886,89887],{"class":263},"\\s",[155,89889,89890],{"class":17606},"OS)",[155,89892,89887],{"class":263},[155,89894,230],{"class":17606},[155,89896,89897],{"class":263},"[\\d_]",[155,89899,1274],{"class":167},[155,89901,20501],{"class":17606},[155,89903,2028],{"class":732},[155,89905,89864],{"class":171},[155,89907,89908],{"class":157,"line":213},[155,89909,89910],{"class":161},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[155,89912,89913,89915,89918,89921],{"class":157,"line":220},[155,89914,723],{"class":167},[155,89916,89917],{"class":171}," (android ",[155,89919,89920],{"class":167},"||",[155,89922,89923],{"class":171}," iphone) { \n",[155,89925,89926,89929,89931,89934],{"class":157,"line":245},[155,89927,89928],{"class":171},"location.href ",[155,89930,317],{"class":167},[155,89932,89933],{"class":732}," 'http:\u002F\u002Fm.itcast.cn'",[155,89935,22551],{"class":171},[155,89937,89938],{"class":157,"line":251},[155,89939,89940],{"class":171},"} \n",[155,89942,89943],{"class":157,"line":257},[155,89944,89945],{"class":171},"})()\n",[14,89947,89949],{"id":89948},"_346-histroy对象","3.4.6 histroy对象",[24,89951,89952],{},[37,89953],{"alt":39,"src":89954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[24,89956,89957],{},"浏览器地址的前进与后退!!!",[24,89959,89960],{},"history.back() 等效于 history.go(-1)",[24,89962,89963],{},"history.forward() 等效于 history.go(1)",[20037,89965,89967],{"id":89966},"_35-本地存储","3.5 本地存储",[28,89969,89970,89973,89976],{},[31,89971,89972],{},"数据存储在用户浏览器中",[31,89974,89975],{},"设置、读取方便、甚至页面刷新不丢失数据",[31,89977,89978],{},"容量较大，sessionStorage和localStorage约 5M 左右",[14,89980,89982],{"id":89981},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[24,89984,89985],{},"只能存储字符串",[24,89987,89988],{},[37,89989],{"alt":39,"src":89990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[24,89992,89993],{},[37,89994],{"alt":39,"src":89995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[24,89997,89998],{},"键值对要加引号,不然就会当变量来看了",[24,90000,90001],{},"localStorage.setItem('uname', 'pink')",[24,90003,90004],{},"刷新之后信息不再丢失",[24,90006,90007],{},"操作key,value会跟着变",[24,90009,90010],{},"删除只删除键就可以,即名字",[24,90012,90001],{},[24,90014,90015],{},"改:",[24,90017,90018],{},"localStorage.setItem('uname','red')",[24,90020,90021],{},"有这个键就是改,没有这个键就是改",[24,90023,90024],{},[37,90025],{"alt":39,"src":90026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[24,90028,90029],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[24,90031,90032],{},[37,90033],{"alt":39,"src":90034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[24,90036,90037],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[14,90039,90041],{"id":90040},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[24,90043,90044],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[24,90046,90047],{},"特性:",[28,90049,90050,90053,90056,90059],{},[31,90051,90052],{},"生命周期为关闭浏览器窗口",[31,90054,90055],{},"在同一个窗口(页面)下数据可以共享",[31,90057,90058],{},"以键值对的形式存储使用",[31,90060,90061],{},"用法跟localStorage 基本相同",[14,90063,90065],{"id":90064},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[24,90067,90068],{},"本地只能存储字符串,无法直接存储复杂数据类型",[146,90070,90072],{"className":71630,"code":90071,"language":71632,"meta":39,"style":39},"\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",[152,90073,90074,90082,90087,90092,90097,90102,90106,90111,90116],{"__ignoreMap":39},[155,90075,90076,90078,90080],{"class":157,"line":158},[155,90077,20959],{"class":171},[155,90079,70376],{"class":69863},[155,90081,69870],{"class":171},[155,90083,90084],{"class":157,"line":46},[155,90085,90086],{"class":171},"    const obj = {\n",[155,90088,90089],{"class":157,"line":121},[155,90090,90091],{"class":171},"      uname: 'pink老师',\n",[155,90093,90094],{"class":157,"line":180},[155,90095,90096],{"class":171},"      age: 18,\n",[155,90098,90099],{"class":157,"line":194},[155,90100,90101],{"class":171},"      gender: '女'\n",[155,90103,90104],{"class":157,"line":200},[155,90105,22074],{"class":171},[155,90107,90108],{"class":157,"line":213},[155,90109,90110],{"class":171},"    \u002F\u002F 存储复杂数据类型\n",[155,90112,90113],{"class":157,"line":220},[155,90114,90115],{"class":171},"    localStorage.setItem('obj', obj)\n",[155,90117,90118,90120,90122],{"class":157,"line":245},[155,90119,70980],{"class":171},[155,90121,70376],{"class":69863},[155,90123,69870],{"class":171},[24,90125,90126],{},[37,90127],{"alt":39,"src":90128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[24,90130,90131],{},"如果获取一下数据:",[24,90133,90134],{},"log(localStorage.getItem('obj'))",[24,90136,90137],{},[37,90138],{"alt":39,"src":90139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[24,90141,90142],{},"发现直接存对象是使用不了的!!!",[19,90144,90146],{"id":90145},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[24,90148,90149],{},[37,90150],{"alt":39,"src":90151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[146,90153,90155],{"className":69196,"code":90154,"language":69198,"meta":39,"style":39},"\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",[152,90156,90157,90165,90175,90185,90194,90202,90206,90210,90236,90255,90263,90267,90272,90277],{"__ignoreMap":39},[155,90158,90159,90161,90163],{"class":157,"line":158},[155,90160,20959],{"class":171},[155,90162,70376],{"class":69863},[155,90164,69870],{"class":171},[155,90166,90167,90169,90171,90173],{"class":157,"line":46},[155,90168,31049],{"class":167},[155,90170,88534],{"class":263},[155,90172,33391],{"class":167},[155,90174,35397],{"class":171},[155,90176,90177,90180,90183],{"class":157,"line":121},[155,90178,90179],{"class":171},"      uname: ",[155,90181,90182],{"class":732},"'pink老师'",[155,90184,990],{"class":171},[155,90186,90187,90190,90192],{"class":157,"line":180},[155,90188,90189],{"class":171},"      age: ",[155,90191,20709],{"class":263},[155,90193,990],{"class":171},[155,90195,90196,90199],{"class":157,"line":194},[155,90197,90198],{"class":171},"      gender: ",[155,90200,90201],{"class":732},"'女'\n",[155,90203,90204],{"class":157,"line":200},[155,90205,22074],{"class":171},[155,90207,90208],{"class":157,"line":213},[155,90209,90110],{"class":161},[155,90211,90212,90215,90218,90220,90223,90225,90228,90230,90233],{"class":157,"line":220},[155,90213,90214],{"class":171},"  localStorage.",[155,90216,90217],{"class":226},"setItem",[155,90219,230],{"class":171},[155,90221,90222],{"class":732},"'obj'",[155,90224,7589],{"class":171},[155,90226,90227],{"class":263},"JSON",[155,90229,236],{"class":171},[155,90231,90232],{"class":226},"stringify",[155,90234,90235],{"class":171},"(obj))\n",[155,90237,90238,90241,90243,90246,90249,90251,90253],{"class":157,"line":245},[155,90239,90240],{"class":171},"  console.",[155,90242,76810],{"class":226},[155,90244,90245],{"class":171},"(localStorage.",[155,90247,90248],{"class":226},"getItem",[155,90250,230],{"class":171},[155,90252,90222],{"class":732},[155,90254,1238],{"class":171},[155,90256,90257,90259,90261],{"class":157,"line":251},[155,90258,70980],{"class":171},[155,90260,70376],{"class":69863},[155,90262,69870],{"class":171},[155,90264,90265],{"class":157,"line":257},[155,90266,89184],{"class":171},[155,90268,90269],{"class":157,"line":270},[155,90270,90271],{"class":171},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[155,90273,90274],{"class":157,"line":276},[155,90275,90276],{"class":171},"  类型是字符串的\n",[155,90278,90279],{"class":157,"line":297},[155,90280,90281],{"class":171},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[19,90283,90285],{"id":90284},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[24,90287,90288],{},[37,90289],{"alt":39,"src":90290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[24,90292,90293],{},[37,90294],{"alt":39,"src":90295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[146,90297,90299],{"className":71630,"code":90298,"language":71632,"meta":39,"style":39},"  \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",[152,90300,90301,90309,90313,90317,90321,90325,90329,90334,90339,90344,90349,90354,90359,90364,90369],{"__ignoreMap":39},[155,90302,90303,90305,90307],{"class":157,"line":158},[155,90304,70707],{"class":171},[155,90306,70376],{"class":69863},[155,90308,69870],{"class":171},[155,90310,90311],{"class":157,"line":46},[155,90312,90086],{"class":171},[155,90314,90315],{"class":157,"line":121},[155,90316,90091],{"class":171},[155,90318,90319],{"class":157,"line":180},[155,90320,90096],{"class":171},[155,90322,90323],{"class":157,"line":194},[155,90324,90101],{"class":171},[155,90326,90327],{"class":157,"line":200},[155,90328,22074],{"class":171},[155,90330,90331],{"class":157,"line":213},[155,90332,90333],{"class":171},"    \u002F\u002F 1.存储复杂数据类型\n",[155,90335,90336],{"class":157,"line":220},[155,90337,90338],{"class":171},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[155,90340,90341],{"class":157,"line":245},[155,90342,90343],{"class":171},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[155,90345,90346],{"class":157,"line":251},[155,90347,90348],{"class":171},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[155,90350,90351],{"class":157,"line":257},[155,90352,90353],{"class":171},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[155,90355,90356],{"class":157,"line":270},[155,90357,90358],{"class":171},"    \u002F\u002F 取\n",[155,90360,90361],{"class":157,"line":276},[155,90362,90363],{"class":171},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[155,90365,90366],{"class":157,"line":297},[155,90367,90368],{"class":171},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[155,90370,90371,90373,90375],{"class":157,"line":302},[155,90372,70980],{"class":171},[155,90374,70376],{"class":69863},[155,90376,69870],{"class":171},[24,90378,90379],{},[37,90380],{"alt":39,"src":90381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[14,90383,90385],{"id":90384},"_356-数组map方法","3.5.6 数组map方法",[24,90387,90388],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[24,90390,90391],{},[37,90392],{"alt":39,"src":90393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[24,90395,90396],{},[37,90397],{"alt":39,"src":90398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[24,90400,90401,90404],{},[20234,90402,90403],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[24,90406,90407],{},"map有返回值，但是forEach没有返回值",[24,90409,90410],{},"map是个方法。用的时候要加 ()",[24,90412,90413],{},"map返回的是一个数组",[14,90415,90417],{"id":90416},"_357-数组中join方法","3.5.7 数组中join方法",[24,90419,90420],{},[37,90421],{"alt":39,"src":90422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[24,90424,90425],{},"类似于python中拼接字符串一样！",[28,90427,90428,90431,90434],{},[31,90429,90430],{},"小括号为空则逗号分开",[31,90432,90433],{},"小括号为空字符串 ''，则元素之间没有分隔符",[31,90435,90436],{},"小括号用啥符号就用进行分割",[14,90438,90440],{"id":90439},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[28,90442,90443,90446,90449,90452,90455],{},[31,90444,90445],{},"记住本地时间获取快速方式：new Date().toDateString()",[31,90447,90448],{},"尽量减少DOM操作，用好map+join的渲染方式",[31,90450,90451],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[31,90453,90454],{},"return可以实现函数的结束",[31,90456,90457],{},"禁止跳转是 preventDefault() 不要忘记",[146,90459,90461],{"className":69196,"code":90460,"language":69198,"meta":39,"style":39},"\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",[152,90462,90463,90473,90487,90491,90499,90513,90533,90545,90553,90559,90569,90579,90583,90587,90593,90603,90615,90619,90623,90630,90642,90656,90666,90670,90674,90681,90688,90695,90707,90719,90729,90741,90745,90749,90756,90763,90775,90787,90797,90809,90839,90843,90847,90854,90866,90878,90902,90912,90922,90926,90930,90938,90949,90961,90973,90985,91002,91014,91026,91030,91034,91041,91053,91065,91077,91088,91106,91119,91131,91155,91166,91170,91174,91182,91192,91196,91200,91206,91218,91229,91239,91243,91247,91253,91275,91279,91283,91289,91295,91307,91317,91329,91359,91372,91389,91393,91397,91408,91430,91440,91444,91448,91461,91471,91483,91495,91507,91519,91529,91539,91549,91560,91573,91577,91585,91593,91597,91605,91618,91638,91671,91704,91737,91763,91781,91799,91807,91833,91851,91869,91887,91905,91923,91931,91939,91957,91965,91994,92002,92010,92018,92031,92043,92055,92067,92079,92091,92104,92116,92124,92132,92140,92145,92150,92154,92158,92162,92166,92170,92174,92179,92184,92189,92194,92202,92210,92218,92223,92228,92233,92238,92243,92248,92253,92258,92263,92268,92273,92278,92283,92288,92292,92297,92302,92312,92321,92325,92330,92339,92355,92397,92437,92476,92541,92549,92553,92558,92576,92584,92589,92594,92624,92630,92635,92648,92660,92672,92684,92696,92708,92720,92724,92734,92738,92743,92748,92752,92761,92765,92770,92775,92794,92799,92819,92823,92828,92832,92837,92855,92873,92891,92910,92929,92948,92953,92959,92980,92986,92995,93001,93007,93013,93040,93053,93058,93068,93074,93080,93086,93092,93097,93103,93109,93115,93121,93154,93159,93164,93169,93174,93180,93186,93192,93203,93208,93214,93221,93235,93241,93265,93270,93275,93281,93287,93308,93314,93327,93333,93339,93345,93351,93356,93362,93368,93374,93392,93406,93412,93420,93426,93448,93453,93458,93463,93468,93473,93482,93491,93496],{"__ignoreMap":39},[155,90464,90465,90467,90469,90471],{"class":157,"line":158},[155,90466,69860],{"class":171},[155,90468,69864],{"class":69863},[155,90470,69867],{"class":226},[155,90472,69870],{"class":171},[155,90474,90475,90477,90479,90481,90483,90485],{"class":157,"line":46},[155,90476,20959],{"class":171},[155,90478,69198],{"class":69863},[155,90480,69879],{"class":226},[155,90482,317],{"class":171},[155,90484,69884],{"class":732},[155,90486,69870],{"class":171},[155,90488,90489],{"class":157,"line":121},[155,90490,217],{"emptyLinePlaceholder":216},[155,90492,90493,90495,90497],{"class":157,"line":180},[155,90494,20959],{"class":171},[155,90496,69897],{"class":69863},[155,90498,69870],{"class":171},[155,90500,90501,90503,90505,90507,90509,90511],{"class":157,"line":194},[155,90502,70707],{"class":171},[155,90504,69907],{"class":69863},[155,90506,69910],{"class":226},[155,90508,317],{"class":171},[155,90510,69915],{"class":732},[155,90512,69870],{"class":171},[155,90514,90515,90517,90519,90521,90523,90525,90527,90529,90531],{"class":157,"line":200},[155,90516,70707],{"class":171},[155,90518,69907],{"class":69863},[155,90520,34745],{"class":226},[155,90522,317],{"class":171},[155,90524,69954],{"class":732},[155,90526,69934],{"class":226},[155,90528,317],{"class":171},[155,90530,69961],{"class":732},[155,90532,69870],{"class":171},[155,90534,90535,90537,90539,90541,90543],{"class":157,"line":213},[155,90536,70707],{"class":171},[155,90538,69970],{"class":69863},[155,90540,69973],{"class":171},[155,90542,69970],{"class":69863},[155,90544,69870],{"class":171},[155,90546,90547,90549,90551],{"class":157,"line":220},[155,90548,70707],{"class":171},[155,90550,20011],{"class":69863},[155,90552,69870],{"class":171},[155,90554,90555,90557],{"class":157,"line":245},[155,90556,26266],{"class":69863},[155,90558,35397],{"class":171},[155,90560,90561,90563,90565,90567],{"class":157,"line":251},[155,90562,73258],{"class":263},[155,90564,70000],{"class":171},[155,90566,1109],{"class":263},[155,90568,21206],{"class":171},[155,90570,90571,90573,90575,90577],{"class":157,"line":257},[155,90572,73269],{"class":263},[155,90574,70000],{"class":171},[155,90576,1109],{"class":263},[155,90578,21206],{"class":171},[155,90580,90581],{"class":157,"line":270},[155,90582,22074],{"class":171},[155,90584,90585],{"class":157,"line":276},[155,90586,217],{"emptyLinePlaceholder":216},[155,90588,90589,90591],{"class":157,"line":297},[155,90590,75842],{"class":69863},[155,90592,35397],{"class":171},[155,90594,90595,90597,90599,90601],{"class":157,"line":302},[155,90596,75849],{"class":263},[155,90598,70000],{"class":171},[155,90600,70155],{"class":263},[155,90602,21206],{"class":171},[155,90604,90605,90607,90609,90611,90613],{"class":157,"line":308},[155,90606,80640],{"class":263},[155,90608,70000],{"class":171},[155,90610,3458],{"class":263},[155,90612,70055],{"class":167},[155,90614,21206],{"class":171},[155,90616,90617],{"class":157,"line":366},[155,90618,22074],{"class":171},[155,90620,90621],{"class":157,"line":379},[155,90622,217],{"emptyLinePlaceholder":216},[155,90624,90625,90628],{"class":157,"line":385},[155,90626,90627],{"class":226},"    .info",[155,90629,35397],{"class":171},[155,90631,90632,90634,90636,90638,90640],{"class":157,"line":415},[155,90633,73334],{"class":263},[155,90635,70000],{"class":171},[155,90637,70052],{"class":263},[155,90639,70055],{"class":167},[155,90641,21206],{"class":171},[155,90643,90644,90646,90648,90650,90652,90654],{"class":157,"line":452},[155,90645,73269],{"class":263},[155,90647,70000],{"class":171},[155,90649,565],{"class":263},[155,90651,70055],{"class":167},[155,90653,70119],{"class":263},[155,90655,21206],{"class":171},[155,90657,90658,90660,90662,90664],{"class":157,"line":480},[155,90659,75849],{"class":263},[155,90661,70000],{"class":171},[155,90663,70155],{"class":263},[155,90665,21206],{"class":171},[155,90667,90668],{"class":157,"line":486},[155,90669,22074],{"class":171},[155,90671,90672],{"class":157,"line":499},[155,90673,217],{"emptyLinePlaceholder":216},[155,90675,90676,90679],{"class":157,"line":505},[155,90677,90678],{"class":226},"    .uname",[155,90680,990],{"class":171},[155,90682,90683,90686],{"class":157,"line":528},[155,90684,90685],{"class":226},"    .age",[155,90687,990],{"class":171},[155,90689,90690,90693],{"class":157,"line":549},[155,90691,90692],{"class":226},"    .salary",[155,90694,35397],{"class":171},[155,90696,90697,90699,90701,90703,90705],{"class":157,"line":570},[155,90698,73334],{"class":263},[155,90700,70000],{"class":171},[155,90702,20389],{"class":263},[155,90704,70055],{"class":167},[155,90706,21206],{"class":171},[155,90708,90709,90711,90713,90715,90717],{"class":157,"line":575},[155,90710,73348],{"class":263},[155,90712,70000],{"class":171},[155,90714,3458],{"class":263},[155,90716,70055],{"class":167},[155,90718,21206],{"class":171},[155,90720,90721,90723,90725,90727],{"class":157,"line":581},[155,90722,80343],{"class":263},[155,90724,70000],{"class":171},[155,90726,73300],{"class":263},[155,90728,21206],{"class":171},[155,90730,90731,90733,90735,90737,90739],{"class":157,"line":592},[155,90732,80313],{"class":263},[155,90734,70000],{"class":171},[155,90736,20638],{"class":263},[155,90738,70055],{"class":167},[155,90740,21206],{"class":171},[155,90742,90743],{"class":157,"line":610},[155,90744,22074],{"class":171},[155,90746,90747],{"class":157,"line":622},[155,90748,217],{"emptyLinePlaceholder":216},[155,90750,90751,90754],{"class":157,"line":638},[155,90752,90753],{"class":226},"    .gender",[155,90755,990],{"class":171},[155,90757,90758,90761],{"class":157,"line":650},[155,90759,90760],{"class":226},"    .city",[155,90762,35397],{"class":171},[155,90764,90765,90767,90769,90771,90773],{"class":157,"line":662},[155,90766,73334],{"class":263},[155,90768,70000],{"class":171},[155,90770,20389],{"class":263},[155,90772,70055],{"class":167},[155,90774,21206],{"class":171},[155,90776,90777,90779,90781,90783,90785],{"class":157,"line":678},[155,90778,73348],{"class":263},[155,90780,70000],{"class":171},[155,90782,20879],{"class":263},[155,90784,70055],{"class":167},[155,90786,21206],{"class":171},[155,90788,90789,90791,90793,90795],{"class":157,"line":694},[155,90790,80343],{"class":263},[155,90792,70000],{"class":171},[155,90794,73300],{"class":263},[155,90796,21206],{"class":171},[155,90798,90799,90801,90803,90805,90807],{"class":157,"line":706},[155,90800,80313],{"class":263},[155,90802,70000],{"class":171},[155,90804,20638],{"class":263},[155,90806,70055],{"class":167},[155,90808,21206],{"class":171},[155,90810,90811,90813,90815,90817,90819,90821,90824,90826,90828,90830,90833,90835,90837],{"class":157,"line":715},[155,90812,80540],{"class":263},[155,90814,70000],{"class":171},[155,90816,329],{"class":263},[155,90818,70055],{"class":167},[155,90820,70084],{"class":263},[155,90822,90823],{"class":263}," rgb",[155,90825,230],{"class":171},[155,90827,21619],{"class":263},[155,90829,7589],{"class":171},[155,90831,90832],{"class":263},"197",[155,90834,7589],{"class":171},[155,90836,90832],{"class":263},[155,90838,22596],{"class":171},[155,90840,90841],{"class":157,"line":720},[155,90842,22074],{"class":171},[155,90844,90845],{"class":157,"line":739},[155,90846,217],{"emptyLinePlaceholder":216},[155,90848,90849,90852],{"class":157,"line":745},[155,90850,90851],{"class":69863},"    button",[155,90853,35397],{"class":171},[155,90855,90856,90858,90860,90862,90864],{"class":157,"line":773},[155,90857,73348],{"class":263},[155,90859,70000],{"class":171},[155,90861,20879],{"class":263},[155,90863,70055],{"class":167},[155,90865,21206],{"class":171},[155,90867,90868,90870,90872,90874,90876],{"class":157,"line":779},[155,90869,73334],{"class":263},[155,90871,70000],{"class":171},[155,90873,20552],{"class":263},[155,90875,70055],{"class":167},[155,90877,21206],{"class":171},[155,90879,90880,90882,90884,90887,90889,90891,90893,90896,90898,90900],{"class":157,"line":785},[155,90881,73447],{"class":263},[155,90883,70000],{"class":171},[155,90885,90886],{"class":263},"rgb",[155,90888,230],{"class":171},[155,90890,21014],{"class":263},[155,90892,7589],{"class":171},[155,90894,90895],{"class":263},"187",[155,90897,7589],{"class":171},[155,90899,20377],{"class":263},[155,90901,22596],{"class":171},[155,90903,90904,90906,90908,90910],{"class":157,"line":791},[155,90905,75979],{"class":263},[155,90907,70000],{"class":171},[155,90909,79405],{"class":263},[155,90911,21206],{"class":171},[155,90913,90914,90916,90918,90920],{"class":157,"line":796},[155,90915,80540],{"class":263},[155,90917,70000],{"class":171},[155,90919,1109],{"class":263},[155,90921,21206],{"class":171},[155,90923,90924],{"class":157,"line":802},[155,90925,22074],{"class":171},[155,90927,90928],{"class":157,"line":808},[155,90929,217],{"emptyLinePlaceholder":216},[155,90931,90932,90934,90936],{"class":157,"line":819},[155,90933,90851],{"class":69863},[155,90935,70251],{"class":69863},[155,90937,35397],{"class":171},[155,90939,90940,90942,90944,90947],{"class":157,"line":1832},[155,90941,73572],{"class":263},[155,90943,70000],{"class":171},[155,90945,90946],{"class":263},"inline-block",[155,90948,21206],{"class":171},[155,90950,90951,90953,90955,90957,90959],{"class":157,"line":1838},[155,90952,73334],{"class":263},[155,90954,70000],{"class":171},[155,90956,565],{"class":263},[155,90958,70055],{"class":167},[155,90960,21206],{"class":171},[155,90962,90963,90965,90967,90969,90971],{"class":157,"line":1844},[155,90964,73348],{"class":263},[155,90966,70000],{"class":171},[155,90968,565],{"class":263},[155,90970,70055],{"class":167},[155,90972,21206],{"class":171},[155,90974,90975,90977,90979,90981,90983],{"class":157,"line":1850},[155,90976,75922],{"class":263},[155,90978,70000],{"class":171},[155,90980,4416],{"class":263},[155,90982,70055],{"class":167},[155,90984,21206],{"class":171},[155,90986,90987,90989,90991,90993,90995,90997,91000],{"class":157,"line":1861},[155,90988,80540],{"class":263},[155,90990,70000],{"class":171},[155,90992,329],{"class":263},[155,90994,70055],{"class":167},[155,90996,70084],{"class":263},[155,90998,90999],{"class":263}," #fff",[155,91001,21206],{"class":171},[155,91003,91004,91006,91008,91010,91012],{"class":157,"line":1866},[155,91005,73697],{"class":263},[155,91007,70000],{"class":171},[155,91009,350],{"class":263},[155,91011,70055],{"class":167},[155,91013,21206],{"class":171},[155,91015,91016,91018,91020,91022,91024],{"class":157,"line":1871},[155,91017,80313],{"class":263},[155,91019,70000],{"class":171},[155,91021,329],{"class":263},[155,91023,70055],{"class":167},[155,91025,21206],{"class":171},[155,91027,91028],{"class":157,"line":1877},[155,91029,22074],{"class":171},[155,91031,91032],{"class":157,"line":1883},[155,91033,217],{"emptyLinePlaceholder":216},[155,91035,91036,91039],{"class":157,"line":1894},[155,91037,91038],{"class":226},"    .total",[155,91040,35397],{"class":171},[155,91042,91043,91045,91047,91049,91051],{"class":157,"line":1900},[155,91044,73334],{"class":263},[155,91046,70000],{"class":171},[155,91048,80192],{"class":263},[155,91050,70055],{"class":167},[155,91052,21206],{"class":171},[155,91054,91055,91057,91059,91061,91063],{"class":157,"line":1911},[155,91056,73348],{"class":263},[155,91058,70000],{"class":171},[155,91060,20473],{"class":263},[155,91062,70055],{"class":167},[155,91064,21206],{"class":171},[155,91066,91067,91069,91071,91073,91075],{"class":157,"line":1917},[155,91068,75922],{"class":263},[155,91070,70000],{"class":171},[155,91072,20473],{"class":263},[155,91074,70055],{"class":167},[155,91076,21206],{"class":171},[155,91078,91079,91081,91083,91086],{"class":157,"line":1927},[155,91080,75849],{"class":263},[155,91082,70000],{"class":171},[155,91084,91085],{"class":263},"right",[155,91087,21206],{"class":171},[155,91089,91090,91092,91094,91096,91098,91100,91102,91104],{"class":157,"line":1933},[155,91091,73269],{"class":263},[155,91093,70000],{"class":171},[155,91095,20473],{"class":263},[155,91097,70055],{"class":167},[155,91099,70119],{"class":263},[155,91101,21925],{"class":263},[155,91103,70055],{"class":167},[155,91105,21206],{"class":171},[155,91107,91108,91111,91113,91115,91117],{"class":157,"line":1943},[155,91109,91110],{"class":263},"      padding-right",[155,91112,70000],{"class":171},[155,91114,565],{"class":263},[155,91116,70055],{"class":167},[155,91118,21206],{"class":171},[155,91120,91121,91123,91125,91127,91129],{"class":157,"line":1949},[155,91122,73485],{"class":263},[155,91124,70000],{"class":171},[155,91126,20589],{"class":263},[155,91128,70055],{"class":167},[155,91130,21206],{"class":171},[155,91132,91133,91135,91137,91139,91141,91144,91146,91149,91151,91153],{"class":157,"line":1959},[155,91134,73447],{"class":263},[155,91136,70000],{"class":171},[155,91138,90886],{"class":263},[155,91140,230],{"class":171},[155,91142,91143],{"class":263},"237",[155,91145,7589],{"class":171},[155,91147,91148],{"class":263},"235",[155,91150,7589],{"class":171},[155,91152,91148],{"class":263},[155,91154,22596],{"class":171},[155,91156,91157,91160,91162,91164],{"class":157,"line":1964},[155,91158,91159],{"class":263},"      box-sizing",[155,91161,70000],{"class":171},[155,91163,79068],{"class":263},[155,91165,21206],{"class":171},[155,91167,91168],{"class":157,"line":1970},[155,91169,22074],{"class":171},[155,91171,91172],{"class":157,"line":1981},[155,91173,217],{"emptyLinePlaceholder":216},[155,91175,91176,91178,91180],{"class":157,"line":1986},[155,91177,91038],{"class":226},[155,91179,70251],{"class":69863},[155,91181,35397],{"class":171},[155,91183,91184,91186,91188,91190],{"class":157,"line":1991},[155,91185,75979],{"class":263},[155,91187,70000],{"class":171},[155,91189,75984],{"class":263},[155,91191,21206],{"class":171},[155,91193,91194],{"class":157,"line":1997},[155,91195,22074],{"class":171},[155,91197,91198],{"class":157,"line":2014},[155,91199,217],{"emptyLinePlaceholder":216},[155,91201,91202,91204],{"class":157,"line":2046},[155,91203,83586],{"class":69863},[155,91205,35397],{"class":171},[155,91207,91208,91210,91212,91214,91216],{"class":157,"line":2062},[155,91209,73334],{"class":263},[155,91211,70000],{"class":171},[155,91213,80192],{"class":263},[155,91215,70055],{"class":167},[155,91217,21206],{"class":171},[155,91219,91220,91222,91224,91227],{"class":157,"line":2067},[155,91221,73269],{"class":263},[155,91223,70000],{"class":171},[155,91225,91226],{"class":263},"auto",[155,91228,21206],{"class":171},[155,91230,91231,91233,91235,91237],{"class":157,"line":2073},[155,91232,83593],{"class":263},[155,91234,70000],{"class":171},[155,91236,83598],{"class":263},[155,91238,21206],{"class":171},[155,91240,91241],{"class":157,"line":2079},[155,91242,22074],{"class":171},[155,91244,91245],{"class":157,"line":2089},[155,91246,217],{"emptyLinePlaceholder":216},[155,91248,91249,91251],{"class":157,"line":2095},[155,91250,83678],{"class":69863},[155,91252,35397],{"class":171},[155,91254,91255,91257,91259,91261,91263,91265,91267,91269,91271,91273],{"class":157,"line":2106},[155,91256,73447],{"class":263},[155,91258,70000],{"class":171},[155,91260,90886],{"class":263},[155,91262,230],{"class":171},[155,91264,91143],{"class":263},[155,91266,7589],{"class":171},[155,91268,91148],{"class":263},[155,91270,7589],{"class":171},[155,91272,91148],{"class":263},[155,91274,22596],{"class":171},[155,91276,91277],{"class":157,"line":2112},[155,91278,22074],{"class":171},[155,91280,91281],{"class":157,"line":2122},[155,91282,217],{"emptyLinePlaceholder":216},[155,91284,91285,91287],{"class":157,"line":2128},[155,91286,83678],{"class":69863},[155,91288,990],{"class":171},[155,91290,91291,91293],{"class":157,"line":2138},[155,91292,83744],{"class":69863},[155,91294,35397],{"class":171},[155,91296,91297,91299,91301,91303,91305],{"class":157,"line":2144},[155,91298,73348],{"class":263},[155,91300,70000],{"class":171},[155,91302,20352],{"class":263},[155,91304,70055],{"class":167},[155,91306,21206],{"class":171},[155,91308,91309,91311,91313,91315],{"class":157,"line":2154},[155,91310,75849],{"class":263},[155,91312,70000],{"class":171},[155,91314,43527],{"class":263},[155,91316,21206],{"class":171},[155,91318,91319,91321,91323,91325,91327],{"class":157,"line":2160},[155,91320,73485],{"class":263},[155,91322,70000],{"class":171},[155,91324,20613],{"class":263},[155,91326,70055],{"class":167},[155,91328,21206],{"class":171},[155,91330,91331,91333,91335,91337,91339,91341,91343,91345,91348,91350,91353,91355,91357],{"class":157,"line":2170},[155,91332,80540],{"class":263},[155,91334,70000],{"class":171},[155,91336,329],{"class":263},[155,91338,70055],{"class":167},[155,91340,70084],{"class":263},[155,91342,90823],{"class":263},[155,91344,230],{"class":171},[155,91346,91347],{"class":263},"228",[155,91349,7589],{"class":171},[155,91351,91352],{"class":263},"225",[155,91354,7589],{"class":171},[155,91356,91352],{"class":263},[155,91358,22596],{"class":171},[155,91360,91361,91364,91366,91368,91370],{"class":157,"line":2176},[155,91362,91363],{"class":263},"      padding-left",[155,91365,70000],{"class":171},[155,91367,350],{"class":263},[155,91369,70055],{"class":167},[155,91371,21206],{"class":171},[155,91373,91374,91376,91378,91380,91383,91385,91387],{"class":157,"line":2191},[155,91375,80423],{"class":263},[155,91377,70000],{"class":171},[155,91379,47910],{"class":263},[155,91381,91382],{"class":263}," linear",[155,91384,80430],{"class":263},[155,91386,20753],{"class":167},[155,91388,21206],{"class":171},[155,91390,91391],{"class":157,"line":2197},[155,91392,22074],{"class":171},[155,91394,91395],{"class":157,"line":2208},[155,91396,217],{"emptyLinePlaceholder":216},[155,91398,91399,91402,91404,91406],{"class":157,"line":2214},[155,91400,91401],{"class":69863},"    tbody",[155,91403,88707],{"class":69863},[155,91405,79503],{"class":226},[155,91407,35397],{"class":171},[155,91409,91410,91412,91414,91416,91418,91420,91422,91424,91426,91428],{"class":157,"line":2225},[155,91411,73447],{"class":263},[155,91413,70000],{"class":171},[155,91415,90886],{"class":263},[155,91417,230],{"class":171},[155,91419,91143],{"class":263},[155,91421,7589],{"class":171},[155,91423,91148],{"class":263},[155,91425,7589],{"class":171},[155,91427,91148],{"class":263},[155,91429,22596],{"class":171},[155,91431,91432,91434,91436,91438],{"class":157,"line":2231},[155,91433,80588],{"class":263},[155,91435,70000],{"class":171},[155,91437,80593],{"class":263},[155,91439,21206],{"class":171},[155,91441,91442],{"class":157,"line":2237},[155,91443,22074],{"class":171},[155,91445,91446],{"class":157,"line":2243},[155,91447,217],{"emptyLinePlaceholder":216},[155,91449,91450,91452,91454,91457,91459],{"class":157,"line":2249},[155,91451,91401],{"class":69863},[155,91453,88707],{"class":69863},[155,91455,91456],{"class":69863}," td",[155,91458,21311],{"class":69863},[155,91460,35397],{"class":171},[155,91462,91463,91465,91467,91469],{"class":157,"line":2260},[155,91464,73572],{"class":263},[155,91466,70000],{"class":171},[155,91468,79432],{"class":263},[155,91470,21206],{"class":171},[155,91472,91473,91475,91477,91479,91481],{"class":157,"line":2266},[155,91474,73334],{"class":263},[155,91476,70000],{"class":171},[155,91478,2932],{"class":263},[155,91480,70055],{"class":167},[155,91482,21206],{"class":171},[155,91484,91485,91487,91489,91491,91493],{"class":157,"line":2286},[155,91486,73348],{"class":263},[155,91488,70000],{"class":171},[155,91490,20879],{"class":263},[155,91492,70055],{"class":167},[155,91494,21206],{"class":171},[155,91496,91497,91499,91501,91503,91505],{"class":157,"line":2292},[155,91498,75922],{"class":263},[155,91500,70000],{"class":171},[155,91502,20879],{"class":263},[155,91504,70055],{"class":167},[155,91506,21206],{"class":171},[155,91508,91509,91511,91513,91515,91517],{"class":157,"line":2303},[155,91510,80640],{"class":263},[155,91512,70000],{"class":171},[155,91514,360],{"class":263},[155,91516,70055],{"class":167},[155,91518,21206],{"class":171},[155,91520,91521,91523,91525,91527],{"class":157,"line":2309},[155,91522,75979],{"class":263},[155,91524,70000],{"class":171},[155,91526,79405],{"class":263},[155,91528,21206],{"class":171},[155,91530,91531,91533,91535,91537],{"class":157,"line":2315},[155,91532,75849],{"class":263},[155,91534,70000],{"class":171},[155,91536,70155],{"class":263},[155,91538,21206],{"class":171},[155,91540,91541,91543,91545,91547],{"class":157,"line":2321},[155,91542,82533],{"class":263},[155,91544,70000],{"class":171},[155,91546,73300],{"class":263},[155,91548,21206],{"class":171},[155,91550,91551,91553,91555,91558],{"class":157,"line":2327},[155,91552,73447],{"class":263},[155,91554,70000],{"class":171},[155,91556,91557],{"class":263},"orange",[155,91559,21206],{"class":171},[155,91561,91562,91564,91566,91569,91571],{"class":157,"line":2333},[155,91563,73697],{"class":263},[155,91565,70000],{"class":171},[155,91567,91568],{"class":263},"12.5",[155,91570,70055],{"class":167},[155,91572,21206],{"class":171},[155,91574,91575],{"class":157,"line":2339},[155,91576,22074],{"class":171},[155,91578,91579,91581,91583],{"class":157,"line":2345},[155,91580,70980],{"class":171},[155,91582,20011],{"class":69863},[155,91584,69870],{"class":171},[155,91586,91587,91589,91591],{"class":157,"line":2366},[155,91588,70348],{"class":171},[155,91590,69897],{"class":69863},[155,91592,69870],{"class":171},[155,91594,91595],{"class":157,"line":2372},[155,91596,217],{"emptyLinePlaceholder":216},[155,91598,91599,91601,91603],{"class":157,"line":2388},[155,91600,20959],{"class":171},[155,91602,70363],{"class":69863},[155,91604,69870],{"class":171},[155,91606,91607,91609,91611,91614,91616],{"class":157,"line":2394},[155,91608,70707],{"class":171},[155,91610,20037],{"class":69863},[155,91612,91613],{"class":171},">学生就业统计表\u003C\u002F",[155,91615,20037],{"class":69863},[155,91617,69870],{"class":171},[155,91619,91620,91622,91624,91626,91628,91630,91632,91634,91636],{"class":157,"line":2408},[155,91621,70707],{"class":171},[155,91623,85188],{"class":69863},[155,91625,72049],{"class":226},[155,91627,317],{"class":171},[155,91629,81227],{"class":732},[155,91631,87633],{"class":226},[155,91633,317],{"class":171},[155,91635,1313],{"class":732},[155,91637,69870],{"class":171},[155,91639,91640,91642,91644,91646,91648,91650,91652,91654,91656,91658,91660,91663,91665,91667,91669],{"class":157,"line":2414},[155,91641,69904],{"class":171},[155,91643,72384],{"class":69863},[155,91645,72387],{"class":226},[155,91647,317],{"class":171},[155,91649,81262],{"class":732},[155,91651,34745],{"class":226},[155,91653,317],{"class":171},[155,91655,87659],{"class":732},[155,91657,79583],{"class":226},[155,91659,317],{"class":171},[155,91661,91662],{"class":732},"\"姓名\"",[155,91664,72049],{"class":226},[155,91666,317],{"class":171},[155,91668,87659],{"class":732},[155,91670,69870],{"class":171},[155,91672,91673,91675,91677,91679,91681,91683,91685,91687,91689,91691,91693,91696,91698,91700,91702],{"class":157,"line":2429},[155,91674,69904],{"class":171},[155,91676,72384],{"class":69863},[155,91678,72387],{"class":226},[155,91680,317],{"class":171},[155,91682,81262],{"class":732},[155,91684,34745],{"class":226},[155,91686,317],{"class":171},[155,91688,87687],{"class":732},[155,91690,79583],{"class":226},[155,91692,317],{"class":171},[155,91694,91695],{"class":732},"\"年龄\"",[155,91697,72049],{"class":226},[155,91699,317],{"class":171},[155,91701,87687],{"class":732},[155,91703,69870],{"class":171},[155,91705,91706,91708,91710,91712,91714,91716,91718,91720,91722,91724,91726,91729,91731,91733,91735],{"class":157,"line":2435},[155,91707,69904],{"class":171},[155,91709,72384],{"class":69863},[155,91711,72387],{"class":226},[155,91713,317],{"class":171},[155,91715,81262],{"class":732},[155,91717,34745],{"class":226},[155,91719,317],{"class":171},[155,91721,87789],{"class":732},[155,91723,79583],{"class":226},[155,91725,317],{"class":171},[155,91727,91728],{"class":732},"\"薪资\"",[155,91730,72049],{"class":226},[155,91732,317],{"class":171},[155,91734,87789],{"class":732},[155,91736,69870],{"class":171},[155,91738,91739,91741,91743,91745,91747,91749,91751,91753,91755,91757,91759,91761],{"class":157,"line":2444},[155,91740,69904],{"class":171},[155,91742,87707],{"class":69863},[155,91744,34745],{"class":226},[155,91746,317],{"class":171},[155,91748,87714],{"class":732},[155,91750,34784],{"class":226},[155,91752,317],{"class":171},[155,91754,15430],{"class":732},[155,91756,72049],{"class":226},[155,91758,317],{"class":171},[155,91760,87714],{"class":732},[155,91762,69870],{"class":171},[155,91764,91765,91767,91769,91771,91773,91775,91777,91779],{"class":157,"line":2450},[155,91766,73797],{"class":171},[155,91768,87729],{"class":69863},[155,91770,85214],{"class":226},[155,91772,317],{"class":171},[155,91774,29790],{"class":732},[155,91776,87738],{"class":171},[155,91778,87729],{"class":69863},[155,91780,69870],{"class":171},[155,91782,91783,91785,91787,91789,91791,91793,91795,91797],{"class":157,"line":2459},[155,91784,73797],{"class":171},[155,91786,87729],{"class":69863},[155,91788,85214],{"class":226},[155,91790,317],{"class":171},[155,91792,29859],{"class":732},[155,91794,87757],{"class":171},[155,91796,87729],{"class":69863},[155,91798,69870],{"class":171},[155,91800,91801,91803,91805],{"class":157,"line":2465},[155,91802,70339],{"class":171},[155,91804,87707],{"class":69863},[155,91806,69870],{"class":171},[155,91808,91809,91811,91813,91815,91817,91819,91821,91823,91825,91827,91829,91831],{"class":157,"line":2471},[155,91810,69904],{"class":171},[155,91812,87707],{"class":69863},[155,91814,34745],{"class":226},[155,91816,317],{"class":171},[155,91818,87811],{"class":732},[155,91820,34784],{"class":226},[155,91822,317],{"class":171},[155,91824,15430],{"class":732},[155,91826,72049],{"class":226},[155,91828,317],{"class":171},[155,91830,87811],{"class":732},[155,91832,69870],{"class":171},[155,91834,91835,91837,91839,91841,91843,91845,91847,91849],{"class":157,"line":2480},[155,91836,73797],{"class":171},[155,91838,87729],{"class":69863},[155,91840,85214],{"class":226},[155,91842,317],{"class":171},[155,91844,87832],{"class":732},[155,91846,87835],{"class":171},[155,91848,87729],{"class":69863},[155,91850,69870],{"class":171},[155,91852,91853,91855,91857,91859,91861,91863,91865,91867],{"class":157,"line":2486},[155,91854,73797],{"class":171},[155,91856,87729],{"class":69863},[155,91858,85214],{"class":226},[155,91860,317],{"class":171},[155,91862,87852],{"class":732},[155,91864,87855],{"class":171},[155,91866,87729],{"class":69863},[155,91868,69870],{"class":171},[155,91870,91871,91873,91875,91877,91879,91881,91883,91885],{"class":157,"line":2497},[155,91872,73797],{"class":171},[155,91874,87729],{"class":69863},[155,91876,85214],{"class":226},[155,91878,317],{"class":171},[155,91880,87872],{"class":732},[155,91882,87875],{"class":171},[155,91884,87729],{"class":69863},[155,91886,69870],{"class":171},[155,91888,91889,91891,91893,91895,91897,91899,91901,91903],{"class":157,"line":2503},[155,91890,73797],{"class":171},[155,91892,87729],{"class":69863},[155,91894,85214],{"class":226},[155,91896,317],{"class":171},[155,91898,87892],{"class":732},[155,91900,87895],{"class":171},[155,91902,87729],{"class":69863},[155,91904,69870],{"class":171},[155,91906,91907,91909,91911,91913,91915,91917,91919,91921],{"class":157,"line":2522},[155,91908,73797],{"class":171},[155,91910,87729],{"class":69863},[155,91912,85214],{"class":226},[155,91914,317],{"class":171},[155,91916,87912],{"class":732},[155,91918,87915],{"class":171},[155,91920,87729],{"class":69863},[155,91922,69870],{"class":171},[155,91924,91925,91927,91929],{"class":157,"line":2528},[155,91926,70339],{"class":171},[155,91928,87707],{"class":69863},[155,91930,69870],{"class":171},[155,91932,91933,91935,91937],{"class":157,"line":2539},[155,91934,69904],{"class":171},[155,91936,72450],{"class":69863},[155,91938,69870],{"class":171},[155,91940,91941,91943,91945,91948,91950,91953,91955],{"class":157,"line":2545},[155,91942,73797],{"class":171},[155,91944,155],{"class":69863},[155,91946,91947],{"class":171},">+\u003C\u002F",[155,91949,155],{"class":69863},[155,91951,91952],{"class":171},">添加\u003C\u002F",[155,91954,72450],{"class":69863},[155,91956,69870],{"class":171},[155,91958,91959,91961,91963],{"class":157,"line":2565},[155,91960,70980],{"class":171},[155,91962,85188],{"class":69863},[155,91964,69870],{"class":171},[155,91966,91967,91969,91971,91973,91975,91977,91980,91982,91985,91987,91990,91992],{"class":157,"line":2581},[155,91968,70707],{"class":171},[155,91970,70174],{"class":69863},[155,91972,72049],{"class":226},[155,91974,317],{"class":171},[155,91976,81143],{"class":732},[155,91978,91979],{"class":171},">共有数据 \u003C",[155,91981,155],{"class":69863},[155,91983,91984],{"class":171},">0\u003C\u002F",[155,91986,155],{"class":69863},[155,91988,91989],{"class":171},"> 条\u003C\u002F",[155,91991,70174],{"class":69863},[155,91993,69870],{"class":171},[155,91995,91996,91998,92000],{"class":157,"line":2587},[155,91997,70707],{"class":171},[155,91999,20222],{"class":69863},[155,92001,69870],{"class":171},[155,92003,92004,92006,92008],{"class":157,"line":2601},[155,92005,69904],{"class":171},[155,92007,20225],{"class":69863},[155,92009,69870],{"class":171},[155,92011,92012,92014,92016],{"class":157,"line":2607},[155,92013,73797],{"class":171},[155,92015,20228],{"class":69863},[155,92017,69870],{"class":171},[155,92019,92020,92022,92024,92027,92029],{"class":157,"line":2613},[155,92021,73865],{"class":171},[155,92023,20231],{"class":69863},[155,92025,92026],{"class":171},">ID\u003C\u002F",[155,92028,20231],{"class":69863},[155,92030,69870],{"class":171},[155,92032,92033,92035,92037,92039,92041],{"class":157,"line":2624},[155,92034,73865],{"class":171},[155,92036,20231],{"class":69863},[155,92038,88018],{"class":171},[155,92040,20231],{"class":69863},[155,92042,69870],{"class":171},[155,92044,92045,92047,92049,92051,92053],{"class":157,"line":2630},[155,92046,73865],{"class":171},[155,92048,20231],{"class":69863},[155,92050,88031],{"class":171},[155,92052,20231],{"class":69863},[155,92054,69870],{"class":171},[155,92056,92057,92059,92061,92063,92065],{"class":157,"line":2636},[155,92058,73865],{"class":171},[155,92060,20231],{"class":69863},[155,92062,88044],{"class":171},[155,92064,20231],{"class":69863},[155,92066,69870],{"class":171},[155,92068,92069,92071,92073,92075,92077],{"class":157,"line":2646},[155,92070,73865],{"class":171},[155,92072,20231],{"class":69863},[155,92074,88057],{"class":171},[155,92076,20231],{"class":69863},[155,92078,69870],{"class":171},[155,92080,92081,92083,92085,92087,92089],{"class":157,"line":2652},[155,92082,73865],{"class":171},[155,92084,20231],{"class":69863},[155,92086,88070],{"class":171},[155,92088,20231],{"class":69863},[155,92090,69870],{"class":171},[155,92092,92093,92095,92097,92100,92102],{"class":157,"line":2663},[155,92094,73865],{"class":171},[155,92096,20231],{"class":69863},[155,92098,92099],{"class":171},">录入时间\u003C\u002F",[155,92101,20231],{"class":69863},[155,92103,69870],{"class":171},[155,92105,92106,92108,92110,92112,92114],{"class":157,"line":2669},[155,92107,73865],{"class":171},[155,92109,20231],{"class":69863},[155,92111,88083],{"class":171},[155,92113,20231],{"class":69863},[155,92115,69870],{"class":171},[155,92117,92118,92120,92122],{"class":157,"line":2679},[155,92119,73970],{"class":171},[155,92121,20228],{"class":69863},[155,92123,69870],{"class":171},[155,92125,92126,92128,92130],{"class":157,"line":2684},[155,92127,70339],{"class":171},[155,92129,20225],{"class":69863},[155,92131,69870],{"class":171},[155,92133,92134,92136,92138],{"class":157,"line":2690},[155,92135,69904],{"class":171},[155,92137,20269],{"class":69863},[155,92139,69870],{"class":171},[155,92141,92142],{"class":157,"line":2742},[155,92143,92144],{"class":161},"      \u003C!-- \u003Ctr>\n",[155,92146,92147],{"class":157,"line":2789},[155,92148,92149],{"class":161},"        \u003Ctd>1\u003C\u002Ftd>\n",[155,92151,92152],{"class":157,"line":2794},[155,92153,92149],{"class":161},[155,92155,92156],{"class":157,"line":2800},[155,92157,92149],{"class":161},[155,92159,92160],{"class":157,"line":2821},[155,92161,92149],{"class":161},[155,92163,92164],{"class":157,"line":2827},[155,92165,92149],{"class":161},[155,92167,92168],{"class":157,"line":2848},[155,92169,92149],{"class":161},[155,92171,92172],{"class":157,"line":2854},[155,92173,92149],{"class":161},[155,92175,92176],{"class":157,"line":2860},[155,92177,92178],{"class":161},"        \u003Ctd>\n",[155,92180,92181],{"class":157,"line":2870},[155,92182,92183],{"class":161},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[155,92185,92186],{"class":157,"line":2875},[155,92187,92188],{"class":161},"        \u003C\u002Ftd>\n",[155,92190,92191],{"class":157,"line":2881},[155,92192,92193],{"class":161},"      \u003C\u002Ftr> -->\n",[155,92195,92196,92198,92200],{"class":157,"line":2897},[155,92197,70339],{"class":171},[155,92199,20269],{"class":69863},[155,92201,69870],{"class":171},[155,92203,92204,92206,92208],{"class":157,"line":2945},[155,92205,70980],{"class":171},[155,92207,20222],{"class":69863},[155,92209,69870],{"class":171},[155,92211,92212,92214,92216],{"class":157,"line":2951},[155,92213,70707],{"class":171},[155,92215,70376],{"class":69863},[155,92217,69870],{"class":171},[155,92219,92220],{"class":157,"line":2957},[155,92221,92222],{"class":161},"    \u002F\u002F const initData = [{\n",[155,92224,92225],{"class":157,"line":2963},[155,92226,92227],{"class":161},"    \u002F\u002F   unameId: 1,\n",[155,92229,92230],{"class":157,"line":2974},[155,92231,92232],{"class":161},"    \u002F\u002F   uname: '华晨宇',\n",[155,92234,92235],{"class":157,"line":2980},[155,92236,92237],{"class":161},"    \u002F\u002F   age: 22,\n",[155,92239,92240],{"class":157,"line":2986},[155,92241,92242],{"class":161},"    \u002F\u002F   salary: 12000,\n",[155,92244,92245],{"class":157,"line":2992},[155,92246,92247],{"class":161},"    \u002F\u002F   gender: '男',\n",[155,92249,92250],{"class":157,"line":3011},[155,92251,92252],{"class":161},"    \u002F\u002F   city: '北京',\n",[155,92254,92255],{"class":157,"line":3026},[155,92256,92257],{"class":161},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[155,92259,92260],{"class":157,"line":3035},[155,92261,92262],{"class":161},"    \u002F\u002F }]\n",[155,92264,92265],{"class":157,"line":3044},[155,92266,92267],{"class":161},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[155,92269,92270],{"class":157,"line":3053},[155,92271,92272],{"class":161},"    \u002F\u002F 1.渲染业务\n",[155,92274,92275],{"class":157,"line":3062},[155,92276,92277],{"class":161},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[155,92279,92280],{"class":157,"line":3068},[155,92281,92282],{"class":161},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[155,92284,92285],{"class":157,"line":3074},[155,92286,92287],{"class":161},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[155,92289,92290],{"class":157,"line":3082},[155,92291,217],{"emptyLinePlaceholder":216},[155,92293,92294],{"class":157,"line":3087},[155,92295,92296],{"class":161},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[155,92298,92299],{"class":157,"line":3093},[155,92300,92301],{"class":161},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[155,92303,92304,92306,92308,92310],{"class":157,"line":3104},[155,92305,31049],{"class":167},[155,92307,76258],{"class":263},[155,92309,33391],{"class":167},[155,92311,70401],{"class":171},[155,92313,92314,92317,92319],{"class":157,"line":3110},[155,92315,92316],{"class":171},"    console.",[155,92318,76810],{"class":226},[155,92320,70975],{"class":171},[155,92322,92323],{"class":157,"line":3130},[155,92324,217],{"emptyLinePlaceholder":216},[155,92326,92327],{"class":157,"line":3136},[155,92328,92329],{"class":161},"    \u002F\u002F 时间函数\n",[155,92331,92332,92334,92337],{"class":157,"line":3142},[155,92333,88647],{"class":167},[155,92335,92336],{"class":226}," getTime",[155,92338,30681],{"class":171},[155,92340,92341,92343,92346,92348,92350,92353],{"class":157,"line":3148},[155,92342,76791],{"class":167},[155,92344,92345],{"class":263}," date",[155,92347,33391],{"class":167},[155,92349,31406],{"class":167},[155,92351,92352],{"class":226}," Date",[155,92354,294],{"class":171},[155,92356,92357,92359,92361,92363,92366,92369,92371,92373,92375,92378,92381,92383,92385,92387,92389,92391,92393,92395],{"class":157,"line":3165},[155,92358,76791],{"class":167},[155,92360,35916],{"class":263},[155,92362,33391],{"class":167},[155,92364,92365],{"class":171}," date.",[155,92367,92368],{"class":226},"getHours",[155,92370,32877],{"class":171},[155,92372,20959],{"class":167},[155,92374,21925],{"class":263},[155,92376,92377],{"class":167}," ?",[155,92379,92380],{"class":732}," '0'",[155,92382,15186],{"class":167},[155,92384,92365],{"class":171},[155,92386,92368],{"class":226},[155,92388,32877],{"class":171},[155,92390,3017],{"class":167},[155,92392,92365],{"class":171},[155,92394,92368],{"class":226},[155,92396,294],{"class":171},[155,92398,92399,92401,92404,92406,92408,92411,92413,92415,92417,92419,92421,92423,92425,92427,92429,92431,92433,92435],{"class":157,"line":3171},[155,92400,76791],{"class":167},[155,92402,92403],{"class":263}," m",[155,92405,33391],{"class":167},[155,92407,92365],{"class":171},[155,92409,92410],{"class":226},"getMinutes",[155,92412,32877],{"class":171},[155,92414,20959],{"class":167},[155,92416,21925],{"class":263},[155,92418,92377],{"class":167},[155,92420,92380],{"class":732},[155,92422,15186],{"class":167},[155,92424,92365],{"class":171},[155,92426,92410],{"class":226},[155,92428,32877],{"class":171},[155,92430,3017],{"class":167},[155,92432,92365],{"class":171},[155,92434,92410],{"class":226},[155,92436,294],{"class":171},[155,92438,92439,92441,92443,92445,92447,92450,92452,92454,92456,92458,92460,92462,92464,92466,92468,92470,92472,92474],{"class":157,"line":3177},[155,92440,76791],{"class":167},[155,92442,28277],{"class":263},[155,92444,33391],{"class":167},[155,92446,92365],{"class":171},[155,92448,92449],{"class":226},"getSeconds",[155,92451,32877],{"class":171},[155,92453,20959],{"class":167},[155,92455,21925],{"class":263},[155,92457,92377],{"class":167},[155,92459,92380],{"class":732},[155,92461,15186],{"class":167},[155,92463,92365],{"class":171},[155,92465,92449],{"class":226},[155,92467,32877],{"class":171},[155,92469,3017],{"class":167},[155,92471,92365],{"class":171},[155,92473,92449],{"class":226},[155,92475,294],{"class":171},[155,92477,92478,92480,92483,92485,92487,92490,92492,92495,92497,92500,92502,92504,92507,92509,92511,92513,92515,92517,92519,92522,92524,92527,92529,92532,92534,92536,92538],{"class":157,"line":3183},[155,92479,76791],{"class":167},[155,92481,92482],{"class":263}," str",[155,92484,33391],{"class":167},[155,92486,81466],{"class":732},[155,92488,92489],{"class":171},"date",[155,92491,236],{"class":732},[155,92493,92494],{"class":226},"getFullYear",[155,92496,22313],{"class":732},[155,92498,92499],{"class":732},"}\u002F${",[155,92501,92489],{"class":171},[155,92503,236],{"class":732},[155,92505,92506],{"class":226},"getMonth",[155,92508,32877],{"class":732},[155,92510,1274],{"class":167},[155,92512,1277],{"class":263},[155,92514,92499],{"class":732},[155,92516,92489],{"class":171},[155,92518,236],{"class":732},[155,92520,92521],{"class":226},"getDate",[155,92523,22313],{"class":732},[155,92525,92526],{"class":732},"} ${",[155,92528,20487],{"class":171},[155,92530,92531],{"class":732},"}:${",[155,92533,2914],{"class":171},[155,92535,92531],{"class":732},[155,92537,20753],{"class":171},[155,92539,92540],{"class":732},"}`\n",[155,92542,92543,92546],{"class":157,"line":3189},[155,92544,92545],{"class":167},"      return",[155,92547,92548],{"class":171}," str\n",[155,92550,92551],{"class":157,"line":3195},[155,92552,22074],{"class":171},[155,92554,92555],{"class":157,"line":3222},[155,92556,92557],{"class":161},"    \u002F\u002F 渲染函数\n",[155,92559,92560,92562,92564,92566,92568,92570,92572,92574],{"class":157,"line":3246},[155,92561,31049],{"class":167},[155,92563,88310],{"class":263},[155,92565,33391],{"class":167},[155,92567,72959],{"class":171},[155,92569,72962],{"class":226},[155,92571,230],{"class":171},[155,92573,88321],{"class":732},[155,92575,363],{"class":171},[155,92577,92578,92580,92582],{"class":157,"line":3252},[155,92579,88647],{"class":167},[155,92581,88650],{"class":226},[155,92583,30681],{"class":171},[155,92585,92586],{"class":157,"line":3258},[155,92587,92588],{"class":161},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[155,92590,92591],{"class":157,"line":3264},[155,92592,92593],{"class":161},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[155,92595,92596,92598,92601,92603,92605,92608,92610,92612,92614,92617,92619,92622],{"class":157,"line":3275},[155,92597,76791],{"class":167},[155,92599,92600],{"class":263}," trArr",[155,92602,33391],{"class":167},[155,92604,70528],{"class":171},[155,92606,92607],{"class":226},"map",[155,92609,230],{"class":171},[155,92611,73012],{"class":167},[155,92613,21561],{"class":171},[155,92615,92616],{"class":323},"ele",[155,92618,7589],{"class":171},[155,92620,92621],{"class":323},"index",[155,92623,32269],{"class":171},[155,92625,92626,92628],{"class":157,"line":3286},[155,92627,709],{"class":167},[155,92629,88731],{"class":732},[155,92631,92632],{"class":157,"line":3292},[155,92633,92634],{"class":732},"      \u003Ctr>\n",[155,92636,92637,92639,92641,92643,92646],{"class":157,"line":3309},[155,92638,88736],{"class":732},[155,92640,92616],{"class":171},[155,92642,236],{"class":732},[155,92644,92645],{"class":171},"unameId",[155,92647,88751],{"class":732},[155,92649,92650,92652,92654,92656,92658],{"class":157,"line":3332},[155,92651,88736],{"class":732},[155,92653,92616],{"class":171},[155,92655,236],{"class":732},[155,92657,88767],{"class":171},[155,92659,88751],{"class":732},[155,92661,92662,92664,92666,92668,92670],{"class":157,"line":3355},[155,92663,88736],{"class":732},[155,92665,92616],{"class":171},[155,92667,236],{"class":732},[155,92669,88784],{"class":171},[155,92671,88751],{"class":732},[155,92673,92674,92676,92678,92680,92682],{"class":157,"line":3361},[155,92675,88736],{"class":732},[155,92677,92616],{"class":171},[155,92679,236],{"class":732},[155,92681,88801],{"class":171},[155,92683,88751],{"class":732},[155,92685,92686,92688,92690,92692,92694],{"class":157,"line":3366},[155,92687,88736],{"class":732},[155,92689,92616],{"class":171},[155,92691,236],{"class":732},[155,92693,88818],{"class":171},[155,92695,88751],{"class":732},[155,92697,92698,92700,92702,92704,92706],{"class":157,"line":3375},[155,92699,88736],{"class":732},[155,92701,92616],{"class":171},[155,92703,236],{"class":732},[155,92705,88835],{"class":171},[155,92707,88751],{"class":732},[155,92709,92710,92712,92714,92716,92718],{"class":157,"line":3385},[155,92711,88736],{"class":732},[155,92713,92616],{"class":171},[155,92715,236],{"class":732},[155,92717,22274],{"class":171},[155,92719,88751],{"class":732},[155,92721,92722],{"class":157,"line":3391},[155,92723,92178],{"class":732},[155,92725,92726,92729,92731],{"class":157,"line":3396},[155,92727,92728],{"class":732},"          \u003Ca href=\"#\" data-id=\"${",[155,92730,92621],{"class":171},[155,92732,92733],{"class":732},"}\">删除\u003C\u002Fa>\n",[155,92735,92736],{"class":157,"line":3402},[155,92737,92188],{"class":732},[155,92739,92740],{"class":157,"line":3415},[155,92741,92742],{"class":732},"      \u003C\u002Ftr>\n",[155,92744,92745],{"class":157,"line":3421},[155,92746,92747],{"class":732},"  `\n",[155,92749,92750],{"class":157,"line":3432},[155,92751,83378],{"class":171},[155,92753,92754,92756,92758],{"class":157,"line":3443},[155,92755,76807],{"class":171},[155,92757,76810],{"class":226},[155,92759,92760],{"class":171},"(trArr)\n",[155,92762,92763],{"class":157,"line":3463},[155,92764,217],{"emptyLinePlaceholder":216},[155,92766,92767],{"class":157,"line":19149},[155,92768,92769],{"class":161},"      \u002F\u002F (2) 把数组转换为字符串join\n",[155,92771,92772],{"class":157,"line":19154},[155,92773,92774],{"class":161},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[155,92776,92777,92779,92781,92784,92787,92789,92792],{"class":157,"line":19163},[155,92778,88662],{"class":171},[155,92780,317],{"class":167},[155,92782,92783],{"class":171}," trArr.",[155,92785,92786],{"class":226},"join",[155,92788,230],{"class":171},[155,92790,92791],{"class":732},"''",[155,92793,363],{"class":171},[155,92795,92796],{"class":157,"line":19172},[155,92797,92798],{"class":161},"      \u002F\u002F 显示共有几条\n",[155,92800,92801,92803,92805,92807,92810,92813,92815,92817],{"class":157,"line":19177},[155,92802,74334],{"class":171},[155,92804,72962],{"class":226},[155,92806,230],{"class":171},[155,92808,92809],{"class":732},"'.total span'",[155,92811,92812],{"class":171},").innerHTML ",[155,92814,317],{"class":167},[155,92816,70528],{"class":171},[155,92818,74394],{"class":263},[155,92820,92821],{"class":157,"line":19182},[155,92822,22074],{"class":171},[155,92824,92825],{"class":157,"line":19187},[155,92826,92827],{"class":161},"    \u002F\u002F render()\n",[155,92829,92830],{"class":157,"line":19200},[155,92831,217],{"emptyLinePlaceholder":216},[155,92833,92834],{"class":157,"line":19205},[155,92835,92836],{"class":161},"    \u002F\u002F 获取DOM对象\n",[155,92838,92839,92841,92843,92845,92847,92849,92851,92853],{"class":157,"line":19214},[155,92840,31049],{"class":167},[155,92842,88384],{"class":263},[155,92844,33391],{"class":167},[155,92846,72959],{"class":171},[155,92848,72962],{"class":226},[155,92850,230],{"class":171},[155,92852,88395],{"class":732},[155,92854,363],{"class":171},[155,92856,92857,92859,92861,92863,92865,92867,92869,92871],{"class":157,"line":19223},[155,92858,31049],{"class":167},[155,92860,88211],{"class":263},[155,92862,33391],{"class":167},[155,92864,72959],{"class":171},[155,92866,72962],{"class":226},[155,92868,230],{"class":171},[155,92870,88222],{"class":732},[155,92872,363],{"class":171},[155,92874,92875,92877,92879,92881,92883,92885,92887,92889],{"class":157,"line":19240},[155,92876,31049],{"class":167},[155,92878,35514],{"class":263},[155,92880,33391],{"class":167},[155,92882,72959],{"class":171},[155,92884,72962],{"class":226},[155,92886,230],{"class":171},[155,92888,88241],{"class":732},[155,92890,363],{"class":171},[155,92892,92894,92896,92898,92900,92902,92904,92906,92908],{"class":157,"line":92893},231,[155,92895,31049],{"class":167},[155,92897,88270],{"class":263},[155,92899,33391],{"class":167},[155,92901,72959],{"class":171},[155,92903,72962],{"class":226},[155,92905,230],{"class":171},[155,92907,88281],{"class":732},[155,92909,363],{"class":171},[155,92911,92913,92915,92917,92919,92921,92923,92925,92927],{"class":157,"line":92912},232,[155,92914,31049],{"class":167},[155,92916,88250],{"class":263},[155,92918,33391],{"class":167},[155,92920,72959],{"class":171},[155,92922,72962],{"class":226},[155,92924,230],{"class":171},[155,92926,88261],{"class":732},[155,92928,363],{"class":171},[155,92930,92932,92934,92936,92938,92940,92942,92944,92946],{"class":157,"line":92931},233,[155,92933,31049],{"class":167},[155,92935,88290],{"class":263},[155,92937,33391],{"class":167},[155,92939,72959],{"class":171},[155,92941,72962],{"class":226},[155,92943,230],{"class":171},[155,92945,88301],{"class":732},[155,92947,363],{"class":171},[155,92949,92951],{"class":157,"line":92950},234,[155,92952,217],{"emptyLinePlaceholder":216},[155,92954,92956],{"class":157,"line":92955},235,[155,92957,92958],{"class":161},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[155,92960,92962,92964,92966,92968,92970,92972,92974,92976,92978],{"class":157,"line":92961},236,[155,92963,88402],{"class":171},[155,92965,76376],{"class":226},[155,92967,230],{"class":171},[155,92969,88409],{"class":732},[155,92971,7589],{"class":171},[155,92973,73012],{"class":167},[155,92975,21561],{"class":171},[155,92977,20161],{"class":323},[155,92979,32269],{"class":171},[155,92981,92983],{"class":157,"line":92982},237,[155,92984,92985],{"class":161},"      \u002F\u002F 禁止浏览器跳转\n",[155,92987,92989,92991,92993],{"class":157,"line":92988},238,[155,92990,88429],{"class":171},[155,92992,88432],{"class":226},[155,92994,294],{"class":171},[155,92996,92998],{"class":157,"line":92997},239,[155,92999,93000],{"class":161},"      \u002F\u002F 非空判断\n",[155,93002,93004],{"class":157,"line":93003},240,[155,93005,93006],{"class":161},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[155,93008,93010],{"class":157,"line":93009},241,[155,93011,93012],{"class":161},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[155,93014,93016,93018,93020,93022,93025,93027,93030,93033,93035,93037],{"class":157,"line":93015},242,[155,93017,73043],{"class":167},[155,93019,21561],{"class":171},[155,93021,20306],{"class":167},[155,93023,93024],{"class":171},"uname.value ",[155,93026,89920],{"class":167},[155,93028,93029],{"class":167}," !",[155,93031,93032],{"class":171},"age.value ",[155,93034,89920],{"class":167},[155,93036,93029],{"class":167},[155,93038,93039],{"class":171},"salary.value) {\n",[155,93041,93043,93045,93047,93049,93051],{"class":157,"line":93042},243,[155,93044,709],{"class":167},[155,93046,88503],{"class":226},[155,93048,230],{"class":171},[155,93050,88508],{"class":732},[155,93052,363],{"class":171},[155,93054,93056],{"class":157,"line":93055},244,[155,93057,70961],{"class":171},[155,93059,93061,93063,93065],{"class":157,"line":93060},245,[155,93062,76570],{"class":171},[155,93064,70447],{"class":226},[155,93066,93067],{"class":171},"({\n",[155,93069,93071],{"class":157,"line":93070},246,[155,93072,93073],{"class":161},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[155,93075,93077],{"class":157,"line":93076},247,[155,93078,93079],{"class":161},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[155,93081,93083],{"class":157,"line":93082},248,[155,93084,93085],{"class":161},"        \u002F\u002F 对象的序号应为数组长度+1\n",[155,93087,93089],{"class":157,"line":93088},249,[155,93090,93091],{"class":161},"        \u002F\u002F unameId: arr.length + 1,\n",[155,93093,93095],{"class":157,"line":93094},250,[155,93096,217],{"emptyLinePlaceholder":216},[155,93098,93100],{"class":157,"line":93099},251,[155,93101,93102],{"class":161},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[155,93104,93106],{"class":157,"line":93105},252,[155,93107,93108],{"class":161},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[155,93110,93112],{"class":157,"line":93111},253,[155,93113,93114],{"class":161},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[155,93116,93118],{"class":157,"line":93117},254,[155,93119,93120],{"class":161},"        \u002F\u002F 0当假看\n",[155,93122,93124,93127,93129,93131,93134,93136,93138,93140,93143,93145,93147,93150,93152],{"class":157,"line":93123},255,[155,93125,93126],{"class":171},"        unameId: arr.",[155,93128,70531],{"class":263},[155,93130,92377],{"class":167},[155,93132,93133],{"class":171}," arr[arr.",[155,93135,70531],{"class":263},[155,93137,70834],{"class":167},[155,93139,1277],{"class":263},[155,93141,93142],{"class":171},"].unameId ",[155,93144,1274],{"class":167},[155,93146,1277],{"class":263},[155,93148,93149],{"class":167}," :",[155,93151,1277],{"class":263},[155,93153,990],{"class":171},[155,93155,93157],{"class":157,"line":93156},256,[155,93158,88556],{"class":171},[155,93160,93162],{"class":157,"line":93161},257,[155,93163,88561],{"class":171},[155,93165,93167],{"class":157,"line":93166},258,[155,93168,88571],{"class":171},[155,93170,93172],{"class":157,"line":93171},259,[155,93173,88566],{"class":171},[155,93175,93177],{"class":157,"line":93176},260,[155,93178,93179],{"class":171},"        city: city.value,\n",[155,93181,93183],{"class":157,"line":93182},261,[155,93184,93185],{"class":161},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[155,93187,93189],{"class":157,"line":93188},262,[155,93190,93191],{"class":161},"        \u002F\u002F time: new Date().toDateString()\n",[155,93193,93195,93198,93201],{"class":157,"line":93194},263,[155,93196,93197],{"class":171},"        time: ",[155,93199,93200],{"class":226},"getTime",[155,93202,294],{"class":171},[155,93204,93206],{"class":157,"line":93205},264,[155,93207,83378],{"class":171},[155,93209,93211],{"class":157,"line":93210},265,[155,93212,93213],{"class":161},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[155,93215,93217,93219],{"class":157,"line":93216},266,[155,93218,88631],{"class":226},[155,93220,294],{"class":171},[155,93222,93224,93226,93228,93230,93232],{"class":157,"line":93223},267,[155,93225,88614],{"class":263},[155,93227,236],{"class":171},[155,93229,88619],{"class":226},[155,93231,32877],{"class":171},[155,93233,93234],{"class":161},"\u002F\u002F重置表单\n",[155,93236,93238],{"class":157,"line":93237},268,[155,93239,93240],{"class":161},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[155,93242,93244,93247,93249,93251,93254,93256,93258,93260,93262],{"class":157,"line":93243},269,[155,93245,93246],{"class":171},"      localStorage.",[155,93248,90217],{"class":226},[155,93250,230],{"class":171},[155,93252,93253],{"class":732},"'data'",[155,93255,7589],{"class":171},[155,93257,90227],{"class":263},[155,93259,236],{"class":171},[155,93261,90232],{"class":226},[155,93263,93264],{"class":171},"(arr))\n",[155,93266,93268],{"class":157,"line":93267},270,[155,93269,3065],{"class":171},[155,93271,93273],{"class":157,"line":93272},271,[155,93274,217],{"emptyLinePlaceholder":216},[155,93276,93278],{"class":157,"line":93277},272,[155,93279,93280],{"class":161},"    \u002F\u002F 3.删除业务\n",[155,93282,93284],{"class":157,"line":93283},273,[155,93285,93286],{"class":161},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[155,93288,93290,93292,93294,93296,93298,93300,93302,93304,93306],{"class":157,"line":93289},274,[155,93291,88904],{"class":171},[155,93293,76376],{"class":226},[155,93295,230],{"class":171},[155,93297,76381],{"class":732},[155,93299,7589],{"class":171},[155,93301,73012],{"class":167},[155,93303,21561],{"class":171},[155,93305,20161],{"class":323},[155,93307,32269],{"class":171},[155,93309,93311],{"class":157,"line":93310},275,[155,93312,93313],{"class":161},"      \u002F\u002F 判断是否点击的是删除按钮\n",[155,93315,93317,93319,93321,93323,93325],{"class":157,"line":93316},276,[155,93318,73043],{"class":167},[155,93320,85597],{"class":171},[155,93322,73049],{"class":167},[155,93324,86819],{"class":732},[155,93326,32269],{"class":171},[155,93328,93330],{"class":157,"line":93329},277,[155,93331,93332],{"class":161},"        \u002F\u002F alert(1)\n",[155,93334,93336],{"class":157,"line":93335},278,[155,93337,93338],{"class":161},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[155,93340,93342],{"class":157,"line":93341},279,[155,93343,93344],{"class":161},"        \u002F\u002F console.log(e.target)\n",[155,93346,93348],{"class":157,"line":93347},280,[155,93349,93350],{"class":161},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[155,93352,93354],{"class":157,"line":93353},281,[155,93355,217],{"emptyLinePlaceholder":216},[155,93357,93359],{"class":157,"line":93358},282,[155,93360,93361],{"class":161},"        \u002F\u002F 确认框，确然是否真的要删除\n",[155,93363,93365],{"class":157,"line":93364},283,[155,93366,93367],{"class":161},"        \u002F\u002F confirm()为确认框\n",[155,93369,93371],{"class":157,"line":93370},284,[155,93372,93373],{"class":161},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[155,93375,93377,93379,93381,93384,93386,93389],{"class":157,"line":93376},285,[155,93378,2803],{"class":167},[155,93380,21561],{"class":171},[155,93382,93383],{"class":226},"confirm",[155,93385,230],{"class":171},[155,93387,93388],{"class":732},"'您确定要删除这条数据吗？'",[155,93390,93391],{"class":171},")) {\n",[155,93393,93395,93398,93400,93402,93404],{"class":157,"line":93394},286,[155,93396,93397],{"class":171},"          arr.",[155,93399,76573],{"class":226},[155,93401,88957],{"class":171},[155,93403,329],{"class":263},[155,93405,363],{"class":171},[155,93407,93409],{"class":157,"line":93408},287,[155,93410,93411],{"class":161},"          \u002F\u002F 3.4 重新渲染页面\n",[155,93413,93415,93418],{"class":157,"line":93414},288,[155,93416,93417],{"class":226},"          render",[155,93419,294],{"class":171},[155,93421,93423],{"class":157,"line":93422},289,[155,93424,93425],{"class":161},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[155,93427,93429,93432,93434,93436,93438,93440,93442,93444,93446],{"class":157,"line":93428},290,[155,93430,93431],{"class":171},"          localStorage.",[155,93433,90217],{"class":226},[155,93435,230],{"class":171},[155,93437,93253],{"class":732},[155,93439,7589],{"class":171},[155,93441,90227],{"class":263},[155,93443,236],{"class":171},[155,93445,90232],{"class":226},[155,93447,93264],{"class":171},[155,93449,93451],{"class":157,"line":93450},291,[155,93452,22414],{"class":171},[155,93454,93456],{"class":157,"line":93455},292,[155,93457,70961],{"class":171},[155,93459,93461],{"class":157,"line":93460},293,[155,93462,217],{"emptyLinePlaceholder":216},[155,93464,93466],{"class":157,"line":93465},294,[155,93467,3065],{"class":171},[155,93469,93471],{"class":157,"line":93470},295,[155,93472,217],{"emptyLinePlaceholder":216},[155,93474,93476,93478,93480],{"class":157,"line":93475},296,[155,93477,70980],{"class":171},[155,93479,70376],{"class":69863},[155,93481,69870],{"class":171},[155,93483,93485,93487,93489],{"class":157,"line":93484},297,[155,93486,70348],{"class":171},[155,93488,70363],{"class":69863},[155,93490,69870],{"class":171},[155,93492,93494],{"class":157,"line":93493},298,[155,93495,217],{"emptyLinePlaceholder":216},[155,93497,93499,93501,93503],{"class":157,"line":93498},299,[155,93500,70348],{"class":171},[155,93502,69198],{"class":69863},[155,93504,69870],{"class":171},[20037,93506,93508],{"id":93507},"_36-正则表达式","3.6 正则表达式",[24,93510,93511],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[24,93513,93514],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[24,93516,93517],{},"正则表达式的作用：",[21052,93519,93520,93527,93533],{},[31,93521,93522,93523,93526],{},"表单验证（ ",[20234,93524,93525],{},"匹配"," ）",[31,93528,93529,93530,93526],{},"过滤敏感词（ ",[20234,93531,93532],{},"替换",[31,93534,93535,93536,93526],{},"字符串中提取我们想要的部分（ ",[20234,93537,93538],{},"提取",[14,93540,93542],{"id":93541},"_361-语法","3.6.1 语法",[24,93544,93545],{},"正则表达式使用步骤：",[28,93547,93548,93551],{},[31,93549,93550],{},"定义规则",[31,93552,93553],{},"查找是否匹配",[24,93555,93556],{},"正则表达式里边不需要写引号",[24,93558,93559],{},[37,93560],{"alt":39,"src":93561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[24,93563,93564],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[24,93566,93567],{},"reg.test(str)",[24,93569,93570],{},[37,93571],{"alt":39,"src":93572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[24,93574,93575],{},[37,93576],{"alt":39,"src":93577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[14,93579,93581],{"id":93580},"_362-元字符","3.6.2 元字符",[28,93583,93584,93587,93590,93593,93600],{},[31,93585,93586],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[31,93588,93589],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[31,93591,93592],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[31,93594,93595,93596],{},"正则验证工具：",[20318,93597,93598],{"href":93598,"rel":93599},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[43656],[31,93601,93602],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[19,93604,93606],{"id":93605},"_3621-边界符","3.6.2.1 边界符",[24,93608,93609],{},[37,93610],{"alt":39,"src":93611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[24,93613,93614],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[24,93616,93617],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[24,93619,93620],{},"只匹配一次",[24,93622,93623],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[19,93625,93627],{"id":93626},"_3622-量词","3.6.2.2 量词",[24,93629,93630],{},[37,93631],{"alt":39,"src":93632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[24,93634,93635],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[19,93637,93639],{"id":93638},"_3623-元字符","3.6.2.3 元字符",[24,93641,93642],{},[37,93643],{"alt":39,"src":93644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[24,93646,93647],{},"匹配的是a或b或c []只选一个",[24,93649,93650],{},[37,93651],{"alt":39,"src":93652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[24,93654,93655],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[24,93657,93658],{},[37,93659],{"alt":39,"src":93660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[24,93662,93663],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[24,93665,93666],{},[37,93667],{"alt":39,"src":93668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[146,93670,93672],{"className":69196,"code":93671,"language":69198,"meta":39,"style":39},"\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",[152,93673,93674,93684,93698,93702,93710,93724,93744,93756,93764,93768,93776,93784,93789,93820,93847,93875,93879,93884,93912,93943,93948,93953,93984,94016,94048,94052,94057,94088,94118,94148,94152,94157,94188,94219,94249,94279,94283,94288,94321,94325,94330,94361,94392,94396,94401,94432,94462,94493,94497,94502,94534,94565,94596,94623,94654,94686,94719,94750,94781,94813,94844,94852,94860,94864],{"__ignoreMap":39},[155,93675,93676,93678,93680,93682],{"class":157,"line":158},[155,93677,69860],{"class":171},[155,93679,69864],{"class":69863},[155,93681,69867],{"class":226},[155,93683,69870],{"class":171},[155,93685,93686,93688,93690,93692,93694,93696],{"class":157,"line":46},[155,93687,20959],{"class":171},[155,93689,69198],{"class":69863},[155,93691,69879],{"class":226},[155,93693,317],{"class":171},[155,93695,69884],{"class":732},[155,93697,69870],{"class":171},[155,93699,93700],{"class":157,"line":121},[155,93701,217],{"emptyLinePlaceholder":216},[155,93703,93704,93706,93708],{"class":157,"line":180},[155,93705,20959],{"class":171},[155,93707,69897],{"class":69863},[155,93709,69870],{"class":171},[155,93711,93712,93714,93716,93718,93720,93722],{"class":157,"line":194},[155,93713,70707],{"class":171},[155,93715,69907],{"class":69863},[155,93717,69910],{"class":226},[155,93719,317],{"class":171},[155,93721,69915],{"class":732},[155,93723,69870],{"class":171},[155,93725,93726,93728,93730,93732,93734,93736,93738,93740,93742],{"class":157,"line":200},[155,93727,70707],{"class":171},[155,93729,69907],{"class":69863},[155,93731,34745],{"class":226},[155,93733,317],{"class":171},[155,93735,69954],{"class":732},[155,93737,69934],{"class":226},[155,93739,317],{"class":171},[155,93741,69961],{"class":732},[155,93743,69870],{"class":171},[155,93745,93746,93748,93750,93752,93754],{"class":157,"line":213},[155,93747,70707],{"class":171},[155,93749,69970],{"class":69863},[155,93751,69973],{"class":171},[155,93753,69970],{"class":69863},[155,93755,69870],{"class":171},[155,93757,93758,93760,93762],{"class":157,"line":220},[155,93759,70348],{"class":171},[155,93761,69897],{"class":69863},[155,93763,69870],{"class":171},[155,93765,93766],{"class":157,"line":245},[155,93767,217],{"emptyLinePlaceholder":216},[155,93769,93770,93772,93774],{"class":157,"line":251},[155,93771,20959],{"class":171},[155,93773,70363],{"class":69863},[155,93775,69870],{"class":171},[155,93777,93778,93780,93782],{"class":157,"line":257},[155,93779,70707],{"class":171},[155,93781,70376],{"class":69863},[155,93783,69870],{"class":171},[155,93785,93786],{"class":157,"line":270},[155,93787,93788],{"class":161},"    \u002F\u002F 元字符中\n",[155,93790,93791,93793,93795,93797,93799,93802,93804,93806,93809,93811,93814,93817],{"class":157,"line":276},[155,93792,92316],{"class":171},[155,93794,76810],{"class":226},[155,93796,230],{"class":171},[155,93798,2028],{"class":732},[155,93800,93801],{"class":17606},"哈",[155,93803,2028],{"class":732},[155,93805,236],{"class":171},[155,93807,93808],{"class":226},"test",[155,93810,230],{"class":171},[155,93812,93813],{"class":732},"'哈'",[155,93815,93816],{"class":171},"))  ",[155,93818,93819],{"class":161},"\u002F\u002Ftrue\n",[155,93821,93822,93824,93826,93828,93830,93832,93834,93836,93838,93840,93843,93845],{"class":157,"line":297},[155,93823,92316],{"class":171},[155,93825,76810],{"class":226},[155,93827,230],{"class":171},[155,93829,2028],{"class":732},[155,93831,93801],{"class":17606},[155,93833,2028],{"class":732},[155,93835,236],{"class":171},[155,93837,93808],{"class":226},[155,93839,230],{"class":171},[155,93841,93842],{"class":732},"'哈哈'",[155,93844,93816],{"class":171},[155,93846,93819],{"class":161},[155,93848,93849,93851,93853,93855,93857,93859,93861,93863,93865,93867,93870,93873],{"class":157,"line":302},[155,93850,92316],{"class":171},[155,93852,76810],{"class":226},[155,93854,230],{"class":171},[155,93856,2028],{"class":732},[155,93858,93801],{"class":17606},[155,93860,2028],{"class":732},[155,93862,236],{"class":171},[155,93864,93808],{"class":226},[155,93866,230],{"class":171},[155,93868,93869],{"class":732},"'二哈'",[155,93871,93872],{"class":171},"))   ",[155,93874,93819],{"class":161},[155,93876,93877],{"class":157,"line":308},[155,93878,217],{"emptyLinePlaceholder":216},[155,93880,93881],{"class":157,"line":366},[155,93882,93883],{"class":161},"    \u002F\u002F 1.边界符\n",[155,93885,93886,93888,93890,93892,93894,93896,93898,93900,93902,93904,93906,93908,93910],{"class":157,"line":379},[155,93887,92316],{"class":171},[155,93889,76810],{"class":226},[155,93891,230],{"class":171},[155,93893,2028],{"class":732},[155,93895,21011],{"class":167},[155,93897,93801],{"class":17606},[155,93899,2028],{"class":732},[155,93901,236],{"class":171},[155,93903,93808],{"class":226},[155,93905,230],{"class":171},[155,93907,93813],{"class":732},[155,93909,93816],{"class":171},[155,93911,93819],{"class":161},[155,93913,93914,93916,93918,93920,93922,93924,93926,93928,93930,93932,93934,93936,93938,93940],{"class":157,"line":385},[155,93915,92316],{"class":171},[155,93917,76810],{"class":226},[155,93919,230],{"class":171},[155,93921,2028],{"class":732},[155,93923,21011],{"class":167},[155,93925,93801],{"class":17606},[155,93927,20380],{"class":167},[155,93929,2028],{"class":732},[155,93931,236],{"class":171},[155,93933,93808],{"class":226},[155,93935,230],{"class":171},[155,93937,93842],{"class":732},[155,93939,93816],{"class":171},[155,93941,93942],{"class":161},"\u002F\u002Ffalse\n",[155,93944,93945],{"class":157,"line":415},[155,93946,93947],{"class":161},"    \u002F\u002F 2.量词\n",[155,93949,93950],{"class":157,"line":452},[155,93951,93952],{"class":161},"    \u002F\u002F 量词 * 类似于 >= 0\n",[155,93954,93955,93957,93959,93961,93963,93965,93967,93970,93972,93974,93976,93978,93980,93982],{"class":157,"line":480},[155,93956,92316],{"class":171},[155,93958,76810],{"class":226},[155,93960,230],{"class":171},[155,93962,2028],{"class":732},[155,93964,21011],{"class":167},[155,93966,93801],{"class":17606},[155,93968,93969],{"class":167},"*$",[155,93971,2028],{"class":732},[155,93973,236],{"class":171},[155,93975,93808],{"class":226},[155,93977,230],{"class":171},[155,93979,93842],{"class":732},[155,93981,93816],{"class":171},[155,93983,93819],{"class":161},[155,93985,93986,93988,93990,93992,93994,93996,93998,94000,94002,94004,94006,94008,94011,94013],{"class":157,"line":486},[155,93987,92316],{"class":171},[155,93989,76810],{"class":226},[155,93991,230],{"class":171},[155,93993,2028],{"class":732},[155,93995,21011],{"class":167},[155,93997,93801],{"class":17606},[155,93999,93969],{"class":167},[155,94001,2028],{"class":732},[155,94003,236],{"class":171},[155,94005,93808],{"class":226},[155,94007,230],{"class":171},[155,94009,94010],{"class":732},"'二哈好傻'",[155,94012,93816],{"class":171},[155,94014,94015],{"class":161},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[155,94017,94018,94020,94022,94024,94026,94028,94030,94032,94034,94036,94038,94040,94043,94045],{"class":157,"line":499},[155,94019,92316],{"class":171},[155,94021,76810],{"class":226},[155,94023,230],{"class":171},[155,94025,2028],{"class":732},[155,94027,21011],{"class":167},[155,94029,93801],{"class":17606},[155,94031,93969],{"class":167},[155,94033,2028],{"class":732},[155,94035,236],{"class":171},[155,94037,93808],{"class":226},[155,94039,230],{"class":171},[155,94041,94042],{"class":732},"'哈好哈'",[155,94044,93872],{"class":171},[155,94046,94047],{"class":161},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[155,94049,94050],{"class":157,"line":505},[155,94051,217],{"emptyLinePlaceholder":216},[155,94053,94054],{"class":157,"line":528},[155,94055,94056],{"class":161},"    \u002F\u002F +类似于>=1\n",[155,94058,94059,94061,94063,94065,94067,94069,94071,94074,94076,94078,94080,94082,94084,94086],{"class":157,"line":549},[155,94060,92316],{"class":171},[155,94062,76810],{"class":226},[155,94064,230],{"class":171},[155,94066,2028],{"class":732},[155,94068,21011],{"class":167},[155,94070,93801],{"class":17606},[155,94072,94073],{"class":167},"+$",[155,94075,2028],{"class":732},[155,94077,236],{"class":171},[155,94079,93808],{"class":226},[155,94081,230],{"class":171},[155,94083,93842],{"class":732},[155,94085,93816],{"class":171},[155,94087,93819],{"class":161},[155,94089,94090,94092,94094,94096,94098,94100,94102,94104,94106,94108,94110,94112,94114,94116],{"class":157,"line":570},[155,94091,92316],{"class":171},[155,94093,76810],{"class":226},[155,94095,230],{"class":171},[155,94097,2028],{"class":732},[155,94099,21011],{"class":167},[155,94101,93801],{"class":17606},[155,94103,94073],{"class":167},[155,94105,2028],{"class":732},[155,94107,236],{"class":171},[155,94109,93808],{"class":226},[155,94111,230],{"class":171},[155,94113,94010],{"class":732},[155,94115,93816],{"class":171},[155,94117,94015],{"class":161},[155,94119,94120,94122,94124,94126,94128,94130,94132,94134,94136,94138,94140,94142,94144,94146],{"class":157,"line":575},[155,94121,92316],{"class":171},[155,94123,76810],{"class":226},[155,94125,230],{"class":171},[155,94127,2028],{"class":732},[155,94129,21011],{"class":167},[155,94131,93801],{"class":17606},[155,94133,94073],{"class":167},[155,94135,2028],{"class":732},[155,94137,236],{"class":171},[155,94139,93808],{"class":226},[155,94141,230],{"class":171},[155,94143,94042],{"class":732},[155,94145,93872],{"class":171},[155,94147,93942],{"class":161},[155,94149,94150],{"class":157,"line":581},[155,94151,217],{"emptyLinePlaceholder":216},[155,94153,94154],{"class":157,"line":592},[155,94155,94156],{"class":161},"    \u002F\u002F ?类似于0次或一次\n",[155,94158,94159,94161,94163,94165,94167,94169,94172,94174,94176,94178,94180,94182,94184,94186],{"class":157,"line":610},[155,94160,92316],{"class":171},[155,94162,76810],{"class":226},[155,94164,230],{"class":171},[155,94166,2028],{"class":732},[155,94168,21011],{"class":167},[155,94170,94171],{"class":17606},"哈？",[155,94173,20380],{"class":167},[155,94175,2028],{"class":732},[155,94177,236],{"class":171},[155,94179,93808],{"class":226},[155,94181,230],{"class":171},[155,94183,92791],{"class":732},[155,94185,93872],{"class":171},[155,94187,93819],{"class":161},[155,94189,94190,94192,94194,94196,94198,94200,94202,94205,94207,94209,94211,94213,94215,94217],{"class":157,"line":622},[155,94191,92316],{"class":171},[155,94193,76810],{"class":226},[155,94195,230],{"class":171},[155,94197,2028],{"class":732},[155,94199,21011],{"class":167},[155,94201,93801],{"class":17606},[155,94203,94204],{"class":167},"?$",[155,94206,2028],{"class":732},[155,94208,236],{"class":171},[155,94210,93808],{"class":226},[155,94212,230],{"class":171},[155,94214,93842],{"class":732},[155,94216,93816],{"class":171},[155,94218,93942],{"class":161},[155,94220,94221,94223,94225,94227,94229,94231,94233,94235,94237,94239,94241,94243,94245,94247],{"class":157,"line":638},[155,94222,92316],{"class":171},[155,94224,76810],{"class":226},[155,94226,230],{"class":171},[155,94228,2028],{"class":732},[155,94230,21011],{"class":167},[155,94232,93801],{"class":17606},[155,94234,94204],{"class":167},[155,94236,2028],{"class":732},[155,94238,236],{"class":171},[155,94240,93808],{"class":226},[155,94242,230],{"class":171},[155,94244,94010],{"class":732},[155,94246,93816],{"class":171},[155,94248,94015],{"class":161},[155,94250,94251,94253,94255,94257,94259,94261,94263,94265,94267,94269,94271,94273,94275,94277],{"class":157,"line":650},[155,94252,92316],{"class":171},[155,94254,76810],{"class":226},[155,94256,230],{"class":171},[155,94258,2028],{"class":732},[155,94260,21011],{"class":167},[155,94262,93801],{"class":17606},[155,94264,94204],{"class":167},[155,94266,2028],{"class":732},[155,94268,236],{"class":171},[155,94270,93808],{"class":226},[155,94272,230],{"class":171},[155,94274,94042],{"class":732},[155,94276,93816],{"class":171},[155,94278,93942],{"class":161},[155,94280,94281],{"class":157,"line":662},[155,94282,217],{"emptyLinePlaceholder":216},[155,94284,94285],{"class":157,"line":678},[155,94286,94287],{"class":161},"    \u002F\u002F {n}写几，就必须出现几次\n",[155,94289,94290,94292,94294,94296,94298,94300,94302,94305,94307,94309,94311,94313,94316,94319],{"class":157,"line":694},[155,94291,92316],{"class":171},[155,94293,76810],{"class":226},[155,94295,230],{"class":171},[155,94297,2028],{"class":732},[155,94299,21011],{"class":167},[155,94301,93801],{"class":17606},[155,94303,94304],{"class":167},"{4}$",[155,94306,2028],{"class":732},[155,94308,236],{"class":171},[155,94310,93808],{"class":226},[155,94312,230],{"class":171},[155,94314,94315],{"class":732},"'哈哈哈哈'",[155,94317,94318],{"class":171},")) ",[155,94320,93819],{"class":161},[155,94322,94323],{"class":157,"line":706},[155,94324,217],{"emptyLinePlaceholder":216},[155,94326,94327],{"class":157,"line":715},[155,94328,94329],{"class":161},"    \u002F\u002F {n,}大于等于n次\n",[155,94331,94332,94334,94336,94338,94340,94342,94344,94347,94349,94351,94353,94355,94357,94359],{"class":157,"line":720},[155,94333,92316],{"class":171},[155,94335,76810],{"class":226},[155,94337,230],{"class":171},[155,94339,2028],{"class":732},[155,94341,21011],{"class":167},[155,94343,93801],{"class":17606},[155,94345,94346],{"class":167},"{4,}$",[155,94348,2028],{"class":732},[155,94350,236],{"class":171},[155,94352,93808],{"class":226},[155,94354,230],{"class":171},[155,94356,94315],{"class":732},[155,94358,94318],{"class":171},[155,94360,93819],{"class":161},[155,94362,94363,94365,94367,94369,94371,94373,94375,94377,94379,94381,94383,94385,94388,94390],{"class":157,"line":739},[155,94364,92316],{"class":171},[155,94366,76810],{"class":226},[155,94368,230],{"class":171},[155,94370,2028],{"class":732},[155,94372,21011],{"class":167},[155,94374,93801],{"class":17606},[155,94376,94346],{"class":167},[155,94378,2028],{"class":732},[155,94380,236],{"class":171},[155,94382,93808],{"class":226},[155,94384,230],{"class":171},[155,94386,94387],{"class":732},"'哈哈哈哈哈'",[155,94389,94318],{"class":171},[155,94391,93819],{"class":161},[155,94393,94394],{"class":157,"line":745},[155,94395,217],{"emptyLinePlaceholder":216},[155,94397,94398],{"class":157,"line":773},[155,94399,94400],{"class":161},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[155,94402,94403,94405,94407,94409,94411,94413,94415,94418,94420,94422,94424,94426,94428,94430],{"class":157,"line":779},[155,94404,92316],{"class":171},[155,94406,76810],{"class":226},[155,94408,230],{"class":171},[155,94410,2028],{"class":732},[155,94412,21011],{"class":167},[155,94414,93801],{"class":17606},[155,94416,94417],{"class":167},"{4,6}$",[155,94419,2028],{"class":732},[155,94421,236],{"class":171},[155,94423,93808],{"class":226},[155,94425,230],{"class":171},[155,94427,94315],{"class":732},[155,94429,94318],{"class":171},[155,94431,93819],{"class":161},[155,94433,94434,94436,94438,94440,94442,94444,94446,94448,94450,94452,94454,94456,94458,94460],{"class":157,"line":785},[155,94435,92316],{"class":171},[155,94437,76810],{"class":226},[155,94439,230],{"class":171},[155,94441,2028],{"class":732},[155,94443,21011],{"class":167},[155,94445,93801],{"class":17606},[155,94447,94417],{"class":167},[155,94449,2028],{"class":732},[155,94451,236],{"class":171},[155,94453,93808],{"class":226},[155,94455,230],{"class":171},[155,94457,94387],{"class":732},[155,94459,94318],{"class":171},[155,94461,93819],{"class":161},[155,94463,94464,94466,94468,94470,94472,94474,94476,94478,94480,94482,94484,94486,94489,94491],{"class":157,"line":791},[155,94465,92316],{"class":171},[155,94467,76810],{"class":226},[155,94469,230],{"class":171},[155,94471,2028],{"class":732},[155,94473,21011],{"class":167},[155,94475,93801],{"class":17606},[155,94477,94417],{"class":167},[155,94479,2028],{"class":732},[155,94481,236],{"class":171},[155,94483,93808],{"class":226},[155,94485,230],{"class":171},[155,94487,94488],{"class":732},"'哈哈哈哈哈哈哈'",[155,94490,94318],{"class":171},[155,94492,93942],{"class":161},[155,94494,94495],{"class":157,"line":796},[155,94496,217],{"emptyLinePlaceholder":216},[155,94498,94499],{"class":157,"line":802},[155,94500,94501],{"class":161},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[155,94503,94504,94506,94508,94510,94512,94514,94517,94519,94521,94523,94525,94527,94530,94532],{"class":157,"line":808},[155,94505,92316],{"class":171},[155,94507,76810],{"class":226},[155,94509,230],{"class":171},[155,94511,2028],{"class":732},[155,94513,21011],{"class":167},[155,94515,94516],{"class":263},"[abc]",[155,94518,20380],{"class":167},[155,94520,2028],{"class":732},[155,94522,236],{"class":171},[155,94524,93808],{"class":226},[155,94526,230],{"class":171},[155,94528,94529],{"class":732},"'a'",[155,94531,93816],{"class":171},[155,94533,93819],{"class":161},[155,94535,94536,94538,94540,94542,94544,94546,94548,94550,94552,94554,94556,94558,94561,94563],{"class":157,"line":819},[155,94537,92316],{"class":171},[155,94539,76810],{"class":226},[155,94541,230],{"class":171},[155,94543,2028],{"class":732},[155,94545,21011],{"class":167},[155,94547,94516],{"class":263},[155,94549,20380],{"class":167},[155,94551,2028],{"class":732},[155,94553,236],{"class":171},[155,94555,93808],{"class":226},[155,94557,230],{"class":171},[155,94559,94560],{"class":732},"'b'",[155,94562,93816],{"class":171},[155,94564,93819],{"class":161},[155,94566,94567,94569,94571,94573,94575,94577,94579,94581,94583,94585,94587,94589,94592,94594],{"class":157,"line":1832},[155,94568,92316],{"class":171},[155,94570,76810],{"class":226},[155,94572,230],{"class":171},[155,94574,2028],{"class":732},[155,94576,21011],{"class":167},[155,94578,94516],{"class":263},[155,94580,20380],{"class":167},[155,94582,2028],{"class":732},[155,94584,236],{"class":171},[155,94586,93808],{"class":226},[155,94588,230],{"class":171},[155,94590,94591],{"class":732},"'c'",[155,94593,93816],{"class":171},[155,94595,93819],{"class":161},[155,94597,94598,94600,94602,94604,94606,94608,94610,94612,94614,94616,94619,94621],{"class":157,"line":1838},[155,94599,92316],{"class":171},[155,94601,76810],{"class":226},[155,94603,230],{"class":171},[155,94605,2028],{"class":732},[155,94607,94516],{"class":263},[155,94609,2028],{"class":732},[155,94611,236],{"class":171},[155,94613,93808],{"class":226},[155,94615,230],{"class":171},[155,94617,94618],{"class":732},"'ab'",[155,94620,93816],{"class":171},[155,94622,93819],{"class":161},[155,94624,94625,94627,94629,94631,94633,94635,94637,94639,94641,94643,94645,94647,94649,94651],{"class":157,"line":1844},[155,94626,92316],{"class":171},[155,94628,76810],{"class":226},[155,94630,230],{"class":171},[155,94632,2028],{"class":732},[155,94634,21011],{"class":167},[155,94636,94516],{"class":263},[155,94638,20380],{"class":167},[155,94640,2028],{"class":732},[155,94642,236],{"class":171},[155,94644,93808],{"class":226},[155,94646,230],{"class":171},[155,94648,94618],{"class":732},[155,94650,93816],{"class":171},[155,94652,94653],{"class":161},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[155,94655,94656,94658,94660,94662,94664,94666,94668,94671,94673,94675,94677,94679,94681,94683],{"class":157,"line":1850},[155,94657,92316],{"class":171},[155,94659,76810],{"class":226},[155,94661,230],{"class":171},[155,94663,2028],{"class":732},[155,94665,21011],{"class":167},[155,94667,94516],{"class":263},[155,94669,94670],{"class":167},"{2}$",[155,94672,2028],{"class":732},[155,94674,236],{"class":171},[155,94676,93808],{"class":226},[155,94678,230],{"class":171},[155,94680,94618],{"class":732},[155,94682,93816],{"class":171},[155,94684,94685],{"class":161},"\u002F\u002Ftrue   可以选两个\n",[155,94687,94688,94690,94692,94694,94696,94698,94701,94703,94705,94707,94709,94711,94714,94716],{"class":157,"line":1861},[155,94689,92316],{"class":171},[155,94691,76810],{"class":226},[155,94693,230],{"class":171},[155,94695,2028],{"class":732},[155,94697,21011],{"class":167},[155,94699,94700],{"class":263},"[a-z]",[155,94702,20380],{"class":167},[155,94704,2028],{"class":732},[155,94706,236],{"class":171},[155,94708,93808],{"class":226},[155,94710,230],{"class":171},[155,94712,94713],{"class":732},"'p'",[155,94715,93872],{"class":171},[155,94717,94718],{"class":161},"\u002F\u002Ftrue   依然只能选一个\n",[155,94720,94721,94723,94725,94727,94729,94731,94734,94736,94738,94740,94742,94744,94746,94748],{"class":157,"line":1866},[155,94722,92316],{"class":171},[155,94724,76810],{"class":226},[155,94726,230],{"class":171},[155,94728,2028],{"class":732},[155,94730,21011],{"class":167},[155,94732,94733],{"class":263},"[A-Z]",[155,94735,20380],{"class":167},[155,94737,2028],{"class":732},[155,94739,236],{"class":171},[155,94741,93808],{"class":226},[155,94743,230],{"class":171},[155,94745,94713],{"class":732},[155,94747,93872],{"class":171},[155,94749,93942],{"class":161},[155,94751,94752,94754,94756,94758,94760,94762,94764,94766,94768,94770,94772,94774,94777,94779],{"class":157,"line":1871},[155,94753,92316],{"class":171},[155,94755,76810],{"class":226},[155,94757,230],{"class":171},[155,94759,2028],{"class":732},[155,94761,21011],{"class":167},[155,94763,94733],{"class":263},[155,94765,20380],{"class":167},[155,94767,2028],{"class":732},[155,94769,236],{"class":171},[155,94771,93808],{"class":226},[155,94773,230],{"class":171},[155,94775,94776],{"class":732},"'P'",[155,94778,93872],{"class":171},[155,94780,93819],{"class":161},[155,94782,94783,94785,94787,94789,94791,94793,94796,94798,94800,94802,94804,94806,94809,94811],{"class":157,"line":1877},[155,94784,92316],{"class":171},[155,94786,76810],{"class":226},[155,94788,230],{"class":171},[155,94790,2028],{"class":732},[155,94792,21011],{"class":167},[155,94794,94795],{"class":263},"[0-9]",[155,94797,20380],{"class":167},[155,94799,2028],{"class":732},[155,94801,236],{"class":171},[155,94803,93808],{"class":226},[155,94805,230],{"class":171},[155,94807,94808],{"class":732},"'0'",[155,94810,93872],{"class":171},[155,94812,93819],{"class":161},[155,94814,94815,94817,94819,94821,94823,94825,94828,94830,94832,94834,94836,94838,94840,94842],{"class":157,"line":1883},[155,94816,92316],{"class":171},[155,94818,76810],{"class":226},[155,94820,230],{"class":171},[155,94822,2028],{"class":732},[155,94824,21011],{"class":167},[155,94826,94827],{"class":263},"[a-zA-Z0-9]",[155,94829,20380],{"class":167},[155,94831,2028],{"class":732},[155,94833,236],{"class":171},[155,94835,93808],{"class":226},[155,94837,230],{"class":171},[155,94839,94713],{"class":732},[155,94841,93816],{"class":171},[155,94843,93819],{"class":161},[155,94845,94846,94848,94850],{"class":157,"line":1894},[155,94847,70980],{"class":171},[155,94849,70376],{"class":69863},[155,94851,69870],{"class":171},[155,94853,94854,94856,94858],{"class":157,"line":1900},[155,94855,70348],{"class":171},[155,94857,70363],{"class":69863},[155,94859,69870],{"class":171},[155,94861,94862],{"class":157,"line":1911},[155,94863,217],{"emptyLinePlaceholder":216},[155,94865,94866,94868,94870],{"class":157,"line":1917},[155,94867,70348],{"class":171},[155,94869,69198],{"class":69863},[155,94871,69870],{"class":171},[19,94873,94875],{"id":94874},"_3624-修饰符","3.6.2.4 修饰符",[24,94877,94878],{},[37,94879],{"alt":39,"src":94880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[24,94882,94883],{},"replace是个方法，使用的时候一定不要忘记括号()",[24,94885,94886],{},[37,94887],{"alt":39,"src":94888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[146,94890,94892],{"className":69196,"code":94891,"language":69198,"meta":39,"style":39},"\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",[152,94893,94894,94904,94918,94926,94940,94960,94972,94980,94988,94996,95028,95059,95064,95096,95107,95140,95149,95157,95165],{"__ignoreMap":39},[155,94895,94896,94898,94900,94902],{"class":157,"line":158},[155,94897,69860],{"class":171},[155,94899,69864],{"class":69863},[155,94901,69867],{"class":226},[155,94903,69870],{"class":171},[155,94905,94906,94908,94910,94912,94914,94916],{"class":157,"line":46},[155,94907,20959],{"class":171},[155,94909,69198],{"class":69863},[155,94911,69879],{"class":226},[155,94913,317],{"class":171},[155,94915,69884],{"class":732},[155,94917,69870],{"class":171},[155,94919,94920,94922,94924],{"class":157,"line":121},[155,94921,20959],{"class":171},[155,94923,69897],{"class":69863},[155,94925,69870],{"class":171},[155,94927,94928,94930,94932,94934,94936,94938],{"class":157,"line":180},[155,94929,70707],{"class":171},[155,94931,69907],{"class":69863},[155,94933,69910],{"class":226},[155,94935,317],{"class":171},[155,94937,69915],{"class":732},[155,94939,69870],{"class":171},[155,94941,94942,94944,94946,94948,94950,94952,94954,94956,94958],{"class":157,"line":194},[155,94943,70707],{"class":171},[155,94945,69907],{"class":69863},[155,94947,34745],{"class":226},[155,94949,317],{"class":171},[155,94951,69954],{"class":732},[155,94953,69934],{"class":226},[155,94955,317],{"class":171},[155,94957,69961],{"class":732},[155,94959,69870],{"class":171},[155,94961,94962,94964,94966,94968,94970],{"class":157,"line":200},[155,94963,70707],{"class":171},[155,94965,69970],{"class":69863},[155,94967,69973],{"class":171},[155,94969,69970],{"class":69863},[155,94971,69870],{"class":171},[155,94973,94974,94976,94978],{"class":157,"line":213},[155,94975,70348],{"class":171},[155,94977,69897],{"class":69863},[155,94979,69870],{"class":171},[155,94981,94982,94984,94986],{"class":157,"line":220},[155,94983,20959],{"class":171},[155,94985,70363],{"class":69863},[155,94987,69870],{"class":171},[155,94989,94990,94992,94994],{"class":157,"line":245},[155,94991,70707],{"class":171},[155,94993,70376],{"class":69863},[155,94995,69870],{"class":171},[155,94997,94998,95000,95002,95004,95006,95008,95011,95013,95015,95017,95019,95021,95024,95026],{"class":157,"line":251},[155,94999,92316],{"class":171},[155,95001,76810],{"class":226},[155,95003,230],{"class":171},[155,95005,2028],{"class":732},[155,95007,21011],{"class":167},[155,95009,95010],{"class":17606},"java",[155,95012,20380],{"class":167},[155,95014,2028],{"class":732},[155,95016,236],{"class":171},[155,95018,93808],{"class":226},[155,95020,230],{"class":171},[155,95022,95023],{"class":732},"'java'",[155,95025,94318],{"class":171},[155,95027,93819],{"class":161},[155,95029,95030,95032,95034,95036,95038,95040,95042,95044,95046,95048,95050,95052,95055,95057],{"class":157,"line":257},[155,95031,92316],{"class":171},[155,95033,76810],{"class":226},[155,95035,230],{"class":171},[155,95037,2028],{"class":732},[155,95039,21011],{"class":167},[155,95041,95010],{"class":17606},[155,95043,20380],{"class":167},[155,95045,2028],{"class":732},[155,95047,236],{"class":171},[155,95049,93808],{"class":226},[155,95051,230],{"class":171},[155,95053,95054],{"class":732},"'Java'",[155,95056,94318],{"class":171},[155,95058,93942],{"class":161},[155,95060,95061],{"class":157,"line":270},[155,95062,95063],{"class":161},"    \u002F\u002F 不区分大小写、\n",[155,95065,95066,95068,95070,95072,95074,95076,95078,95080,95082,95084,95086,95088,95090,95092,95094],{"class":157,"line":276},[155,95067,92316],{"class":171},[155,95069,76810],{"class":226},[155,95071,230],{"class":171},[155,95073,2028],{"class":732},[155,95075,21011],{"class":167},[155,95077,95010],{"class":17606},[155,95079,20380],{"class":167},[155,95081,2028],{"class":732},[155,95083,20513],{"class":167},[155,95085,236],{"class":171},[155,95087,93808],{"class":226},[155,95089,230],{"class":171},[155,95091,95054],{"class":732},[155,95093,94318],{"class":171},[155,95095,93819],{"class":161},[155,95097,95098,95100,95102,95104],{"class":157,"line":297},[155,95099,31049],{"class":167},[155,95101,92482],{"class":263},[155,95103,33391],{"class":167},[155,95105,95106],{"class":732}," 'java是一门编程语言，学完java工资很高'\n",[155,95108,95109,95111,95114,95116,95119,95122,95124,95126,95128,95130,95133,95135,95138],{"class":157,"line":302},[155,95110,31049],{"class":167},[155,95112,95113],{"class":263}," result",[155,95115,33391],{"class":167},[155,95117,95118],{"class":171}," str.",[155,95120,95121],{"class":226},"replace",[155,95123,230],{"class":171},[155,95125,2028],{"class":732},[155,95127,95010],{"class":17606},[155,95129,2028],{"class":732},[155,95131,95132],{"class":167},"ig",[155,95134,7589],{"class":171},[155,95136,95137],{"class":732},"'前端'",[155,95139,363],{"class":171},[155,95141,95142,95144,95146],{"class":157,"line":308},[155,95143,92316],{"class":171},[155,95145,76810],{"class":226},[155,95147,95148],{"class":171},"(result)\n",[155,95150,95151,95153,95155],{"class":157,"line":366},[155,95152,70980],{"class":171},[155,95154,70376],{"class":69863},[155,95156,69870],{"class":171},[155,95158,95159,95161,95163],{"class":157,"line":379},[155,95160,70348],{"class":171},[155,95162,70363],{"class":69863},[155,95164,69870],{"class":171},[155,95166,95167,95169,95171],{"class":157,"line":385},[155,95168,70348],{"class":171},[155,95170,69198],{"class":69863},[155,95172,69870],{"class":171},[20011,95174,95175],{},"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":39,"searchDepth":46,"depth":46,"links":95177},[95178,95188,95200,95217,95224,95232],{"id":71923,"depth":46,"text":71924,"children":95179},[95180,95181,95182,95183,95184,95185,95186,95187],{"id":71927,"depth":121,"text":71928},{"id":71960,"depth":121,"text":71961},{"id":71999,"depth":121,"text":72000},{"id":72157,"depth":121,"text":72158},{"id":72205,"depth":121,"text":72206},{"id":72342,"depth":121,"text":72343},{"id":72664,"depth":121,"text":72665},{"id":75652,"depth":121,"text":75653},{"id":75680,"depth":46,"text":75681,"children":95189},[95190,95191,95192,95193,95194,95195,95196,95197,95198,95199],{"id":75684,"depth":121,"text":75685},{"id":75707,"depth":121,"text":75708},{"id":76622,"depth":121,"text":76623},{"id":77312,"depth":121,"text":77313},{"id":77594,"depth":121,"text":77595},{"id":81755,"depth":121,"text":81756},{"id":81925,"depth":121,"text":81926},{"id":82053,"depth":121,"text":82054},{"id":82078,"depth":121,"text":82079},{"id":83467,"depth":121,"text":83468},{"id":84620,"depth":46,"text":84621,"children":95201},[95202,95203,95204,95205,95206,95207,95208,95209,95210,95211,95212,95213,95214,95215,95216],{"id":84624,"depth":121,"text":84625},{"id":85278,"depth":121,"text":85279},{"id":86973,"depth":121,"text":86974},{"id":87014,"depth":121,"text":87015},{"id":87056,"depth":121,"text":87057},{"id":87070,"depth":121,"text":87071},{"id":87119,"depth":121,"text":87120},{"id":87131,"depth":121,"text":87132},{"id":87146,"depth":121,"text":87147},{"id":87182,"depth":121,"text":87183},{"id":87263,"depth":121,"text":87264},{"id":87391,"depth":121,"text":87392},{"id":87403,"depth":121,"text":87404},{"id":87422,"depth":121,"text":87423},{"id":89533,"depth":121,"text":89534},{"id":89552,"depth":46,"text":89553,"children":95218},[95219,95220,95221,95222,95223],{"id":89573,"depth":121,"text":89574},{"id":89593,"depth":121,"text":89594},{"id":89642,"depth":121,"text":89643},{"id":89767,"depth":121,"text":89768},{"id":89948,"depth":121,"text":89949},{"id":89966,"depth":46,"text":89967,"children":95225},[95226,95227,95228,95229,95230,95231],{"id":89981,"depth":121,"text":89982},{"id":90040,"depth":121,"text":90041},{"id":90064,"depth":121,"text":90065},{"id":90384,"depth":121,"text":90385},{"id":90416,"depth":121,"text":90417},{"id":90439,"depth":121,"text":90440},{"id":93507,"depth":46,"text":93508,"children":95233},[95234,95235],{"id":93541,"depth":121,"text":93542},{"id":93580,"depth":121,"text":93581},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":71895,"description":20020},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":95242,"title":95243,"body":95244,"description":20020,"extension":20021,"meta":111381,"navigation":216,"path":111382,"seo":111383,"stem":111384,"__hash__":111385},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":95245,"toc":111317},[95246,95249,95252,95256,95260,95265,95270,95281,95285,95290,95293,95297,95300,95305,95309,95313,95316,95321,95324,95328,95331,95339,95342,95346,95351,95356,95359,95363,95368,95373,95376,95380,95385,95388,95393,95396,95401,95404,95409,95414,95417,95420,95424,95429,95434,95437,95441,95445,95448,95451,95454,95458,95462,95467,95472,95475,95479,95484,95489,95492,95495,95498,95501,95504,95507,95510,95513,95516,95521,95525,95530,95535,95538,95541,95544,95547,95550,95553,95556,95559,95563,95567,95570,95573,95576,95581,95583,95586,95589,95592,95595,95598,95601,95604,95607,95610,95613,95616,95619,95622,95627,95632,95637,95640,95644,95647,95652,95656,95658,95669,95674,95775,95778,95781,95784,95787,95790,95793,95796,95799,95801,95804,95807,95810,95813,95816,95818,95821,95824,95827,95830,95833,95836,95838,95841,95843,95845,95848,95852,95856,95859,95862,95865,95868,95871,95874,95877,95880,95883,95888,96008,96011,96014,96019,96022,96025,96028,96031,96036,96039,96042,96045,96048,96053,96056,96156,96221,96295,96299,96302,96305,96309,96312,96326,96355,96358,96361,96364,96367,96370,96373,96376,96378,96381,96384,96387,96390,96394,96399,96403,96408,96483,96486,96669,96672,96675,96678,96681,96684,96686,96689,96692,96695,96698,96701,96704,96706,96710,96713,96718,96721,96724,96727,96730,96732,96737,96740,96743,96746,96749,96751,96756,96759,96762,96764,96766,96769,96773,96776,96779,96784,96787,96790,96793,96843,96848,96852,96857,96860,96929,96932,96941,96945,96950,96953,96956,96964,96967,96984,98786,98790,98794,98799,98802,98806,98812,98818,98970,98975,98980,98983,98986,98989,98992,98995,98998,99001,99004,99007,99010,99013,99016,99021,99025,99028,99039,99043,99048,99051,99054,99057,99060,99063,99065,99068,99071,99074,99077,99079,99096,99099,99103,99106,99111,99116,99119,99122,99126,99129,99132,99141,99144,99148,99151,99156,99161,99228,99232,99235,99238,99243,99248,99334,99339,99343,99346,99349,99364,99367,99372,99376,99381,99490,99493,99504,99654,99658,99663,99772,99776,99781,99786,99791,99794,99801,99821,99857,100021,100026,100029,100034,100041,100044,100047,100050,100109,100165,100221,100225,100230,100545,100548,100552,100555,100560,100669,100674,100678,100683,100687,100758,100762,100764,100767,100770,100808,101084,101088,101105,101171,101205,101209,101212,101217,101246,101253,101262,101267,101282,101287,101296,101299,101436,101440,101502,101506,101511,101756,101760,101765,101768,101771,101774,101777,101781,101786,103367,103371,103375,103381,103384,103389,103393,103396,103401,103404,103415,103419,103424,103428,103433,103438,103441,103446,103450,103454,103457,103462,103467,103470,103473,103476,103598,103603,103705,103708,103711,103715,103720,103892,103897,103901,103904,103909,103975,103980,103983,104114,104117,104122,104125,104128,104219,104224,104227,104230,104233,104236,104241,104246,104249,104254,104259,104264,104268,104271,104274,104279,104284,104289,104294,104348,104351,104354,104359,104362,104365,104370,104375,104380,104384,104389,104403,104408,104411,104416,104420,104425,104430,104435,104440,104445,104450,104455,104460,104463,104467,104472,104475,104478,104481,104486,104491,104494,104497,104501,104504,104507,104512,104517,104522,104527,104530,104535,104540,104601,104606,104609,104614,105855,105860,105864,105868,105873,105876,105881,105886,105889,105894,105896,105901,105905,105908,105911,105922,105926,105931,105936,105991,105996,106001,106006,106217,106222,106226,106231,106234,106236,106239,106242,106689,106694,106701,106707,106710,106713,106977,106982,106986,107251,107256,107260,107265,107270,107275,107280,107611,107614,107619,107624,107627,107631,107635,107640,107645,107650,107655,107660,107665,107669,107672,107677,107682,107685,107759,107764,107769,107774,107776,107779,108149,108154,108159,108164,108167,108170,108272,108277,108282,108385,108389,108394,108398,108402,108407,108412,108415,108420,108423,108426,108819,108824,108827,108830,108833,108836,109356,109360,109365,109370,109375,109378,109383,109386,109389,109771,109776,109778,109780,109783,109786,110298,110302,110363,110366,110369,110372,110376,110379,110384,110389,111314],[10,95247,95243],{"id":95248},"_4js进阶",[24,95250,95251],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[20037,95253,95255],{"id":95254},"_41-作用域","4.1 作用域",[14,95257,95259],{"id":95258},"_411-局部作用域","4.1.1 局部作用域",[24,95261,95262],{},[37,95263],{"alt":39,"src":95264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[24,95266,95267],{},[37,95268],{"alt":39,"src":95269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[21052,95271,95272,95275,95278],{},[31,95273,95274],{},"函数作用域在函数内部",[31,95276,95277],{},"块级作用域在{}",[31,95279,95280],{},"对象的那个{}不是作用域，不是块作用域",[14,95282,95284],{"id":95283},"_412-全局作用域","4.1.2 全局作用域",[24,95286,95287],{},[37,95288],{"alt":39,"src":95289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[24,95291,95292],{},"window.a=10不要这样写",[14,95294,95296],{"id":95295},"_413-作用域链","4.1.3 作用域链",[24,95298,95299],{},"变量查找机制",[24,95301,95302],{},[37,95303],{"alt":39,"src":95304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[20037,95306,95308],{"id":95307},"_42-垃圾回收机制","4.2 垃圾回收机制",[14,95310,95312],{"id":95311},"_421-大体介绍","4.2.1 大体介绍",[24,95314,95315],{},"垃圾回收机制(Garbage Collection) 简称 GC",[24,95317,95318],{},[37,95319],{"alt":39,"src":95320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[24,95322,95323],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[14,95325,95327],{"id":95326},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[24,95329,95330],{},"堆栈空间分配区别：",[28,95332,95333,95336],{},[31,95334,95335],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[31,95337,95338],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[24,95340,95341],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[19,95343,95345],{"id":95344},"_4221-引用计数","4.2.2.1 引用计数",[24,95347,95348],{},[37,95349],{"alt":39,"src":95350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[24,95352,95353],{},[37,95354],{"alt":39,"src":95355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[24,95357,95358],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[19,95360,95362],{"id":95361},"_4222-标记清除法","4.2.2.2 标记清除法",[24,95364,95365],{},[37,95366],{"alt":39,"src":95367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[24,95369,95370],{},[37,95371],{"alt":39,"src":95372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[24,95374,95375],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[20037,95377,95379],{"id":95378},"_43-闭包","4.3 闭包",[24,95381,95382],{},[37,95383],{"alt":39,"src":95384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[24,95386,95387],{},"闭包：内层函数+外层函数的变量",[24,95389,95390],{},[37,95391],{"alt":39,"src":95392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[24,95394,95395],{},"closure就是闭包",[24,95397,95398],{},[37,95399],{"alt":39,"src":95400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[24,95402,95403],{},"内层函数必须包含外层函数的变量才是闭包",[24,95405,95406],{},[37,95407],{"alt":39,"src":95408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[24,95410,95411],{},[37,95412],{"alt":39,"src":95413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[24,95415,95416],{},"闭包可能会引起内存泄漏",[24,95418,95419],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[20037,95421,95423],{"id":95422},"_44-变量提升","4.4 变量提升",[24,95425,95426],{},[37,95427],{"alt":39,"src":95428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[24,95430,95431],{},[37,95432],{"alt":39,"src":95433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[24,95435,95436],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[20037,95438,95440],{"id":95439},"_45-函数进阶","4.5 函数进阶",[14,95442,95444],{"id":95443},"_451-函数提升","4.5.1 函数提升",[24,95446,95447],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[24,95449,95450],{},"只提升函数声明，不提升函数调用",[70376,95452,95453],{},"\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",[14,95455,95457],{"id":95456},"_452-函数参数","4.5.2 函数参数",[19,95459,95461],{"id":95460},"_4521-动态参数","4.5.2.1 动态参数",[24,95463,95464],{},[37,95465],{"alt":39,"src":95466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[24,95468,95469],{},[37,95470],{"alt":39,"src":95471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[24,95473,95474],{},"箭头函数里边没有arguments",[19,95476,95478],{"id":95477},"_4522-剩余参数","4.5.2.2 剩余参数",[24,95480,95481],{},[37,95482],{"alt":39,"src":95483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[24,95485,95486],{},[37,95487],{"alt":39,"src":95488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[24,95490,95491],{},"剩余参数使用的时候不需要写...",[24,95493,95494],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[24,95496,95497],{},"  function getSum(a,b,...arr) {",[24,95499,95500],{},"  console.log(11)",[24,95502,95503],{},"  }",[24,95505,95506],{},"  getSum(1,2,3,4)",[24,95508,95509],{},"  将1传给a，2传给b，剩下的传给剩余参数",[24,95511,95512],{},"  getSum(1,2)",[24,95514,95515],{},"  将1传给a，2传给b，剩余参数为一个空数组",[24,95517,95518],{},[37,95519],{"alt":39,"src":95520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[19,95522,95524],{"id":95523},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[24,95526,95527],{},[37,95528],{"alt":39,"src":95529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[24,95531,95532],{},[37,95533],{"alt":39,"src":95534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[24,95536,95537],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[24,95539,95540],{},"展开运算符可以用于数组之间的合并：",[24,95542,95543],{},"const arr1 = [1, 2, 3]",[24,95545,95546],{},"const arr2 = [3, 4, 5]",[24,95548,95549],{},"const arr = [...arr1, ...arr2]",[24,95551,95552],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[24,95554,95555],{},"剩余参数：函数参数使用，得到真数组",[24,95557,95558],{},"展开运算符：数组中使用，数组展开",[14,95560,95562],{"id":95561},"_453-箭头函数","4.5.3 箭头函数",[19,95564,95566],{"id":95565},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[24,95568,95569],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[24,95571,95572],{},"它不是万能的！！！",[24,95574,95575],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[24,95577,95578],{},[37,95579],{"alt":39,"src":95580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[24,95582,20122],{},[24,95584,95585],{},"① 只有一个形参的时候，可以省略小括号：",[24,95587,95588],{},"const fn=x=>{console.log(x)}",[24,95590,95591],{},"② 只有一行代码时可以省略大括号：",[24,95593,95594],{},"const fn=x=>console.log(11)",[24,95596,95597],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[24,95599,95600],{},"const fn=x=>x+x",[24,95602,95603],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[24,95605,95606],{},"⑤ 阻止表单默认提交：",[24,95608,95609],{},"const form = document.querySelector('form')",[24,95611,95612],{},"form.addEventListener('click', ev => ev.preventDefault())",[24,95614,95615],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[24,95617,95618],{},"const fn=uname=>({uname:uname})",[24,95620,95621],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[24,95623,95624],{},[37,95625],{"alt":39,"src":95626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[24,95628,95629],{},[37,95630],{"alt":39,"src":95631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[24,95633,95634],{},[37,95635],{"alt":39,"src":95636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[24,95638,95639],{},"一定不要忘记用()，有()就理解为自带return",[19,95641,95643],{"id":95642},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[24,95645,95646],{},"箭头函数是没有动态参数的arguments",[24,95648,95649],{},[37,95650],{"alt":39,"src":95651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[19,95653,95655],{"id":95654},"_4533-箭头函数this","4.5.3.3 箭头函数this",[24,95657,31160],{},[28,95659,95660,95663,95666],{},[31,95661,95662],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[31,95664,95665],{},"事件回调函数使用箭头函数时，this 为全局的 window",[31,95667,95668],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[24,95670,95671],{},[37,95672],{"alt":39,"src":95673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[146,95675,95677],{"className":71630,"code":95676,"language":71632,"meta":39,"style":39},"  \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",[152,95678,95679,95687,95692,95697,95702,95707,95712,95716,95721,95725,95729,95734,95739,95744,95748,95752,95757,95762,95767],{"__ignoreMap":39},[155,95680,95681,95683,95685],{"class":157,"line":158},[155,95682,70707],{"class":171},[155,95684,70376],{"class":69863},[155,95686,69870],{"class":171},[155,95688,95689],{"class":157,"line":46},[155,95690,95691],{"class":171},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[155,95693,95694],{"class":157,"line":121},[155,95695,95696],{"class":171},"    console.log(this) \u002F\u002F指向window\n",[155,95698,95699],{"class":157,"line":180},[155,95700,95701],{"class":171},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[155,95703,95704],{"class":157,"line":194},[155,95705,95706],{"class":171},"    function fn() {\n",[155,95708,95709],{"class":157,"line":200},[155,95710,95711],{"class":171},"      console.log(this)  \u002F\u002F指向window\n",[155,95713,95714],{"class":157,"line":213},[155,95715,22074],{"class":171},[155,95717,95718],{"class":157,"line":220},[155,95719,95720],{"class":171},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[155,95722,95723],{"class":157,"line":245},[155,95724,217],{"emptyLinePlaceholder":216},[155,95726,95727],{"class":157,"line":251},[155,95728,90086],{"class":171},[155,95730,95731],{"class":157,"line":257},[155,95732,95733],{"class":171},"      name: 'andy',\n",[155,95735,95736],{"class":157,"line":270},[155,95737,95738],{"class":171},"      sayHai: function () {\n",[155,95740,95741],{"class":157,"line":276},[155,95742,95743],{"class":171},"        console.log(this)\n",[155,95745,95746],{"class":157,"line":297},[155,95747,70961],{"class":171},[155,95749,95750],{"class":157,"line":302},[155,95751,22074],{"class":171},[155,95753,95754],{"class":157,"line":308},[155,95755,95756],{"class":171},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[155,95758,95759],{"class":157,"line":366},[155,95760,95761],{"class":171},"    \u002F\u002F 2.箭头函数的this\n",[155,95763,95764],{"class":157,"line":379},[155,95765,95766],{"class":171},"    const fn = () => console.log(this)\n",[155,95768,95769,95771,95773],{"class":157,"line":385},[155,95770,70980],{"class":171},[155,95772,70376],{"class":69863},[155,95774,69870],{"class":171},[24,95776,95777],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[24,95779,95780],{},"const fn = () => console.log(this)",[24,95782,95783],{},"fn() \u002F\u002F指向window",[24,95785,95786],{},"\u002F\u002F 3.对象方法箭头函数 this",[24,95788,95789],{},"①",[24,95791,95792],{},"const obj = {",[24,95794,95795],{},"uname: 'pink老师',",[24,95797,95798],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[24,95800,2711],{},[24,95802,95803],{},"调用对象里边的函数",[24,95805,95806],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[24,95808,95809],{},"obj.sayHai()",[24,95811,95812],{},"②",[24,95814,95815],{},"const obj1 = {",[24,95817,95795],{},[24,95819,95820],{},"sayHai: function () {",[24,95822,95823],{},"let i = 10",[24,95825,95826],{},"const count = () => {",[24,95828,95829],{},"console.log(this)",[24,95831,95832],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[24,95834,95835],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[24,95837,2711],{},[24,95839,95840],{},"count()",[24,95842,2711],{},[24,95844,2711],{},[24,95846,95847],{},"obj1.sayHai()",[20037,95849,95851],{"id":95850},"_46-解构赋值","4.6 解构赋值",[14,95853,95855],{"id":95854},"_461-数组解构","4.6.1 数组解构",[24,95857,95858],{},"以前要是使用数组中的值的话：",[24,95860,95861],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[24,95863,95864],{},"const arr=[100,60,80]",[24,95866,95867],{},"const max=arr[0]",[24,95869,95870],{},"const min=arr[1]",[24,95872,95873],{},"const avg=arr[2]",[24,95875,95876],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[24,95878,95879],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[24,95881,95882],{},"这个写法就类似于上边的那种用很多const的方法",[24,95884,95885],{},[37,95886],{"alt":39,"src":95887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[146,95889,95891],{"className":69196,"code":95890,"language":69198,"meta":39,"style":39},"①变量之间交换值:\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",[152,95892,95893,95898,95903,95908,95913,95918,95922,95926,95931,95935,95940,95945,95949,95954,95959,95970,95980,95985,95990,95995,95999,96003],{"__ignoreMap":39},[155,95894,95895],{"class":157,"line":158},[155,95896,95897],{"class":171},"①变量之间交换值:\n",[155,95899,95900],{"class":157,"line":46},[155,95901,95902],{"class":171},"let a=1\n",[155,95904,95905],{"class":157,"line":121},[155,95906,95907],{"class":171},"let b=2;\n",[155,95909,95910],{"class":157,"line":180},[155,95911,95912],{"class":171},"必须加这行代码，不然就会报错\n",[155,95914,95915],{"class":157,"line":194},[155,95916,95917],{"class":171},"[b,a]=[a,b]\n",[155,95919,95920],{"class":157,"line":200},[155,95921,217],{"emptyLinePlaceholder":216},[155,95923,95924],{"class":157,"line":213},[155,95925,217],{"emptyLinePlaceholder":216},[155,95927,95928],{"class":157,"line":220},[155,95929,95930],{"class":171},"可以写成下面的方式：\n",[155,95932,95933],{"class":157,"line":245},[155,95934,95902],{"class":171},[155,95936,95937],{"class":157,"line":251},[155,95938,95939],{"class":171},"let b=2\n",[155,95941,95942],{"class":157,"line":257},[155,95943,95944],{"class":171},";[b,a]=[a,b]\n",[155,95946,95947],{"class":157,"line":270},[155,95948,217],{"emptyLinePlaceholder":216},[155,95950,95951],{"class":157,"line":276},[155,95952,95953],{"class":171},"②排序\n",[155,95955,95956],{"class":157,"line":297},[155,95957,95958],{"class":171},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[155,95960,95961,95964,95967],{"class":157,"line":302},[155,95962,95963],{"class":171},"for (let i = 0; i ",[155,95965,20959],{"class":95966},"s7hpK",[155,95968,95969],{"class":171}," arr1.length; i++) {\n",[155,95971,95972,95975,95977],{"class":157,"line":308},[155,95973,95974],{"class":171},"   for (let j = 0; j ",[155,95976,20959],{"class":95966},[155,95978,95979],{"class":171}," arr1.length - 1; j++) {\n",[155,95981,95982],{"class":157,"line":366},[155,95983,95984],{"class":171},"      if (arr1[j] > arr1[j + 1]) {\n",[155,95986,95987],{"class":157,"line":379},[155,95988,95989],{"class":171},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[155,95991,95992],{"class":157,"line":385},[155,95993,95994],{"class":171},"       }\n",[155,95996,95997],{"class":157,"line":415},[155,95998,24175],{"class":171},[155,96000,96001],{"class":157,"line":452},[155,96002,21475],{"class":171},[155,96004,96005],{"class":157,"line":480},[155,96006,96007],{"class":171},"console.log(arr1)\n",[24,96009,96010],{},"数组解构的细节：",[24,96012,96013],{},"①变量多，单元值少",[24,96015,96016],{},[37,96017],{"alt":39,"src":96018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[24,96020,96021],{},"防止出现undefined的方法：",[24,96023,96024],{},"const [a=0,b=0] =[1]",[24,96026,96027],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[24,96029,96030],{},"②变量少，单元值多",[24,96032,96033],{},[37,96034],{"alt":39,"src":96035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[24,96037,96038],{},"此时可以使用剩余参数来接收多余的值",[24,96040,96041],{},"const [a,b,...c]=[1,2,3,4]",[24,96043,96044],{},"console.log(c) 输出[3,4]",[24,96046,96047],{},"③可以按需导入，忽略某些返回值",[24,96049,96050],{},[37,96051],{"alt":39,"src":96052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[24,96054,96055],{},"④支持多维数组的结构",[146,96057,96061],{"className":96058,"code":96059,"language":96060,"meta":39,"style":39},"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",[152,96062,96063,96091,96107,96122,96137],{"__ignoreMap":39},[155,96064,96065,96067,96069,96071,96073,96075,96077,96079,96082,96084,96086,96088],{"class":157,"line":158},[155,96066,26655],{"class":167},[155,96068,70396],{"class":171},[155,96070,317],{"class":167},[155,96072,70789],{"class":171},[155,96074,329],{"class":263},[155,96076,7589],{"class":171},[155,96078,360],{"class":263},[155,96080,96081],{"class":171},", [",[155,96083,4444],{"class":263},[155,96085,7589],{"class":171},[155,96087,1264],{"class":263},[155,96089,96090],{"class":171},"]]\n",[155,96092,96093,96096,96098,96100,96102,96104],{"class":157,"line":46},[155,96094,96095],{"class":171},"console.",[155,96097,76810],{"class":226},[155,96099,23720],{"class":171},[155,96101,1109],{"class":263},[155,96103,24082],{"class":171},[155,96105,96106],{"class":161},"  \u002F\u002F1\n",[155,96108,96109,96111,96113,96115,96117,96119],{"class":157,"line":121},[155,96110,96095],{"class":171},[155,96112,76810],{"class":226},[155,96114,23720],{"class":171},[155,96116,329],{"class":263},[155,96118,24082],{"class":171},[155,96120,96121],{"class":161},"  \u002F\u002F2\n",[155,96123,96124,96126,96128,96130,96132,96134],{"class":157,"line":180},[155,96125,96095],{"class":171},[155,96127,76810],{"class":226},[155,96129,23720],{"class":171},[155,96131,360],{"class":263},[155,96133,24082],{"class":171},[155,96135,96136],{"class":161},"  \u002F\u002F[3,4]\n",[155,96138,96139,96141,96143,96145,96147,96149,96151,96153],{"class":157,"line":194},[155,96140,96095],{"class":171},[155,96142,76810],{"class":226},[155,96144,23720],{"class":171},[155,96146,360],{"class":263},[155,96148,24765],{"class":171},[155,96150,1109],{"class":263},[155,96152,24082],{"class":171},[155,96154,96155],{"class":161},"  \u002F\u002F3\n",[146,96157,96159],{"className":96058,"code":96158,"language":96060,"meta":39,"style":39},"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",[152,96160,96161,96188,96199,96210],{"__ignoreMap":39},[155,96162,96163,96165,96168,96170,96172,96174,96176,96178,96180,96182,96184,96186],{"class":157,"line":158},[155,96164,26655],{"class":167},[155,96166,96167],{"class":171}," [a, b, c] ",[155,96169,317],{"class":167},[155,96171,70789],{"class":171},[155,96173,329],{"class":263},[155,96175,7589],{"class":171},[155,96177,360],{"class":263},[155,96179,96081],{"class":171},[155,96181,4444],{"class":263},[155,96183,7589],{"class":171},[155,96185,1264],{"class":263},[155,96187,96090],{"class":171},[155,96189,96190,96192,96194,96197],{"class":157,"line":46},[155,96191,96095],{"class":171},[155,96193,76810],{"class":226},[155,96195,96196],{"class":171},"(a)",[155,96198,96106],{"class":161},[155,96200,96201,96203,96205,96208],{"class":157,"line":121},[155,96202,96095],{"class":171},[155,96204,76810],{"class":226},[155,96206,96207],{"class":171},"(b)",[155,96209,96121],{"class":161},[155,96211,96212,96214,96216,96219],{"class":157,"line":180},[155,96213,96095],{"class":171},[155,96215,76810],{"class":226},[155,96217,96218],{"class":171},"(c)",[155,96220,96136],{"class":161},[146,96222,96224],{"className":96058,"code":96223,"language":96060,"meta":39,"style":39},"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",[152,96225,96226,96253,96263,96273,96283],{"__ignoreMap":39},[155,96227,96228,96230,96233,96235,96237,96239,96241,96243,96245,96247,96249,96251],{"class":157,"line":158},[155,96229,26655],{"class":167},[155,96231,96232],{"class":171}," [a, b, [c, d]] ",[155,96234,317],{"class":167},[155,96236,70789],{"class":171},[155,96238,329],{"class":263},[155,96240,7589],{"class":171},[155,96242,360],{"class":263},[155,96244,96081],{"class":171},[155,96246,4444],{"class":263},[155,96248,7589],{"class":171},[155,96250,1264],{"class":263},[155,96252,96090],{"class":171},[155,96254,96255,96257,96259,96261],{"class":157,"line":46},[155,96256,96095],{"class":171},[155,96258,76810],{"class":226},[155,96260,96196],{"class":171},[155,96262,96106],{"class":161},[155,96264,96265,96267,96269,96271],{"class":157,"line":121},[155,96266,96095],{"class":171},[155,96268,76810],{"class":226},[155,96270,96207],{"class":171},[155,96272,96121],{"class":161},[155,96274,96275,96277,96279,96281],{"class":157,"line":180},[155,96276,96095],{"class":171},[155,96278,76810],{"class":226},[155,96280,96218],{"class":171},[155,96282,96155],{"class":161},[155,96284,96285,96287,96289,96292],{"class":157,"line":194},[155,96286,96095],{"class":171},[155,96288,76810],{"class":226},[155,96290,96291],{"class":171},"(d)",[155,96293,96294],{"class":161},"  \u002F\u002F4\n",[14,96296,96298],{"id":96297},"_462-对象解构","4.6.2 对象解构",[24,96300,96301],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[24,96303,96304],{},"用的非常非常多！！！！！！",[19,96306,96308],{"id":96307},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[24,96310,96311],{},"基本语法：",[28,96313,96314,96317,96320,96323],{},[31,96315,96316],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[31,96318,96319],{},"对象属性的值将被赋值给与属性名相同的变量",[31,96321,96322],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[31,96324,96325],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[146,96327,96329],{"className":69196,"code":96328,"language":69198,"meta":39,"style":39},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[152,96330,96331,96336,96341,96346,96350],{"__ignoreMap":39},[155,96332,96333],{"class":157,"line":158},[155,96334,96335],{"class":171},"const obj = {\n",[155,96337,96338],{"class":157,"line":46},[155,96339,96340],{"class":171},"   uname: 'pink老师',\n",[155,96342,96343],{"class":157,"line":121},[155,96344,96345],{"class":171},"   age: 18,\n",[155,96347,96348],{"class":157,"line":180},[155,96349,21475],{"class":171},[155,96351,96352],{"class":157,"line":194},[155,96353,96354],{"class":171},"const { uname, age } = obj\n",[24,96356,96357],{},"上方代码这样写等价于：",[24,96359,96360],{},"const uname等价于obj.uname",[24,96362,96363],{},"变量名可以重新改名：",[24,96365,96366],{},"const uname='red老师'",[24,96368,96369],{},"const user={",[24,96371,96372],{},"  uname:'pink老师',",[24,96374,96375],{},"  age:18",[24,96377,2711],{},[24,96379,96380],{},"const {uname,age}=user",[24,96382,96383],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[24,96385,96386],{},"const {旧变量名：新变量名}=对象",[24,96388,96389],{},"const {uname:username,age}=user",[19,96391,96393],{"id":96392},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[24,96395,96396],{},[37,96397],{"alt":39,"src":96398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[19,96400,96402],{"id":96401},"_4623-多级对象解构","4.6.2.3 多级对象解构",[24,96404,96405],{},[37,96406],{"alt":39,"src":96407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[146,96409,96411],{"className":71630,"code":96410,"language":71632,"meta":39,"style":39},"  \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",[152,96412,96413,96421,96426,96431,96436,96441,96446,96451,96456,96461,96465,96470,96475],{"__ignoreMap":39},[155,96414,96415,96417,96419],{"class":157,"line":158},[155,96416,70707],{"class":171},[155,96418,70376],{"class":69863},[155,96420,69870],{"class":171},[155,96422,96423],{"class":157,"line":46},[155,96424,96425],{"class":171},"    const pig = {\n",[155,96427,96428],{"class":157,"line":121},[155,96429,96430],{"class":171},"      name: '佩奇',\n",[155,96432,96433],{"class":157,"line":180},[155,96434,96435],{"class":171},"      family: {\n",[155,96437,96438],{"class":157,"line":194},[155,96439,96440],{"class":171},"        mother: '猪妈妈',\n",[155,96442,96443],{"class":157,"line":200},[155,96444,96445],{"class":171},"        father: '猪爸爸',\n",[155,96447,96448],{"class":157,"line":213},[155,96449,96450],{"class":171},"        sister: '乔治'\n",[155,96452,96453],{"class":157,"line":220},[155,96454,96455],{"class":171},"      },\n",[155,96457,96458],{"class":157,"line":245},[155,96459,96460],{"class":171},"      age: 6\n",[155,96462,96463],{"class":157,"line":251},[155,96464,22074],{"class":171},[155,96466,96467],{"class":157,"line":257},[155,96468,96469],{"class":171},"    \u002F\u002F 多级对象解构\n",[155,96471,96472],{"class":157,"line":270},[155,96473,96474],{"class":171},"    const { name, family: { mother, father, sister }, age } = pig\n",[155,96476,96477,96479,96481],{"class":157,"line":276},[155,96478,70980],{"class":171},[155,96480,70376],{"class":69863},[155,96482,69870],{"class":171},[24,96484,96485],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[146,96487,96490],{"className":96488,"code":96489,"language":95010,"meta":39,"style":39},"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",[152,96491,96492,96497,96508,96520,96532,96541,96545,96556,96568,96578,96583,96587,96597,96608,96617,96621,96625,96636,96647,96656,96660,96665],{"__ignoreMap":39},[155,96493,96494],{"class":157,"line":158},[155,96495,96496],{"class":161},"    \u002F\u002F 这是后台传递过来的数据\n",[155,96498,96499,96501,96504,96506],{"class":157,"line":46},[155,96500,31049],{"class":167},[155,96502,96503],{"class":171}," msg ",[155,96505,317],{"class":167},[155,96507,35397],{"class":171},[155,96509,96510,96513,96515,96518],{"class":157,"line":121},[155,96511,96512],{"class":732},"      \"code\"",[155,96514,3017],{"class":167},[155,96516,96517],{"class":263}," 200",[155,96519,990],{"class":171},[155,96521,96522,96525,96527,96530],{"class":157,"line":180},[155,96523,96524],{"class":732},"      \"msg\"",[155,96526,3017],{"class":167},[155,96528,96529],{"class":732}," \"获取新闻列表成功\"",[155,96531,990],{"class":171},[155,96533,96534,96537,96539],{"class":157,"line":194},[155,96535,96536],{"class":732},"      \"data\"",[155,96538,3017],{"class":167},[155,96540,74010],{"class":171},[155,96542,96543],{"class":157,"line":200},[155,96544,22395],{"class":171},[155,96546,96547,96550,96552,96554],{"class":157,"line":213},[155,96548,96549],{"class":732},"          \"id\"",[155,96551,3017],{"class":167},[155,96553,1277],{"class":263},[155,96555,990],{"class":171},[155,96557,96558,96561,96563,96566],{"class":157,"line":220},[155,96559,96560],{"class":732},"          \"title\"",[155,96562,3017],{"class":167},[155,96564,96565],{"class":732}," \"5G商用自己，三大运用商收入下降\"",[155,96567,990],{"class":171},[155,96569,96570,96573,96575],{"class":157,"line":245},[155,96571,96572],{"class":732},"          \"count\"",[155,96574,3017],{"class":167},[155,96576,96577],{"class":263}," 58\n",[155,96579,96580],{"class":157,"line":251},[155,96581,96582],{"class":171},"        },\n",[155,96584,96585],{"class":157,"line":257},[155,96586,22395],{"class":171},[155,96588,96589,96591,96593,96595],{"class":157,"line":270},[155,96590,96549],{"class":732},[155,96592,3017],{"class":167},[155,96594,34580],{"class":263},[155,96596,990],{"class":171},[155,96598,96599,96601,96603,96606],{"class":157,"line":276},[155,96600,96560],{"class":732},[155,96602,3017],{"class":167},[155,96604,96605],{"class":732}," \"国际媒体头条速览\"",[155,96607,990],{"class":171},[155,96609,96610,96612,96614],{"class":157,"line":297},[155,96611,96572],{"class":732},[155,96613,3017],{"class":167},[155,96615,96616],{"class":263}," 56\n",[155,96618,96619],{"class":157,"line":302},[155,96620,96582],{"class":171},[155,96622,96623],{"class":157,"line":308},[155,96624,22395],{"class":171},[155,96626,96627,96629,96631,96634],{"class":157,"line":366},[155,96628,96549],{"class":732},[155,96630,3017],{"class":167},[155,96632,96633],{"class":263}," 3",[155,96635,990],{"class":171},[155,96637,96638,96640,96642,96645],{"class":157,"line":379},[155,96639,96560],{"class":732},[155,96641,3017],{"class":167},[155,96643,96644],{"class":732}," \"乌克兰和俄罗斯持续冲突\"",[155,96646,990],{"class":171},[155,96648,96649,96651,96653],{"class":157,"line":385},[155,96650,96572],{"class":732},[155,96652,3017],{"class":167},[155,96654,96655],{"class":263}," 1669\n",[155,96657,96658],{"class":157,"line":415},[155,96659,96582],{"class":171},[155,96661,96662],{"class":157,"line":452},[155,96663,96664],{"class":171},"      ]\n",[155,96666,96667],{"class":157,"line":480},[155,96668,22074],{"class":171},[24,96670,96671],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[24,96673,96674],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[24,96676,96677],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[24,96679,96680],{},"function({data}) {",[24,96682,96683],{},"console.log(data)",[24,96685,2711],{},[24,96687,96688],{},"render(msg)",[24,96690,96691],{},"实参传递给形参的时候解构了",[24,96693,96694],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[24,96696,96697],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[24,96699,96700],{},"function render({data:mydata}) {",[24,96702,96703],{},"  console.log(data)",[24,96705,2711],{},[14,96707,96709],{"id":96708},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[24,96711,96712],{},"有两种情况：一个是数组结构，一个是立即执行函数",[28,96714,96715],{},[31,96716,96717],{},"如果对一个数组进行遍历，有两种方式：",[24,96719,96720],{},"①法1",[24,96722,96723],{},"const arr=[1,2,3]",[24,96725,96726],{},"arr.map(function(item,index) {",[24,96728,96729],{},"  console.log(item)",[24,96731,71027],{},[24,96733,96734],{},[37,96735],{"alt":39,"src":96736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[24,96738,96739],{},"②法2",[24,96741,96742],{},"const str='pink'",[24,96744,96745],{},"[1,2,3].map(function(item,index) {",[24,96747,96748],{},"console.log(item)",[24,96750,71027],{},[24,96752,96753],{},[37,96754],{"alt":39,"src":96755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[24,96757,96758],{},"此时会报错",[24,96760,96761],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[24,96763,96748],{},[24,96765,71027],{},[24,96767,96768],{},"内部会当成这样处理，所以我们用分号进行隔开",[20037,96770,96772],{"id":96771},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[24,96774,96775],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[24,96777,96778],{},"可以理解为加强版的for循环",[24,96780,96781],{},[37,96782],{"alt":39,"src":96783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[24,96785,96786],{},"里边不写return，不返回数组，只遍历不返回",[24,96788,96789],{},"map是返回数组",[24,96791,96792],{},"forEach主要用于遍历数组对象",[146,96794,96796],{"className":71630,"code":96795,"language":71632,"meta":39,"style":39},"  \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",[152,96797,96798,96806,96811,96816,96821,96826,96830,96835],{"__ignoreMap":39},[155,96799,96800,96802,96804],{"class":157,"line":158},[155,96801,70707],{"class":171},[155,96803,70376],{"class":69863},[155,96805,69870],{"class":171},[155,96807,96808],{"class":157,"line":46},[155,96809,96810],{"class":171},"    const arr = ['red', 'green', 'pink']\n",[155,96812,96813],{"class":157,"line":121},[155,96814,96815],{"class":171},"    const result = arr.forEach(function (item, index) {\n",[155,96817,96818],{"class":157,"line":180},[155,96819,96820],{"class":171},"      console.log(item)\n",[155,96822,96823],{"class":157,"line":194},[155,96824,96825],{"class":171},"      console.log(index)\n",[155,96827,96828],{"class":157,"line":200},[155,96829,3065],{"class":171},[155,96831,96832],{"class":157,"line":213},[155,96833,96834],{"class":171},"    console.log(result)\n",[155,96836,96837,96839,96841],{"class":157,"line":220},[155,96838,70980],{"class":171},[155,96840,70376],{"class":69863},[155,96842,69870],{"class":171},[24,96844,96845],{},[37,96846],{"alt":39,"src":96847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[20037,96849,96851],{"id":96850},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[24,96853,96854],{},[37,96855],{"alt":39,"src":96856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[24,96858,96859],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[146,96861,96863],{"className":71630,"code":96862,"language":71632,"meta":39,"style":39},"\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",[152,96864,96865,96873,96881,96886,96891,96895,96899,96904,96908,96913,96921],{"__ignoreMap":39},[155,96866,96867,96869,96871],{"class":157,"line":158},[155,96868,20959],{"class":171},[155,96870,70363],{"class":69863},[155,96872,69870],{"class":171},[155,96874,96875,96877,96879],{"class":157,"line":46},[155,96876,70707],{"class":171},[155,96878,70376],{"class":69863},[155,96880,69870],{"class":171},[155,96882,96883],{"class":157,"line":121},[155,96884,96885],{"class":171},"    const arr = [10, 20, 30]\n",[155,96887,96888],{"class":157,"line":180},[155,96889,96890],{"class":171},"    const newArr = arr.filter(function (item, index) {\n",[155,96892,96893],{"class":157,"line":194},[155,96894,96820],{"class":171},[155,96896,96897],{"class":157,"line":200},[155,96898,96825],{"class":171},[155,96900,96901],{"class":157,"line":213},[155,96902,96903],{"class":171},"      return item >= 20\n",[155,96905,96906],{"class":157,"line":220},[155,96907,3065],{"class":171},[155,96909,96910],{"class":157,"line":245},[155,96911,96912],{"class":171},"    console.log(newArr)\n",[155,96914,96915,96917,96919],{"class":157,"line":251},[155,96916,70980],{"class":171},[155,96918,70376],{"class":69863},[155,96920,69870],{"class":171},[155,96922,96923,96925,96927],{"class":157,"line":257},[155,96924,70348],{"class":171},[155,96926,70363],{"class":69863},[155,96928,69870],{"class":171},[24,96930,96931],{},"这个也可以写成箭头函数：",[146,96933,96935],{"className":69196,"code":96934,"language":69198,"meta":39,"style":39},"const newArr = arr.filter(item => item >= 20)\n",[152,96936,96937],{"__ignoreMap":39},[155,96938,96939],{"class":157,"line":158},[155,96940,96934],{"class":171},[20037,96942,96944],{"id":96943},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[24,96946,96947],{},[37,96948],{"alt":39,"src":96949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[24,96951,96952],{},"步骤：",[24,96954,96955],{},"①：渲染页面模块",[21052,96957,96958,96961],{},[31,96959,96960],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[31,96962,96963],{},"用forEach+字符串的形式",[24,96965,96966],{},"②：点击不同需求，显示不同页面内容",[21052,96968,96969,96972,96975,96978,96981],{},[31,96970,96971],{},"点击采取事件委托方式 .filter",[31,96973,96974],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[31,96976,96977],{},"筛选条件是根据点击的 data-index 来判断",[31,96979,96980],{},"可以使用对象解构，把事件对象解构",[31,96982,96983],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[146,96985,96987],{"className":69196,"code":96986,"language":69198,"meta":39,"style":39},"\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",[152,96988,96989,96999,97013,97017,97025,97039,97059,97071,97079,97085,97095,97105,97115,97119,97123,97129,97142,97154,97164,97176,97180,97184,97191,97204,97216,97233,97251,97264,97268,97272,97284,97294,97298,97302,97309,97350,97377,97387,97391,97395,97403,97415,97419,97423,97431,97443,97455,97466,97470,97474,97483,97495,97506,97510,97514,97523,97535,97547,97551,97555,97562,97572,97584,97596,97611,97615,97619,97627,97643,97653,97663,97673,97685,97689,97693,97703,97714,97724,97728,97736,97744,97748,97756,97771,97797,97822,97847,97866,97874,97888,97893,97898,97903,97908,97913,97921,97929,97934,97945,97950,97960,97970,97980,97990,97994,97998,98007,98016,98025,98034,98038,98042,98051,98060,98069,98078,98082,98086,98095,98104,98113,98122,98126,98130,98139,98148,98157,98166,98170,98174,98183,98192,98201,98210,98214,98218,98227,98236,98245,98254,98258,98262,98271,98280,98288,98297,98301,98305,98309,98314,98326,98331,98343,98347,98364,98392,98401,98406,98416,98426,98435,98440,98445,98449,98454,98471,98475,98480,98488,98493,98520,98525,98545,98550,98562,98567,98572,98577,98588,98602,98639,98657,98690,98707,98731,98735,98740,98746,98750,98754,98758,98766,98774,98778],{"__ignoreMap":39},[155,96990,96991,96993,96995,96997],{"class":157,"line":158},[155,96992,69860],{"class":171},[155,96994,69864],{"class":69863},[155,96996,69867],{"class":226},[155,96998,69870],{"class":171},[155,97000,97001,97003,97005,97007,97009,97011],{"class":157,"line":46},[155,97002,20959],{"class":171},[155,97004,69198],{"class":69863},[155,97006,69879],{"class":226},[155,97008,317],{"class":171},[155,97010,69884],{"class":732},[155,97012,69870],{"class":171},[155,97014,97015],{"class":157,"line":121},[155,97016,217],{"emptyLinePlaceholder":216},[155,97018,97019,97021,97023],{"class":157,"line":180},[155,97020,20959],{"class":171},[155,97022,69897],{"class":69863},[155,97024,69870],{"class":171},[155,97026,97027,97029,97031,97033,97035,97037],{"class":157,"line":194},[155,97028,70707],{"class":171},[155,97030,69907],{"class":69863},[155,97032,69910],{"class":226},[155,97034,317],{"class":171},[155,97036,69915],{"class":732},[155,97038,69870],{"class":171},[155,97040,97041,97043,97045,97047,97049,97051,97053,97055,97057],{"class":157,"line":200},[155,97042,70707],{"class":171},[155,97044,69907],{"class":69863},[155,97046,34745],{"class":226},[155,97048,317],{"class":171},[155,97050,69954],{"class":732},[155,97052,69934],{"class":226},[155,97054,317],{"class":171},[155,97056,69961],{"class":732},[155,97058,69870],{"class":171},[155,97060,97061,97063,97065,97067,97069],{"class":157,"line":213},[155,97062,70707],{"class":171},[155,97064,69970],{"class":69863},[155,97066,69973],{"class":171},[155,97068,69970],{"class":69863},[155,97070,69870],{"class":171},[155,97072,97073,97075,97077],{"class":157,"line":220},[155,97074,70707],{"class":171},[155,97076,20011],{"class":69863},[155,97078,69870],{"class":171},[155,97080,97081,97083],{"class":157,"line":245},[155,97082,26266],{"class":69863},[155,97084,35397],{"class":171},[155,97086,97087,97089,97091,97093],{"class":157,"line":251},[155,97088,73258],{"class":263},[155,97090,70000],{"class":171},[155,97092,1109],{"class":263},[155,97094,21206],{"class":171},[155,97096,97097,97099,97101,97103],{"class":157,"line":257},[155,97098,73269],{"class":263},[155,97100,70000],{"class":171},[155,97102,1109],{"class":263},[155,97104,21206],{"class":171},[155,97106,97107,97109,97111,97113],{"class":157,"line":270},[155,97108,91159],{"class":263},[155,97110,70000],{"class":171},[155,97112,79068],{"class":263},[155,97114,21206],{"class":171},[155,97116,97117],{"class":157,"line":276},[155,97118,22074],{"class":171},[155,97120,97121],{"class":157,"line":297},[155,97122,217],{"emptyLinePlaceholder":216},[155,97124,97125,97127],{"class":157,"line":302},[155,97126,80686],{"class":226},[155,97128,35397],{"class":171},[155,97130,97131,97133,97135,97138,97140],{"class":157,"line":308},[155,97132,73334],{"class":263},[155,97134,70000],{"class":171},[155,97136,97137],{"class":263},"990",[155,97139,70055],{"class":167},[155,97141,21206],{"class":171},[155,97143,97144,97146,97148,97150,97152],{"class":157,"line":366},[155,97145,73269],{"class":263},[155,97147,70000],{"class":171},[155,97149,1109],{"class":263},[155,97151,70119],{"class":263},[155,97153,21206],{"class":171},[155,97155,97156,97158,97160,97162],{"class":157,"line":379},[155,97157,73572],{"class":263},[155,97159,70000],{"class":171},[155,97161,70040],{"class":263},[155,97163,21206],{"class":171},[155,97165,97166,97169,97171,97174],{"class":157,"line":385},[155,97167,97168],{"class":263},"      flex-wrap",[155,97170,70000],{"class":171},[155,97172,97173],{"class":263},"wrap",[155,97175,21206],{"class":171},[155,97177,97178],{"class":157,"line":415},[155,97179,22074],{"class":171},[155,97181,97182],{"class":157,"line":452},[155,97183,217],{"emptyLinePlaceholder":216},[155,97185,97186,97189],{"class":157,"line":480},[155,97187,97188],{"class":226},"    .item",[155,97190,35397],{"class":171},[155,97192,97193,97195,97197,97200,97202],{"class":157,"line":486},[155,97194,73334],{"class":263},[155,97196,70000],{"class":171},[155,97198,97199],{"class":263},"240",[155,97201,70055],{"class":167},[155,97203,21206],{"class":171},[155,97205,97206,97208,97210,97212,97214],{"class":157,"line":499},[155,97207,80563],{"class":263},[155,97209,70000],{"class":171},[155,97211,565],{"class":263},[155,97213,70055],{"class":167},[155,97215,21206],{"class":171},[155,97217,97218,97220,97222,97224,97226,97229,97231],{"class":157,"line":505},[155,97219,73258],{"class":263},[155,97221,70000],{"class":171},[155,97223,3458],{"class":263},[155,97225,70055],{"class":167},[155,97227,97228],{"class":263}," 30",[155,97230,70055],{"class":167},[155,97232,21206],{"class":171},[155,97234,97235,97237,97239,97241,97244,97247,97249],{"class":157,"line":528},[155,97236,80423],{"class":263},[155,97238,70000],{"class":171},[155,97240,47910],{"class":263},[155,97242,97243],{"class":263}," ease",[155,97245,97246],{"class":263}," .5",[155,97248,20753],{"class":167},[155,97250,21206],{"class":171},[155,97252,97253,97256,97258,97260,97262],{"class":157,"line":549},[155,97254,97255],{"class":263},"      margin-bottom",[155,97257,70000],{"class":171},[155,97259,3458],{"class":263},[155,97261,70055],{"class":167},[155,97263,21206],{"class":171},[155,97265,97266],{"class":157,"line":570},[155,97267,22074],{"class":171},[155,97269,97270],{"class":157,"line":575},[155,97271,217],{"emptyLinePlaceholder":216},[155,97273,97274,97277,97279,97282],{"class":157,"line":581},[155,97275,97276],{"class":226},"    .item:nth-child",[155,97278,230],{"class":171},[155,97280,97281],{"class":263},"4n",[155,97283,32269],{"class":171},[155,97285,97286,97288,97290,97292],{"class":157,"line":592},[155,97287,80563],{"class":263},[155,97289,70000],{"class":171},[155,97291,1109],{"class":263},[155,97293,21206],{"class":171},[155,97295,97296],{"class":157,"line":610},[155,97297,22074],{"class":171},[155,97299,97300],{"class":157,"line":622},[155,97301,217],{"emptyLinePlaceholder":216},[155,97303,97304,97307],{"class":157,"line":638},[155,97305,97306],{"class":226},"    .item:hover",[155,97308,35397],{"class":171},[155,97310,97311,97314,97316,97318,97320,97322,97324,97326,97328,97331,97333,97335,97337,97339,97341,97343,97345,97348],{"class":157,"line":650},[155,97312,97313],{"class":263},"      box-shadow",[155,97315,70000],{"class":171},[155,97317,1109],{"class":263},[155,97319,70055],{"class":167},[155,97321,1151],{"class":263},[155,97323,70055],{"class":167},[155,97325,22035],{"class":263},[155,97327,70055],{"class":167},[155,97329,97330],{"class":263}," rgba",[155,97332,230],{"class":171},[155,97334,1109],{"class":263},[155,97336,7589],{"class":171},[155,97338,1109],{"class":263},[155,97340,7589],{"class":171},[155,97342,1109],{"class":263},[155,97344,7589],{"class":171},[155,97346,97347],{"class":263},".2",[155,97349,22596],{"class":171},[155,97351,97352,97355,97357,97360,97362,97364,97366,97369,97371,97373,97375],{"class":157,"line":662},[155,97353,97354],{"class":263},"      transform",[155,97356,70000],{"class":171},[155,97358,97359],{"class":263},"translate3d",[155,97361,230],{"class":171},[155,97363,1109],{"class":263},[155,97365,7589],{"class":171},[155,97367,97368],{"class":263},"-4",[155,97370,70055],{"class":167},[155,97372,7589],{"class":171},[155,97374,1109],{"class":263},[155,97376,22596],{"class":171},[155,97378,97379,97381,97383,97385],{"class":157,"line":678},[155,97380,80588],{"class":263},[155,97382,70000],{"class":171},[155,97384,80593],{"class":263},[155,97386,21206],{"class":171},[155,97388,97389],{"class":157,"line":694},[155,97390,22074],{"class":171},[155,97392,97393],{"class":157,"line":706},[155,97394,217],{"emptyLinePlaceholder":216},[155,97396,97397,97399,97401],{"class":157,"line":715},[155,97398,97188],{"class":226},[155,97400,74178],{"class":69863},[155,97402,35397],{"class":171},[155,97404,97405,97407,97409,97411,97413],{"class":157,"line":720},[155,97406,73334],{"class":263},[155,97408,70000],{"class":171},[155,97410,20389],{"class":263},[155,97412,2938],{"class":167},[155,97414,21206],{"class":171},[155,97416,97417],{"class":157,"line":739},[155,97418,22074],{"class":171},[155,97420,97421],{"class":157,"line":745},[155,97422,217],{"emptyLinePlaceholder":216},[155,97424,97425,97427,97429],{"class":157,"line":773},[155,97426,97188],{"class":226},[155,97428,80867],{"class":226},[155,97430,35397],{"class":171},[155,97432,97433,97435,97437,97439,97441],{"class":157,"line":779},[155,97434,73485],{"class":263},[155,97436,70000],{"class":171},[155,97438,20709],{"class":263},[155,97440,70055],{"class":167},[155,97442,21206],{"class":171},[155,97444,97445,97447,97449,97451,97453],{"class":157,"line":785},[155,97446,97255],{"class":263},[155,97448,70000],{"class":171},[155,97450,565],{"class":263},[155,97452,70055],{"class":167},[155,97454,21206],{"class":171},[155,97456,97457,97459,97461,97464],{"class":157,"line":791},[155,97458,75979],{"class":263},[155,97460,70000],{"class":171},[155,97462,97463],{"class":263},"#666",[155,97465,21206],{"class":171},[155,97467,97468],{"class":157,"line":796},[155,97469,22074],{"class":171},[155,97471,97472],{"class":157,"line":802},[155,97473,217],{"emptyLinePlaceholder":216},[155,97475,97476,97478,97481],{"class":157,"line":808},[155,97477,97188],{"class":226},[155,97479,97480],{"class":226}," .price",[155,97482,35397],{"class":171},[155,97484,97485,97487,97489,97491,97493],{"class":157,"line":819},[155,97486,73485],{"class":263},[155,97488,70000],{"class":171},[155,97490,20806],{"class":263},[155,97492,70055],{"class":167},[155,97494,21206],{"class":171},[155,97496,97497,97499,97501,97504],{"class":157,"line":1832},[155,97498,75979],{"class":263},[155,97500,70000],{"class":171},[155,97502,97503],{"class":263},"firebrick",[155,97505,21206],{"class":171},[155,97507,97508],{"class":157,"line":1838},[155,97509,22074],{"class":171},[155,97511,97512],{"class":157,"line":1844},[155,97513,217],{"emptyLinePlaceholder":216},[155,97515,97516,97518,97521],{"class":157,"line":1850},[155,97517,97188],{"class":226},[155,97519,97520],{"class":226}," .price::before",[155,97522,35397],{"class":171},[155,97524,97525,97528,97530,97533],{"class":157,"line":1861},[155,97526,97527],{"class":263},"      content",[155,97529,70000],{"class":171},[155,97531,97532],{"class":732},"'￥'",[155,97534,21206],{"class":171},[155,97536,97537,97539,97541,97543,97545],{"class":157,"line":1866},[155,97538,73485],{"class":263},[155,97540,70000],{"class":171},[155,97542,20613],{"class":263},[155,97544,70055],{"class":167},[155,97546,21206],{"class":171},[155,97548,97549],{"class":157,"line":1871},[155,97550,22074],{"class":171},[155,97552,97553],{"class":157,"line":1877},[155,97554,217],{"emptyLinePlaceholder":216},[155,97556,97557,97560],{"class":157,"line":1883},[155,97558,97559],{"class":226},"    .filter",[155,97561,35397],{"class":171},[155,97563,97564,97566,97568,97570],{"class":157,"line":1894},[155,97565,73572],{"class":263},[155,97567,70000],{"class":171},[155,97569,70040],{"class":263},[155,97571,21206],{"class":171},[155,97573,97574,97576,97578,97580,97582],{"class":157,"line":1900},[155,97575,73334],{"class":263},[155,97577,70000],{"class":171},[155,97579,97137],{"class":263},[155,97581,70055],{"class":167},[155,97583,21206],{"class":171},[155,97585,97586,97588,97590,97592,97594],{"class":157,"line":1911},[155,97587,73269],{"class":263},[155,97589,70000],{"class":171},[155,97591,1109],{"class":263},[155,97593,70119],{"class":263},[155,97595,21206],{"class":171},[155,97597,97598,97600,97602,97604,97606,97608],{"class":157,"line":1917},[155,97599,73258],{"class":263},[155,97601,70000],{"class":171},[155,97603,20715],{"class":263},[155,97605,70055],{"class":167},[155,97607,97228],{"class":263},[155,97609,97610],{"class":167},"px\n",[155,97612,97613],{"class":157,"line":1927},[155,97614,22074],{"class":171},[155,97616,97617],{"class":157,"line":1933},[155,97618,217],{"emptyLinePlaceholder":216},[155,97620,97621,97623,97625],{"class":157,"line":1943},[155,97622,97559],{"class":226},[155,97624,21311],{"class":69863},[155,97626,35397],{"class":171},[155,97628,97629,97631,97633,97635,97637,97639,97641],{"class":157,"line":1949},[155,97630,73258],{"class":263},[155,97632,70000],{"class":171},[155,97634,565],{"class":263},[155,97636,70055],{"class":167},[155,97638,28799],{"class":263},[155,97640,70055],{"class":167},[155,97642,21206],{"class":171},[155,97644,97645,97647,97649,97651],{"class":157,"line":1959},[155,97646,80284],{"class":263},[155,97648,70000],{"class":171},[155,97650,80381],{"class":263},[155,97652,21206],{"class":171},[155,97654,97655,97657,97659,97661],{"class":157,"line":1964},[155,97656,75979],{"class":263},[155,97658,70000],{"class":171},[155,97660,97463],{"class":263},[155,97662,21206],{"class":171},[155,97664,97665,97667,97669,97671],{"class":157,"line":1970},[155,97666,82533],{"class":263},[155,97668,70000],{"class":171},[155,97670,73300],{"class":263},[155,97672,21206],{"class":171},[155,97674,97675,97677,97679,97681,97683],{"class":157,"line":1981},[155,97676,80313],{"class":263},[155,97678,70000],{"class":171},[155,97680,3458],{"class":263},[155,97682,70055],{"class":167},[155,97684,21206],{"class":171},[155,97686,97687],{"class":157,"line":1986},[155,97688,22074],{"class":171},[155,97690,97691],{"class":157,"line":1991},[155,97692,217],{"emptyLinePlaceholder":216},[155,97694,97695,97697,97699,97701],{"class":157,"line":1997},[155,97696,97559],{"class":226},[155,97698,21311],{"class":69863},[155,97700,80463],{"class":226},[155,97702,35397],{"class":171},[155,97704,97705,97707,97709,97712],{"class":157,"line":2014},[155,97706,73447],{"class":263},[155,97708,70000],{"class":171},[155,97710,97711],{"class":263},"#05943c",[155,97713,21206],{"class":171},[155,97715,97716,97718,97720,97722],{"class":157,"line":2046},[155,97717,75979],{"class":263},[155,97719,70000],{"class":171},[155,97721,79405],{"class":263},[155,97723,21206],{"class":171},[155,97725,97726],{"class":157,"line":2062},[155,97727,22074],{"class":171},[155,97729,97730,97732,97734],{"class":157,"line":2067},[155,97731,70980],{"class":171},[155,97733,20011],{"class":69863},[155,97735,69870],{"class":171},[155,97737,97738,97740,97742],{"class":157,"line":2073},[155,97739,70348],{"class":171},[155,97741,69897],{"class":69863},[155,97743,69870],{"class":171},[155,97745,97746],{"class":157,"line":2079},[155,97747,217],{"emptyLinePlaceholder":216},[155,97749,97750,97752,97754],{"class":157,"line":2089},[155,97751,20959],{"class":171},[155,97753,70363],{"class":69863},[155,97755,69870],{"class":171},[155,97757,97758,97760,97762,97764,97766,97769],{"class":157,"line":2095},[155,97759,70707],{"class":171},[155,97761,70174],{"class":69863},[155,97763,72049],{"class":226},[155,97765,317],{"class":171},[155,97767,97768],{"class":732},"\"filter\"",[155,97770,69870],{"class":171},[155,97772,97773,97775,97777,97779,97781,97783,97786,97788,97790,97793,97795],{"class":157,"line":2106},[155,97774,69904],{"class":171},[155,97776,20318],{"class":69863},[155,97778,79620],{"class":226},[155,97780,317],{"class":171},[155,97782,79625],{"class":732},[155,97784,97785],{"class":226}," data-index",[155,97787,317],{"class":171},[155,97789,23548],{"class":732},[155,97791,97792],{"class":171},">0-100元\u003C\u002F",[155,97794,20318],{"class":69863},[155,97796,69870],{"class":171},[155,97798,97799,97801,97803,97805,97807,97809,97811,97813,97815,97818,97820],{"class":157,"line":2112},[155,97800,69904],{"class":171},[155,97802,20318],{"class":69863},[155,97804,79620],{"class":226},[155,97806,317],{"class":171},[155,97808,79625],{"class":732},[155,97810,97785],{"class":226},[155,97812,317],{"class":171},[155,97814,23571],{"class":732},[155,97816,97817],{"class":171},">100-300元\u003C\u002F",[155,97819,20318],{"class":69863},[155,97821,69870],{"class":171},[155,97823,97824,97826,97828,97830,97832,97834,97836,97838,97840,97843,97845],{"class":157,"line":2122},[155,97825,69904],{"class":171},[155,97827,20318],{"class":69863},[155,97829,79620],{"class":226},[155,97831,317],{"class":171},[155,97833,79625],{"class":732},[155,97835,97785],{"class":226},[155,97837,317],{"class":171},[155,97839,23584],{"class":732},[155,97841,97842],{"class":171},">300元以上\u003C\u002F",[155,97844,20318],{"class":69863},[155,97846,69870],{"class":171},[155,97848,97849,97851,97853,97855,97857,97859,97862,97864],{"class":157,"line":2128},[155,97850,69904],{"class":171},[155,97852,20318],{"class":69863},[155,97854,79620],{"class":226},[155,97856,317],{"class":171},[155,97858,79625],{"class":732},[155,97860,97861],{"class":171},">全部区间\u003C\u002F",[155,97863,20318],{"class":69863},[155,97865,69870],{"class":171},[155,97867,97868,97870,97872],{"class":157,"line":2138},[155,97869,70980],{"class":171},[155,97871,70174],{"class":69863},[155,97873,69870],{"class":171},[155,97875,97876,97878,97880,97882,97884,97886],{"class":157,"line":2144},[155,97877,70707],{"class":171},[155,97879,70174],{"class":69863},[155,97881,72049],{"class":226},[155,97883,317],{"class":171},[155,97885,81171],{"class":732},[155,97887,69870],{"class":171},[155,97889,97890],{"class":157,"line":2154},[155,97891,97892],{"class":161},"    \u003C!-- \u003Cdiv class=\"item\">\n",[155,97894,97895],{"class":157,"line":2160},[155,97896,97897],{"class":161},"      \u003Cimg src=\"\" alt=\"\">\n",[155,97899,97900],{"class":157,"line":2170},[155,97901,97902],{"class":161},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[155,97904,97905],{"class":157,"line":2176},[155,97906,97907],{"class":161},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[155,97909,97910],{"class":157,"line":2191},[155,97911,97912],{"class":161},"    \u003C\u002Fdiv> -->\n",[155,97914,97915,97917,97919],{"class":157,"line":2197},[155,97916,70980],{"class":171},[155,97918,70174],{"class":69863},[155,97920,69870],{"class":171},[155,97922,97923,97925,97927],{"class":157,"line":2208},[155,97924,70707],{"class":171},[155,97926,70376],{"class":69863},[155,97928,69870],{"class":171},[155,97930,97931],{"class":157,"line":2214},[155,97932,97933],{"class":161},"    \u002F\u002F 2. 初始化数据\n",[155,97935,97936,97938,97941,97943],{"class":157,"line":2225},[155,97937,31049],{"class":167},[155,97939,97940],{"class":263}," goodsList",[155,97942,33391],{"class":167},[155,97944,74010],{"class":171},[155,97946,97947],{"class":157,"line":2231},[155,97948,97949],{"class":171},"      {\n",[155,97951,97952,97955,97958],{"class":157,"line":2237},[155,97953,97954],{"class":171},"        id: ",[155,97956,97957],{"class":732},"'4001172'",[155,97959,990],{"class":171},[155,97961,97962,97965,97968],{"class":157,"line":2243},[155,97963,97964],{"class":171},"        name: ",[155,97966,97967],{"class":732},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[155,97969,990],{"class":171},[155,97971,97972,97975,97978],{"class":157,"line":2249},[155,97973,97974],{"class":171},"        price: ",[155,97976,97977],{"class":732},"'289.00'",[155,97979,990],{"class":171},[155,97981,97982,97985,97988],{"class":157,"line":2260},[155,97983,97984],{"class":171},"        picture: ",[155,97986,97987],{"class":732},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[155,97989,990],{"class":171},[155,97991,97992],{"class":157,"line":2266},[155,97993,96455],{"class":171},[155,97995,97996],{"class":157,"line":2286},[155,97997,97949],{"class":171},[155,97999,98000,98002,98005],{"class":157,"line":2292},[155,98001,97954],{"class":171},[155,98003,98004],{"class":732},"'4001594'",[155,98006,990],{"class":171},[155,98008,98009,98011,98014],{"class":157,"line":2303},[155,98010,97964],{"class":171},[155,98012,98013],{"class":732},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[155,98015,990],{"class":171},[155,98017,98018,98020,98023],{"class":157,"line":2309},[155,98019,97974],{"class":171},[155,98021,98022],{"class":732},"'288.00'",[155,98024,990],{"class":171},[155,98026,98027,98029,98032],{"class":157,"line":2315},[155,98028,97984],{"class":171},[155,98030,98031],{"class":732},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[155,98033,990],{"class":171},[155,98035,98036],{"class":157,"line":2321},[155,98037,96455],{"class":171},[155,98039,98040],{"class":157,"line":2327},[155,98041,97949],{"class":171},[155,98043,98044,98046,98049],{"class":157,"line":2333},[155,98045,97954],{"class":171},[155,98047,98048],{"class":732},"'4001009'",[155,98050,990],{"class":171},[155,98052,98053,98055,98058],{"class":157,"line":2339},[155,98054,97964],{"class":171},[155,98056,98057],{"class":732},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[155,98059,990],{"class":171},[155,98061,98062,98064,98067],{"class":157,"line":2345},[155,98063,97974],{"class":171},[155,98065,98066],{"class":732},"'109.00'",[155,98068,990],{"class":171},[155,98070,98071,98073,98076],{"class":157,"line":2366},[155,98072,97984],{"class":171},[155,98074,98075],{"class":732},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[155,98077,990],{"class":171},[155,98079,98080],{"class":157,"line":2372},[155,98081,96455],{"class":171},[155,98083,98084],{"class":157,"line":2388},[155,98085,97949],{"class":171},[155,98087,98088,98090,98093],{"class":157,"line":2394},[155,98089,97954],{"class":171},[155,98091,98092],{"class":732},"'4001874'",[155,98094,990],{"class":171},[155,98096,98097,98099,98102],{"class":157,"line":2408},[155,98098,97964],{"class":171},[155,98100,98101],{"class":732},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[155,98103,990],{"class":171},[155,98105,98106,98108,98111],{"class":157,"line":2414},[155,98107,97974],{"class":171},[155,98109,98110],{"class":732},"'488.00'",[155,98112,990],{"class":171},[155,98114,98115,98117,98120],{"class":157,"line":2429},[155,98116,97984],{"class":171},[155,98118,98119],{"class":732},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[155,98121,990],{"class":171},[155,98123,98124],{"class":157,"line":2435},[155,98125,96455],{"class":171},[155,98127,98128],{"class":157,"line":2444},[155,98129,97949],{"class":171},[155,98131,98132,98134,98137],{"class":157,"line":2450},[155,98133,97954],{"class":171},[155,98135,98136],{"class":732},"'4001649'",[155,98138,990],{"class":171},[155,98140,98141,98143,98146],{"class":157,"line":2459},[155,98142,97964],{"class":171},[155,98144,98145],{"class":732},"'大师监制龙泉青瓷茶叶罐'",[155,98147,990],{"class":171},[155,98149,98150,98152,98155],{"class":157,"line":2465},[155,98151,97974],{"class":171},[155,98153,98154],{"class":732},"'139.00'",[155,98156,990],{"class":171},[155,98158,98159,98161,98164],{"class":157,"line":2471},[155,98160,97984],{"class":171},[155,98162,98163],{"class":732},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[155,98165,990],{"class":171},[155,98167,98168],{"class":157,"line":2480},[155,98169,96455],{"class":171},[155,98171,98172],{"class":157,"line":2486},[155,98173,97949],{"class":171},[155,98175,98176,98178,98181],{"class":157,"line":2497},[155,98177,97954],{"class":171},[155,98179,98180],{"class":732},"'3997185'",[155,98182,990],{"class":171},[155,98184,98185,98187,98190],{"class":157,"line":2503},[155,98186,97964],{"class":171},[155,98188,98189],{"class":732},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[155,98191,990],{"class":171},[155,98193,98194,98196,98199],{"class":157,"line":2522},[155,98195,97974],{"class":171},[155,98197,98198],{"class":732},"'108.00'",[155,98200,990],{"class":171},[155,98202,98203,98205,98208],{"class":157,"line":2528},[155,98204,97984],{"class":171},[155,98206,98207],{"class":732},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[155,98209,990],{"class":171},[155,98211,98212],{"class":157,"line":2539},[155,98213,96455],{"class":171},[155,98215,98216],{"class":157,"line":2545},[155,98217,97949],{"class":171},[155,98219,98220,98222,98225],{"class":157,"line":2565},[155,98221,97954],{"class":171},[155,98223,98224],{"class":732},"'3997403'",[155,98226,990],{"class":171},[155,98228,98229,98231,98234],{"class":157,"line":2581},[155,98230,97964],{"class":171},[155,98232,98233],{"class":732},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[155,98235,990],{"class":171},[155,98237,98238,98240,98243],{"class":157,"line":2587},[155,98239,97974],{"class":171},[155,98241,98242],{"class":732},"'100.00'",[155,98244,990],{"class":171},[155,98246,98247,98249,98252],{"class":157,"line":2601},[155,98248,97984],{"class":171},[155,98250,98251],{"class":732},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[155,98253,990],{"class":171},[155,98255,98256],{"class":157,"line":2607},[155,98257,96455],{"class":171},[155,98259,98260],{"class":157,"line":2613},[155,98261,97949],{"class":171},[155,98263,98264,98266,98269],{"class":157,"line":2624},[155,98265,97954],{"class":171},[155,98267,98268],{"class":732},"'3998274'",[155,98270,990],{"class":171},[155,98272,98273,98275,98278],{"class":157,"line":2630},[155,98274,97964],{"class":171},[155,98276,98277],{"class":732},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[155,98279,990],{"class":171},[155,98281,98282,98284,98286],{"class":157,"line":2636},[155,98283,97974],{"class":171},[155,98285,98154],{"class":732},[155,98287,990],{"class":171},[155,98289,98290,98292,98295],{"class":157,"line":2646},[155,98291,97984],{"class":171},[155,98293,98294],{"class":732},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[155,98296,990],{"class":171},[155,98298,98299],{"class":157,"line":2652},[155,98300,96455],{"class":171},[155,98302,98303],{"class":157,"line":2663},[155,98304,71672],{"class":171},[155,98306,98307],{"class":157,"line":2669},[155,98308,217],{"emptyLinePlaceholder":216},[155,98310,98311],{"class":157,"line":2679},[155,98312,98313],{"class":161},"    \u002F\u002F 1.渲染函数\n",[155,98315,98316,98318,98320,98322,98324],{"class":157,"line":2684},[155,98317,88647],{"class":167},[155,98319,88650],{"class":226},[155,98321,230],{"class":171},[155,98323,23749],{"class":323},[155,98325,32269],{"class":171},[155,98327,98328],{"class":157,"line":2690},[155,98329,98330],{"class":161},"      \u002F\u002F 声明空字符串\n",[155,98332,98333,98336,98339,98341],{"class":157,"line":2742},[155,98334,98335],{"class":167},"      let",[155,98337,98338],{"class":171}," str ",[155,98340,317],{"class":167},[155,98342,88667],{"class":732},[155,98344,98345],{"class":157,"line":2789},[155,98346,88672],{"class":161},[155,98348,98349,98351,98354,98356,98359,98362],{"class":157,"line":2794},[155,98350,76570],{"class":171},[155,98352,98353],{"class":226},"forEach",[155,98355,230],{"class":171},[155,98357,98358],{"class":323},"item",[155,98360,98361],{"class":167}," =>",[155,98363,35397],{"class":171},[155,98365,98366,98368,98371,98374,98376,98379,98381,98384,98387,98389],{"class":157,"line":2800},[155,98367,79833],{"class":167},[155,98369,98370],{"class":171}," { ",[155,98372,98373],{"class":263},"name",[155,98375,7589],{"class":171},[155,98377,98378],{"class":263},"price",[155,98380,7589],{"class":171},[155,98382,98383],{"class":263},"picture",[155,98385,98386],{"class":171}," } ",[155,98388,317],{"class":167},[155,98390,98391],{"class":171}," item\n",[155,98393,98394,98397,98399],{"class":157,"line":2821},[155,98395,98396],{"class":171},"        str ",[155,98398,2351],{"class":167},[155,98400,88731],{"class":732},[155,98402,98403],{"class":157,"line":2827},[155,98404,98405],{"class":732},"          \u003Cdiv class=\"item\">\n",[155,98407,98408,98411,98413],{"class":157,"line":2848},[155,98409,98410],{"class":732},"            \u003Cimg src=\"${",[155,98412,98383],{"class":171},[155,98414,98415],{"class":732},"}\" alt=\"\">\n",[155,98417,98418,98421,98423],{"class":157,"line":2854},[155,98419,98420],{"class":732},"            \u003Cp class=\"name\">${",[155,98422,98373],{"class":171},[155,98424,98425],{"class":732},"}\u003C\u002Fp>\n",[155,98427,98428,98431,98433],{"class":157,"line":2860},[155,98429,98430],{"class":732},"            \u003Cp class=\"price\">${",[155,98432,98378],{"class":171},[155,98434,98425],{"class":732},[155,98436,98437],{"class":157,"line":2870},[155,98438,98439],{"class":732},"          \u003C\u002Fdiv>\n",[155,98441,98442],{"class":157,"line":2875},[155,98443,98444],{"class":732},"        `\n",[155,98446,98447],{"class":157,"line":2881},[155,98448,83378],{"class":171},[155,98450,98451],{"class":157,"line":2897},[155,98452,98453],{"class":161},"      \u002F\u002F 追加给List\n",[155,98455,98456,98458,98460,98462,98465,98467,98469],{"class":157,"line":2945},[155,98457,74334],{"class":171},[155,98459,72962],{"class":226},[155,98461,230],{"class":171},[155,98463,98464],{"class":732},"'.list'",[155,98466,92812],{"class":171},[155,98468,317],{"class":167},[155,98470,92548],{"class":171},[155,98472,98473],{"class":157,"line":2951},[155,98474,22074],{"class":171},[155,98476,98477],{"class":157,"line":2957},[155,98478,98479],{"class":161},"    \u002F\u002F 页面一打开就需要渲染\n",[155,98481,98482,98485],{"class":157,"line":2963},[155,98483,98484],{"class":226},"    render",[155,98486,98487],{"class":171},"(goodsList)\n",[155,98489,98490],{"class":157,"line":2974},[155,98491,98492],{"class":161},"    \u002F\u002F 2.过滤筛选\n",[155,98494,98495,98497,98499,98501,98504,98506,98508,98510,98512,98514,98516,98518],{"class":157,"line":2980},[155,98496,70970],{"class":171},[155,98498,72962],{"class":226},[155,98500,230],{"class":171},[155,98502,98503],{"class":732},"'.filter'",[155,98505,288],{"class":171},[155,98507,76376],{"class":226},[155,98509,230],{"class":171},[155,98511,76381],{"class":732},[155,98513,7589],{"class":171},[155,98515,20161],{"class":323},[155,98517,98361],{"class":167},[155,98519,35397],{"class":171},[155,98521,98522],{"class":157,"line":2986},[155,98523,98524],{"class":161},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[155,98526,98527,98529,98531,98534,98536,98538,98540,98542],{"class":157,"line":2992},[155,98528,76791],{"class":167},[155,98530,98370],{"class":171},[155,98532,98533],{"class":263},"tagName",[155,98535,7589],{"class":171},[155,98537,1061],{"class":263},[155,98539,98386],{"class":171},[155,98541,317],{"class":167},[155,98543,98544],{"class":171}," e.target\n",[155,98546,98547],{"class":157,"line":3011},[155,98548,98549],{"class":161},"      \u002F\u002F 判断\n",[155,98551,98552,98554,98556,98558,98560],{"class":157,"line":3026},[155,98553,73043],{"class":167},[155,98555,85597],{"class":171},[155,98557,73049],{"class":167},[155,98559,86819],{"class":732},[155,98561,32269],{"class":171},[155,98563,98564],{"class":157,"line":3035},[155,98565,98566],{"class":161},"        \u002F\u002F console.log(11)\n",[155,98568,98569],{"class":157,"line":3044},[155,98570,98571],{"class":161},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[155,98573,98574],{"class":157,"line":3053},[155,98575,98576],{"class":161},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[155,98578,98579,98581,98583,98585],{"class":157,"line":3062},[155,98580,70393],{"class":167},[155,98582,70396],{"class":171},[155,98584,317],{"class":167},[155,98586,98587],{"class":171}," goodsList\n",[155,98589,98590,98592,98595,98597,98600],{"class":157,"line":3068},[155,98591,2803],{"class":167},[155,98593,98594],{"class":171}," (dataset.index ",[155,98596,73049],{"class":167},[155,98598,98599],{"class":732}," '1'",[155,98601,32269],{"class":171},[155,98603,98604,98607,98609,98612,98615,98617,98619,98621,98624,98626,98628,98631,98633,98635,98637],{"class":157,"line":3074},[155,98605,98606],{"class":171},"          arr ",[155,98608,317],{"class":167},[155,98610,98611],{"class":171}," goodsList.",[155,98613,98614],{"class":226},"filter",[155,98616,230],{"class":171},[155,98618,98358],{"class":323},[155,98620,98361],{"class":167},[155,98622,98623],{"class":171}," item.price ",[155,98625,21607],{"class":167},[155,98627,1151],{"class":263},[155,98629,98630],{"class":167}," &&",[155,98632,98623],{"class":171},[155,98634,21498],{"class":167},[155,98636,25617],{"class":263},[155,98638,363],{"class":171},[155,98640,98641,98644,98646,98648,98650,98652,98655],{"class":157,"line":3082},[155,98642,98643],{"class":171},"        } ",[155,98645,765],{"class":167},[155,98647,759],{"class":167},[155,98649,98594],{"class":171},[155,98651,73049],{"class":167},[155,98653,98654],{"class":732}," '2'",[155,98656,32269],{"class":171},[155,98658,98659,98661,98663,98665,98667,98669,98671,98673,98675,98677,98679,98681,98683,98685,98688],{"class":157,"line":3087},[155,98660,98606],{"class":171},[155,98662,317],{"class":167},[155,98664,98611],{"class":171},[155,98666,98614],{"class":226},[155,98668,230],{"class":171},[155,98670,98358],{"class":323},[155,98672,98361],{"class":167},[155,98674,98623],{"class":171},[155,98676,21607],{"class":167},[155,98678,25617],{"class":263},[155,98680,98630],{"class":167},[155,98682,98623],{"class":171},[155,98684,21498],{"class":167},[155,98686,98687],{"class":263}," 300",[155,98689,363],{"class":171},[155,98691,98692,98694,98696,98698,98700,98702,98705],{"class":157,"line":3093},[155,98693,98643],{"class":171},[155,98695,765],{"class":167},[155,98697,759],{"class":167},[155,98699,98594],{"class":171},[155,98701,73049],{"class":167},[155,98703,98704],{"class":732}," '3'",[155,98706,32269],{"class":171},[155,98708,98709,98711,98713,98715,98717,98719,98721,98723,98725,98727,98729],{"class":157,"line":3104},[155,98710,98606],{"class":171},[155,98712,317],{"class":167},[155,98714,98611],{"class":171},[155,98716,98614],{"class":226},[155,98718,230],{"class":171},[155,98720,98358],{"class":323},[155,98722,98361],{"class":167},[155,98724,98623],{"class":171},[155,98726,21607],{"class":167},[155,98728,98687],{"class":263},[155,98730,363],{"class":171},[155,98732,98733],{"class":157,"line":3110},[155,98734,22414],{"class":171},[155,98736,98737],{"class":157,"line":3130},[155,98738,98739],{"class":161},"        \u002F\u002F 渲染函数\n",[155,98741,98742,98744],{"class":157,"line":3136},[155,98743,88971],{"class":226},[155,98745,70975],{"class":171},[155,98747,98748],{"class":157,"line":3142},[155,98749,70961],{"class":171},[155,98751,98752],{"class":157,"line":3148},[155,98753,217],{"emptyLinePlaceholder":216},[155,98755,98756],{"class":157,"line":3165},[155,98757,3065],{"class":171},[155,98759,98760,98762,98764],{"class":157,"line":3171},[155,98761,70980],{"class":171},[155,98763,70376],{"class":69863},[155,98765,69870],{"class":171},[155,98767,98768,98770,98772],{"class":157,"line":3177},[155,98769,70348],{"class":171},[155,98771,70363],{"class":69863},[155,98773,69870],{"class":171},[155,98775,98776],{"class":157,"line":3183},[155,98777,217],{"emptyLinePlaceholder":216},[155,98779,98780,98782,98784],{"class":157,"line":3189},[155,98781,70348],{"class":171},[155,98783,69198],{"class":69863},[155,98785,69870],{"class":171},[20037,98787,98789],{"id":98788},"_410-深入了解对象","4.10 深入了解对象",[14,98791,98793],{"id":98792},"_4101-创建对象","4.10.1 创建对象",[24,98795,98796],{},[37,98797],{"alt":39,"src":98798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[24,98800,98801],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[14,98803,98805],{"id":98804},"_4102-构造函数","4.10.2 构造函数",[24,98807,98808,98811],{},[20234,98809,98810],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[24,98813,98814,98817],{},[20234,98815,98816],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[146,98819,98821],{"className":69196,"code":98820,"language":69198,"meta":39,"style":39},"\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",[152,98822,98823,98831,98836,98857,98870,98882,98894,98898,98903,98930,98935,98962],{"__ignoreMap":39},[155,98824,98825,98827,98829],{"class":157,"line":158},[155,98826,20959],{"class":171},[155,98828,70376],{"class":69863},[155,98830,69870],{"class":171},[155,98832,98833],{"class":157,"line":46},[155,98834,98835],{"class":161},"\u002F\u002F例：\n",[155,98837,98838,98840,98843,98845,98847,98849,98851,98853,98855],{"class":157,"line":121},[155,98839,73012],{"class":167},[155,98841,98842],{"class":226}," Pig",[155,98844,230],{"class":171},[155,98846,98373],{"class":323},[155,98848,332],{"class":171},[155,98850,88784],{"class":323},[155,98852,332],{"class":171},[155,98854,88801],{"class":323},[155,98856,32269],{"class":171},[155,98858,98859,98862,98865,98867],{"class":157,"line":180},[155,98860,98861],{"class":263},"    this",[155,98863,98864],{"class":171},".name",[155,98866,317],{"class":167},[155,98868,98869],{"class":171},"name\n",[155,98871,98872,98874,98877,98879],{"class":157,"line":194},[155,98873,98861],{"class":263},[155,98875,98876],{"class":171},".age",[155,98878,317],{"class":167},[155,98880,98881],{"class":171},"age\n",[155,98883,98884,98886,98889,98891],{"class":157,"line":200},[155,98885,98861],{"class":263},[155,98887,98888],{"class":171},".gender",[155,98890,317],{"class":167},[155,98892,98893],{"class":171},"gender    \n",[155,98895,98896],{"class":157,"line":213},[155,98897,21475],{"class":171},[155,98899,98900],{"class":157,"line":220},[155,98901,98902],{"class":161},"\u002F\u002F创建佩奇对象\n",[155,98904,98905,98907,98910,98912,98914,98916,98919,98921,98923,98925,98928],{"class":157,"line":245},[155,98906,26655],{"class":167},[155,98908,98909],{"class":263}," Peppa",[155,98911,31545],{"class":167},[155,98913,98842],{"class":226},[155,98915,230],{"class":171},[155,98917,98918],{"class":732},"'佩奇'",[155,98920,332],{"class":171},[155,98922,340],{"class":263},[155,98924,332],{"class":171},[155,98926,98927],{"class":732},"'女'",[155,98929,363],{"class":171},[155,98931,98932],{"class":157,"line":251},[155,98933,98934],{"class":161},"\u002F\u002F创建乔治对象\n",[155,98936,98937,98939,98942,98944,98946,98948,98951,98953,98955,98957,98960],{"class":157,"line":257},[155,98938,26655],{"class":167},[155,98940,98941],{"class":263}," George",[155,98943,31545],{"class":167},[155,98945,98842],{"class":226},[155,98947,230],{"class":171},[155,98949,98950],{"class":732},"'乔治'",[155,98952,332],{"class":171},[155,98954,4444],{"class":263},[155,98956,332],{"class":171},[155,98958,98959],{"class":732},"'男'",[155,98961,363],{"class":171},[155,98963,98964,98966,98968],{"class":157,"line":270},[155,98965,70348],{"class":171},[155,98967,70376],{"class":69863},[155,98969,69870],{"class":171},[24,98971,98972],{},[37,98973],{"alt":39,"src":98974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[24,98976,98977],{},[37,98978],{"alt":39,"src":98979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[24,98981,98982],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[24,98984,98985],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[24,98987,98988],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[24,98990,98991],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[24,98993,98994],{},"这里用等号是因为：对象.属性=值",[24,98996,98997],{},"①利用对象字面量创建对象",[24,98999,99000],{},"const o={",[24,99002,99003],{},"name:'pink'",[24,99005,99006],{},"} ②利用new Object创建对象",[24,99008,99009],{},"const o=new Object({name:'pink'})",[24,99011,99012],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[24,99014,99015],{},"构造函数创建对象的执行过程：",[24,99017,99018],{},[37,99019],{"alt":39,"src":99020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[14,99022,99024],{"id":99023},"_4103-实例成员","4.10.3 实例成员",[24,99026,99027],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[28,99029,99030,99033,99036],{},[31,99031,99032],{},"实例对象的属性和方法即为实例成员",[31,99034,99035],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[31,99037,99038],{},"构造函数创建的实例对象彼此独立互不影响",[14,99040,99042],{"id":99041},"_4104-静态成员","4.10.4 静态成员",[24,99044,99045],{},[37,99046],{"alt":39,"src":99047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[24,99049,99050],{},"静态成员有Date.now() Math.PI Math.random()",[24,99052,99053],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[24,99055,99056],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[24,99058,99059],{},"function Pig(name) n {",[24,99061,99062],{},"this.name=name",[24,99064,2711],{},[24,99066,99067],{},"Pig.eyes=2",[24,99069,99070],{},"Pig.sayHai=function () { console.log(this) }",[24,99072,99073],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[24,99075,99076],{},"console.log(Pig.eyes) \u002F\u002F2",[24,99078,31160],{},[28,99080,99081,99084,99087,99090,99093],{},[31,99082,99083],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[31,99085,99086],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[31,99088,99089],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[31,99091,99092],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[31,99094,99095],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[24,99097,99098],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[14,99100,99102],{"id":99101},"_4105-内置构造函数","4.10.5 内置构造函数",[24,99104,99105],{},"内置构造函数包含：",[24,99107,99108],{},[37,99109],{"alt":39,"src":99110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[24,99112,99113],{},[37,99114],{"alt":39,"src":99115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[24,99117,99118],{},"这些基本数据类型，js对他们进行了包装",[70376,99120,99121],{},"\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",[19,99123,99125],{"id":99124},"_41051-object","4.10.5.1 Object",[24,99127,99128],{},"Object 是内置的构造函数，用于创建普通对象",[24,99130,99131],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[146,99133,99135],{"className":69196,"code":99134,"language":69198,"meta":39,"style":39},"const user=new Object({name:'小明',age:15})\n",[152,99136,99137],{"__ignoreMap":39},[155,99138,99139],{"class":157,"line":158},[155,99140,99134],{"class":171},[24,99142,99143],{},"三个常用的静态方法：",[42701,99145,99147],{"id":99146},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[24,99149,99150],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[24,99152,99153],{},[37,99154],{"alt":39,"src":99155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[24,99157,99158],{},[37,99159],{"alt":39,"src":99160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[146,99162,99164],{"className":71630,"code":99163,"language":71632,"meta":39,"style":39},"\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",[152,99165,99166,99174,99182,99187,99192,99197,99202,99207,99212,99220],{"__ignoreMap":39},[155,99167,99168,99170,99172],{"class":157,"line":158},[155,99169,20959],{"class":171},[155,99171,70363],{"class":69863},[155,99173,69870],{"class":171},[155,99175,99176,99178,99180],{"class":157,"line":46},[155,99177,70707],{"class":171},[155,99179,70376],{"class":69863},[155,99181,69870],{"class":171},[155,99183,99184],{"class":157,"line":121},[155,99185,99186],{"class":171},"    const o = { name: 'pink', age: 6 }\n",[155,99188,99189],{"class":157,"line":180},[155,99190,99191],{"class":171},"    \u002F\u002F 获得所有属性名\n",[155,99193,99194],{"class":157,"line":194},[155,99195,99196],{"class":171},"    const arr = Object.keys(o)\n",[155,99198,99199],{"class":157,"line":200},[155,99200,99201],{"class":171},"    console.log(arr)\n",[155,99203,99204],{"class":157,"line":213},[155,99205,99206],{"class":171},"    \u002F\u002F 获得所有属性值\n",[155,99208,99209],{"class":157,"line":220},[155,99210,99211],{"class":171},"    console.log(Object.values(o))\n",[155,99213,99214,99216,99218],{"class":157,"line":245},[155,99215,70980],{"class":171},[155,99217,70376],{"class":69863},[155,99219,69870],{"class":171},[155,99221,99222,99224,99226],{"class":157,"line":251},[155,99223,70348],{"class":171},[155,99225,70363],{"class":69863},[155,99227,69870],{"class":171},[42701,99229,99231],{"id":99230},"_410512-object-assign","4.10.5.1.2 Object. assign",[24,99233,99234],{},"Object.assign(oo,o)",[24,99236,99237],{},"后的东西添加给前 是追加",[24,99239,99240],{},[37,99241],{"alt":39,"src":99242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[24,99244,99245],{},[37,99246],{"alt":39,"src":99247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[146,99249,99251],{"className":71630,"code":99250,"language":71632,"meta":39,"style":39},"\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",[152,99252,99253,99261,99269,99273,99277,99281,99285,99289,99293,99298,99303,99308,99313,99318,99326],{"__ignoreMap":39},[155,99254,99255,99257,99259],{"class":157,"line":158},[155,99256,20959],{"class":171},[155,99258,70363],{"class":69863},[155,99260,69870],{"class":171},[155,99262,99263,99265,99267],{"class":157,"line":46},[155,99264,70707],{"class":171},[155,99266,70376],{"class":69863},[155,99268,69870],{"class":171},[155,99270,99271],{"class":157,"line":121},[155,99272,99186],{"class":171},[155,99274,99275],{"class":157,"line":180},[155,99276,99191],{"class":171},[155,99278,99279],{"class":157,"line":194},[155,99280,99196],{"class":171},[155,99282,99283],{"class":157,"line":200},[155,99284,99201],{"class":171},[155,99286,99287],{"class":157,"line":213},[155,99288,99206],{"class":171},[155,99290,99291],{"class":157,"line":220},[155,99292,99211],{"class":171},[155,99294,99295],{"class":157,"line":245},[155,99296,99297],{"class":171},"    const oo = {}\n",[155,99299,99300],{"class":157,"line":251},[155,99301,99302],{"class":171},"    Object.assign(oo, o)\n",[155,99304,99305],{"class":157,"line":257},[155,99306,99307],{"class":171},"    console.log(oo)\n",[155,99309,99310],{"class":157,"line":270},[155,99311,99312],{"class":171},"    Object.assign(o, { gender: '女' })\n",[155,99314,99315],{"class":157,"line":276},[155,99316,99317],{"class":171},"    console.log(o)\n",[155,99319,99320,99322,99324],{"class":157,"line":297},[155,99321,70980],{"class":171},[155,99323,70376],{"class":69863},[155,99325,69870],{"class":171},[155,99327,99328,99330,99332],{"class":157,"line":302},[155,99329,70348],{"class":171},[155,99331,70363],{"class":69863},[155,99333,69870],{"class":171},[24,99335,99336],{},[37,99337],{"alt":39,"src":99338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[19,99340,99342],{"id":99341},"_41052-array","4.10.5.2 Array",[24,99344,99345],{},"Array 是内置的构造函数，用于创建数组",[24,99347,99348],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[146,99350,99352],{"className":69196,"code":99351,"language":69198,"meta":39,"style":39},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[152,99353,99354,99359],{"__ignoreMap":39},[155,99355,99356],{"class":157,"line":158},[155,99357,99358],{"class":171},"const arr=new Array(3,5)\n",[155,99360,99361],{"class":157,"line":46},[155,99362,99363],{"class":171},"console.log(arr)  \u002F\u002F[3,5]\n",[24,99365,99366],{},"Array的实例方法，这个方法是实例成员",[24,99368,99369],{},[37,99370],{"alt":39,"src":99371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[42701,99373,99375],{"id":99374},"_410521-reduce","4.10.5.2.1 reduce",[24,99377,99378],{},[37,99379],{"alt":39,"src":99380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[146,99382,99384],{"className":71630,"code":99383,"language":71632,"meta":39,"style":39},"\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",[152,99385,99386,99394,99402,99407,99412,99417,99422,99426,99431,99436,99441,99445,99450,99455,99459,99464,99469,99474,99482],{"__ignoreMap":39},[155,99387,99388,99390,99392],{"class":157,"line":158},[155,99389,20959],{"class":171},[155,99391,70363],{"class":69863},[155,99393,69870],{"class":171},[155,99395,99396,99398,99400],{"class":157,"line":46},[155,99397,70707],{"class":171},[155,99399,70376],{"class":69863},[155,99401,69870],{"class":171},[155,99403,99404],{"class":157,"line":121},[155,99405,99406],{"class":171},"    const arr = [1, 5, 8]\n",[155,99408,99409],{"class":157,"line":180},[155,99410,99411],{"class":171},"    \u002F\u002F 1.没有初始值\n",[155,99413,99414],{"class":157,"line":194},[155,99415,99416],{"class":171},"    const total = arr.reduce(function (prev, current) {\n",[155,99418,99419],{"class":157,"line":200},[155,99420,99421],{"class":171},"      return prev + current\n",[155,99423,99424],{"class":157,"line":213},[155,99425,3065],{"class":171},[155,99427,99428],{"class":157,"line":220},[155,99429,99430],{"class":171},"    console.log(total)   \u002F\u002F14\n",[155,99432,99433],{"class":157,"line":245},[155,99434,99435],{"class":171},"    \u002F\u002F 2.有初始值\n",[155,99437,99438],{"class":157,"line":251},[155,99439,99440],{"class":171},"    const total1 = arr.reduce(function (prev, current) {\n",[155,99442,99443],{"class":157,"line":257},[155,99444,99421],{"class":171},[155,99446,99447],{"class":157,"line":270},[155,99448,99449],{"class":171},"    }, 10)\n",[155,99451,99452],{"class":157,"line":276},[155,99453,99454],{"class":171},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[155,99456,99457],{"class":157,"line":297},[155,99458,217],{"emptyLinePlaceholder":216},[155,99460,99461],{"class":157,"line":302},[155,99462,99463],{"class":171},"    \u002F\u002F 3.箭头函数写法\n",[155,99465,99466],{"class":157,"line":308},[155,99467,99468],{"class":171},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[155,99470,99471],{"class":157,"line":366},[155,99472,99473],{"class":171},"    console.log(total2)   \u002F\u002F24\n",[155,99475,99476,99478,99480],{"class":157,"line":379},[155,99477,70980],{"class":171},[155,99479,70376],{"class":69863},[155,99481,69870],{"class":171},[155,99483,99484,99486,99488],{"class":157,"line":385},[155,99485,70348],{"class":171},[155,99487,70363],{"class":69863},[155,99489,69870],{"class":171},[24,99491,99492],{},"执行过程：",[28,99494,99495,99498,99501],{},[31,99496,99497],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[31,99499,99500],{},"每一次循环，把返回值给作为下一次循环的上一次值",[31,99502,99503],{},"如果有起始值，则起始值作为上一次值",[146,99505,99507],{"className":71630,"code":99506,"language":71632,"meta":39,"style":39},"\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",[152,99508,99509,99517,99525,99529,99533,99537,99541,99545,99549,99554,99559,99564,99569,99574,99578,99582,99586,99590,99594,99598,99603,99607,99612,99616,99621,99626,99630,99634,99638,99646],{"__ignoreMap":39},[155,99510,99511,99513,99515],{"class":157,"line":158},[155,99512,20959],{"class":171},[155,99514,70363],{"class":69863},[155,99516,69870],{"class":171},[155,99518,99519,99521,99523],{"class":157,"line":46},[155,99520,70707],{"class":171},[155,99522,70376],{"class":69863},[155,99524,69870],{"class":171},[155,99526,99527],{"class":157,"line":121},[155,99528,99406],{"class":171},[155,99530,99531],{"class":157,"line":180},[155,99532,99411],{"class":171},[155,99534,99535],{"class":157,"line":194},[155,99536,99416],{"class":171},[155,99538,99539],{"class":157,"line":200},[155,99540,99421],{"class":171},[155,99542,99543],{"class":157,"line":213},[155,99544,3065],{"class":171},[155,99546,99547],{"class":157,"line":220},[155,99548,99430],{"class":171},[155,99550,99551],{"class":157,"line":245},[155,99552,99553],{"class":171},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[155,99555,99556],{"class":157,"line":251},[155,99557,99558],{"class":171},"    \u002F\u002F     1              5                    6\n",[155,99560,99561],{"class":157,"line":257},[155,99562,99563],{"class":171},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[155,99565,99566],{"class":157,"line":270},[155,99567,99568],{"class":171},"    \u002F\u002F     6              8                    14\n",[155,99570,99571],{"class":157,"line":276},[155,99572,99573],{"class":171},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[155,99575,99576],{"class":157,"line":297},[155,99577,99435],{"class":171},[155,99579,99580],{"class":157,"line":302},[155,99581,99440],{"class":171},[155,99583,99584],{"class":157,"line":308},[155,99585,99421],{"class":171},[155,99587,99588],{"class":157,"line":366},[155,99589,99449],{"class":171},[155,99591,99592],{"class":157,"line":379},[155,99593,99454],{"class":171},[155,99595,99596],{"class":157,"line":385},[155,99597,99553],{"class":171},[155,99599,99600],{"class":157,"line":415},[155,99601,99602],{"class":171},"    \u002F\u002F     10             1                     11\n",[155,99604,99605],{"class":157,"line":452},[155,99606,99563],{"class":171},[155,99608,99609],{"class":157,"line":480},[155,99610,99611],{"class":171},"    \u002F\u002F     11             5                    16\n",[155,99613,99614],{"class":157,"line":486},[155,99615,99563],{"class":171},[155,99617,99618],{"class":157,"line":499},[155,99619,99620],{"class":171},"    \u002F\u002F     16             8                    24\n",[155,99622,99623],{"class":157,"line":505},[155,99624,99625],{"class":171},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[155,99627,99628],{"class":157,"line":528},[155,99629,99463],{"class":171},[155,99631,99632],{"class":157,"line":549},[155,99633,99468],{"class":171},[155,99635,99636],{"class":157,"line":570},[155,99637,99473],{"class":171},[155,99639,99640,99642,99644],{"class":157,"line":575},[155,99641,70980],{"class":171},[155,99643,70376],{"class":69863},[155,99645,69870],{"class":171},[155,99647,99648,99650,99652],{"class":157,"line":581},[155,99649,70348],{"class":171},[155,99651,70363],{"class":69863},[155,99653,69870],{"class":171},[42701,99655,99657],{"id":99656},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[24,99659,99660],{},[37,99661],{"alt":39,"src":99662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[146,99664,99666],{"className":71630,"code":99665,"language":71632,"meta":39,"style":39},"\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",[152,99667,99668,99676,99684,99689,99694,99699,99704,99708,99713,99718,99723,99728,99733,99738,99742,99747,99751,99756,99764],{"__ignoreMap":39},[155,99669,99670,99672,99674],{"class":157,"line":158},[155,99671,20959],{"class":171},[155,99673,70363],{"class":69863},[155,99675,69870],{"class":171},[155,99677,99678,99680,99682],{"class":157,"line":46},[155,99679,70707],{"class":171},[155,99681,70376],{"class":69863},[155,99683,69870],{"class":171},[155,99685,99686],{"class":157,"line":121},[155,99687,99688],{"class":171},"    const arr = [\n",[155,99690,99691],{"class":157,"line":180},[155,99692,99693],{"class":171},"      { name: '张三', salary: 10000 },\n",[155,99695,99696],{"class":157,"line":194},[155,99697,99698],{"class":171},"      { name: '李四', salary: 10000 },\n",[155,99700,99701],{"class":157,"line":200},[155,99702,99703],{"class":171},"      { name: '王五', salary: 10000 }\n",[155,99705,99706],{"class":157,"line":213},[155,99707,71672],{"class":171},[155,99709,99710],{"class":157,"line":220},[155,99711,99712],{"class":171},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[155,99714,99715],{"class":157,"line":245},[155,99716,99717],{"class":171},"    \u002F\u002F prev是累计值\n",[155,99719,99720],{"class":157,"line":251},[155,99721,99722],{"class":171},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[155,99724,99725],{"class":157,"line":257},[155,99726,99727],{"class":171},"    console.log(total)\n",[155,99729,99730],{"class":157,"line":270},[155,99731,99732],{"class":171},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[155,99734,99735],{"class":157,"line":276},[155,99736,99737],{"class":171},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[155,99739,99740],{"class":157,"line":297},[155,99741,99732],{"class":171},[155,99743,99744],{"class":157,"line":302},[155,99745,99746],{"class":171},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[155,99748,99749],{"class":157,"line":308},[155,99750,99732],{"class":171},[155,99752,99753],{"class":157,"line":366},[155,99754,99755],{"class":171},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[155,99757,99758,99760,99762],{"class":157,"line":379},[155,99759,70980],{"class":171},[155,99761,70376],{"class":69863},[155,99763,69870],{"class":171},[155,99765,99766,99768,99770],{"class":157,"line":385},[155,99767,70348],{"class":171},[155,99769,70363],{"class":69863},[155,99771,69870],{"class":171},[42701,99773,99775],{"id":99774},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[24,99777,99778],{},[37,99779],{"alt":39,"src":99780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[24,99782,99783],{},[37,99784],{"alt":39,"src":99785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[28,99787,99788],{},[31,99789,99790],{},"find()",[24,99792,99793],{},"循环查找，找到第一个就ok",[24,99795,99796],{},[20318,99797,99800],{"href":99798,"rel":99799},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[43656],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[146,99802,99804],{"className":69196,"code":99803,"language":69198,"meta":39,"style":39},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[152,99805,99806,99811,99816],{"__ignoreMap":39},[155,99807,99808],{"class":157,"line":158},[155,99809,99810],{"class":171},"const array1 = [5, 12, 8, 130, 44]\n",[155,99812,99813],{"class":157,"line":46},[155,99814,99815],{"class":171},"const found = array1.find((element) => element > 10)\n",[155,99817,99818],{"class":157,"line":121},[155,99819,99820],{"class":171},"console.log(found)  \u002F\u002F12\n",[24,99822,99823,99825,99826,99831,99832,99835,99836,99838,99839,99844,99845,99847,99848,99850,99851,99853,99854],{},[152,99824,99790],{}," 方法是一个",[20318,99827,99830],{"href":99828,"rel":99829},"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",[43656],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[152,99833,99834],{},"callbackFn"," 函数，直到 ",[152,99837,99834],{}," 返回一个",[20318,99840,99843],{"href":99841,"rel":99842},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[43656],"真值","。然后 ",[152,99846,99790],{}," 返回该元素并停止迭代数组。如果 ",[152,99849,99834],{}," 从未返回真值，则 ",[152,99852,99790],{}," 返回 ",[152,99855,99856],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[146,99858,99860],{"className":71630,"code":99859,"language":71632,"meta":39,"style":39},"\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",[152,99861,99862,99870,99878,99883,99888,99893,99897,99902,99907,99911,99916,99921,99925,99929,99934,99939,99943,99947,99952,99957,99962,99967,99972,99976,99981,99986,99991,99996,100000,100005,100013],{"__ignoreMap":39},[155,99863,99864,99866,99868],{"class":157,"line":158},[155,99865,20959],{"class":171},[155,99867,70363],{"class":69863},[155,99869,69870],{"class":171},[155,99871,99872,99874,99876],{"class":157,"line":46},[155,99873,70707],{"class":171},[155,99875,70376],{"class":69863},[155,99877,69870],{"class":171},[155,99879,99880],{"class":157,"line":121},[155,99881,99882],{"class":171},"    const arr = ['red', 'blue', 'green']\n",[155,99884,99885],{"class":157,"line":180},[155,99886,99887],{"class":171},"    const found = arr.find(item => item === 'pink')\n",[155,99889,99890],{"class":157,"line":194},[155,99891,99892],{"class":171},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[155,99894,99895],{"class":157,"line":200},[155,99896,217],{"emptyLinePlaceholder":216},[155,99898,99899],{"class":157,"line":213},[155,99900,99901],{"class":171},"    \u002F\u002F 使用场景，用于查找数据\n",[155,99903,99904],{"class":157,"line":220},[155,99905,99906],{"class":171},"    const arr1 = [\n",[155,99908,99909],{"class":157,"line":245},[155,99910,97949],{"class":171},[155,99912,99913],{"class":157,"line":251},[155,99914,99915],{"class":171},"        name: '小米',\n",[155,99917,99918],{"class":157,"line":257},[155,99919,99920],{"class":171},"        price: 1999\n",[155,99922,99923],{"class":157,"line":270},[155,99924,96455],{"class":171},[155,99926,99927],{"class":157,"line":276},[155,99928,97949],{"class":171},[155,99930,99931],{"class":157,"line":297},[155,99932,99933],{"class":171},"        name: '华为',\n",[155,99935,99936],{"class":157,"line":302},[155,99937,99938],{"class":171},"        price: 3999\n",[155,99940,99941],{"class":157,"line":308},[155,99942,70961],{"class":171},[155,99944,99945],{"class":157,"line":366},[155,99946,71672],{"class":171},[155,99948,99949],{"class":157,"line":379},[155,99950,99951],{"class":171},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[155,99953,99954],{"class":157,"line":385},[155,99955,99956],{"class":171},"    \u002F\u002F const found1 = arr1.find(item => {\n",[155,99958,99959],{"class":157,"line":415},[155,99960,99961],{"class":171},"    \u002F\u002F   if (item.name === '小米') {\n",[155,99963,99964],{"class":157,"line":452},[155,99965,99966],{"class":171},"    \u002F\u002F     return item\n",[155,99968,99969],{"class":157,"line":480},[155,99970,99971],{"class":171},"    \u002F\u002F   }\n",[155,99973,99974],{"class":157,"line":486},[155,99975,81853],{"class":171},[155,99977,99978],{"class":157,"line":499},[155,99979,99980],{"class":171},"    \u002F\u002F 另一种写法\n",[155,99982,99983],{"class":157,"line":505},[155,99984,99985],{"class":171},"    const found1 = arr1.find(item => {\n",[155,99987,99988],{"class":157,"line":528},[155,99989,99990],{"class":171},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[155,99992,99993],{"class":157,"line":549},[155,99994,99995],{"class":171},"      return item.name = '小米'\n",[155,99997,99998],{"class":157,"line":570},[155,99999,3065],{"class":171},[155,100001,100002],{"class":157,"line":575},[155,100003,100004],{"class":171},"    console.log(found1)\n",[155,100006,100007,100009,100011],{"class":157,"line":581},[155,100008,70980],{"class":171},[155,100010,70376],{"class":69863},[155,100012,69870],{"class":171},[155,100014,100015,100017,100019],{"class":157,"line":592},[155,100016,70348],{"class":171},[155,100018,70363],{"class":69863},[155,100020,69870],{"class":171},[24,100022,100023],{},[37,100024],{"alt":39,"src":100025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[24,100027,100028],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[28,100030,100031],{"start":46},[31,100032,100033],{},"every()返回的是布尔值",[24,100035,100036],{},[20318,100037,100040],{"href":100038,"rel":100039},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[43656],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[24,100042,100043],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[24,100045,100046],{},"some是只有有一个就没问题",[24,100048,100049],{},"every是必须全是才行",[146,100051,100055],{"className":100052,"code":100053,"language":100054,"meta":39,"style":39},"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",[152,100056,100057,100073,100087,100091,100100],{"__ignoreMap":39},[155,100058,100059,100061,100064,100066,100068,100071],{"class":157,"line":158},[155,100060,73012],{"class":167},[155,100062,100063],{"class":171}," isBigEnough(element, ",[155,100065,92621],{"class":167},[155,100067,7589],{"class":171},[155,100069,100070],{"class":167},"array",[155,100072,32269],{"class":171},[155,100074,100075,100078,100081,100083,100085],{"class":157,"line":46},[155,100076,100077],{"class":167},"  return",[155,100079,100080],{"class":171}," element ",[155,100082,21607],{"class":167},[155,100084,21925],{"class":263},[155,100086,21206],{"class":171},[155,100088,100089],{"class":157,"line":121},[155,100090,21475],{"class":171},[155,100092,100093,100096,100098],{"class":157,"line":180},[155,100094,100095],{"class":171},"[12, 5, 8, 130, 44].every(isBigEnough); ",[155,100097,2929],{"class":167},[155,100099,73079],{"class":171},[155,100101,100102,100105,100107],{"class":157,"line":194},[155,100103,100104],{"class":171},"[12, 54, 18, 130, 44].every(isBigEnough); ",[155,100106,2929],{"class":167},[155,100108,76503],{"class":171},[146,100110,100112],{"className":71630,"code":100111,"language":71632,"meta":39,"style":39},"\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",[152,100113,100114,100122,100130,100135,100139,100144,100149,100157],{"__ignoreMap":39},[155,100115,100116,100118,100120],{"class":157,"line":158},[155,100117,20959],{"class":171},[155,100119,70363],{"class":69863},[155,100121,69870],{"class":171},[155,100123,100124,100126,100128],{"class":157,"line":46},[155,100125,70707],{"class":171},[155,100127,70376],{"class":69863},[155,100129,69870],{"class":171},[155,100131,100132],{"class":157,"line":121},[155,100133,100134],{"class":171},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[155,100136,100137],{"class":157,"line":180},[155,100138,96885],{"class":171},[155,100140,100141],{"class":157,"line":194},[155,100142,100143],{"class":171},"    const flag = arr.every(item => item >= 10)\n",[155,100145,100146],{"class":157,"line":200},[155,100147,100148],{"class":171},"    console.log(flag)    \u002F\u002Ftrue\n",[155,100150,100151,100153,100155],{"class":157,"line":213},[155,100152,70980],{"class":171},[155,100154,70376],{"class":69863},[155,100156,69870],{"class":171},[155,100158,100159,100161,100163],{"class":157,"line":220},[155,100160,70348],{"class":171},[155,100162,70363],{"class":69863},[155,100164,69870],{"class":171},[146,100166,100168],{"className":71630,"code":100167,"language":71632,"meta":39,"style":39},"\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",[152,100169,100170,100178,100186,100190,100195,100200,100205,100213],{"__ignoreMap":39},[155,100171,100172,100174,100176],{"class":157,"line":158},[155,100173,20959],{"class":171},[155,100175,70363],{"class":69863},[155,100177,69870],{"class":171},[155,100179,100180,100182,100184],{"class":157,"line":46},[155,100181,70707],{"class":171},[155,100183,70376],{"class":69863},[155,100185,69870],{"class":171},[155,100187,100188],{"class":157,"line":121},[155,100189,100134],{"class":171},[155,100191,100192],{"class":157,"line":180},[155,100193,100194],{"class":171},"    const arr = [10, 0, 5]\n",[155,100196,100197],{"class":157,"line":194},[155,100198,100199],{"class":171},"    const flag = arr.some(item => item >= 10)\n",[155,100201,100202],{"class":157,"line":200},[155,100203,100204],{"class":171},"    console.log(flag)   \u002F\u002Ftrue\n",[155,100206,100207,100209,100211],{"class":157,"line":213},[155,100208,70980],{"class":171},[155,100210,70376],{"class":69863},[155,100212,69870],{"class":171},[155,100214,100215,100217,100219],{"class":157,"line":220},[155,100216,70348],{"class":171},[155,100218,70363],{"class":69863},[155,100220,69870],{"class":171},[42701,100222,100224],{"id":100223},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[24,100226,100227],{},[37,100228],{"alt":39,"src":100229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[146,100231,100233],{"className":69196,"code":100232,"language":69198,"meta":39,"style":39},"\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",[152,100234,100235,100245,100259,100263,100271,100285,100305,100317,100325,100332,100344,100356,100368,100380,100390,100400,100404,100412,100420,100424,100432,100444,100452,100474,100479,100484,100517,100525,100533,100537],{"__ignoreMap":39},[155,100236,100237,100239,100241,100243],{"class":157,"line":158},[155,100238,69860],{"class":171},[155,100240,69864],{"class":69863},[155,100242,69867],{"class":226},[155,100244,69870],{"class":171},[155,100246,100247,100249,100251,100253,100255,100257],{"class":157,"line":46},[155,100248,20959],{"class":171},[155,100250,69198],{"class":69863},[155,100252,69879],{"class":226},[155,100254,317],{"class":171},[155,100256,69884],{"class":732},[155,100258,69870],{"class":171},[155,100260,100261],{"class":157,"line":121},[155,100262,217],{"emptyLinePlaceholder":216},[155,100264,100265,100267,100269],{"class":157,"line":180},[155,100266,20959],{"class":171},[155,100268,69897],{"class":69863},[155,100270,69870],{"class":171},[155,100272,100273,100275,100277,100279,100281,100283],{"class":157,"line":194},[155,100274,70707],{"class":171},[155,100276,69907],{"class":69863},[155,100278,69910],{"class":226},[155,100280,317],{"class":171},[155,100282,69915],{"class":732},[155,100284,69870],{"class":171},[155,100286,100287,100289,100291,100293,100295,100297,100299,100301,100303],{"class":157,"line":200},[155,100288,70707],{"class":171},[155,100290,69907],{"class":69863},[155,100292,34745],{"class":226},[155,100294,317],{"class":171},[155,100296,69954],{"class":732},[155,100298,69934],{"class":226},[155,100300,317],{"class":171},[155,100302,69961],{"class":732},[155,100304,69870],{"class":171},[155,100306,100307,100309,100311,100313,100315],{"class":157,"line":213},[155,100308,70707],{"class":171},[155,100310,69970],{"class":69863},[155,100312,69973],{"class":171},[155,100314,69970],{"class":69863},[155,100316,69870],{"class":171},[155,100318,100319,100321,100323],{"class":157,"line":220},[155,100320,70707],{"class":171},[155,100322,20011],{"class":69863},[155,100324,69870],{"class":171},[155,100326,100327,100330],{"class":157,"line":245},[155,100328,100329],{"class":69863},"    div",[155,100331,35397],{"class":171},[155,100333,100334,100336,100338,100340,100342],{"class":157,"line":251},[155,100335,73334],{"class":263},[155,100337,70000],{"class":171},[155,100339,21619],{"class":263},[155,100341,70055],{"class":167},[155,100343,21206],{"class":171},[155,100345,100346,100348,100350,100352,100354],{"class":157,"line":257},[155,100347,73348],{"class":263},[155,100349,70000],{"class":171},[155,100351,20473],{"class":263},[155,100353,70055],{"class":167},[155,100355,21206],{"class":171},[155,100357,100358,100360,100362,100364,100366],{"class":157,"line":270},[155,100359,75922],{"class":263},[155,100361,70000],{"class":171},[155,100363,20473],{"class":263},[155,100365,70055],{"class":167},[155,100367,21206],{"class":171},[155,100369,100370,100372,100374,100376,100378],{"class":157,"line":276},[155,100371,83696],{"class":263},[155,100373,70000],{"class":171},[155,100375,1231],{"class":263},[155,100377,70055],{"class":167},[155,100379,21206],{"class":171},[155,100381,100382,100384,100386,100388],{"class":157,"line":297},[155,100383,75849],{"class":263},[155,100385,70000],{"class":171},[155,100387,70155],{"class":263},[155,100389,21206],{"class":171},[155,100391,100392,100394,100396,100398],{"class":157,"line":302},[155,100393,73447],{"class":263},[155,100395,70000],{"class":171},[155,100397,70208],{"class":263},[155,100399,21206],{"class":171},[155,100401,100402],{"class":157,"line":308},[155,100403,22074],{"class":171},[155,100405,100406,100408,100410],{"class":157,"line":366},[155,100407,70980],{"class":171},[155,100409,20011],{"class":69863},[155,100411,69870],{"class":171},[155,100413,100414,100416,100418],{"class":157,"line":379},[155,100415,70348],{"class":171},[155,100417,69897],{"class":69863},[155,100419,69870],{"class":171},[155,100421,100422],{"class":157,"line":385},[155,100423,217],{"emptyLinePlaceholder":216},[155,100425,100426,100428,100430],{"class":157,"line":415},[155,100427,20959],{"class":171},[155,100429,70363],{"class":69863},[155,100431,69870],{"class":171},[155,100433,100434,100436,100438,100440,100442],{"class":157,"line":452},[155,100435,70707],{"class":171},[155,100437,70174],{"class":69863},[155,100439,73877],{"class":171},[155,100441,70174],{"class":69863},[155,100443,69870],{"class":171},[155,100445,100446,100448,100450],{"class":157,"line":480},[155,100447,70707],{"class":171},[155,100449,70376],{"class":69863},[155,100451,69870],{"class":171},[155,100453,100454,100456,100459,100461,100464,100467,100469,100472],{"class":157,"line":486},[155,100455,31049],{"class":167},[155,100457,100458],{"class":263}," spec",[155,100460,33391],{"class":167},[155,100462,100463],{"class":171}," { size: ",[155,100465,100466],{"class":732},"'40cm*40cm'",[155,100468,74027],{"class":171},[155,100470,100471],{"class":732},"'黑色'",[155,100473,74167],{"class":171},[155,100475,100476],{"class":157,"line":499},[155,100477,100478],{"class":161},"    \u002F\u002F const arr = Object.values(spec)\n",[155,100480,100481],{"class":157,"line":505},[155,100482,100483],{"class":161},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[155,100485,100486,100488,100490,100492,100495,100497,100499,100502,100505,100508,100510,100512,100515],{"class":157,"line":528},[155,100487,70970],{"class":171},[155,100489,72962],{"class":226},[155,100491,230],{"class":171},[155,100493,100494],{"class":732},"'div'",[155,100496,92812],{"class":171},[155,100498,317],{"class":167},[155,100500,100501],{"class":171}," Object.",[155,100503,100504],{"class":226},"values",[155,100506,100507],{"class":171},"(spec).",[155,100509,92786],{"class":226},[155,100511,230],{"class":171},[155,100513,100514],{"class":732},"'\u002F'",[155,100516,363],{"class":171},[155,100518,100519,100521,100523],{"class":157,"line":549},[155,100520,70980],{"class":171},[155,100522,70376],{"class":69863},[155,100524,69870],{"class":171},[155,100526,100527,100529,100531],{"class":157,"line":570},[155,100528,70348],{"class":171},[155,100530,70363],{"class":69863},[155,100532,69870],{"class":171},[155,100534,100535],{"class":157,"line":575},[155,100536,217],{"emptyLinePlaceholder":216},[155,100538,100539,100541,100543],{"class":157,"line":581},[155,100540,70348],{"class":171},[155,100542,69198],{"class":69863},[155,100544,69870],{"class":171},[24,100546,100547],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[42701,100549,100551],{"id":100550},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[24,100553,100554],{},"静态方法，将伪数组转换为真数组",[24,100556,100557],{},[37,100558],{"alt":39,"src":100559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[146,100561,100563],{"className":71630,"code":100562,"language":71632,"meta":39,"style":39},"\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",[152,100564,100565,100573,100581,100593,100605,100617,100625,100633,100638,100643,100648,100653,100661],{"__ignoreMap":39},[155,100566,100567,100569,100571],{"class":157,"line":158},[155,100568,20959],{"class":171},[155,100570,70363],{"class":69863},[155,100572,69870],{"class":171},[155,100574,100575,100577,100579],{"class":157,"line":46},[155,100576,70707],{"class":171},[155,100578,21052],{"class":69863},[155,100580,69870],{"class":171},[155,100582,100583,100585,100587,100589,100591],{"class":157,"line":121},[155,100584,69904],{"class":171},[155,100586,31],{"class":69863},[155,100588,73877],{"class":171},[155,100590,31],{"class":69863},[155,100592,69870],{"class":171},[155,100594,100595,100597,100599,100601,100603],{"class":157,"line":180},[155,100596,69904],{"class":171},[155,100598,31],{"class":69863},[155,100600,73877],{"class":171},[155,100602,31],{"class":69863},[155,100604,69870],{"class":171},[155,100606,100607,100609,100611,100613,100615],{"class":157,"line":194},[155,100608,69904],{"class":171},[155,100610,31],{"class":69863},[155,100612,73877],{"class":171},[155,100614,31],{"class":69863},[155,100616,69870],{"class":171},[155,100618,100619,100621,100623],{"class":157,"line":200},[155,100620,70980],{"class":171},[155,100622,21052],{"class":69863},[155,100624,69870],{"class":171},[155,100626,100627,100629,100631],{"class":157,"line":213},[155,100628,70707],{"class":171},[155,100630,70376],{"class":69863},[155,100632,69870],{"class":171},[155,100634,100635],{"class":157,"line":220},[155,100636,100637],{"class":171},"    const lis = document.querySelectorAll('li')\n",[155,100639,100640],{"class":157,"line":245},[155,100641,100642],{"class":171},"    const liss = Array.from(lis)\n",[155,100644,100645],{"class":157,"line":251},[155,100646,100647],{"class":171},"    liss.pop()\n",[155,100649,100650],{"class":157,"line":257},[155,100651,100652],{"class":171},"    console.log(liss)\n",[155,100654,100655,100657,100659],{"class":157,"line":270},[155,100656,70980],{"class":171},[155,100658,70376],{"class":69863},[155,100660,69870],{"class":171},[155,100662,100663,100665,100667],{"class":157,"line":276},[155,100664,70348],{"class":171},[155,100666,70363],{"class":69863},[155,100668,69870],{"class":171},[24,100670,100671],{},[37,100672],{"alt":39,"src":100673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[19,100675,100677],{"id":100676},"_41053-string","4.10.5.3 String",[24,100679,100680],{},[37,100681],{"alt":39,"src":100682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[42701,100684,100686],{"id":100685},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[146,100688,100690],{"className":71630,"code":100689,"language":71632,"meta":39,"style":39},"\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",[152,100691,100692,100700,100708,100713,100718,100723,100727,100732,100737,100742,100750],{"__ignoreMap":39},[155,100693,100694,100696,100698],{"class":157,"line":158},[155,100695,20959],{"class":171},[155,100697,70363],{"class":69863},[155,100699,69870],{"class":171},[155,100701,100702,100704,100706],{"class":157,"line":46},[155,100703,70707],{"class":171},[155,100705,70376],{"class":69863},[155,100707,69870],{"class":171},[155,100709,100710],{"class":157,"line":121},[155,100711,100712],{"class":171},"    \u002F\u002F 把字符串转化为数组\n",[155,100714,100715],{"class":157,"line":180},[155,100716,100717],{"class":171},"    const str = 'pink,red'\n",[155,100719,100720],{"class":157,"line":194},[155,100721,100722],{"class":171},"    const arr = str.split(',')\n",[155,100724,100725],{"class":157,"line":200},[155,100726,99201],{"class":171},[155,100728,100729],{"class":157,"line":213},[155,100730,100731],{"class":171},"    const str1 = '2025-8-25'\n",[155,100733,100734],{"class":157,"line":220},[155,100735,100736],{"class":171},"    const arr1 = str1.split('-')\n",[155,100738,100739],{"class":157,"line":245},[155,100740,100741],{"class":171},"    console.log(arr1)\n",[155,100743,100744,100746,100748],{"class":157,"line":251},[155,100745,70980],{"class":171},[155,100747,70376],{"class":69863},[155,100749,69870],{"class":171},[155,100751,100752,100754,100756],{"class":157,"line":257},[155,100753,70348],{"class":171},[155,100755,70363],{"class":69863},[155,100757,69870],{"class":171},[42701,100759,100761],{"id":100760},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[24,100763,25045],{},[24,100765,100766],{},"substring(indexStart)",[24,100768,100769],{},"substring(indexStart, indexEnd)",[21052,100771,100772,100783,100795,100805],{},[31,100773,100774,100775,100778,100779,100782],{},"如果省略了 ",[152,100776,100777],{},"indexEnd","，则 ",[152,100780,100781],{},"substring()"," 提取字符直到字符串的末尾",[31,100784,100785,100786,100789,100790,100778,100792,100794],{},"如果 ",[152,100787,100788],{},"indexStart"," 等于 ",[152,100791,100777],{},[152,100793,100781],{}," 返回一个空字符串",[31,100796,100785,100797,100799,100800,100778,100802,100804],{},[152,100798,100788],{}," 大于 ",[152,100801,100777],{},[152,100803,100781],{}," 的效果就像交换了这两个参数一样",[31,100806,100807],{},"结束的索引号不包含想要截取的部分",[146,100809,100811],{"className":100052,"code":100810,"language":100054,"meta":39,"style":39},"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",[152,100812,100813,100825,100829,100863,100893,100897,100928,100932,100959,100989,101019,101023,101054],{"__ignoreMap":39},[155,100814,100815,100818,100820,100823],{"class":157,"line":158},[155,100816,100817],{"class":171},"const anyString ",[155,100819,317],{"class":167},[155,100821,100822],{"class":732}," \"Mozilla\"",[155,100824,21206],{"class":171},[155,100826,100827],{"class":157,"line":46},[155,100828,217],{"emptyLinePlaceholder":216},[155,100830,100831,100834,100836,100838,100840,100843,100845,100848,100850,100852,100854,100856,100858,100860],{"class":157,"line":121},[155,100832,100833],{"class":263},"console",[155,100835,236],{"class":171},[155,100837,76810],{"class":263},[155,100839,230],{"class":171},[155,100841,100842],{"class":263},"anyString",[155,100844,236],{"class":171},[155,100846,100847],{"class":263},"substring",[155,100849,230],{"class":171},[155,100851,1109],{"class":263},[155,100853,7589],{"class":171},[155,100855,329],{"class":263},[155,100857,93816],{"class":171},[155,100859,2929],{"class":167},[155,100861,100862],{"class":732}," 'M'\n",[155,100864,100865,100867,100869,100871,100873,100875,100877,100879,100881,100883,100885,100887,100889,100891],{"class":157,"line":180},[155,100866,100833],{"class":263},[155,100868,236],{"class":171},[155,100870,76810],{"class":263},[155,100872,230],{"class":171},[155,100874,100842],{"class":263},[155,100876,236],{"class":171},[155,100878,100847],{"class":263},[155,100880,230],{"class":171},[155,100882,329],{"class":263},[155,100884,7589],{"class":171},[155,100886,1109],{"class":263},[155,100888,93816],{"class":171},[155,100890,2929],{"class":167},[155,100892,100862],{"class":732},[155,100894,100895],{"class":157,"line":194},[155,100896,217],{"emptyLinePlaceholder":216},[155,100898,100899,100901,100903,100905,100907,100909,100911,100913,100915,100917,100919,100921,100923,100925],{"class":157,"line":200},[155,100900,100833],{"class":263},[155,100902,236],{"class":171},[155,100904,76810],{"class":263},[155,100906,230],{"class":171},[155,100908,100842],{"class":263},[155,100910,236],{"class":171},[155,100912,100847],{"class":263},[155,100914,230],{"class":171},[155,100916,1109],{"class":263},[155,100918,7589],{"class":171},[155,100920,340],{"class":263},[155,100922,93816],{"class":171},[155,100924,2929],{"class":167},[155,100926,100927],{"class":732}," 'Mozill'\n",[155,100929,100930],{"class":157,"line":213},[155,100931,217],{"emptyLinePlaceholder":216},[155,100933,100934,100936,100938,100940,100942,100944,100946,100948,100950,100952,100954,100956],{"class":157,"line":220},[155,100935,100833],{"class":263},[155,100937,236],{"class":171},[155,100939,76810],{"class":263},[155,100941,230],{"class":171},[155,100943,100842],{"class":263},[155,100945,236],{"class":171},[155,100947,100847],{"class":263},[155,100949,230],{"class":171},[155,100951,1264],{"class":263},[155,100953,93816],{"class":171},[155,100955,2929],{"class":167},[155,100957,100958],{"class":732}," 'lla'\n",[155,100960,100961,100963,100965,100967,100969,100971,100973,100975,100977,100979,100981,100983,100985,100987],{"class":157,"line":245},[155,100962,100833],{"class":263},[155,100964,236],{"class":171},[155,100966,76810],{"class":263},[155,100968,230],{"class":171},[155,100970,100842],{"class":263},[155,100972,236],{"class":171},[155,100974,100847],{"class":263},[155,100976,230],{"class":171},[155,100978,1264],{"class":263},[155,100980,7589],{"class":171},[155,100982,8408],{"class":263},[155,100984,93872],{"class":171},[155,100986,2929],{"class":167},[155,100988,100958],{"class":732},[155,100990,100991,100993,100995,100997,100999,101001,101003,101005,101007,101009,101011,101013,101015,101017],{"class":157,"line":251},[155,100992,100833],{"class":263},[155,100994,236],{"class":171},[155,100996,76810],{"class":263},[155,100998,230],{"class":171},[155,101000,100842],{"class":263},[155,101002,236],{"class":171},[155,101004,100847],{"class":263},[155,101006,230],{"class":171},[155,101008,8408],{"class":263},[155,101010,7589],{"class":171},[155,101012,1264],{"class":263},[155,101014,93816],{"class":171},[155,101016,2929],{"class":167},[155,101018,100958],{"class":732},[155,101020,101021],{"class":157,"line":257},[155,101022,217],{"emptyLinePlaceholder":216},[155,101024,101025,101027,101029,101031,101033,101035,101037,101039,101041,101043,101045,101047,101049,101051],{"class":157,"line":270},[155,101026,100833],{"class":263},[155,101028,236],{"class":171},[155,101030,76810],{"class":263},[155,101032,230],{"class":171},[155,101034,100842],{"class":263},[155,101036,236],{"class":171},[155,101038,100847],{"class":263},[155,101040,230],{"class":171},[155,101042,1109],{"class":263},[155,101044,7589],{"class":171},[155,101046,8408],{"class":263},[155,101048,93816],{"class":171},[155,101050,2929],{"class":167},[155,101052,101053],{"class":732}," 'Mozilla'\n",[155,101055,101056,101058,101060,101062,101064,101066,101068,101070,101072,101074,101076,101078,101080,101082],{"class":157,"line":276},[155,101057,100833],{"class":263},[155,101059,236],{"class":171},[155,101061,76810],{"class":263},[155,101063,230],{"class":171},[155,101065,100842],{"class":263},[155,101067,236],{"class":171},[155,101069,100847],{"class":263},[155,101071,230],{"class":171},[155,101073,1109],{"class":263},[155,101075,7589],{"class":171},[155,101077,565],{"class":263},[155,101079,93816],{"class":171},[155,101081,2929],{"class":167},[155,101083,101053],{"class":732},[42701,101085,101087],{"id":101086},"_410533-startswith","4.10.5.3.3 startsWith",[24,101089,101090,101093,101094,101099,101100,101102,101103],{},[152,101091,101092],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[20234,101095,101096],{},[152,101097,101098],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[152,101101,21275],{}," 或 ",[152,101104,84583],{},[146,101106,101108],{"className":96058,"code":101107,"language":96060,"meta":39,"style":39},"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",[152,101109,101110,101122,101141,101146,101166],{"__ignoreMap":39},[155,101111,101112,101114,101117,101119],{"class":157,"line":158},[155,101113,26655],{"class":167},[155,101115,101116],{"class":171}," str1 ",[155,101118,317],{"class":167},[155,101120,101121],{"class":732}," \"Saturday night plans\"\n",[155,101123,101124,101126,101128,101131,101134,101136,101139],{"class":157,"line":46},[155,101125,96095],{"class":171},[155,101127,76810],{"class":226},[155,101129,101130],{"class":171},"(str1.",[155,101132,101133],{"class":226},"startsWith",[155,101135,230],{"class":171},[155,101137,101138],{"class":732},"\"Sat\"",[155,101140,1238],{"class":171},[155,101142,101143],{"class":157,"line":121},[155,101144,101145],{"class":161},"\u002F\u002F Expected output: true\n",[155,101147,101148,101150,101152,101154,101156,101158,101160,101162,101164],{"class":157,"line":180},[155,101149,96095],{"class":171},[155,101151,76810],{"class":226},[155,101153,101130],{"class":171},[155,101155,101133],{"class":226},[155,101157,230],{"class":171},[155,101159,101138],{"class":732},[155,101161,7589],{"class":171},[155,101163,4444],{"class":263},[155,101165,1238],{"class":171},[155,101167,101168],{"class":157,"line":194},[155,101169,101170],{"class":161},"\u002F\u002F Expected output: false\n",[146,101172,101174],{"className":69196,"code":101173,"language":69198,"meta":39,"style":39},"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",[152,101175,101176,101181,101186,101190,101195,101200],{"__ignoreMap":39},[155,101177,101178],{"class":157,"line":158},[155,101179,101180],{"class":171},"startsWith(searchString)\n",[155,101182,101183],{"class":157,"line":46},[155,101184,101185],{"class":171},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[155,101187,101188],{"class":157,"line":121},[155,101189,217],{"emptyLinePlaceholder":216},[155,101191,101192],{"class":157,"line":180},[155,101193,101194],{"class":171},"const str3 = 'pink老师上课中'\n",[155,101196,101197],{"class":157,"line":194},[155,101198,101199],{"class":171},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[155,101201,101202],{"class":157,"line":200},[155,101203,101204],{"class":171},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[42701,101206,101208],{"id":101207},"_410534-includes","4.10.5.3.4 includes",[24,101210,101211],{},"includes(searchString) includes(searchString, position)",[28,101213,101214],{},[31,101215,101216],{},"searchString:",[24,101218,101219,101220,101222,101223,101228,101229,101234,101235,41292,101238,101241,101242,101245],{},"一个要在 ",[152,101221,21215],{}," 中查找的字符串。",[20318,101224,101227],{"href":101225,"rel":101226},"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",[43656],"不能是正则表达式","。所有非正则表达式的值都会被",[20318,101230,101233],{"href":101231,"rel":101232},"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",[43656],"强制转换为字符串","，因此如果该参数被省略或传入 ",[152,101236,101237],{},"undefined",[152,101239,101240],{},"includes()"," 方法会在字符串中搜索 ",[152,101243,101244],{},"\"undefined\"","，这通常不是你想要的",[28,101247,101248],{"start":46},[31,101249,101250,3017],{},[152,101251,101252],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[24,101254,101255,101256,101259,101260],{},"在字符串中开始搜索 ",[152,101257,101258],{},"searchString"," 的位置。默认值为 ",[152,101261,1109],{},[28,101263,101264],{"start":121},[31,101265,101266],{},"返回值：",[24,101268,101269,101270,101272,101273,101277,101278],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[152,101271,101258],{}," 为空字符串的情况），则返回 ",[20234,101274,101275],{},[152,101276,21275],{}," ，否则返回 ",[20234,101279,101280],{},[152,101281,84583],{},[28,101283,101284],{"start":180},[31,101285,101286],{},"异常：",[24,101288,100785,101289,33622,101291,101295],{},[152,101290,101258],{},[20318,101292,101294],{"href":101225,"rel":101293},[43656],"是一个正则表达式","，则会抛出",[24,101297,101298],{},"只要是有就是true，不需要非得以谁开头结尾",[146,101300,101302],{"className":96058,"code":101301,"language":96060,"meta":39,"style":39},"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",[152,101303,101304,101315,101338,101357,101377,101399,101418],{"__ignoreMap":39},[155,101305,101306,101308,101310,101312],{"class":157,"line":158},[155,101307,26655],{"class":167},[155,101309,98338],{"class":171},[155,101311,317],{"class":167},[155,101313,101314],{"class":732}," \"To be, or not to be, that is the question.\"\n",[155,101316,101317,101319,101321,101324,101327,101329,101332,101335],{"class":157,"line":46},[155,101318,96095],{"class":171},[155,101320,76810],{"class":226},[155,101322,101323],{"class":171},"(str.",[155,101325,101326],{"class":226},"includes",[155,101328,230],{"class":171},[155,101330,101331],{"class":732},"\"To be\"",[155,101333,101334],{"class":171},"))",[155,101336,101337],{"class":161},"  \u002F\u002F true\n",[155,101339,101340,101342,101344,101346,101348,101350,101353,101355],{"class":157,"line":121},[155,101341,96095],{"class":171},[155,101343,76810],{"class":226},[155,101345,101323],{"class":171},[155,101347,101326],{"class":226},[155,101349,230],{"class":171},[155,101351,101352],{"class":732},"\"question\"",[155,101354,101334],{"class":171},[155,101356,101337],{"class":161},[155,101358,101359,101361,101363,101365,101367,101369,101372,101374],{"class":157,"line":180},[155,101360,96095],{"class":171},[155,101362,76810],{"class":226},[155,101364,101323],{"class":171},[155,101366,101326],{"class":226},[155,101368,230],{"class":171},[155,101370,101371],{"class":732},"\"nonexistent\"",[155,101373,101334],{"class":171},[155,101375,101376],{"class":161},"  \u002F\u002F false\n",[155,101378,101379,101381,101383,101385,101387,101389,101391,101393,101395,101397],{"class":157,"line":194},[155,101380,96095],{"class":171},[155,101382,76810],{"class":226},[155,101384,101323],{"class":171},[155,101386,101326],{"class":226},[155,101388,230],{"class":171},[155,101390,101331],{"class":732},[155,101392,7589],{"class":171},[155,101394,329],{"class":263},[155,101396,101334],{"class":171},[155,101398,101376],{"class":161},[155,101400,101401,101403,101405,101407,101409,101411,101414,101416],{"class":157,"line":200},[155,101402,96095],{"class":171},[155,101404,76810],{"class":226},[155,101406,101323],{"class":171},[155,101408,101326],{"class":226},[155,101410,230],{"class":171},[155,101412,101413],{"class":732},"\"TO BE\"",[155,101415,101334],{"class":171},[155,101417,101376],{"class":161},[155,101419,101420,101422,101424,101426,101428,101430,101432,101434],{"class":157,"line":213},[155,101421,96095],{"class":171},[155,101423,76810],{"class":226},[155,101425,101323],{"class":171},[155,101427,101326],{"class":226},[155,101429,230],{"class":171},[155,101431,15430],{"class":732},[155,101433,101334],{"class":171},[155,101435,101337],{"class":161},[42701,101437,101439],{"id":101438},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[146,101441,101443],{"className":71630,"code":101442,"language":71632,"meta":39,"style":39},"\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",[152,101444,101445,101453,101461,101466,101471,101476,101481,101486,101494],{"__ignoreMap":39},[155,101446,101447,101449,101451],{"class":157,"line":158},[155,101448,20959],{"class":171},[155,101450,70363],{"class":69863},[155,101452,69870],{"class":171},[155,101454,101455,101457,101459],{"class":157,"line":46},[155,101456,70707],{"class":171},[155,101458,70376],{"class":69863},[155,101460,69870],{"class":171},[155,101462,101463],{"class":157,"line":121},[155,101464,101465],{"class":171},"    const num = 10\n",[155,101467,101468],{"class":157,"line":180},[155,101469,101470],{"class":171},"    \u002F\u002F 强制转换\n",[155,101472,101473],{"class":157,"line":194},[155,101474,101475],{"class":171},"    console.log(String(num))\n",[155,101477,101478],{"class":157,"line":200},[155,101479,101480],{"class":171},"    \u002F\u002F toString()方法转换\n",[155,101482,101483],{"class":157,"line":213},[155,101484,101485],{"class":171},"    console.log(num.toString())\n",[155,101487,101488,101490,101492],{"class":157,"line":220},[155,101489,70980],{"class":171},[155,101491,70376],{"class":69863},[155,101493,69870],{"class":171},[155,101495,101496,101498,101500],{"class":157,"line":245},[155,101497,70348],{"class":171},[155,101499,70363],{"class":69863},[155,101501,69870],{"class":171},[42701,101503,101505],{"id":101504},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[24,101507,101508],{},[37,101509],{"alt":39,"src":101510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[146,101512,101514],{"className":69196,"code":101513,"language":69198,"meta":39,"style":39},"\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",[152,101515,101516,101526,101540,101544,101552,101566,101586,101598,101606,101610,101618,101630,101638,101650,101655,101660,101665,101712,101728,101736,101744,101748],{"__ignoreMap":39},[155,101517,101518,101520,101522,101524],{"class":157,"line":158},[155,101519,69860],{"class":171},[155,101521,69864],{"class":69863},[155,101523,69867],{"class":226},[155,101525,69870],{"class":171},[155,101527,101528,101530,101532,101534,101536,101538],{"class":157,"line":46},[155,101529,20959],{"class":171},[155,101531,69198],{"class":69863},[155,101533,69879],{"class":226},[155,101535,317],{"class":171},[155,101537,69884],{"class":732},[155,101539,69870],{"class":171},[155,101541,101542],{"class":157,"line":121},[155,101543,217],{"emptyLinePlaceholder":216},[155,101545,101546,101548,101550],{"class":157,"line":180},[155,101547,20959],{"class":171},[155,101549,69897],{"class":69863},[155,101551,69870],{"class":171},[155,101553,101554,101556,101558,101560,101562,101564],{"class":157,"line":194},[155,101555,70707],{"class":171},[155,101557,69907],{"class":69863},[155,101559,69910],{"class":226},[155,101561,317],{"class":171},[155,101563,69915],{"class":732},[155,101565,69870],{"class":171},[155,101567,101568,101570,101572,101574,101576,101578,101580,101582,101584],{"class":157,"line":200},[155,101569,70707],{"class":171},[155,101571,69907],{"class":69863},[155,101573,34745],{"class":226},[155,101575,317],{"class":171},[155,101577,69954],{"class":732},[155,101579,69934],{"class":226},[155,101581,317],{"class":171},[155,101583,69961],{"class":732},[155,101585,69870],{"class":171},[155,101587,101588,101590,101592,101594,101596],{"class":157,"line":213},[155,101589,70707],{"class":171},[155,101591,69970],{"class":69863},[155,101593,69973],{"class":171},[155,101595,69970],{"class":69863},[155,101597,69870],{"class":171},[155,101599,101600,101602,101604],{"class":157,"line":220},[155,101601,70348],{"class":171},[155,101603,69897],{"class":69863},[155,101605,69870],{"class":171},[155,101607,101608],{"class":157,"line":245},[155,101609,217],{"emptyLinePlaceholder":216},[155,101611,101612,101614,101616],{"class":157,"line":251},[155,101613,20959],{"class":171},[155,101615,70363],{"class":69863},[155,101617,69870],{"class":171},[155,101619,101620,101622,101624,101626,101628],{"class":157,"line":257},[155,101621,70707],{"class":171},[155,101623,70174],{"class":69863},[155,101625,73877],{"class":171},[155,101627,70174],{"class":69863},[155,101629,69870],{"class":171},[155,101631,101632,101634,101636],{"class":157,"line":270},[155,101633,70707],{"class":171},[155,101635,70376],{"class":69863},[155,101637,69870],{"class":171},[155,101639,101640,101642,101645,101647],{"class":157,"line":276},[155,101641,31049],{"class":167},[155,101643,101644],{"class":263}," gift",[155,101646,33391],{"class":167},[155,101648,101649],{"class":732}," '50g的茶叶，清洗球'\n",[155,101651,101652],{"class":157,"line":297},[155,101653,101654],{"class":161},"    \u002F\u002F 1.把字符串拆分为数组\n",[155,101656,101657],{"class":157,"line":302},[155,101658,101659],{"class":161},"    \u002F\u002F console.log(gift.split(','))\n",[155,101661,101662],{"class":157,"line":308},[155,101663,101664],{"class":161},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[155,101666,101667,101669,101671,101673,101676,101679,101681,101684,101686,101688,101690,101692,101694,101697,101699,101702,101704,101706,101708,101710],{"class":157,"line":366},[155,101668,31049],{"class":167},[155,101670,92482],{"class":263},[155,101672,33391],{"class":167},[155,101674,101675],{"class":171}," gift.",[155,101677,101678],{"class":226},"split",[155,101680,230],{"class":171},[155,101682,101683],{"class":732},"'，'",[155,101685,288],{"class":171},[155,101687,92607],{"class":226},[155,101689,230],{"class":171},[155,101691,98358],{"class":323},[155,101693,98361],{"class":167},[155,101695,101696],{"class":732}," `\u003Cspan>【赠品】${",[155,101698,98358],{"class":171},[155,101700,101701],{"class":732},"}\u003C\u002Fspan>\u003Cbr>`",[155,101703,288],{"class":171},[155,101705,92786],{"class":226},[155,101707,230],{"class":171},[155,101709,92791],{"class":732},[155,101711,363],{"class":171},[155,101713,101714,101716,101718,101720,101722,101724,101726],{"class":157,"line":379},[155,101715,70970],{"class":171},[155,101717,72962],{"class":226},[155,101719,230],{"class":171},[155,101721,100494],{"class":732},[155,101723,92812],{"class":171},[155,101725,317],{"class":167},[155,101727,92548],{"class":171},[155,101729,101730,101732,101734],{"class":157,"line":385},[155,101731,70980],{"class":171},[155,101733,70376],{"class":69863},[155,101735,69870],{"class":171},[155,101737,101738,101740,101742],{"class":157,"line":415},[155,101739,70348],{"class":171},[155,101741,70363],{"class":69863},[155,101743,69870],{"class":171},[155,101745,101746],{"class":157,"line":452},[155,101747,217],{"emptyLinePlaceholder":216},[155,101749,101750,101752,101754],{"class":157,"line":480},[155,101751,70348],{"class":171},[155,101753,69198],{"class":69863},[155,101755,69870],{"class":171},[19,101757,101759],{"id":101758},"_41054-number","4.10.5.4 Number",[24,101761,101762],{},[37,101763],{"alt":39,"src":101764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[24,101766,101767],{},"整数也可以进行toFixed来保留小数",[24,101769,101770],{},"比如：",[24,101772,101773],{},"const price=10",[24,101775,101776],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[19,101778,101780],{"id":101779},"_41055-购物车展示","4.10.5.5 购物车展示",[24,101782,101783],{},[37,101784],{"alt":39,"src":101785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[146,101787,101789],{"className":69196,"code":101788,"language":69198,"meta":39,"style":39},"\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",[152,101790,101791,101801,101815,101819,101827,101841,101861,101873,101881,101887,101897,101907,101917,101921,101925,101931,101943,101957,101961,101965,101971,101983,101999,102009,102025,102029,102033,102039,102049,102059,102063,102067,102075,102087,102099,102111,102115,102119,102127,102139,102143,102147,102158,102168,102180,102192,102202,102206,102210,102218,102227,102239,102249,102259,102263,102267,102275,102284,102291,102301,102313,102317,102321,102330,102340,102351,102363,102375,102379,102383,102392,102402,102413,102417,102421,102427,102439,102451,102461,102471,102489,102501,102505,102509,102518,102530,102540,102550,102562,102566,102574,102582,102586,102594,102608,102616,102630,102658,102666,102674,102684,102688,102696,102704,102713,102721,102730,102740,102744,102748,102756,102764,102773,102781,102789,102802,102806,102810,102818,102826,102835,102843,102851,102866,102870,102874,102882,102890,102899,102907,102915,102929,102937,102941,102945,102950,102976,102981,103018,103023,103046,103051,103105,103110,103146,103150,103156,103161,103170,103184,103193,103212,103221,103231,103236,103241,103254,103259,103313,103339,103347,103355,103359],{"__ignoreMap":39},[155,101792,101793,101795,101797,101799],{"class":157,"line":158},[155,101794,69860],{"class":171},[155,101796,69864],{"class":69863},[155,101798,69867],{"class":226},[155,101800,69870],{"class":171},[155,101802,101803,101805,101807,101809,101811,101813],{"class":157,"line":46},[155,101804,20959],{"class":171},[155,101806,69198],{"class":69863},[155,101808,69879],{"class":226},[155,101810,317],{"class":171},[155,101812,69884],{"class":732},[155,101814,69870],{"class":171},[155,101816,101817],{"class":157,"line":121},[155,101818,217],{"emptyLinePlaceholder":216},[155,101820,101821,101823,101825],{"class":157,"line":180},[155,101822,20959],{"class":171},[155,101824,69897],{"class":69863},[155,101826,69870],{"class":171},[155,101828,101829,101831,101833,101835,101837,101839],{"class":157,"line":194},[155,101830,70707],{"class":171},[155,101832,69907],{"class":69863},[155,101834,69910],{"class":226},[155,101836,317],{"class":171},[155,101838,69915],{"class":732},[155,101840,69870],{"class":171},[155,101842,101843,101845,101847,101849,101851,101853,101855,101857,101859],{"class":157,"line":200},[155,101844,70707],{"class":171},[155,101846,69907],{"class":69863},[155,101848,34745],{"class":226},[155,101850,317],{"class":171},[155,101852,69954],{"class":732},[155,101854,69934],{"class":226},[155,101856,317],{"class":171},[155,101858,69961],{"class":732},[155,101860,69870],{"class":171},[155,101862,101863,101865,101867,101869,101871],{"class":157,"line":213},[155,101864,70707],{"class":171},[155,101866,69970],{"class":69863},[155,101868,69973],{"class":171},[155,101870,69970],{"class":69863},[155,101872,69870],{"class":171},[155,101874,101875,101877,101879],{"class":157,"line":220},[155,101876,70707],{"class":171},[155,101878,20011],{"class":69863},[155,101880,69870],{"class":171},[155,101882,101883,101885],{"class":157,"line":245},[155,101884,26266],{"class":69863},[155,101886,35397],{"class":171},[155,101888,101889,101891,101893,101895],{"class":157,"line":251},[155,101890,73258],{"class":263},[155,101892,70000],{"class":171},[155,101894,1109],{"class":263},[155,101896,21206],{"class":171},[155,101898,101899,101901,101903,101905],{"class":157,"line":257},[155,101900,73269],{"class":263},[155,101902,70000],{"class":171},[155,101904,1109],{"class":263},[155,101906,21206],{"class":171},[155,101908,101909,101911,101913,101915],{"class":157,"line":270},[155,101910,91159],{"class":263},[155,101912,70000],{"class":171},[155,101914,79068],{"class":263},[155,101916,21206],{"class":171},[155,101918,101919],{"class":157,"line":276},[155,101920,22074],{"class":171},[155,101922,101923],{"class":157,"line":297},[155,101924,217],{"emptyLinePlaceholder":216},[155,101926,101927,101929],{"class":157,"line":302},[155,101928,80686],{"class":226},[155,101930,35397],{"class":171},[155,101932,101933,101935,101937,101939,101941],{"class":157,"line":308},[155,101934,73334],{"class":263},[155,101936,70000],{"class":171},[155,101938,97137],{"class":263},[155,101940,70055],{"class":167},[155,101942,21206],{"class":171},[155,101944,101945,101947,101949,101951,101953,101955],{"class":157,"line":366},[155,101946,73269],{"class":263},[155,101948,70000],{"class":171},[155,101950,20389],{"class":263},[155,101952,70055],{"class":167},[155,101954,70119],{"class":263},[155,101956,21206],{"class":171},[155,101958,101959],{"class":157,"line":379},[155,101960,22074],{"class":171},[155,101962,101963],{"class":157,"line":385},[155,101964,217],{"emptyLinePlaceholder":216},[155,101966,101967,101969],{"class":157,"line":415},[155,101968,97188],{"class":226},[155,101970,35397],{"class":171},[155,101972,101973,101975,101977,101979,101981],{"class":157,"line":452},[155,101974,73258],{"class":263},[155,101976,70000],{"class":171},[155,101978,20638],{"class":263},[155,101980,70055],{"class":167},[155,101982,21206],{"class":171},[155,101984,101985,101987,101989,101991,101993,101995,101997],{"class":157,"line":480},[155,101986,80423],{"class":263},[155,101988,70000],{"class":171},[155,101990,47910],{"class":263},[155,101992,97243],{"class":263},[155,101994,97246],{"class":263},[155,101996,20753],{"class":167},[155,101998,21206],{"class":171},[155,102000,102001,102003,102005,102007],{"class":157,"line":486},[155,102002,73572],{"class":263},[155,102004,70000],{"class":171},[155,102006,70040],{"class":263},[155,102008,21206],{"class":171},[155,102010,102011,102013,102015,102017,102019,102021,102023],{"class":157,"line":499},[155,102012,80540],{"class":263},[155,102014,70000],{"class":171},[155,102016,329],{"class":263},[155,102018,70055],{"class":167},[155,102020,70084],{"class":263},[155,102022,80807],{"class":263},[155,102024,21206],{"class":171},[155,102026,102027],{"class":157,"line":505},[155,102028,22074],{"class":171},[155,102030,102031],{"class":157,"line":528},[155,102032,217],{"emptyLinePlaceholder":216},[155,102034,102035,102037],{"class":157,"line":549},[155,102036,97306],{"class":226},[155,102038,35397],{"class":171},[155,102040,102041,102043,102045,102047],{"class":157,"line":570},[155,102042,80588],{"class":263},[155,102044,70000],{"class":171},[155,102046,80593],{"class":263},[155,102048,21206],{"class":171},[155,102050,102051,102053,102055,102057],{"class":157,"line":575},[155,102052,73447],{"class":263},[155,102054,70000],{"class":171},[155,102056,80381],{"class":263},[155,102058,21206],{"class":171},[155,102060,102061],{"class":157,"line":581},[155,102062,22074],{"class":171},[155,102064,102065],{"class":157,"line":592},[155,102066,217],{"emptyLinePlaceholder":216},[155,102068,102069,102071,102073],{"class":157,"line":610},[155,102070,97188],{"class":226},[155,102072,74178],{"class":69863},[155,102074,35397],{"class":171},[155,102076,102077,102079,102081,102083,102085],{"class":157,"line":622},[155,102078,73334],{"class":263},[155,102080,70000],{"class":171},[155,102082,20672],{"class":263},[155,102084,70055],{"class":167},[155,102086,21206],{"class":171},[155,102088,102089,102091,102093,102095,102097],{"class":157,"line":638},[155,102090,73348],{"class":263},[155,102092,70000],{"class":171},[155,102094,20672],{"class":263},[155,102096,70055],{"class":167},[155,102098,21206],{"class":171},[155,102100,102101,102103,102105,102107,102109],{"class":157,"line":650},[155,102102,80313],{"class":263},[155,102104,70000],{"class":171},[155,102106,350],{"class":263},[155,102108,70055],{"class":167},[155,102110,21206],{"class":171},[155,102112,102113],{"class":157,"line":662},[155,102114,22074],{"class":171},[155,102116,102117],{"class":157,"line":678},[155,102118,217],{"emptyLinePlaceholder":216},[155,102120,102121,102123,102125],{"class":157,"line":694},[155,102122,97188],{"class":226},[155,102124,80867],{"class":226},[155,102126,35397],{"class":171},[155,102128,102129,102131,102133,102135,102137],{"class":157,"line":706},[155,102130,73334],{"class":263},[155,102132,70000],{"class":171},[155,102134,21619],{"class":263},[155,102136,70055],{"class":167},[155,102138,21206],{"class":171},[155,102140,102141],{"class":157,"line":715},[155,102142,22074],{"class":171},[155,102144,102145],{"class":157,"line":720},[155,102146,217],{"emptyLinePlaceholder":216},[155,102148,102149,102151,102153,102156],{"class":157,"line":739},[155,102150,97188],{"class":226},[155,102152,80867],{"class":226},[155,102154,102155],{"class":226}," .tag",[155,102157,35397],{"class":171},[155,102159,102160,102162,102164,102166],{"class":157,"line":745},[155,102161,73572],{"class":263},[155,102163,70000],{"class":171},[155,102165,79432],{"class":263},[155,102167,21206],{"class":171},[155,102169,102170,102172,102174,102176,102178],{"class":157,"line":773},[155,102171,73258],{"class":263},[155,102173,70000],{"class":171},[155,102175,360],{"class":263},[155,102177,70055],{"class":167},[155,102179,21206],{"class":171},[155,102181,102182,102184,102186,102188,102190],{"class":157,"line":779},[155,102183,73485],{"class":263},[155,102185,70000],{"class":171},[155,102187,1231],{"class":263},[155,102189,70055],{"class":167},[155,102191,21206],{"class":171},[155,102193,102194,102196,102198,102200],{"class":157,"line":785},[155,102195,75979],{"class":263},[155,102197,70000],{"class":171},[155,102199,80633],{"class":263},[155,102201,21206],{"class":171},[155,102203,102204],{"class":157,"line":791},[155,102205,22074],{"class":171},[155,102207,102208],{"class":157,"line":796},[155,102209,217],{"emptyLinePlaceholder":216},[155,102211,102212,102214,102216],{"class":157,"line":802},[155,102213,97188],{"class":226},[155,102215,97480],{"class":226},[155,102217,990],{"class":171},[155,102219,102220,102222,102225],{"class":157,"line":808},[155,102221,97188],{"class":226},[155,102223,102224],{"class":226}," .sub-total",[155,102226,35397],{"class":171},[155,102228,102229,102231,102233,102235,102237],{"class":157,"line":819},[155,102230,73485],{"class":263},[155,102232,70000],{"class":171},[155,102234,20709],{"class":263},[155,102236,70055],{"class":167},[155,102238,21206],{"class":171},[155,102240,102241,102243,102245,102247],{"class":157,"line":1832},[155,102242,75979],{"class":263},[155,102244,70000],{"class":171},[155,102246,97503],{"class":263},[155,102248,21206],{"class":171},[155,102250,102251,102253,102255,102257],{"class":157,"line":1838},[155,102252,80400],{"class":263},[155,102254,70000],{"class":171},[155,102256,329],{"class":263},[155,102258,21206],{"class":171},[155,102260,102261],{"class":157,"line":1844},[155,102262,22074],{"class":171},[155,102264,102265],{"class":157,"line":1850},[155,102266,217],{"emptyLinePlaceholder":216},[155,102268,102269,102271,102273],{"class":157,"line":1861},[155,102270,97188],{"class":226},[155,102272,97520],{"class":226},[155,102274,990],{"class":171},[155,102276,102277,102279,102282],{"class":157,"line":1866},[155,102278,97188],{"class":226},[155,102280,102281],{"class":226}," .sub-total::before",[155,102283,990],{"class":171},[155,102285,102286,102289],{"class":157,"line":1871},[155,102287,102288],{"class":226},"    .amount::before",[155,102290,35397],{"class":171},[155,102292,102293,102295,102297,102299],{"class":157,"line":1877},[155,102294,97527],{"class":263},[155,102296,70000],{"class":171},[155,102298,97532],{"class":732},[155,102300,21206],{"class":171},[155,102302,102303,102305,102307,102309,102311],{"class":157,"line":1883},[155,102304,73485],{"class":263},[155,102306,70000],{"class":171},[155,102308,1231],{"class":263},[155,102310,70055],{"class":167},[155,102312,21206],{"class":171},[155,102314,102315],{"class":157,"line":1894},[155,102316,22074],{"class":171},[155,102318,102319],{"class":157,"line":1900},[155,102320,217],{"emptyLinePlaceholder":216},[155,102322,102323,102325,102328],{"class":157,"line":1911},[155,102324,97188],{"class":226},[155,102326,102327],{"class":226}," .spec",[155,102329,35397],{"class":171},[155,102331,102332,102334,102336,102338],{"class":157,"line":1917},[155,102333,80400],{"class":263},[155,102335,70000],{"class":171},[155,102337,360],{"class":263},[155,102339,21206],{"class":171},[155,102341,102342,102344,102346,102349],{"class":157,"line":1927},[155,102343,75979],{"class":263},[155,102345,70000],{"class":171},[155,102347,102348],{"class":263},"#888",[155,102350,21206],{"class":171},[155,102352,102353,102355,102357,102359,102361],{"class":157,"line":1933},[155,102354,73485],{"class":263},[155,102356,70000],{"class":171},[155,102358,20613],{"class":263},[155,102360,70055],{"class":167},[155,102362,21206],{"class":171},[155,102364,102365,102367,102369,102371,102373],{"class":157,"line":1943},[155,102366,80563],{"class":263},[155,102368,70000],{"class":171},[155,102370,3458],{"class":263},[155,102372,70055],{"class":167},[155,102374,21206],{"class":171},[155,102376,102377],{"class":157,"line":1949},[155,102378,22074],{"class":171},[155,102380,102381],{"class":157,"line":1959},[155,102382,217],{"emptyLinePlaceholder":216},[155,102384,102385,102387,102390],{"class":157,"line":1964},[155,102386,97188],{"class":226},[155,102388,102389],{"class":226}," .count",[155,102391,35397],{"class":171},[155,102393,102394,102396,102398,102400],{"class":157,"line":1970},[155,102395,80400],{"class":263},[155,102397,70000],{"class":171},[155,102399,329],{"class":263},[155,102401,21206],{"class":171},[155,102403,102404,102406,102408,102411],{"class":157,"line":1981},[155,102405,75979],{"class":263},[155,102407,70000],{"class":171},[155,102409,102410],{"class":263},"#aaa",[155,102412,21206],{"class":171},[155,102414,102415],{"class":157,"line":1986},[155,102416,22074],{"class":171},[155,102418,102419],{"class":157,"line":1991},[155,102420,217],{"emptyLinePlaceholder":216},[155,102422,102423,102425],{"class":157,"line":1997},[155,102424,91038],{"class":226},[155,102426,35397],{"class":171},[155,102428,102429,102431,102433,102435,102437],{"class":157,"line":2014},[155,102430,73334],{"class":263},[155,102432,70000],{"class":171},[155,102434,97137],{"class":263},[155,102436,70055],{"class":167},[155,102438,21206],{"class":171},[155,102440,102441,102443,102445,102447,102449],{"class":157,"line":2046},[155,102442,73269],{"class":263},[155,102444,70000],{"class":171},[155,102446,1109],{"class":263},[155,102448,70119],{"class":263},[155,102450,21206],{"class":171},[155,102452,102453,102455,102457,102459],{"class":157,"line":2062},[155,102454,73572],{"class":263},[155,102456,70000],{"class":171},[155,102458,70040],{"class":263},[155,102460,21206],{"class":171},[155,102462,102463,102465,102467,102469],{"class":157,"line":2067},[155,102464,73583],{"class":263},[155,102466,70000],{"class":171},[155,102468,70143],{"class":263},[155,102470,21206],{"class":171},[155,102472,102473,102476,102478,102480,102482,102484,102487],{"class":157,"line":2073},[155,102474,102475],{"class":263},"      border-top",[155,102477,70000],{"class":171},[155,102479,329],{"class":263},[155,102481,70055],{"class":167},[155,102483,70084],{"class":263},[155,102485,102486],{"class":263}," #4e4e4e",[155,102488,21206],{"class":171},[155,102490,102491,102493,102495,102497,102499],{"class":157,"line":2079},[155,102492,73258],{"class":263},[155,102494,70000],{"class":171},[155,102496,3458],{"class":263},[155,102498,70055],{"class":167},[155,102500,21206],{"class":171},[155,102502,102503],{"class":157,"line":2089},[155,102504,22074],{"class":171},[155,102506,102507],{"class":157,"line":2095},[155,102508,217],{"emptyLinePlaceholder":216},[155,102510,102511,102513,102516],{"class":157,"line":2106},[155,102512,91038],{"class":226},[155,102514,102515],{"class":226}," .amount",[155,102517,35397],{"class":171},[155,102519,102520,102522,102524,102526,102528],{"class":157,"line":2112},[155,102521,73485],{"class":263},[155,102523,70000],{"class":171},[155,102525,20709],{"class":263},[155,102527,70055],{"class":167},[155,102529,21206],{"class":171},[155,102531,102532,102534,102536,102538],{"class":157,"line":2122},[155,102533,75979],{"class":263},[155,102535,70000],{"class":171},[155,102537,97503],{"class":263},[155,102539,21206],{"class":171},[155,102541,102542,102544,102546,102548],{"class":157,"line":2128},[155,102543,80897],{"class":263},[155,102545,70000],{"class":171},[155,102547,70052],{"class":263},[155,102549,21206],{"class":171},[155,102551,102552,102554,102556,102558,102560],{"class":157,"line":2138},[155,102553,80313],{"class":263},[155,102555,70000],{"class":171},[155,102557,20715],{"class":263},[155,102559,70055],{"class":167},[155,102561,21206],{"class":171},[155,102563,102564],{"class":157,"line":2144},[155,102565,22074],{"class":171},[155,102567,102568,102570,102572],{"class":157,"line":2154},[155,102569,70980],{"class":171},[155,102571,20011],{"class":69863},[155,102573,69870],{"class":171},[155,102575,102576,102578,102580],{"class":157,"line":2160},[155,102577,70348],{"class":171},[155,102579,69897],{"class":69863},[155,102581,69870],{"class":171},[155,102583,102584],{"class":157,"line":2170},[155,102585,217],{"emptyLinePlaceholder":216},[155,102587,102588,102590,102592],{"class":157,"line":2176},[155,102589,20959],{"class":171},[155,102591,70363],{"class":69863},[155,102593,69870],{"class":171},[155,102595,102596,102598,102600,102602,102604,102606],{"class":157,"line":2191},[155,102597,70707],{"class":171},[155,102599,70174],{"class":69863},[155,102601,72049],{"class":226},[155,102603,317],{"class":171},[155,102605,81171],{"class":732},[155,102607,69870],{"class":171},[155,102609,102610,102612,102614],{"class":157,"line":2197},[155,102611,70980],{"class":171},[155,102613,70174],{"class":69863},[155,102615,69870],{"class":171},[155,102617,102618,102620,102622,102624,102626,102628],{"class":157,"line":2208},[155,102619,70707],{"class":171},[155,102621,70174],{"class":69863},[155,102623,72049],{"class":226},[155,102625,317],{"class":171},[155,102627,81143],{"class":732},[155,102629,69870],{"class":171},[155,102631,102632,102634,102636,102639,102641,102643,102645,102648,102650,102652,102654,102656],{"class":157,"line":2214},[155,102633,69904],{"class":171},[155,102635,70174],{"class":69863},[155,102637,102638],{"class":171},">合计：\u003C",[155,102640,155],{"class":69863},[155,102642,72049],{"class":226},[155,102644,317],{"class":171},[155,102646,102647],{"class":732},"\"amount\"",[155,102649,73877],{"class":171},[155,102651,155],{"class":69863},[155,102653,73877],{"class":171},[155,102655,70174],{"class":69863},[155,102657,69870],{"class":171},[155,102659,102660,102662,102664],{"class":157,"line":2225},[155,102661,70980],{"class":171},[155,102663,70174],{"class":69863},[155,102665,69870],{"class":171},[155,102667,102668,102670,102672],{"class":157,"line":2231},[155,102669,70707],{"class":171},[155,102671,70376],{"class":69863},[155,102673,69870],{"class":171},[155,102675,102676,102678,102680,102682],{"class":157,"line":2237},[155,102677,31049],{"class":167},[155,102679,97940],{"class":263},[155,102681,33391],{"class":167},[155,102683,74010],{"class":171},[155,102685,102686],{"class":157,"line":2243},[155,102687,97949],{"class":171},[155,102689,102690,102692,102694],{"class":157,"line":2249},[155,102691,97954],{"class":171},[155,102693,97957],{"class":732},[155,102695,990],{"class":171},[155,102697,102698,102700,102702],{"class":157,"line":2260},[155,102699,97964],{"class":171},[155,102701,97967],{"class":732},[155,102703,990],{"class":171},[155,102705,102706,102708,102711],{"class":157,"line":2266},[155,102707,97974],{"class":171},[155,102709,102710],{"class":263},"289.9",[155,102712,990],{"class":171},[155,102714,102715,102717,102719],{"class":157,"line":2286},[155,102716,97984],{"class":171},[155,102718,97987],{"class":732},[155,102720,990],{"class":171},[155,102722,102723,102726,102728],{"class":157,"line":2292},[155,102724,102725],{"class":171},"        count: ",[155,102727,360],{"class":263},[155,102729,990],{"class":171},[155,102731,102732,102735,102738],{"class":157,"line":2303},[155,102733,102734],{"class":171},"        spec: { color: ",[155,102736,102737],{"class":732},"'白色'",[155,102739,74167],{"class":171},[155,102741,102742],{"class":157,"line":2309},[155,102743,96455],{"class":171},[155,102745,102746],{"class":157,"line":2315},[155,102747,97949],{"class":171},[155,102749,102750,102752,102754],{"class":157,"line":2321},[155,102751,97954],{"class":171},[155,102753,98048],{"class":732},[155,102755,990],{"class":171},[155,102757,102758,102760,102762],{"class":157,"line":2327},[155,102759,97964],{"class":171},[155,102761,98057],{"class":732},[155,102763,990],{"class":171},[155,102765,102766,102768,102771],{"class":157,"line":2333},[155,102767,97974],{"class":171},[155,102769,102770],{"class":263},"109.8",[155,102772,990],{"class":171},[155,102774,102775,102777,102779],{"class":157,"line":2339},[155,102776,97984],{"class":171},[155,102778,98075],{"class":732},[155,102780,990],{"class":171},[155,102782,102783,102785,102787],{"class":157,"line":2345},[155,102784,102725],{"class":171},[155,102786,4444],{"class":263},[155,102788,990],{"class":171},[155,102790,102791,102794,102796,102798,102800],{"class":157,"line":2366},[155,102792,102793],{"class":171},"        spec: { size: ",[155,102795,100466],{"class":732},[155,102797,74027],{"class":171},[155,102799,100471],{"class":732},[155,102801,74167],{"class":171},[155,102803,102804],{"class":157,"line":2372},[155,102805,96455],{"class":171},[155,102807,102808],{"class":157,"line":2388},[155,102809,97949],{"class":171},[155,102811,102812,102814,102816],{"class":157,"line":2394},[155,102813,97954],{"class":171},[155,102815,98092],{"class":732},[155,102817,990],{"class":171},[155,102819,102820,102822,102824],{"class":157,"line":2408},[155,102821,97964],{"class":171},[155,102823,98101],{"class":732},[155,102825,990],{"class":171},[155,102827,102828,102830,102833],{"class":157,"line":2414},[155,102829,97974],{"class":171},[155,102831,102832],{"class":263},"488",[155,102834,990],{"class":171},[155,102836,102837,102839,102841],{"class":157,"line":2429},[155,102838,97984],{"class":171},[155,102840,98119],{"class":732},[155,102842,990],{"class":171},[155,102844,102845,102847,102849],{"class":157,"line":2435},[155,102846,102725],{"class":171},[155,102848,329],{"class":263},[155,102850,990],{"class":171},[155,102852,102853,102855,102858,102861,102864],{"class":157,"line":2444},[155,102854,102734],{"class":171},[155,102856,102857],{"class":732},"'青色'",[155,102859,102860],{"class":171},", sum: ",[155,102862,102863],{"class":732},"'一大四小'",[155,102865,74167],{"class":171},[155,102867,102868],{"class":157,"line":2450},[155,102869,96455],{"class":171},[155,102871,102872],{"class":157,"line":2459},[155,102873,97949],{"class":171},[155,102875,102876,102878,102880],{"class":157,"line":2465},[155,102877,97954],{"class":171},[155,102879,98136],{"class":732},[155,102881,990],{"class":171},[155,102883,102884,102886,102888],{"class":157,"line":2471},[155,102885,97964],{"class":171},[155,102887,98145],{"class":732},[155,102889,990],{"class":171},[155,102891,102892,102894,102897],{"class":157,"line":2480},[155,102893,97974],{"class":171},[155,102895,102896],{"class":263},"139",[155,102898,990],{"class":171},[155,102900,102901,102903,102905],{"class":157,"line":2486},[155,102902,97984],{"class":171},[155,102904,98163],{"class":732},[155,102906,990],{"class":171},[155,102908,102909,102911,102913],{"class":157,"line":2497},[155,102910,102725],{"class":171},[155,102912,329],{"class":263},[155,102914,990],{"class":171},[155,102916,102917,102919,102922,102924,102927],{"class":157,"line":2503},[155,102918,102793],{"class":171},[155,102920,102921],{"class":732},"'小号'",[155,102923,74027],{"class":171},[155,102925,102926],{"class":732},"'紫色'",[155,102928,74033],{"class":171},[155,102930,102931,102934],{"class":157,"line":2522},[155,102932,102933],{"class":171},"        gift: ",[155,102935,102936],{"class":732},"'50g茶叶,清洗球'\n",[155,102938,102939],{"class":157,"line":2528},[155,102940,70961],{"class":171},[155,102942,102943],{"class":157,"line":2539},[155,102944,71672],{"class":171},[155,102946,102947],{"class":157,"line":2545},[155,102948,102949],{"class":161},"    \u002F\u002F  1.根据数据渲染页面\n",[155,102951,102952,102954,102956,102958,102960,102962,102964,102966,102968,102970,102972,102974],{"class":157,"line":2565},[155,102953,70970],{"class":171},[155,102955,72962],{"class":226},[155,102957,230],{"class":171},[155,102959,98464],{"class":732},[155,102961,92812],{"class":171},[155,102963,317],{"class":167},[155,102965,98611],{"class":171},[155,102967,92607],{"class":226},[155,102969,230],{"class":171},[155,102971,98358],{"class":323},[155,102973,98361],{"class":167},[155,102975,35397],{"class":171},[155,102977,102978],{"class":157,"line":2581},[155,102979,102980],{"class":161},"      \u002F\u002F 对象解构\n",[155,102982,102983,102985,102987,102989,102991,102993,102995,102998,103000,103002,103004,103007,103009,103012,103014,103016],{"class":157,"line":2587},[155,102984,76791],{"class":167},[155,102986,98370],{"class":171},[155,102988,98383],{"class":263},[155,102990,7589],{"class":171},[155,102992,98373],{"class":263},[155,102994,7589],{"class":171},[155,102996,102997],{"class":263},"count",[155,102999,7589],{"class":171},[155,103001,98378],{"class":263},[155,103003,7589],{"class":171},[155,103005,103006],{"class":263},"spec",[155,103008,7589],{"class":171},[155,103010,103011],{"class":263},"gift",[155,103013,98386],{"class":171},[155,103015,317],{"class":167},[155,103017,98391],{"class":171},[155,103019,103020],{"class":157,"line":2601},[155,103021,103022],{"class":161},"      \u002F\u002F 规格文字模块处理\n",[155,103024,103025,103027,103030,103032,103034,103036,103038,103040,103042,103044],{"class":157,"line":2607},[155,103026,76791],{"class":167},[155,103028,103029],{"class":263}," text",[155,103031,33391],{"class":167},[155,103033,100501],{"class":171},[155,103035,100504],{"class":226},[155,103037,100507],{"class":171},[155,103039,92786],{"class":226},[155,103041,230],{"class":171},[155,103043,100514],{"class":732},[155,103045,363],{"class":171},[155,103047,103048],{"class":157,"line":2613},[155,103049,103050],{"class":161},"      \u002F\u002F 处理赠品模块\n",[155,103052,103053,103055,103057,103059,103062,103064,103066,103068,103070,103073,103075,103077,103079,103081,103083,103086,103088,103091,103093,103095,103097,103099,103101,103103],{"class":157,"line":2624},[155,103054,76791],{"class":167},[155,103056,92482],{"class":263},[155,103058,33391],{"class":167},[155,103060,103061],{"class":171}," gift ",[155,103063,21031],{"class":167},[155,103065,101675],{"class":171},[155,103067,101678],{"class":226},[155,103069,230],{"class":171},[155,103071,103072],{"class":732},"','",[155,103074,288],{"class":171},[155,103076,92607],{"class":226},[155,103078,230],{"class":171},[155,103080,98358],{"class":323},[155,103082,98361],{"class":167},[155,103084,103085],{"class":732}," `\u003Cspan class=\"tag\">【赠品】${",[155,103087,98358],{"class":171},[155,103089,103090],{"class":732},"}\u003C\u002Fspan>`",[155,103092,288],{"class":171},[155,103094,92786],{"class":226},[155,103096,230],{"class":171},[155,103098,92791],{"class":732},[155,103100,33541],{"class":171},[155,103102,3017],{"class":167},[155,103104,88667],{"class":732},[155,103106,103107],{"class":157,"line":2630},[155,103108,103109],{"class":161},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[155,103111,103112,103114,103117,103119,103122,103124,103126,103128,103131,103133,103135,103137,103140,103142,103144],{"class":157,"line":2636},[155,103113,76791],{"class":167},[155,103115,103116],{"class":263}," subtotal",[155,103118,33391],{"class":167},[155,103120,103121],{"class":171}," ((price ",[155,103123,1563],{"class":167},[155,103125,25617],{"class":263},[155,103127,26381],{"class":167},[155,103129,103130],{"class":171}," count) ",[155,103132,2028],{"class":167},[155,103134,25617],{"class":263},[155,103136,288],{"class":171},[155,103138,103139],{"class":226},"toFixed",[155,103141,230],{"class":171},[155,103143,360],{"class":263},[155,103145,363],{"class":171},[155,103147,103148],{"class":157,"line":2646},[155,103149,217],{"emptyLinePlaceholder":216},[155,103151,103152,103154],{"class":157,"line":2652},[155,103153,92545],{"class":167},[155,103155,88731],{"class":732},[155,103157,103158],{"class":157,"line":2663},[155,103159,103160],{"class":732},"        \u003Cdiv class=\"item\">\n",[155,103162,103163,103166,103168],{"class":157,"line":2669},[155,103164,103165],{"class":732},"          \u003Cimg src=\"${",[155,103167,98383],{"class":171},[155,103169,98415],{"class":732},[155,103171,103172,103175,103177,103180,103182],{"class":157,"line":2679},[155,103173,103174],{"class":732},"          \u003Cp class=\"name\">${",[155,103176,98373],{"class":171},[155,103178,103179],{"class":732},"}${",[155,103181,21215],{"class":171},[155,103183,98425],{"class":732},[155,103185,103186,103189,103191],{"class":157,"line":2684},[155,103187,103188],{"class":732},"          \u003Cp class=\"spec\">${",[155,103190,25051],{"class":171},[155,103192,98425],{"class":732},[155,103194,103195,103198,103200,103202,103204,103206,103208,103210],{"class":157,"line":2690},[155,103196,103197],{"class":732},"          \u003Cp class=\"price\">${",[155,103199,98378],{"class":171},[155,103201,236],{"class":732},[155,103203,103139],{"class":226},[155,103205,230],{"class":732},[155,103207,360],{"class":263},[155,103209,20501],{"class":732},[155,103211,98425],{"class":732},[155,103213,103214,103217,103219],{"class":157,"line":2742},[155,103215,103216],{"class":732},"          \u003Cp class=\"count\">x${",[155,103218,102997],{"class":171},[155,103220,98425],{"class":732},[155,103222,103223,103226,103229],{"class":157,"line":2789},[155,103224,103225],{"class":732},"          \u003Cp class=\"sub-total\">${",[155,103227,103228],{"class":171},"subtotal",[155,103230,98425],{"class":732},[155,103232,103233],{"class":157,"line":2794},[155,103234,103235],{"class":732},"        \u003C\u002Fdiv> \n",[155,103237,103238],{"class":157,"line":2800},[155,103239,103240],{"class":732},"             `\n",[155,103242,103243,103246,103248,103250,103252],{"class":157,"line":2821},[155,103244,103245],{"class":171},"    }).",[155,103247,92786],{"class":226},[155,103249,230],{"class":171},[155,103251,92791],{"class":732},[155,103253,363],{"class":171},[155,103255,103256],{"class":157,"line":2827},[155,103257,103258],{"class":161},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[155,103260,103261,103263,103265,103267,103269,103272,103274,103277,103279,103281,103283,103286,103289,103291,103294,103296,103298,103300,103303,103305,103307,103309,103311],{"class":157,"line":2848},[155,103262,31049],{"class":167},[155,103264,81348],{"class":263},[155,103266,33391],{"class":167},[155,103268,98611],{"class":171},[155,103270,103271],{"class":226},"reduce",[155,103273,22263],{"class":171},[155,103275,103276],{"class":323},"prev",[155,103278,7589],{"class":171},[155,103280,98358],{"class":323},[155,103282,33541],{"class":171},[155,103284,103285],{"class":167},"=>",[155,103287,103288],{"class":171}," prev ",[155,103290,1274],{"class":167},[155,103292,103293],{"class":171}," (item.price ",[155,103295,1563],{"class":167},[155,103297,25617],{"class":263},[155,103299,26381],{"class":167},[155,103301,103302],{"class":171}," item.count) ",[155,103304,2028],{"class":167},[155,103306,25617],{"class":263},[155,103308,7589],{"class":171},[155,103310,1109],{"class":263},[155,103312,363],{"class":171},[155,103314,103315,103317,103319,103321,103324,103326,103328,103331,103333,103335,103337],{"class":157,"line":2854},[155,103316,70970],{"class":171},[155,103318,72962],{"class":226},[155,103320,230],{"class":171},[155,103322,103323],{"class":732},"'.amount'",[155,103325,92812],{"class":171},[155,103327,317],{"class":167},[155,103329,103330],{"class":171}," total.",[155,103332,103139],{"class":226},[155,103334,230],{"class":171},[155,103336,360],{"class":263},[155,103338,363],{"class":171},[155,103340,103341,103343,103345],{"class":157,"line":2860},[155,103342,70980],{"class":171},[155,103344,70376],{"class":69863},[155,103346,69870],{"class":171},[155,103348,103349,103351,103353],{"class":157,"line":2870},[155,103350,70348],{"class":171},[155,103352,70363],{"class":69863},[155,103354,69870],{"class":171},[155,103356,103357],{"class":157,"line":2875},[155,103358,217],{"emptyLinePlaceholder":216},[155,103360,103361,103363,103365],{"class":157,"line":2881},[155,103362,70348],{"class":171},[155,103364,69198],{"class":69863},[155,103366,69870],{"class":171},[20037,103368,103370],{"id":103369},"_411-编程思想","4.11 编程思想",[14,103372,103374],{"id":103373},"_4111-面向过程介绍","4.11.1 面向过程介绍",[24,103376,103377,103380],{},[20234,103378,103379],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[24,103382,103383],{},"调用就可以了",[24,103385,103386],{},[37,103387],{"alt":39,"src":103388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[14,103390,103392],{"id":103391},"_4112-面向对象","4.11.2 面向对象",[24,103394,103395],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[24,103397,103398],{},[37,103399],{"alt":39,"src":103400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[24,103402,103403],{},"面向对象的特性：",[21052,103405,103406,103409,103412],{},[31,103407,103408],{},"封装性",[31,103410,103411],{},"继承性",[31,103413,103414],{},"多态性",[14,103416,103418],{"id":103417},"_4113-两者比较","4.11.3 两者比较",[24,103420,103421],{},[37,103422],{"alt":39,"src":103423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[20037,103425,103427],{"id":103426},"_412-构造函数回顾","4.12 构造函数回顾",[24,103429,103430],{},[37,103431],{"alt":39,"src":103432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[24,103434,103435],{},[37,103436],{"alt":39,"src":103437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[24,103439,103440],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[24,103442,103443],{},[37,103444],{"alt":39,"src":103445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[20037,103447,103449],{"id":103448},"_413-原型","4.13 原型",[14,103451,103453],{"id":103452},"_4131-原型对象的认识","4.13.1 原型对象的认识",[24,103455,103456],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[24,103458,103459],{},[37,103460],{"alt":39,"src":103461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[24,103463,103464],{},[37,103465],{"alt":39,"src":103466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[24,103468,103469],{},"原型是构造函数的属性，它也是一个对象",[24,103471,103472],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[24,103474,103475],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[146,103477,103479],{"className":71630,"code":103478,"language":71632,"meta":39,"style":39},"\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",[152,103480,103481,103489,103494,103502,103507,103512,103517,103522,103527,103531,103535,103539,103544,103549,103553,103558,103563,103568,103573,103578,103582,103590],{"__ignoreMap":39},[155,103482,103483,103485,103487],{"class":157,"line":158},[155,103484,20959],{"class":171},[155,103486,70363],{"class":69863},[155,103488,69870],{"class":171},[155,103490,103491],{"class":157,"line":46},[155,103492,103493],{"class":161},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[155,103495,103496,103498,103500],{"class":157,"line":121},[155,103497,70707],{"class":171},[155,103499,70376],{"class":69863},[155,103501,69870],{"class":171},[155,103503,103504],{"class":157,"line":180},[155,103505,103506],{"class":171},"    function Star(uname, age) {\n",[155,103508,103509],{"class":157,"line":194},[155,103510,103511],{"class":171},"      this.uname = uname,\n",[155,103513,103514],{"class":157,"line":200},[155,103515,103516],{"class":171},"        this.age = age\n",[155,103518,103519],{"class":157,"line":213},[155,103520,103521],{"class":171},"      \u002F\u002F this.sing = function () {\n",[155,103523,103524],{"class":157,"line":220},[155,103525,103526],{"class":171},"      \u002F\u002F   console.log('唱歌')\n",[155,103528,103529],{"class":157,"line":245},[155,103530,217],{"emptyLinePlaceholder":216},[155,103532,103533],{"class":157,"line":251},[155,103534,78600],{"class":171},[155,103536,103537],{"class":157,"line":257},[155,103538,22074],{"class":171},[155,103540,103541],{"class":157,"line":270},[155,103542,103543],{"class":171},"    Star.prototype.sing = function () {\n",[155,103545,103546],{"class":157,"line":276},[155,103547,103548],{"class":171},"      console.log('唱歌')\n",[155,103550,103551],{"class":157,"line":297},[155,103552,22074],{"class":171},[155,103554,103555],{"class":157,"line":302},[155,103556,103557],{"class":171},"    \u002F\u002F console.dir(Star.prototype)\n",[155,103559,103560],{"class":157,"line":308},[155,103561,103562],{"class":171},"    const pink = new Star('pink', 18)\n",[155,103564,103565],{"class":157,"line":366},[155,103566,103567],{"class":171},"    const red = new Star('red', 20)\n",[155,103569,103570],{"class":157,"line":379},[155,103571,103572],{"class":171},"    pink.sing()\n",[155,103574,103575],{"class":157,"line":385},[155,103576,103577],{"class":171},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[155,103579,103580],{"class":157,"line":415},[155,103581,217],{"emptyLinePlaceholder":216},[155,103583,103584,103586,103588],{"class":157,"line":452},[155,103585,70980],{"class":171},[155,103587,70376],{"class":69863},[155,103589,69870],{"class":171},[155,103591,103592,103594,103596],{"class":157,"line":480},[155,103593,70348],{"class":171},[155,103595,70363],{"class":69863},[155,103597,69870],{"class":171},[24,103599,103600],{},[37,103601],{"alt":39,"src":103602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[146,103604,103606],{"className":71630,"code":103605,"language":71632,"meta":39,"style":39},"\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",[152,103607,103608,103616,103624,103629,103634,103639,103644,103648,103653,103658,103663,103667,103672,103676,103680,103685,103689,103697],{"__ignoreMap":39},[155,103609,103610,103612,103614],{"class":157,"line":158},[155,103611,20959],{"class":171},[155,103613,70363],{"class":69863},[155,103615,69870],{"class":171},[155,103617,103618,103620,103622],{"class":157,"line":46},[155,103619,70707],{"class":171},[155,103621,70376],{"class":69863},[155,103623,69870],{"class":171},[155,103625,103626],{"class":157,"line":121},[155,103627,103628],{"class":171},"    let that\n",[155,103630,103631],{"class":157,"line":180},[155,103632,103633],{"class":171},"    function Star(uname) {\n",[155,103635,103636],{"class":157,"line":194},[155,103637,103638],{"class":171},"      this.uname = uname\n",[155,103640,103641],{"class":157,"line":200},[155,103642,103643],{"class":171},"      that = this\n",[155,103645,103646],{"class":157,"line":213},[155,103647,22074],{"class":171},[155,103649,103650],{"class":157,"line":220},[155,103651,103652],{"class":171},"    \u002F\u002F 实例对象是 ldh\n",[155,103654,103655],{"class":157,"line":245},[155,103656,103657],{"class":171},"    const ldh = new Star('刘德华')\n",[155,103659,103660],{"class":157,"line":251},[155,103661,103662],{"class":171},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[155,103664,103665],{"class":157,"line":257},[155,103666,217],{"emptyLinePlaceholder":216},[155,103668,103669],{"class":157,"line":270},[155,103670,103671],{"class":171},"    Star.sing = function () {\n",[155,103673,103674],{"class":157,"line":276},[155,103675,103548],{"class":171},[155,103677,103678],{"class":157,"line":297},[155,103679,22074],{"class":171},[155,103681,103682],{"class":157,"line":302},[155,103683,103684],{"class":171},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[155,103686,103687],{"class":157,"line":308},[155,103688,217],{"emptyLinePlaceholder":216},[155,103690,103691,103693,103695],{"class":157,"line":366},[155,103692,70980],{"class":171},[155,103694,70376],{"class":69863},[155,103696,69870],{"class":171},[155,103698,103699,103701,103703],{"class":157,"line":379},[155,103700,70348],{"class":171},[155,103702,70363],{"class":69863},[155,103704,69870],{"class":171},[24,103706,103707],{},"构造函数的this指向的是实例对象；",[24,103709,103710],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[14,103712,103714],{"id":103713},"_4132-数组扩展方法","4.13.2 数组扩展方法",[24,103716,103717],{},[37,103718],{"alt":39,"src":103719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[146,103721,103723],{"className":71630,"code":103722,"language":71632,"meta":39,"style":39},"\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",[152,103724,103725,103733,103741,103746,103751,103756,103761,103766,103771,103776,103781,103786,103791,103795,103800,103805,103810,103815,103819,103824,103829,103834,103839,103843,103848,103853,103858,103863,103867,103872,103876,103884],{"__ignoreMap":39},[155,103726,103727,103729,103731],{"class":157,"line":158},[155,103728,20959],{"class":171},[155,103730,70363],{"class":69863},[155,103732,69870],{"class":171},[155,103734,103735,103737,103739],{"class":157,"line":46},[155,103736,70707],{"class":171},[155,103738,70376],{"class":69863},[155,103740,69870],{"class":171},[155,103742,103743],{"class":157,"line":121},[155,103744,103745],{"class":171},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[155,103747,103748],{"class":157,"line":180},[155,103749,103750],{"class":171},"    const arr = [1, 2, 3]\n",[155,103752,103753],{"class":157,"line":194},[155,103754,103755],{"class":171},"    \u002F\u002F 自己定义数组的扩展方法\n",[155,103757,103758],{"class":157,"line":200},[155,103759,103760],{"class":171},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[155,103762,103763],{"class":157,"line":213},[155,103764,103765],{"class":171},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[155,103767,103768],{"class":157,"line":220},[155,103769,103770],{"class":171},"    \u002F\u002F ①.最大值\n",[155,103772,103773],{"class":157,"line":245},[155,103774,103775],{"class":171},"    Array.prototype.max = function () {\n",[155,103777,103778],{"class":157,"line":251},[155,103779,103780],{"class":171},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[155,103782,103783],{"class":157,"line":257},[155,103784,103785],{"class":171},"      return Math.max(...this)\n",[155,103787,103788],{"class":157,"line":270},[155,103789,103790],{"class":171},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[155,103792,103793],{"class":157,"line":276},[155,103794,22074],{"class":171},[155,103796,103797],{"class":157,"line":297},[155,103798,103799],{"class":171},"    console.log(arr.max())\n",[155,103801,103802],{"class":157,"line":302},[155,103803,103804],{"class":171},"    \u002F\u002F ②最小值\n",[155,103806,103807],{"class":157,"line":308},[155,103808,103809],{"class":171},"    Array.prototype.min = function () {\n",[155,103811,103812],{"class":157,"line":366},[155,103813,103814],{"class":171},"      return Math.min(...this)\n",[155,103816,103817],{"class":157,"line":379},[155,103818,22074],{"class":171},[155,103820,103821],{"class":157,"line":385},[155,103822,103823],{"class":171},"    console.log(arr.min())\n",[155,103825,103826],{"class":157,"line":415},[155,103827,103828],{"class":171},"    \u002F\u002F③求和\n",[155,103830,103831],{"class":157,"line":452},[155,103832,103833],{"class":171},"    Array.prototype.sum = function () {\n",[155,103835,103836],{"class":157,"line":480},[155,103837,103838],{"class":171},"      return this.reduce((prev, current) => prev + current, 0)\n",[155,103840,103841],{"class":157,"line":486},[155,103842,22074],{"class":171},[155,103844,103845],{"class":157,"line":499},[155,103846,103847],{"class":171},"    console.log(arr.sum())\n",[155,103849,103850],{"class":157,"line":505},[155,103851,103852],{"class":171},"    \u002F\u002F ③排序\n",[155,103854,103855],{"class":157,"line":528},[155,103856,103857],{"class":171},"    Array.prototype.rever = function () {\n",[155,103859,103860],{"class":157,"line":549},[155,103861,103862],{"class":171},"      return this.reverse()\n",[155,103864,103865],{"class":157,"line":570},[155,103866,22074],{"class":171},[155,103868,103869],{"class":157,"line":575},[155,103870,103871],{"class":171},"    console.log(arr.rever())\n",[155,103873,103874],{"class":157,"line":581},[155,103875,217],{"emptyLinePlaceholder":216},[155,103877,103878,103880,103882],{"class":157,"line":592},[155,103879,70980],{"class":171},[155,103881,70376],{"class":69863},[155,103883,69870],{"class":171},[155,103885,103886,103888,103890],{"class":157,"line":610},[155,103887,70348],{"class":171},[155,103889,70363],{"class":69863},[155,103891,69870],{"class":171},[24,103893,103894],{},[37,103895],{"alt":39,"src":103896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[14,103898,103900],{"id":103899},"_4133-constructor-属性","4.13.3 constructor 属性",[24,103902,103903],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[24,103905,103906],{},[37,103907],{"alt":39,"src":103908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[146,103910,103912],{"className":71630,"code":103911,"language":71632,"meta":39,"style":39},"\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",[152,103913,103914,103922,103930,103935,103940,103944,103949,103954,103959,103967],{"__ignoreMap":39},[155,103915,103916,103918,103920],{"class":157,"line":158},[155,103917,20959],{"class":171},[155,103919,70363],{"class":69863},[155,103921,69870],{"class":171},[155,103923,103924,103926,103928],{"class":157,"line":46},[155,103925,70707],{"class":171},[155,103927,70376],{"class":69863},[155,103929,69870],{"class":171},[155,103931,103932],{"class":157,"line":121},[155,103933,103934],{"class":171},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[155,103936,103937],{"class":157,"line":180},[155,103938,103939],{"class":171},"    function Star() {\n",[155,103941,103942],{"class":157,"line":194},[155,103943,22074],{"class":171},[155,103945,103946],{"class":157,"line":200},[155,103947,103948],{"class":171},"    const ldh = new Star()\n",[155,103950,103951],{"class":157,"line":213},[155,103952,103953],{"class":171},"    console.log(Star.prototype)\n",[155,103955,103956],{"class":157,"line":220},[155,103957,103958],{"class":171},"    console.log(Star.prototype.constructor === Star)\n",[155,103960,103961,103963,103965],{"class":157,"line":245},[155,103962,70980],{"class":171},[155,103964,70376],{"class":69863},[155,103966,69870],{"class":171},[155,103968,103969,103971,103973],{"class":157,"line":251},[155,103970,70348],{"class":171},[155,103972,70363],{"class":69863},[155,103974,69870],{"class":171},[24,103976,103977],{},[37,103978],{"alt":39,"src":103979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[24,103981,103982],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[146,103984,103986],{"className":71630,"code":103985,"language":71632,"meta":39,"style":39},"  \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",[152,103987,103988,103996,104000,104004,104008,104013,104018,104023,104027,104032,104037,104042,104047,104052,104057,104061,104065,104070,104075,104080,104084,104089,104094,104098,104102,104106],{"__ignoreMap":39},[155,103989,103990,103992,103994],{"class":157,"line":158},[155,103991,70707],{"class":171},[155,103993,70376],{"class":69863},[155,103995,69870],{"class":171},[155,103997,103998],{"class":157,"line":46},[155,103999,103934],{"class":171},[155,104001,104002],{"class":157,"line":121},[155,104003,103939],{"class":171},[155,104005,104006],{"class":157,"line":180},[155,104007,22074],{"class":171},[155,104009,104010],{"class":157,"line":194},[155,104011,104012],{"class":171},"    \u002F\u002F const ldh = new Star()\n",[155,104014,104015],{"class":157,"line":200},[155,104016,104017],{"class":171},"    \u002F\u002F console.log(Star.prototype)\n",[155,104019,104020],{"class":157,"line":213},[155,104021,104022],{"class":171},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[155,104024,104025],{"class":157,"line":220},[155,104026,217],{"emptyLinePlaceholder":216},[155,104028,104029],{"class":157,"line":245},[155,104030,104031],{"class":171},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[155,104033,104034],{"class":157,"line":251},[155,104035,104036],{"class":171},"    \u002F\u002F Star.prototype.sing = function () {\n",[155,104038,104039],{"class":157,"line":257},[155,104040,104041],{"class":171},"    \u002F\u002F   console.log('唱歌')\n",[155,104043,104044],{"class":157,"line":270},[155,104045,104046],{"class":171},"    \u002F\u002F }\n",[155,104048,104049],{"class":157,"line":276},[155,104050,104051],{"class":171},"    \u002F\u002F Star.prototype.dance = function () {\n",[155,104053,104054],{"class":157,"line":297},[155,104055,104056],{"class":171},"    \u002F\u002F   console.log('跳舞')\n",[155,104058,104059],{"class":157,"line":302},[155,104060,104046],{"class":171},[155,104062,104063],{"class":157,"line":308},[155,104064,103953],{"class":171},[155,104066,104067],{"class":157,"line":366},[155,104068,104069],{"class":171},"    Star.prototype = {\n",[155,104071,104072],{"class":157,"line":379},[155,104073,104074],{"class":171},"      sing: function () {\n",[155,104076,104077],{"class":157,"line":385},[155,104078,104079],{"class":171},"        console.log('唱歌')\n",[155,104081,104082],{"class":157,"line":415},[155,104083,96455],{"class":171},[155,104085,104086],{"class":157,"line":452},[155,104087,104088],{"class":171},"      dance: function () {\n",[155,104090,104091],{"class":157,"line":480},[155,104092,104093],{"class":171},"        console.log('跳舞')\n",[155,104095,104096],{"class":157,"line":486},[155,104097,70961],{"class":171},[155,104099,104100],{"class":157,"line":499},[155,104101,22074],{"class":171},[155,104103,104104],{"class":157,"line":505},[155,104105,103953],{"class":171},[155,104107,104108,104110,104112],{"class":157,"line":528},[155,104109,70980],{"class":171},[155,104111,70376],{"class":69863},[155,104113,69870],{"class":171},[24,104115,104116],{},"进行输出结果后会发现：",[24,104118,104119],{},[37,104120],{"alt":39,"src":104121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[24,104123,104124],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[24,104126,104127],{},"所以，要重新指回创造这个原型对象的构造函数",[146,104129,104131],{"className":89776,"code":104130,"language":89778,"meta":39,"style":39},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[152,104132,104133,104147,104152,104157,104168,104181,104186,104197,104211,104215],{"__ignoreMap":39},[155,104134,104135,104138,104140,104143,104145],{"class":157,"line":158},[155,104136,104137],{"class":263},"Star",[155,104139,236],{"class":171},[155,104141,104142],{"class":263},"prototype",[155,104144,33391],{"class":167},[155,104146,35397],{"class":171},[155,104148,104149],{"class":157,"line":46},[155,104150,104151],{"class":161},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[155,104153,104154],{"class":157,"line":121},[155,104155,104156],{"class":171},"  constructor: Star,\n",[155,104158,104159,104162,104164,104166],{"class":157,"line":180},[155,104160,104161],{"class":226},"  sing",[155,104163,70000],{"class":171},[155,104165,73012],{"class":167},[155,104167,73015],{"class":171},[155,104169,104170,104172,104174,104176,104179],{"class":157,"line":194},[155,104171,92316],{"class":171},[155,104173,76810],{"class":226},[155,104175,230],{"class":171},[155,104177,104178],{"class":732},"'唱歌'",[155,104180,363],{"class":171},[155,104182,104183],{"class":157,"line":200},[155,104184,104185],{"class":171},"   },\n",[155,104187,104188,104191,104193,104195],{"class":157,"line":213},[155,104189,104190],{"class":226},"   dance",[155,104192,70000],{"class":171},[155,104194,73012],{"class":167},[155,104196,73015],{"class":171},[155,104198,104199,104202,104204,104206,104209],{"class":157,"line":220},[155,104200,104201],{"class":171},"     console.",[155,104203,76810],{"class":226},[155,104205,230],{"class":171},[155,104207,104208],{"class":732},"'跳舞'",[155,104210,363],{"class":171},[155,104212,104213],{"class":157,"line":245},[155,104214,24175],{"class":171},[155,104216,104217],{"class":157,"line":251},[155,104218,21475],{"class":171},[24,104220,104221],{},[37,104222],{"alt":39,"src":104223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[24,104225,104226],{},"总结1：",[24,104228,104229],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[24,104231,104232],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[24,104234,104235],{},"constructor指的是他的来源",[24,104237,104238],{},[37,104239],{"alt":39,"src":104240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[24,104242,104243],{},[37,104244],{"alt":39,"src":104245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[24,104247,104248],{},"总结2：",[24,104250,104251],{},[37,104252],{"alt":39,"src":104253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[24,104255,104256],{},[37,104257],{"alt":39,"src":104258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[24,104260,104261],{},[37,104262],{"alt":39,"src":104263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[14,104265,104267],{"id":104266},"_4134-对象原型","4.13.4 对象原型",[24,104269,104270],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[24,104272,104273],{},"对象原型就是__proto__这个属性",[24,104275,104276],{},[37,104277],{"alt":39,"src":104278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[24,104280,104281],{},[37,104282],{"alt":39,"src":104283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[24,104285,104286],{},[37,104287],{"alt":39,"src":104288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[24,104290,104291],{},[37,104292],{"alt":39,"src":104293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[146,104295,104297],{"className":71630,"code":104296,"language":71632,"meta":39,"style":39},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[152,104298,104299,104307,104315,104319,104323,104327,104332,104340],{"__ignoreMap":39},[155,104300,104301,104303,104305],{"class":157,"line":158},[155,104302,20959],{"class":171},[155,104304,70363],{"class":69863},[155,104306,69870],{"class":171},[155,104308,104309,104311,104313],{"class":157,"line":46},[155,104310,70707],{"class":171},[155,104312,70376],{"class":69863},[155,104314,69870],{"class":171},[155,104316,104317],{"class":157,"line":121},[155,104318,103939],{"class":171},[155,104320,104321],{"class":157,"line":180},[155,104322,22074],{"class":171},[155,104324,104325],{"class":157,"line":194},[155,104326,103948],{"class":171},[155,104328,104329],{"class":157,"line":200},[155,104330,104331],{"class":171},"    console.log(ldh)\n",[155,104333,104334,104336,104338],{"class":157,"line":213},[155,104335,70980],{"class":171},[155,104337,70376],{"class":69863},[155,104339,69870],{"class":171},[155,104341,104342,104344,104346],{"class":157,"line":220},[155,104343,70348],{"class":171},[155,104345,70363],{"class":69863},[155,104347,69870],{"class":171},[24,104349,104350],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[24,104352,104353],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[24,104355,104356],{},[37,104357],{"alt":39,"src":104358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[24,104360,104361],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[24,104363,104364],{},"对象原型指向原型对象",[24,104366,104367],{},[37,104368],{"alt":39,"src":104369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[24,104371,104372],{},[37,104373],{"alt":39,"src":104374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[24,104376,104377],{},[37,104378],{"alt":39,"src":104379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[14,104381,104383],{"id":104382},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[24,104385,104386],{},[37,104387],{"alt":39,"src":104388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[28,104390,104391,104394,104397,104400],{},[31,104392,104393],{},"构造函数通过new的形式实例化得到实例对象",[31,104395,104396],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[31,104398,104399],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[31,104401,104402],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[24,104404,104405],{},[37,104406],{"alt":39,"src":104407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[24,104409,104410],{},"题目梳理：",[24,104412,104413],{},[37,104414],{"alt":39,"src":104415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[14,104417,104419],{"id":104418},"_4136-原型继承","4.13.6 原型继承",[24,104421,104422],{},[37,104423],{"alt":39,"src":104424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[24,104426,104427],{},[37,104428],{"alt":39,"src":104429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[24,104431,104432],{},[37,104433],{"alt":39,"src":104434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[24,104436,104437],{},[37,104438],{"alt":39,"src":104439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[24,104441,104442],{},[37,104443],{"alt":39,"src":104444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[24,104446,104447],{},[37,104448],{"alt":39,"src":104449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[24,104451,104452],{},[37,104453],{"alt":39,"src":104454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[24,104456,104457],{},[37,104458],{"alt":39,"src":104459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[24,104461,104462],{},"回顾：构造函数每次new得到对象都是不同的",[14,104464,104466],{"id":104465},"_4137-原型链","4.13.7 原型链",[24,104468,104469],{},[37,104470],{"alt":39,"src":104471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[24,104473,104474],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[24,104476,104477],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[24,104479,104480],{},"大哥是Object",[24,104482,104483],{},[37,104484],{"alt":39,"src":104485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[24,104487,104488],{},[37,104489],{"alt":39,"src":104490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[24,104492,104493],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[24,104495,104496],{},"万物皆对象",[14,104498,104500],{"id":104499},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[24,104502,104503],{},"模态框",[24,104505,104506],{},"以后遇见这个效果直接使用这个就行",[24,104508,104509],{},[37,104510],{"alt":39,"src":104511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[24,104513,104514],{},[37,104515],{"alt":39,"src":104516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[24,104518,104519],{},[37,104520],{"alt":39,"src":104521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[24,104523,104524],{},[37,104525],{"alt":39,"src":104526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[24,104528,104529],{},"补充知识点：",[28,104531,104532],{},[31,104533,104534],{},"append()",[24,104536,104537],{},[37,104538],{"alt":39,"src":104539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[146,104541,104543],{"className":69196,"code":104542,"language":69198,"meta":39,"style":39},"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",[152,104544,104545,104550,104555,104560,104564,104568,104572,104577,104582,104587,104591],{"__ignoreMap":39},[155,104546,104547],{"class":157,"line":158},[155,104548,104549],{"class":171},"append(param1)\n",[155,104551,104552],{"class":157,"line":46},[155,104553,104554],{"class":171},"append(param1, param2)\n",[155,104556,104557],{"class":157,"line":121},[155,104558,104559],{"class":171},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[155,104561,104562],{"class":157,"line":180},[155,104563,217],{"emptyLinePlaceholder":216},[155,104565,104566],{"class":157,"line":194},[155,104567,217],{"emptyLinePlaceholder":216},[155,104569,104570],{"class":157,"line":200},[155,104571,217],{"emptyLinePlaceholder":216},[155,104573,104574],{"class":157,"line":213},[155,104575,104576],{"class":171},"let div = document.createElement(\"div\");\n",[155,104578,104579],{"class":157,"line":220},[155,104580,104581],{"class":171},"let p = document.createElement(\"p\");\n",[155,104583,104584],{"class":157,"line":245},[155,104585,104586],{"class":171},"div.append(p);\n",[155,104588,104589],{"class":157,"line":251},[155,104590,217],{"emptyLinePlaceholder":216},[155,104592,104593,104596,104598],{"class":157,"line":257},[155,104594,104595],{"class":171},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[155,104597,24],{"class":69863},[155,104599,104600],{"class":171},"> ]\n",[28,104602,104603],{"start":46},[31,104604,104605],{},"remove()",[24,104607,104608],{},"自己删自己",[24,104610,104611],{},[37,104612],{"alt":39,"src":104613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[146,104615,104617],{"className":69196,"code":104616,"language":69198,"meta":39,"style":39},"\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",[152,104618,104619,104629,104643,104647,104655,104669,104689,104701,104709,104716,104728,104741,104776,104788,104799,104811,104823,104835,104862,104872,104876,104880,104889,104901,104915,104925,104937,104941,104945,104955,104966,104976,104986,104999,105012,105022,105026,105030,105039,105049,105061,105065,105069,105078,105088,105098,105110,105114,105118,105128,105144,105155,105165,105175,105187,105199,105211,105215,105219,105232,105243,105247,105255,105263,105267,105275,105295,105315,105323,105328,105354,105359,105364,105383,105388,105400,105405,105416,105426,105436,105441,105446,105450,105455,105460,105465,105485,105490,105510,105515,105529,105534,105539,105544,105560,105564,105569,105598,105603,105608,105613,105624,105628,105632,105636,105641,105666,105671,105696,105701,105710,105714,105719,105744,105748,105773,105777,105786,105790,105795,105813,105823,105827,105835,105843,105847],{"__ignoreMap":39},[155,104620,104621,104623,104625,104627],{"class":157,"line":158},[155,104622,69860],{"class":171},[155,104624,69864],{"class":69863},[155,104626,69867],{"class":226},[155,104628,69870],{"class":171},[155,104630,104631,104633,104635,104637,104639,104641],{"class":157,"line":46},[155,104632,20959],{"class":171},[155,104634,69198],{"class":69863},[155,104636,69879],{"class":226},[155,104638,317],{"class":171},[155,104640,69884],{"class":732},[155,104642,69870],{"class":171},[155,104644,104645],{"class":157,"line":121},[155,104646,217],{"emptyLinePlaceholder":216},[155,104648,104649,104651,104653],{"class":157,"line":180},[155,104650,20959],{"class":171},[155,104652,69897],{"class":69863},[155,104654,69870],{"class":171},[155,104656,104657,104659,104661,104663,104665,104667],{"class":157,"line":194},[155,104658,70707],{"class":171},[155,104660,69907],{"class":69863},[155,104662,69910],{"class":226},[155,104664,317],{"class":171},[155,104666,69915],{"class":732},[155,104668,69870],{"class":171},[155,104670,104671,104673,104675,104677,104679,104681,104683,104685,104687],{"class":157,"line":200},[155,104672,70707],{"class":171},[155,104674,69907],{"class":69863},[155,104676,34745],{"class":226},[155,104678,317],{"class":171},[155,104680,69954],{"class":732},[155,104682,69934],{"class":226},[155,104684,317],{"class":171},[155,104686,69961],{"class":732},[155,104688,69870],{"class":171},[155,104690,104691,104693,104695,104697,104699],{"class":157,"line":213},[155,104692,70707],{"class":171},[155,104694,69970],{"class":69863},[155,104696,69973],{"class":171},[155,104698,69970],{"class":69863},[155,104700,69870],{"class":171},[155,104702,104703,104705,104707],{"class":157,"line":220},[155,104704,70707],{"class":171},[155,104706,20011],{"class":69863},[155,104708,69870],{"class":171},[155,104710,104711,104714],{"class":157,"line":245},[155,104712,104713],{"class":226},"    .modal",[155,104715,35397],{"class":171},[155,104717,104718,104720,104722,104724,104726],{"class":157,"line":251},[155,104719,73334],{"class":263},[155,104721,70000],{"class":171},[155,104723,23842],{"class":263},[155,104725,70055],{"class":167},[155,104727,21206],{"class":171},[155,104729,104730,104733,104735,104737,104739],{"class":157,"line":257},[155,104731,104732],{"class":263},"      min-height",[155,104734,70000],{"class":171},[155,104736,20389],{"class":263},[155,104738,70055],{"class":167},[155,104740,21206],{"class":171},[155,104742,104743,104745,104747,104749,104751,104753,104755,104757,104759,104761,104763,104765,104767,104769,104771,104774],{"class":157,"line":270},[155,104744,97313],{"class":263},[155,104746,70000],{"class":171},[155,104748,1109],{"class":263},[155,104750,1151],{"class":263},[155,104752,21925],{"class":263},[155,104754,70055],{"class":167},[155,104756,97330],{"class":263},[155,104758,230],{"class":171},[155,104760,1109],{"class":263},[155,104762,7589],{"class":171},[155,104764,1109],{"class":263},[155,104766,7589],{"class":171},[155,104768,1109],{"class":263},[155,104770,7589],{"class":171},[155,104772,104773],{"class":263},"0.1",[155,104775,22596],{"class":171},[155,104777,104778,104780,104782,104784,104786],{"class":157,"line":276},[155,104779,73697],{"class":263},[155,104781,70000],{"class":171},[155,104783,1264],{"class":263},[155,104785,70055],{"class":167},[155,104787,21206],{"class":171},[155,104789,104790,104792,104794,104797],{"class":157,"line":297},[155,104791,73322],{"class":263},[155,104793,70000],{"class":171},[155,104795,104796],{"class":263},"fixed",[155,104798,21206],{"class":171},[155,104800,104801,104804,104806,104809],{"class":157,"line":302},[155,104802,104803],{"class":263},"      z-index",[155,104805,70000],{"class":171},[155,104807,104808],{"class":263},"999",[155,104810,21206],{"class":171},[155,104812,104813,104815,104817,104819,104821],{"class":157,"line":308},[155,104814,73401],{"class":263},[155,104816,70000],{"class":171},[155,104818,20715],{"class":263},[155,104820,2938],{"class":167},[155,104822,21206],{"class":171},[155,104824,104825,104827,104829,104831,104833],{"class":157,"line":366},[155,104826,73510],{"class":263},[155,104828,70000],{"class":171},[155,104830,20715],{"class":263},[155,104832,2938],{"class":167},[155,104834,21206],{"class":171},[155,104836,104837,104839,104841,104843,104845,104848,104850,104852,104854,104856,104858,104860],{"class":157,"line":379},[155,104838,97354],{"class":263},[155,104840,70000],{"class":171},[155,104842,97359],{"class":263},[155,104844,230],{"class":171},[155,104846,104847],{"class":263},"-50",[155,104849,2938],{"class":167},[155,104851,7589],{"class":171},[155,104853,104847],{"class":263},[155,104855,2938],{"class":167},[155,104857,7589],{"class":171},[155,104859,1109],{"class":263},[155,104861,22596],{"class":171},[155,104863,104864,104866,104868,104870],{"class":157,"line":385},[155,104865,73447],{"class":263},[155,104867,70000],{"class":171},[155,104869,79405],{"class":263},[155,104871,21206],{"class":171},[155,104873,104874],{"class":157,"line":415},[155,104875,22074],{"class":171},[155,104877,104878],{"class":157,"line":452},[155,104879,217],{"emptyLinePlaceholder":216},[155,104881,104882,104884,104887],{"class":157,"line":480},[155,104883,104713],{"class":226},[155,104885,104886],{"class":226}," .header",[155,104888,35397],{"class":171},[155,104890,104891,104893,104895,104897,104899],{"class":157,"line":486},[155,104892,75922],{"class":263},[155,104894,70000],{"class":171},[155,104896,20473],{"class":263},[155,104898,70055],{"class":167},[155,104900,21206],{"class":171},[155,104902,104903,104905,104907,104909,104911,104913],{"class":157,"line":499},[155,104904,73258],{"class":263},[155,104906,70000],{"class":171},[155,104908,1109],{"class":263},[155,104910,21925],{"class":263},[155,104912,70055],{"class":167},[155,104914,21206],{"class":171},[155,104916,104917,104919,104921,104923],{"class":157,"line":505},[155,104918,73322],{"class":263},[155,104920,70000],{"class":171},[155,104922,73327],{"class":263},[155,104924,21206],{"class":171},[155,104926,104927,104929,104931,104933,104935],{"class":157,"line":528},[155,104928,73485],{"class":263},[155,104930,70000],{"class":171},[155,104932,3458],{"class":263},[155,104934,70055],{"class":167},[155,104936,21206],{"class":171},[155,104938,104939],{"class":157,"line":549},[155,104940,22074],{"class":171},[155,104942,104943],{"class":157,"line":570},[155,104944,217],{"emptyLinePlaceholder":216},[155,104946,104947,104949,104951,104953],{"class":157,"line":575},[155,104948,104713],{"class":226},[155,104950,104886],{"class":226},[155,104952,22907],{"class":69863},[155,104954,35397],{"class":171},[155,104956,104957,104960,104962,104964],{"class":157,"line":581},[155,104958,104959],{"class":263},"      font-style",[155,104961,70000],{"class":171},[155,104963,82404],{"class":263},[155,104965,21206],{"class":171},[155,104967,104968,104970,104972,104974],{"class":157,"line":592},[155,104969,75979],{"class":263},[155,104971,70000],{"class":171},[155,104973,80633],{"class":263},[155,104975,21206],{"class":171},[155,104977,104978,104980,104982,104984],{"class":157,"line":610},[155,104979,73322],{"class":263},[155,104981,70000],{"class":171},[155,104983,73394],{"class":263},[155,104985,21206],{"class":171},[155,104987,104988,104991,104993,104995,104997],{"class":157,"line":622},[155,104989,104990],{"class":263},"      right",[155,104992,70000],{"class":171},[155,104994,20638],{"class":263},[155,104996,70055],{"class":167},[155,104998,21206],{"class":171},[155,105000,105001,105003,105005,105008,105010],{"class":157,"line":638},[155,105002,73510],{"class":263},[155,105004,70000],{"class":171},[155,105006,105007],{"class":263},"-2",[155,105009,70055],{"class":167},[155,105011,21206],{"class":171},[155,105013,105014,105016,105018,105020],{"class":157,"line":650},[155,105015,80588],{"class":263},[155,105017,70000],{"class":171},[155,105019,80593],{"class":263},[155,105021,21206],{"class":171},[155,105023,105024],{"class":157,"line":662},[155,105025,22074],{"class":171},[155,105027,105028],{"class":157,"line":678},[155,105029,217],{"emptyLinePlaceholder":216},[155,105031,105032,105034,105037],{"class":157,"line":694},[155,105033,104713],{"class":226},[155,105035,105036],{"class":226}," .body",[155,105038,35397],{"class":171},[155,105040,105041,105043,105045,105047],{"class":157,"line":706},[155,105042,75849],{"class":263},[155,105044,70000],{"class":171},[155,105046,70155],{"class":263},[155,105048,21206],{"class":171},[155,105050,105051,105053,105055,105057,105059],{"class":157,"line":715},[155,105052,73258],{"class":263},[155,105054,70000],{"class":171},[155,105056,565],{"class":263},[155,105058,70055],{"class":167},[155,105060,21206],{"class":171},[155,105062,105063],{"class":157,"line":720},[155,105064,22074],{"class":171},[155,105066,105067],{"class":157,"line":739},[155,105068,217],{"emptyLinePlaceholder":216},[155,105070,105071,105073,105076],{"class":157,"line":745},[155,105072,104713],{"class":226},[155,105074,105075],{"class":226}," .footer",[155,105077,35397],{"class":171},[155,105079,105080,105082,105084,105086],{"class":157,"line":773},[155,105081,73572],{"class":263},[155,105083,70000],{"class":171},[155,105085,70040],{"class":263},[155,105087,21206],{"class":171},[155,105089,105090,105092,105094,105096],{"class":157,"line":779},[155,105091,73583],{"class":263},[155,105093,70000],{"class":171},[155,105095,70143],{"class":263},[155,105097,21206],{"class":171},[155,105099,105100,105102,105104,105106,105108],{"class":157,"line":785},[155,105101,73258],{"class":263},[155,105103,70000],{"class":171},[155,105105,565],{"class":263},[155,105107,70055],{"class":167},[155,105109,21206],{"class":171},[155,105111,105112],{"class":157,"line":791},[155,105113,22074],{"class":171},[155,105115,105116],{"class":157,"line":796},[155,105117,217],{"emptyLinePlaceholder":216},[155,105119,105120,105122,105124,105126],{"class":157,"line":802},[155,105121,104713],{"class":226},[155,105123,105075],{"class":226},[155,105125,21311],{"class":69863},[155,105127,35397],{"class":171},[155,105129,105130,105132,105134,105136,105138,105140,105142],{"class":157,"line":808},[155,105131,73258],{"class":263},[155,105133,70000],{"class":171},[155,105135,4444],{"class":263},[155,105137,70055],{"class":167},[155,105139,21970],{"class":263},[155,105141,70055],{"class":167},[155,105143,21206],{"class":171},[155,105145,105146,105148,105150,105153],{"class":157,"line":819},[155,105147,80284],{"class":263},[155,105149,70000],{"class":171},[155,105151,105152],{"class":263},"#ccc",[155,105154,21206],{"class":171},[155,105156,105157,105159,105161,105163],{"class":157,"line":1832},[155,105158,82533],{"class":263},[155,105160,70000],{"class":171},[155,105162,73300],{"class":263},[155,105164,21206],{"class":171},[155,105166,105167,105169,105171,105173],{"class":157,"line":1838},[155,105168,75979],{"class":263},[155,105170,70000],{"class":171},[155,105172,79405],{"class":263},[155,105174,21206],{"class":171},[155,105176,105177,105179,105181,105183,105185],{"class":157,"line":1844},[155,105178,73697],{"class":263},[155,105180,70000],{"class":171},[155,105182,360],{"class":263},[155,105184,70055],{"class":167},[155,105186,21206],{"class":171},[155,105188,105189,105191,105193,105195,105197],{"class":157,"line":1850},[155,105190,80313],{"class":263},[155,105192,70000],{"class":171},[155,105194,565],{"class":263},[155,105196,70055],{"class":167},[155,105198,21206],{"class":171},[155,105200,105201,105203,105205,105207,105209],{"class":157,"line":1861},[155,105202,73485],{"class":263},[155,105204,70000],{"class":171},[155,105206,20613],{"class":263},[155,105208,70055],{"class":167},[155,105210,21206],{"class":171},[155,105212,105213],{"class":157,"line":1866},[155,105214,22074],{"class":171},[155,105216,105217],{"class":157,"line":1871},[155,105218,217],{"emptyLinePlaceholder":216},[155,105220,105221,105223,105225,105227,105230],{"class":157,"line":1877},[155,105222,104713],{"class":226},[155,105224,105075],{"class":226},[155,105226,21311],{"class":69863},[155,105228,105229],{"class":226},".submit",[155,105231,35397],{"class":171},[155,105233,105234,105236,105238,105241],{"class":157,"line":1883},[155,105235,73447],{"class":263},[155,105237,70000],{"class":171},[155,105239,105240],{"class":263},"#369",[155,105242,21206],{"class":171},[155,105244,105245],{"class":157,"line":1894},[155,105246,22074],{"class":171},[155,105248,105249,105251,105253],{"class":157,"line":1900},[155,105250,70980],{"class":171},[155,105252,20011],{"class":69863},[155,105254,69870],{"class":171},[155,105256,105257,105259,105261],{"class":157,"line":1911},[155,105258,70348],{"class":171},[155,105260,69897],{"class":69863},[155,105262,69870],{"class":171},[155,105264,105265],{"class":157,"line":1917},[155,105266,217],{"emptyLinePlaceholder":216},[155,105268,105269,105271,105273],{"class":157,"line":1927},[155,105270,20959],{"class":171},[155,105272,70363],{"class":69863},[155,105274,69870],{"class":171},[155,105276,105277,105279,105281,105283,105285,105288,105291,105293],{"class":157,"line":1933},[155,105278,70707],{"class":171},[155,105280,72450],{"class":69863},[155,105282,34784],{"class":226},[155,105284,317],{"class":171},[155,105286,105287],{"class":732},"\"delete\"",[155,105289,105290],{"class":171},">删除\u003C\u002F",[155,105292,72450],{"class":69863},[155,105294,69870],{"class":171},[155,105296,105297,105299,105301,105303,105305,105308,105311,105313],{"class":157,"line":1943},[155,105298,70707],{"class":171},[155,105300,72450],{"class":69863},[155,105302,34784],{"class":226},[155,105304,317],{"class":171},[155,105306,105307],{"class":732},"\"login\"",[155,105309,105310],{"class":171},">登录\u003C\u002F",[155,105312,72450],{"class":69863},[155,105314,69870],{"class":171},[155,105316,105317,105319,105321],{"class":157,"line":1949},[155,105318,70707],{"class":171},[155,105320,70376],{"class":69863},[155,105322,69870],{"class":171},[155,105324,105325],{"class":157,"line":1959},[155,105326,105327],{"class":161},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[155,105329,105330,105332,105335,105337,105339,105341,105343,105345,105348,105350,105352],{"class":157,"line":1964},[155,105331,88647],{"class":167},[155,105333,105334],{"class":226}," Modal",[155,105336,230],{"class":171},[155,105338,69970],{"class":323},[155,105340,33391],{"class":167},[155,105342,88493],{"class":732},[155,105344,7589],{"class":171},[155,105346,105347],{"class":323},"message",[155,105349,33391],{"class":167},[155,105351,88493],{"class":732},[155,105353,32269],{"class":171},[155,105355,105356],{"class":157,"line":1970},[155,105357,105358],{"class":161},"      \u002F\u002F 创建Model 模态框盒子\n",[155,105360,105361],{"class":157,"line":1981},[155,105362,105363],{"class":161},"      \u002F\u002F 1.1 创建div标签\n",[155,105365,105366,105368,105371,105373,105375,105377,105379,105381],{"class":157,"line":1986},[155,105367,88614],{"class":263},[155,105369,105370],{"class":171},".modalBox ",[155,105372,317],{"class":167},[155,105374,72959],{"class":171},[155,105376,88714],{"class":226},[155,105378,230],{"class":171},[155,105380,100494],{"class":732},[155,105382,363],{"class":171},[155,105384,105385],{"class":157,"line":1991},[155,105386,105387],{"class":161},"      \u002F\u002F 1.2 给div 添加类名为model\n",[155,105389,105390,105392,105395,105397],{"class":157,"line":1997},[155,105391,88614],{"class":263},[155,105393,105394],{"class":171},".modalBox.className ",[155,105396,317],{"class":167},[155,105398,105399],{"class":732}," 'modal'\n",[155,105401,105402],{"class":157,"line":2014},[155,105403,105404],{"class":161},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[155,105406,105407,105409,105412,105414],{"class":157,"line":2046},[155,105408,88614],{"class":263},[155,105410,105411],{"class":171},".modalBox.innerHTML ",[155,105413,317],{"class":167},[155,105415,88731],{"class":732},[155,105417,105418,105421,105423],{"class":157,"line":2062},[155,105419,105420],{"class":732},"        \u003Cdiv class=\"header\">${",[155,105422,69970],{"class":171},[155,105424,105425],{"class":732},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[155,105427,105428,105431,105433],{"class":157,"line":2067},[155,105429,105430],{"class":732},"        \u003Cdiv class=\"body\">${",[155,105432,105347],{"class":171},[155,105434,105435],{"class":732},"}\u003C\u002Fdiv>\n",[155,105437,105438],{"class":157,"line":2073},[155,105439,105440],{"class":732},"      `\n",[155,105442,105443],{"class":157,"line":2079},[155,105444,105445],{"class":161},"      \u002F\u002F console.log(this.modalBox)\n",[155,105447,105448],{"class":157,"line":2089},[155,105449,22074],{"class":171},[155,105451,105452],{"class":157,"line":2095},[155,105453,105454],{"class":161},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[155,105456,105457],{"class":157,"line":2106},[155,105458,105459],{"class":161},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[155,105461,105462],{"class":157,"line":2112},[155,105463,105464],{"class":161},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[155,105466,105467,105470,105472,105474,105476,105479,105481,105483],{"class":157,"line":2122},[155,105468,105469],{"class":263},"    Modal",[155,105471,236],{"class":171},[155,105473,104142],{"class":263},[155,105475,236],{"class":171},[155,105477,105478],{"class":226},"open",[155,105480,33391],{"class":167},[155,105482,77481],{"class":167},[155,105484,73015],{"class":171},[155,105486,105487],{"class":157,"line":2128},[155,105488,105489],{"class":161},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[155,105491,105492,105494,105497,105499,105501,105503,105505,105508],{"class":157,"line":2138},[155,105493,76791],{"class":167},[155,105495,105496],{"class":263}," box",[155,105498,33391],{"class":167},[155,105500,72959],{"class":171},[155,105502,72962],{"class":226},[155,105504,230],{"class":171},[155,105506,105507],{"class":732},"'.modal'",[155,105509,363],{"class":171},[155,105511,105512],{"class":157,"line":2144},[155,105513,105514],{"class":161},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[155,105516,105517,105520,105522,105525,105527],{"class":157,"line":2154},[155,105518,105519],{"class":171},"      box ",[155,105521,21612],{"class":167},[155,105523,105524],{"class":171}," box.",[155,105526,75569],{"class":226},[155,105528,294],{"class":171},[155,105530,105531],{"class":157,"line":2160},[155,105532,105533],{"class":161},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[155,105535,105536],{"class":157,"line":2170},[155,105537,105538],{"class":161},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[155,105540,105541],{"class":157,"line":2176},[155,105542,105543],{"class":161},"      \u002F\u002F append可以增加对象\n",[155,105545,105546,105549,105552,105554,105557],{"class":157,"line":2191},[155,105547,105548],{"class":171},"      document.body.",[155,105550,105551],{"class":226},"append",[155,105553,230],{"class":171},[155,105555,105556],{"class":263},"this",[155,105558,105559],{"class":171},".modalBox)\n",[155,105561,105562],{"class":157,"line":2197},[155,105563,217],{"emptyLinePlaceholder":216},[155,105565,105566],{"class":157,"line":2208},[155,105567,105568],{"class":161},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[155,105570,105571,105573,105576,105578,105580,105583,105585,105587,105589,105591,105594,105596],{"class":157,"line":2214},[155,105572,88614],{"class":263},[155,105574,105575],{"class":171},".modalBox.",[155,105577,72962],{"class":226},[155,105579,230],{"class":171},[155,105581,105582],{"class":732},"'i'",[155,105584,288],{"class":171},[155,105586,76376],{"class":226},[155,105588,230],{"class":171},[155,105590,76381],{"class":732},[155,105592,105593],{"class":171},", () ",[155,105595,103285],{"class":167},[155,105597,35397],{"class":171},[155,105599,105600],{"class":157,"line":2225},[155,105601,105602],{"class":161},"        \u002F\u002F 这个地方需要用到箭头函数\n",[155,105604,105605],{"class":157,"line":2231},[155,105606,105607],{"class":161},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[155,105609,105610],{"class":157,"line":2237},[155,105611,105612],{"class":161},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[155,105614,105615,105617,105619,105622],{"class":157,"line":2243},[155,105616,83289],{"class":263},[155,105618,236],{"class":171},[155,105620,105621],{"class":226},"close",[155,105623,294],{"class":171},[155,105625,105626],{"class":157,"line":2249},[155,105627,83378],{"class":171},[155,105629,105630],{"class":157,"line":2260},[155,105631,22074],{"class":171},[155,105633,105634],{"class":157,"line":2266},[155,105635,217],{"emptyLinePlaceholder":216},[155,105637,105638],{"class":157,"line":2286},[155,105639,105640],{"class":161},"    \u002F\u002F 测试一下 点击 删除按钮\n",[155,105642,105643,105645,105647,105649,105652,105654,105656,105658,105660,105662,105664],{"class":157,"line":2292},[155,105644,70970],{"class":171},[155,105646,72962],{"class":226},[155,105648,230],{"class":171},[155,105650,105651],{"class":732},"'#delete'",[155,105653,288],{"class":171},[155,105655,76376],{"class":226},[155,105657,230],{"class":171},[155,105659,76381],{"class":732},[155,105661,105593],{"class":171},[155,105663,103285],{"class":167},[155,105665,35397],{"class":171},[155,105667,105668],{"class":157,"line":2303},[155,105669,105670],{"class":161},"      \u002F\u002F 先调用Model构造函数\n",[155,105672,105673,105675,105678,105680,105682,105684,105686,105689,105691,105694],{"class":157,"line":2309},[155,105674,76791],{"class":167},[155,105676,105677],{"class":263}," del",[155,105679,33391],{"class":167},[155,105681,31406],{"class":167},[155,105683,105334],{"class":226},[155,105685,230],{"class":171},[155,105687,105688],{"class":732},"'温馨的提示'",[155,105690,7589],{"class":171},[155,105692,105693],{"class":732},"'您没有删除权限操作'",[155,105695,363],{"class":171},[155,105697,105698],{"class":157,"line":2315},[155,105699,105700],{"class":161},"      \u002F\u002F 实例对象调用open方法\n",[155,105702,105703,105706,105708],{"class":157,"line":2321},[155,105704,105705],{"class":171},"      del.",[155,105707,105478],{"class":226},[155,105709,294],{"class":171},[155,105711,105712],{"class":157,"line":2327},[155,105713,3065],{"class":171},[155,105715,105716],{"class":157,"line":2333},[155,105717,105718],{"class":161},"    \u002F\u002F 测试一下 点击 登录按钮\n",[155,105720,105721,105723,105725,105727,105730,105732,105734,105736,105738,105740,105742],{"class":157,"line":2339},[155,105722,70970],{"class":171},[155,105724,72962],{"class":226},[155,105726,230],{"class":171},[155,105728,105729],{"class":732},"'#login'",[155,105731,288],{"class":171},[155,105733,76376],{"class":226},[155,105735,230],{"class":171},[155,105737,76381],{"class":732},[155,105739,105593],{"class":171},[155,105741,103285],{"class":167},[155,105743,35397],{"class":171},[155,105745,105746],{"class":157,"line":2345},[155,105747,105670],{"class":161},[155,105749,105750,105752,105755,105757,105759,105761,105763,105766,105768,105771],{"class":157,"line":2366},[155,105751,76791],{"class":167},[155,105753,105754],{"class":263}," log",[155,105756,33391],{"class":167},[155,105758,31406],{"class":167},[155,105760,105334],{"class":226},[155,105762,230],{"class":171},[155,105764,105765],{"class":732},"'友情提示'",[155,105767,7589],{"class":171},[155,105769,105770],{"class":732},"'您还没有登录呢'",[155,105772,363],{"class":171},[155,105774,105775],{"class":157,"line":2372},[155,105776,105700],{"class":161},[155,105778,105779,105782,105784],{"class":157,"line":2388},[155,105780,105781],{"class":171},"      log.",[155,105783,105478],{"class":226},[155,105785,294],{"class":171},[155,105787,105788],{"class":157,"line":2394},[155,105789,3065],{"class":171},[155,105791,105792],{"class":157,"line":2408},[155,105793,105794],{"class":161},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[155,105796,105797,105799,105801,105803,105805,105807,105809,105811],{"class":157,"line":2414},[155,105798,105469],{"class":263},[155,105800,236],{"class":171},[155,105802,104142],{"class":263},[155,105804,236],{"class":171},[155,105806,105621],{"class":226},[155,105808,33391],{"class":167},[155,105810,77481],{"class":167},[155,105812,73015],{"class":171},[155,105814,105815,105817,105819,105821],{"class":157,"line":2429},[155,105816,88614],{"class":263},[155,105818,105575],{"class":171},[155,105820,75569],{"class":226},[155,105822,294],{"class":171},[155,105824,105825],{"class":157,"line":2435},[155,105826,22074],{"class":171},[155,105828,105829,105831,105833],{"class":157,"line":2444},[155,105830,70980],{"class":171},[155,105832,70376],{"class":69863},[155,105834,69870],{"class":171},[155,105836,105837,105839,105841],{"class":157,"line":2450},[155,105838,70348],{"class":171},[155,105840,70363],{"class":69863},[155,105842,69870],{"class":171},[155,105844,105845],{"class":157,"line":2459},[155,105846,217],{"emptyLinePlaceholder":216},[155,105848,105849,105851,105853],{"class":157,"line":2465},[155,105850,70348],{"class":171},[155,105852,69198],{"class":69863},[155,105854,69870],{"class":171},[24,105856,105857],{},[37,105858],{"alt":39,"src":105859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[20037,105861,105863],{"id":105862},"_414-深浅拷贝","4.14 深浅拷贝",[14,105865,105867],{"id":105866},"_4141-浅拷贝","4.14.1 浅拷贝",[24,105869,105870],{},[37,105871],{"alt":39,"src":105872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[24,105874,105875],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[24,105877,105878],{},[37,105879],{"alt":39,"src":105880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[24,105882,105883],{},[37,105884],{"alt":39,"src":105885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[24,105887,105888],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[24,105890,105891],{},[37,105892],{"alt":39,"src":105893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[24,105895,31160],{},[24,105897,105898],{},[37,105899],{"alt":39,"src":105900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[14,105902,105904],{"id":105903},"_4142-深拷贝","4.14.2 深拷贝",[24,105906,105907],{},"深拷贝：拷贝的是对象，不是地址",[24,105909,105910],{},"常用的三种方法：",[28,105912,105913,105916,105919],{},[31,105914,105915],{},"通过递归实现深拷贝",[31,105917,105918],{},"lodash\u002FcloneDeep",[31,105920,105921],{},"通过JSON.stringify()实现",[19,105923,105925],{"id":105924},"_41421-递归函数","4.14.2.1 递归函数",[24,105927,105928],{},[37,105929],{"alt":39,"src":105930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[28,105932,105933],{},[31,105934,105935],{},"死递归占溢出：",[146,105937,105939],{"className":71630,"code":105938,"language":71632,"meta":39,"style":39},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[152,105940,105941,105949,105957,105961,105966,105970,105975,105983],{"__ignoreMap":39},[155,105942,105943,105945,105947],{"class":157,"line":158},[155,105944,20959],{"class":171},[155,105946,70363],{"class":69863},[155,105948,69870],{"class":171},[155,105950,105951,105953,105955],{"class":157,"line":46},[155,105952,70707],{"class":171},[155,105954,70376],{"class":69863},[155,105956,69870],{"class":171},[155,105958,105959],{"class":157,"line":121},[155,105960,95706],{"class":171},[155,105962,105963],{"class":157,"line":180},[155,105964,105965],{"class":171},"      fn()\n",[155,105967,105968],{"class":157,"line":194},[155,105969,22074],{"class":171},[155,105971,105972],{"class":157,"line":200},[155,105973,105974],{"class":171},"    fn()\n",[155,105976,105977,105979,105981],{"class":157,"line":213},[155,105978,70980],{"class":171},[155,105980,70376],{"class":69863},[155,105982,69870],{"class":171},[155,105984,105985,105987,105989],{"class":157,"line":220},[155,105986,70348],{"class":171},[155,105988,70363],{"class":69863},[155,105990,69870],{"class":171},[28,105992,105993],{"start":46},[31,105994,105995],{},"递归函数要加判断条件：",[24,105997,105998],{},[37,105999],{"alt":39,"src":106000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[28,106002,106003],{"start":121},[31,106004,106005],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[146,106007,106009],{"className":69196,"code":106008,"language":69198,"meta":39,"style":39},"\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",[152,106010,106011,106021,106035,106039,106047,106061,106081,106093,106101,106105,106113,106125,106133,106141,106166,106178,106182,106189,106197,106205,106209],{"__ignoreMap":39},[155,106012,106013,106015,106017,106019],{"class":157,"line":158},[155,106014,69860],{"class":171},[155,106016,69864],{"class":69863},[155,106018,69867],{"class":226},[155,106020,69870],{"class":171},[155,106022,106023,106025,106027,106029,106031,106033],{"class":157,"line":46},[155,106024,20959],{"class":171},[155,106026,69198],{"class":69863},[155,106028,69879],{"class":226},[155,106030,317],{"class":171},[155,106032,69884],{"class":732},[155,106034,69870],{"class":171},[155,106036,106037],{"class":157,"line":121},[155,106038,217],{"emptyLinePlaceholder":216},[155,106040,106041,106043,106045],{"class":157,"line":180},[155,106042,20959],{"class":171},[155,106044,69897],{"class":69863},[155,106046,69870],{"class":171},[155,106048,106049,106051,106053,106055,106057,106059],{"class":157,"line":194},[155,106050,70707],{"class":171},[155,106052,69907],{"class":69863},[155,106054,69910],{"class":226},[155,106056,317],{"class":171},[155,106058,69915],{"class":732},[155,106060,69870],{"class":171},[155,106062,106063,106065,106067,106069,106071,106073,106075,106077,106079],{"class":157,"line":200},[155,106064,70707],{"class":171},[155,106066,69907],{"class":69863},[155,106068,34745],{"class":226},[155,106070,317],{"class":171},[155,106072,69954],{"class":732},[155,106074,69934],{"class":226},[155,106076,317],{"class":171},[155,106078,69961],{"class":732},[155,106080,69870],{"class":171},[155,106082,106083,106085,106087,106089,106091],{"class":157,"line":213},[155,106084,70707],{"class":171},[155,106086,69970],{"class":69863},[155,106088,69973],{"class":171},[155,106090,69970],{"class":69863},[155,106092,69870],{"class":171},[155,106094,106095,106097,106099],{"class":157,"line":220},[155,106096,70348],{"class":171},[155,106098,69897],{"class":69863},[155,106100,69870],{"class":171},[155,106102,106103],{"class":157,"line":245},[155,106104,217],{"emptyLinePlaceholder":216},[155,106106,106107,106109,106111],{"class":157,"line":251},[155,106108,20959],{"class":171},[155,106110,70363],{"class":69863},[155,106112,69870],{"class":171},[155,106114,106115,106117,106119,106121,106123],{"class":157,"line":257},[155,106116,70707],{"class":171},[155,106118,70174],{"class":69863},[155,106120,73877],{"class":171},[155,106122,70174],{"class":69863},[155,106124,69870],{"class":171},[155,106126,106127,106129,106131],{"class":157,"line":270},[155,106128,70707],{"class":171},[155,106130,70376],{"class":69863},[155,106132,69870],{"class":171},[155,106134,106135,106137,106139],{"class":157,"line":276},[155,106136,88647],{"class":167},[155,106138,92336],{"class":226},[155,106140,30681],{"class":171},[155,106142,106143,106145,106147,106149,106151,106153,106155,106157,106159,106161,106164],{"class":157,"line":297},[155,106144,74334],{"class":171},[155,106146,72962],{"class":226},[155,106148,230],{"class":171},[155,106150,100494],{"class":732},[155,106152,92812],{"class":171},[155,106154,317],{"class":167},[155,106156,31406],{"class":167},[155,106158,92352],{"class":226},[155,106160,37054],{"class":171},[155,106162,106163],{"class":226},"toLocaleString",[155,106165,294],{"class":171},[155,106167,106168,106171,106174,106176],{"class":157,"line":302},[155,106169,106170],{"class":226},"      setTimeout",[155,106172,106173],{"class":171},"(getTime, ",[155,106175,26273],{"class":263},[155,106177,363],{"class":171},[155,106179,106180],{"class":157,"line":308},[155,106181,22074],{"class":171},[155,106183,106184,106187],{"class":157,"line":366},[155,106185,106186],{"class":226},"    getTime",[155,106188,294],{"class":171},[155,106190,106191,106193,106195],{"class":157,"line":379},[155,106192,70980],{"class":171},[155,106194,70376],{"class":69863},[155,106196,69870],{"class":171},[155,106198,106199,106201,106203],{"class":157,"line":385},[155,106200,70348],{"class":171},[155,106202,70363],{"class":69863},[155,106204,69870],{"class":171},[155,106206,106207],{"class":157,"line":415},[155,106208,217],{"emptyLinePlaceholder":216},[155,106210,106211,106213,106215],{"class":157,"line":452},[155,106212,70348],{"class":171},[155,106214,69198],{"class":69863},[155,106216,69870],{"class":171},[24,106218,106219],{},[37,106220],{"alt":39,"src":106221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[28,106223,106224],{"start":180},[31,106225,105915],{},[24,106227,106228],{},[37,106229],{"alt":39,"src":106230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[24,106232,106233],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[24,106235,8802],{},[24,106237,106238],{},"这个是简易版的递归函数深拷贝",[24,106240,106241],{},"一定要注意先数组再对象，因为万物皆可对象",[146,106243,106245],{"className":69196,"code":106244,"language":69198,"meta":39,"style":39},"\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",[152,106246,106247,106257,106271,106275,106283,106297,106317,106329,106337,106341,106349,106357,106367,106376,106384,106400,106404,106412,106416,106420,106432,106437,106456,106472,106477,106482,106487,106502,106507,106512,106521,106529,106546,106554,106560,106568,106573,106578,106587,106591,106595,106599,106610,106619,106629,106643,106653,106661,106669,106677,106681],{"__ignoreMap":39},[155,106248,106249,106251,106253,106255],{"class":157,"line":158},[155,106250,69860],{"class":171},[155,106252,69864],{"class":69863},[155,106254,69867],{"class":226},[155,106256,69870],{"class":171},[155,106258,106259,106261,106263,106265,106267,106269],{"class":157,"line":46},[155,106260,20959],{"class":171},[155,106262,69198],{"class":69863},[155,106264,69879],{"class":226},[155,106266,317],{"class":171},[155,106268,69884],{"class":732},[155,106270,69870],{"class":171},[155,106272,106273],{"class":157,"line":121},[155,106274,217],{"emptyLinePlaceholder":216},[155,106276,106277,106279,106281],{"class":157,"line":180},[155,106278,20959],{"class":171},[155,106280,69897],{"class":69863},[155,106282,69870],{"class":171},[155,106284,106285,106287,106289,106291,106293,106295],{"class":157,"line":194},[155,106286,70707],{"class":171},[155,106288,69907],{"class":69863},[155,106290,69910],{"class":226},[155,106292,317],{"class":171},[155,106294,69915],{"class":732},[155,106296,69870],{"class":171},[155,106298,106299,106301,106303,106305,106307,106309,106311,106313,106315],{"class":157,"line":200},[155,106300,70707],{"class":171},[155,106302,69907],{"class":69863},[155,106304,34745],{"class":226},[155,106306,317],{"class":171},[155,106308,69954],{"class":732},[155,106310,69934],{"class":226},[155,106312,317],{"class":171},[155,106314,69961],{"class":732},[155,106316,69870],{"class":171},[155,106318,106319,106321,106323,106325,106327],{"class":157,"line":213},[155,106320,70707],{"class":171},[155,106322,69970],{"class":69863},[155,106324,69973],{"class":171},[155,106326,69970],{"class":69863},[155,106328,69870],{"class":171},[155,106330,106331,106333,106335],{"class":157,"line":220},[155,106332,70348],{"class":171},[155,106334,69897],{"class":69863},[155,106336,69870],{"class":171},[155,106338,106339],{"class":157,"line":245},[155,106340,217],{"emptyLinePlaceholder":216},[155,106342,106343,106345,106347],{"class":157,"line":251},[155,106344,20959],{"class":171},[155,106346,70363],{"class":69863},[155,106348,69870],{"class":171},[155,106350,106351,106353,106355],{"class":157,"line":257},[155,106352,70707],{"class":171},[155,106354,70376],{"class":69863},[155,106356,69870],{"class":171},[155,106358,106359,106361,106363,106365],{"class":157,"line":270},[155,106360,31049],{"class":167},[155,106362,88534],{"class":263},[155,106364,33391],{"class":167},[155,106366,35397],{"class":171},[155,106368,106369,106371,106374],{"class":157,"line":276},[155,106370,90179],{"class":171},[155,106372,106373],{"class":732},"'pink'",[155,106375,990],{"class":171},[155,106377,106378,106380,106382],{"class":157,"line":297},[155,106379,90189],{"class":171},[155,106381,20709],{"class":263},[155,106383,990],{"class":171},[155,106385,106386,106389,106392,106394,106397],{"class":157,"line":302},[155,106387,106388],{"class":171},"      hobby: [",[155,106390,106391],{"class":732},"'乒乓球'",[155,106393,7589],{"class":171},[155,106395,106396],{"class":732},"'足球'",[155,106398,106399],{"class":171},"],\n",[155,106401,106402],{"class":157,"line":308},[155,106403,96435],{"class":171},[155,106405,106406,106409],{"class":157,"line":366},[155,106407,106408],{"class":171},"        baby: ",[155,106410,106411],{"class":732},"'小pink'\n",[155,106413,106414],{"class":157,"line":379},[155,106415,70961],{"class":171},[155,106417,106418],{"class":157,"line":385},[155,106419,22074],{"class":171},[155,106421,106422,106424,106427,106429],{"class":157,"line":415},[155,106423,31049],{"class":167},[155,106425,106426],{"class":263}," o",[155,106428,33391],{"class":167},[155,106430,106431],{"class":171}," {}\n",[155,106433,106434],{"class":157,"line":452},[155,106435,106436],{"class":161},"    \u002F\u002F 拷贝函数\n",[155,106438,106439,106441,106444,106446,106449,106451,106454],{"class":157,"line":480},[155,106440,88647],{"class":167},[155,106442,106443],{"class":226}," deepCopy",[155,106445,230],{"class":171},[155,106447,106448],{"class":323},"newObj",[155,106450,7589],{"class":171},[155,106452,106453],{"class":323},"oldObj",[155,106455,32269],{"class":171},[155,106457,106458,106460,106462,106464,106467,106469],{"class":157,"line":486},[155,106459,70847],{"class":167},[155,106461,21561],{"class":171},[155,106463,70410],{"class":167},[155,106465,106466],{"class":171}," k ",[155,106468,1131],{"class":167},[155,106470,106471],{"class":171}," oldObj) {\n",[155,106473,106474],{"class":157,"line":499},[155,106475,106476],{"class":161},"        \u002F\u002F 处理数组的问题\n",[155,106478,106479],{"class":157,"line":505},[155,106480,106481],{"class":161},"        \u002F\u002F 判断是否属于数组\n",[155,106483,106484],{"class":157,"line":528},[155,106485,106486],{"class":161},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[155,106488,106489,106491,106494,106497,106500],{"class":157,"line":549},[155,106490,2803],{"class":167},[155,106492,106493],{"class":171}," (oldObj[k] ",[155,106495,106496],{"class":167},"instanceof",[155,106498,106499],{"class":226}," Array",[155,106501,32269],{"class":171},[155,106503,106504],{"class":157,"line":570},[155,106505,106506],{"class":161},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[155,106508,106509],{"class":157,"line":575},[155,106510,106511],{"class":161},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[155,106513,106514,106517,106519],{"class":157,"line":581},[155,106515,106516],{"class":171},"          newObj[k] ",[155,106518,317],{"class":167},[155,106520,70401],{"class":171},[155,106522,106523,106526],{"class":157,"line":592},[155,106524,106525],{"class":226},"          deepCopy",[155,106527,106528],{"class":171},"(newObj[k], oldObj[k])\n",[155,106530,106531,106533,106535,106537,106539,106541,106544],{"class":157,"line":610},[155,106532,98643],{"class":171},[155,106534,765],{"class":167},[155,106536,759],{"class":167},[155,106538,106493],{"class":171},[155,106540,106496],{"class":167},[155,106542,106543],{"class":226}," Object",[155,106545,32269],{"class":171},[155,106547,106548,106550,106552],{"class":157,"line":622},[155,106549,106516],{"class":171},[155,106551,317],{"class":167},[155,106553,106431],{"class":171},[155,106555,106556,106558],{"class":157,"line":638},[155,106557,106525],{"class":226},[155,106559,106528],{"class":171},[155,106561,106562,106564,106566],{"class":157,"line":650},[155,106563,98643],{"class":171},[155,106565,765],{"class":167},[155,106567,35397],{"class":171},[155,106569,106570],{"class":157,"line":662},[155,106571,106572],{"class":161},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[155,106574,106575],{"class":157,"line":678},[155,106576,106577],{"class":161},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[155,106579,106580,106582,106584],{"class":157,"line":694},[155,106581,106516],{"class":171},[155,106583,317],{"class":167},[155,106585,106586],{"class":171}," oldObj[k]\n",[155,106588,106589],{"class":157,"line":706},[155,106590,22414],{"class":171},[155,106592,106593],{"class":157,"line":715},[155,106594,70961],{"class":171},[155,106596,106597],{"class":157,"line":720},[155,106598,22074],{"class":171},[155,106600,106601,106604,106607],{"class":157,"line":739},[155,106602,106603],{"class":226},"    deepCopy",[155,106605,106606],{"class":171},"(o, obj) ",[155,106608,106609],{"class":161},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[155,106611,106612,106614,106616],{"class":157,"line":745},[155,106613,92316],{"class":171},[155,106615,76810],{"class":226},[155,106617,106618],{"class":171},"(o)\n",[155,106620,106621,106624,106626],{"class":157,"line":773},[155,106622,106623],{"class":171},"    o.age ",[155,106625,317],{"class":167},[155,106627,106628],{"class":263}," 20\n",[155,106630,106631,106634,106636,106638,106640],{"class":157,"line":779},[155,106632,106633],{"class":171},"    o.hobby[",[155,106635,1109],{"class":263},[155,106637,24309],{"class":171},[155,106639,317],{"class":167},[155,106641,106642],{"class":732}," '篮球'\n",[155,106644,106645,106648,106650],{"class":157,"line":785},[155,106646,106647],{"class":171},"    o.family ",[155,106649,317],{"class":167},[155,106651,106652],{"class":732}," '老pink'\n",[155,106654,106655,106657,106659],{"class":157,"line":791},[155,106656,92316],{"class":171},[155,106658,76810],{"class":226},[155,106660,88599],{"class":171},[155,106662,106663,106665,106667],{"class":157,"line":796},[155,106664,70980],{"class":171},[155,106666,70376],{"class":69863},[155,106668,69870],{"class":171},[155,106670,106671,106673,106675],{"class":157,"line":802},[155,106672,70348],{"class":171},[155,106674,70363],{"class":69863},[155,106676,69870],{"class":171},[155,106678,106679],{"class":157,"line":808},[155,106680,217],{"emptyLinePlaceholder":216},[155,106682,106683,106685,106687],{"class":157,"line":819},[155,106684,70348],{"class":171},[155,106686,69198],{"class":69863},[155,106688,69870],{"class":171},[24,106690,106691],{},[37,106692],{"alt":39,"src":106693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[19,106695,106697,106698],{"id":106696},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[20234,106699,106700],{},"js库lodash里面cloneDeep内部实现了深拷贝",[24,106702,106703],{},[20318,106704,106705],{"href":106705,"rel":106706},"https:\u002F\u002Fwww.lodashjs.com\u002F",[43656],[24,106708,106709],{},"lodash里边的方法都要加上一个下划线_",[24,106711,106712],{},"_.cloneDeep()",[146,106714,106716],{"className":69196,"code":106715,"language":69198,"meta":39,"style":39},"\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",[152,106717,106718,106728,106742,106746,106754,106768,106788,106800,106808,106812,106820,106825,106844,106852,106862,106870,106878,106890,106894,106900,106904,106908,106924,106932,106941,106949,106957,106965,106969],{"__ignoreMap":39},[155,106719,106720,106722,106724,106726],{"class":157,"line":158},[155,106721,69860],{"class":171},[155,106723,69864],{"class":69863},[155,106725,69867],{"class":226},[155,106727,69870],{"class":171},[155,106729,106730,106732,106734,106736,106738,106740],{"class":157,"line":46},[155,106731,20959],{"class":171},[155,106733,69198],{"class":69863},[155,106735,69879],{"class":226},[155,106737,317],{"class":171},[155,106739,69884],{"class":732},[155,106741,69870],{"class":171},[155,106743,106744],{"class":157,"line":121},[155,106745,217],{"emptyLinePlaceholder":216},[155,106747,106748,106750,106752],{"class":157,"line":180},[155,106749,20959],{"class":171},[155,106751,69897],{"class":69863},[155,106753,69870],{"class":171},[155,106755,106756,106758,106760,106762,106764,106766],{"class":157,"line":194},[155,106757,70707],{"class":171},[155,106759,69907],{"class":69863},[155,106761,69910],{"class":226},[155,106763,317],{"class":171},[155,106765,69915],{"class":732},[155,106767,69870],{"class":171},[155,106769,106770,106772,106774,106776,106778,106780,106782,106784,106786],{"class":157,"line":200},[155,106771,70707],{"class":171},[155,106773,69907],{"class":69863},[155,106775,34745],{"class":226},[155,106777,317],{"class":171},[155,106779,69954],{"class":732},[155,106781,69934],{"class":226},[155,106783,317],{"class":171},[155,106785,69961],{"class":732},[155,106787,69870],{"class":171},[155,106789,106790,106792,106794,106796,106798],{"class":157,"line":213},[155,106791,70707],{"class":171},[155,106793,69970],{"class":69863},[155,106795,69973],{"class":171},[155,106797,69970],{"class":69863},[155,106799,69870],{"class":171},[155,106801,106802,106804,106806],{"class":157,"line":220},[155,106803,70348],{"class":171},[155,106805,69897],{"class":69863},[155,106807,69870],{"class":171},[155,106809,106810],{"class":157,"line":245},[155,106811,217],{"emptyLinePlaceholder":216},[155,106813,106814,106816,106818],{"class":157,"line":251},[155,106815,20959],{"class":171},[155,106817,70363],{"class":69863},[155,106819,69870],{"class":171},[155,106821,106822],{"class":157,"line":257},[155,106823,106824],{"class":161},"  \u003C!-- 先引用这个库 -->\n",[155,106826,106827,106829,106831,106833,106835,106838,106840,106842],{"class":157,"line":270},[155,106828,70707],{"class":171},[155,106830,70376],{"class":69863},[155,106832,73802],{"class":226},[155,106834,317],{"class":171},[155,106836,106837],{"class":732},"\"lodash.min.js\"",[155,106839,73877],{"class":171},[155,106841,70376],{"class":69863},[155,106843,69870],{"class":171},[155,106845,106846,106848,106850],{"class":157,"line":276},[155,106847,70707],{"class":171},[155,106849,70376],{"class":69863},[155,106851,69870],{"class":171},[155,106853,106854,106856,106858,106860],{"class":157,"line":297},[155,106855,31049],{"class":167},[155,106857,88534],{"class":263},[155,106859,33391],{"class":167},[155,106861,35397],{"class":171},[155,106863,106864,106866,106868],{"class":157,"line":302},[155,106865,90179],{"class":171},[155,106867,106373],{"class":732},[155,106869,990],{"class":171},[155,106871,106872,106874,106876],{"class":157,"line":308},[155,106873,90189],{"class":171},[155,106875,20709],{"class":263},[155,106877,990],{"class":171},[155,106879,106880,106882,106884,106886,106888],{"class":157,"line":366},[155,106881,106388],{"class":171},[155,106883,106391],{"class":732},[155,106885,7589],{"class":171},[155,106887,106396],{"class":732},[155,106889,106399],{"class":171},[155,106891,106892],{"class":157,"line":379},[155,106893,96435],{"class":171},[155,106895,106896,106898],{"class":157,"line":385},[155,106897,106408],{"class":171},[155,106899,106411],{"class":732},[155,106901,106902],{"class":157,"line":415},[155,106903,70961],{"class":171},[155,106905,106906],{"class":157,"line":452},[155,106907,22074],{"class":171},[155,106909,106910,106912,106914,106916,106919,106922],{"class":157,"line":480},[155,106911,31049],{"class":167},[155,106913,106426],{"class":263},[155,106915,33391],{"class":167},[155,106917,106918],{"class":171}," _.",[155,106920,106921],{"class":226},"cloneDeep",[155,106923,88599],{"class":171},[155,106925,106926,106928,106930],{"class":157,"line":486},[155,106927,92316],{"class":171},[155,106929,76810],{"class":226},[155,106931,106618],{"class":171},[155,106933,106934,106937,106939],{"class":157,"line":499},[155,106935,106936],{"class":171},"    o.family.baby ",[155,106938,317],{"class":167},[155,106940,106652],{"class":732},[155,106942,106943,106945,106947],{"class":157,"line":505},[155,106944,92316],{"class":171},[155,106946,76810],{"class":226},[155,106948,88599],{"class":171},[155,106950,106951,106953,106955],{"class":157,"line":528},[155,106952,70980],{"class":171},[155,106954,70376],{"class":69863},[155,106956,69870],{"class":171},[155,106958,106959,106961,106963],{"class":157,"line":549},[155,106960,70348],{"class":171},[155,106962,70363],{"class":69863},[155,106964,69870],{"class":171},[155,106966,106967],{"class":157,"line":570},[155,106968,217],{"emptyLinePlaceholder":216},[155,106970,106971,106973,106975],{"class":157,"line":575},[155,106972,70348],{"class":171},[155,106974,69198],{"class":69863},[155,106976,69870],{"class":171},[24,106978,106979],{},[37,106980],{"alt":39,"src":106981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[19,106983,106985],{"id":106984},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[146,106987,106989],{"className":69196,"code":106988,"language":69198,"meta":39,"style":39},"\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",[152,106990,106991,107001,107015,107019,107027,107041,107061,107073,107081,107085,107093,107101,107111,107119,107127,107139,107143,107149,107153,107157,107162,107167,107172,107198,107206,107215,107223,107231,107239,107243],{"__ignoreMap":39},[155,106992,106993,106995,106997,106999],{"class":157,"line":158},[155,106994,69860],{"class":171},[155,106996,69864],{"class":69863},[155,106998,69867],{"class":226},[155,107000,69870],{"class":171},[155,107002,107003,107005,107007,107009,107011,107013],{"class":157,"line":46},[155,107004,20959],{"class":171},[155,107006,69198],{"class":69863},[155,107008,69879],{"class":226},[155,107010,317],{"class":171},[155,107012,69884],{"class":732},[155,107014,69870],{"class":171},[155,107016,107017],{"class":157,"line":121},[155,107018,217],{"emptyLinePlaceholder":216},[155,107020,107021,107023,107025],{"class":157,"line":180},[155,107022,20959],{"class":171},[155,107024,69897],{"class":69863},[155,107026,69870],{"class":171},[155,107028,107029,107031,107033,107035,107037,107039],{"class":157,"line":194},[155,107030,70707],{"class":171},[155,107032,69907],{"class":69863},[155,107034,69910],{"class":226},[155,107036,317],{"class":171},[155,107038,69915],{"class":732},[155,107040,69870],{"class":171},[155,107042,107043,107045,107047,107049,107051,107053,107055,107057,107059],{"class":157,"line":200},[155,107044,70707],{"class":171},[155,107046,69907],{"class":69863},[155,107048,34745],{"class":226},[155,107050,317],{"class":171},[155,107052,69954],{"class":732},[155,107054,69934],{"class":226},[155,107056,317],{"class":171},[155,107058,69961],{"class":732},[155,107060,69870],{"class":171},[155,107062,107063,107065,107067,107069,107071],{"class":157,"line":213},[155,107064,70707],{"class":171},[155,107066,69970],{"class":69863},[155,107068,69973],{"class":171},[155,107070,69970],{"class":69863},[155,107072,69870],{"class":171},[155,107074,107075,107077,107079],{"class":157,"line":220},[155,107076,70348],{"class":171},[155,107078,69897],{"class":69863},[155,107080,69870],{"class":171},[155,107082,107083],{"class":157,"line":245},[155,107084,217],{"emptyLinePlaceholder":216},[155,107086,107087,107089,107091],{"class":157,"line":251},[155,107088,20959],{"class":171},[155,107090,70363],{"class":69863},[155,107092,69870],{"class":171},[155,107094,107095,107097,107099],{"class":157,"line":257},[155,107096,70707],{"class":171},[155,107098,70376],{"class":69863},[155,107100,69870],{"class":171},[155,107102,107103,107105,107107,107109],{"class":157,"line":270},[155,107104,31049],{"class":167},[155,107106,88534],{"class":263},[155,107108,33391],{"class":167},[155,107110,35397],{"class":171},[155,107112,107113,107115,107117],{"class":157,"line":276},[155,107114,90179],{"class":171},[155,107116,106373],{"class":732},[155,107118,990],{"class":171},[155,107120,107121,107123,107125],{"class":157,"line":297},[155,107122,90189],{"class":171},[155,107124,20709],{"class":263},[155,107126,990],{"class":171},[155,107128,107129,107131,107133,107135,107137],{"class":157,"line":302},[155,107130,106388],{"class":171},[155,107132,106391],{"class":732},[155,107134,7589],{"class":171},[155,107136,106396],{"class":732},[155,107138,106399],{"class":171},[155,107140,107141],{"class":157,"line":308},[155,107142,96435],{"class":171},[155,107144,107145,107147],{"class":157,"line":366},[155,107146,106408],{"class":171},[155,107148,106411],{"class":732},[155,107150,107151],{"class":157,"line":379},[155,107152,70961],{"class":171},[155,107154,107155],{"class":157,"line":385},[155,107156,22074],{"class":171},[155,107158,107159],{"class":157,"line":415},[155,107160,107161],{"class":161},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[155,107163,107164],{"class":157,"line":452},[155,107165,107166],{"class":161},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[155,107168,107169],{"class":157,"line":480},[155,107170,107171],{"class":161},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[155,107173,107174,107176,107178,107180,107183,107185,107188,107190,107192,107194,107196],{"class":157,"line":486},[155,107175,31049],{"class":167},[155,107177,106426],{"class":263},[155,107179,33391],{"class":167},[155,107181,107182],{"class":263}," JSON",[155,107184,236],{"class":171},[155,107186,107187],{"class":226},"parse",[155,107189,230],{"class":171},[155,107191,90227],{"class":263},[155,107193,236],{"class":171},[155,107195,90232],{"class":226},[155,107197,90235],{"class":171},[155,107199,107200,107202,107204],{"class":157,"line":499},[155,107201,92316],{"class":171},[155,107203,76810],{"class":226},[155,107205,106618],{"class":171},[155,107207,107208,107210,107212],{"class":157,"line":505},[155,107209,106936],{"class":171},[155,107211,317],{"class":167},[155,107213,107214],{"class":732}," '123'\n",[155,107216,107217,107219,107221],{"class":157,"line":528},[155,107218,92316],{"class":171},[155,107220,76810],{"class":226},[155,107222,88599],{"class":171},[155,107224,107225,107227,107229],{"class":157,"line":549},[155,107226,70980],{"class":171},[155,107228,70376],{"class":69863},[155,107230,69870],{"class":171},[155,107232,107233,107235,107237],{"class":157,"line":570},[155,107234,70348],{"class":171},[155,107236,70363],{"class":69863},[155,107238,69870],{"class":171},[155,107240,107241],{"class":157,"line":575},[155,107242,217],{"emptyLinePlaceholder":216},[155,107244,107245,107247,107249],{"class":157,"line":581},[155,107246,70348],{"class":171},[155,107248,69198],{"class":69863},[155,107250,69870],{"class":171},[24,107252,107253],{},[37,107254],{"alt":39,"src":107255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[20037,107257,107259],{"id":107258},"_415-异常处理","4.15 异常处理",[28,107261,107262],{},[31,107263,107264],{},"throw抛异常",[24,107266,107267],{},[37,107268],{"alt":39,"src":107269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[28,107271,107272],{"start":46},[31,107273,107274],{},"try\u002Fcatch 捕获错误信息",[24,107276,107277],{},[37,107278],{"alt":39,"src":107279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[146,107281,107283],{"className":69196,"code":107282,"language":69198,"meta":39,"style":39},"\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",[152,107284,107285,107295,107309,107313,107321,107335,107355,107367,107375,107379,107387,107399,107407,107416,107423,107428,107447,107456,107467,107472,107482,107487,107492,107497,107514,107518,107523,107530,107542,107546,107558,107562,107566,107571,107576,107583,107591,107599,107603],{"__ignoreMap":39},[155,107286,107287,107289,107291,107293],{"class":157,"line":158},[155,107288,69860],{"class":171},[155,107290,69864],{"class":69863},[155,107292,69867],{"class":226},[155,107294,69870],{"class":171},[155,107296,107297,107299,107301,107303,107305,107307],{"class":157,"line":46},[155,107298,20959],{"class":171},[155,107300,69198],{"class":69863},[155,107302,69879],{"class":226},[155,107304,317],{"class":171},[155,107306,69884],{"class":732},[155,107308,69870],{"class":171},[155,107310,107311],{"class":157,"line":121},[155,107312,217],{"emptyLinePlaceholder":216},[155,107314,107315,107317,107319],{"class":157,"line":180},[155,107316,20959],{"class":171},[155,107318,69897],{"class":69863},[155,107320,69870],{"class":171},[155,107322,107323,107325,107327,107329,107331,107333],{"class":157,"line":194},[155,107324,70707],{"class":171},[155,107326,69907],{"class":69863},[155,107328,69910],{"class":226},[155,107330,317],{"class":171},[155,107332,69915],{"class":732},[155,107334,69870],{"class":171},[155,107336,107337,107339,107341,107343,107345,107347,107349,107351,107353],{"class":157,"line":200},[155,107338,70707],{"class":171},[155,107340,69907],{"class":69863},[155,107342,34745],{"class":226},[155,107344,317],{"class":171},[155,107346,69954],{"class":732},[155,107348,69934],{"class":226},[155,107350,317],{"class":171},[155,107352,69961],{"class":732},[155,107354,69870],{"class":171},[155,107356,107357,107359,107361,107363,107365],{"class":157,"line":213},[155,107358,70707],{"class":171},[155,107360,69970],{"class":69863},[155,107362,69973],{"class":171},[155,107364,69970],{"class":69863},[155,107366,69870],{"class":171},[155,107368,107369,107371,107373],{"class":157,"line":220},[155,107370,70348],{"class":171},[155,107372,69897],{"class":69863},[155,107374,69870],{"class":171},[155,107376,107377],{"class":157,"line":245},[155,107378,217],{"emptyLinePlaceholder":216},[155,107380,107381,107383,107385],{"class":157,"line":251},[155,107382,20959],{"class":171},[155,107384,70363],{"class":69863},[155,107386,69870],{"class":171},[155,107388,107389,107391,107393,107395,107397],{"class":157,"line":257},[155,107390,70707],{"class":171},[155,107392,24],{"class":69863},[155,107394,72057],{"class":171},[155,107396,24],{"class":69863},[155,107398,69870],{"class":171},[155,107400,107401,107403,107405],{"class":157,"line":270},[155,107402,70707],{"class":171},[155,107404,70376],{"class":69863},[155,107406,69870],{"class":171},[155,107408,107409,107411,107414],{"class":157,"line":276},[155,107410,88647],{"class":167},[155,107412,107413],{"class":226}," fn",[155,107415,30681],{"class":171},[155,107417,107418,107421],{"class":157,"line":297},[155,107419,107420],{"class":167},"      try",[155,107422,35397],{"class":171},[155,107424,107425],{"class":157,"line":302},[155,107426,107427],{"class":161},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[155,107429,107430,107432,107434,107436,107438,107440,107442,107445],{"class":157,"line":308},[155,107431,79833],{"class":167},[155,107433,26688],{"class":263},[155,107435,33391],{"class":167},[155,107437,72959],{"class":171},[155,107439,72962],{"class":226},[155,107441,230],{"class":171},[155,107443,107444],{"class":732},"'.p'",[155,107446,363],{"class":171},[155,107448,107449,107452,107454],{"class":157,"line":366},[155,107450,107451],{"class":171},"        p.style.color ",[155,107453,317],{"class":167},[155,107455,85614],{"class":732},[155,107457,107458,107461,107464],{"class":157,"line":379},[155,107459,107460],{"class":171},"      } ",[155,107462,107463],{"class":167},"catch",[155,107465,107466],{"class":171}," (err) {\n",[155,107468,107469],{"class":157,"line":385},[155,107470,107471],{"class":161},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[155,107473,107474,107477,107479],{"class":157,"line":415},[155,107475,107476],{"class":171},"        console.",[155,107478,76810],{"class":226},[155,107480,107481],{"class":171},"(err.message)\n",[155,107483,107484],{"class":157,"line":452},[155,107485,107486],{"class":161},"        \u002F\u002F 想要中断程序，需要加return\n",[155,107488,107489],{"class":157,"line":480},[155,107490,107491],{"class":161},"        \u002F\u002F return\n",[155,107493,107494],{"class":157,"line":486},[155,107495,107496],{"class":161},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[155,107498,107499,107502,107504,107507,107509,107512],{"class":157,"line":499},[155,107500,107501],{"class":167},"        throw",[155,107503,31406],{"class":167},[155,107505,107506],{"class":226}," Error",[155,107508,230],{"class":171},[155,107510,107511],{"class":732},"'你看看，选择器错误了吧'",[155,107513,363],{"class":171},[155,107515,107516],{"class":157,"line":505},[155,107517,70961],{"class":171},[155,107519,107520],{"class":157,"line":528},[155,107521,107522],{"class":161},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[155,107524,107525,107528],{"class":157,"line":549},[155,107526,107527],{"class":167},"      finally",[155,107529,35397],{"class":171},[155,107531,107532,107535,107537,107540],{"class":157,"line":570},[155,107533,107534],{"class":226},"        alert",[155,107536,230],{"class":171},[155,107538,107539],{"class":732},"'弹出对话框'",[155,107541,363],{"class":171},[155,107543,107544],{"class":157,"line":575},[155,107545,70961],{"class":171},[155,107547,107548,107550,107552,107554,107556],{"class":157,"line":581},[155,107549,76807],{"class":171},[155,107551,76810],{"class":226},[155,107553,230],{"class":171},[155,107555,4416],{"class":263},[155,107557,363],{"class":171},[155,107559,107560],{"class":157,"line":592},[155,107561,217],{"emptyLinePlaceholder":216},[155,107563,107564],{"class":157,"line":610},[155,107565,22074],{"class":171},[155,107567,107568],{"class":157,"line":622},[155,107569,107570],{"class":161},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[155,107572,107573],{"class":157,"line":638},[155,107574,107575],{"class":161},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[155,107577,107578,107581],{"class":157,"line":650},[155,107579,107580],{"class":226},"    fn",[155,107582,294],{"class":171},[155,107584,107585,107587,107589],{"class":157,"line":662},[155,107586,70980],{"class":171},[155,107588,70376],{"class":69863},[155,107590,69870],{"class":171},[155,107592,107593,107595,107597],{"class":157,"line":678},[155,107594,70348],{"class":171},[155,107596,70363],{"class":69863},[155,107598,69870],{"class":171},[155,107600,107601],{"class":157,"line":694},[155,107602,217],{"emptyLinePlaceholder":216},[155,107604,107605,107607,107609],{"class":157,"line":706},[155,107606,70348],{"class":171},[155,107608,69198],{"class":69863},[155,107610,69870],{"class":171},[24,107612,107613],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[28,107615,107616],{"start":121},[31,107617,107618],{},"debugger",[24,107620,107621],{},[37,107622],{"alt":39,"src":107623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[24,107625,107626],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[20037,107628,107630],{"id":107629},"_416-处理this","4.16 处理this",[14,107632,107634],{"id":107633},"_4161-this的指向","4.16.1 this的指向",[28,107636,107637],{},[31,107638,107639],{},"普通函数的this",[24,107641,107642],{},[37,107643],{"alt":39,"src":107644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[28,107646,107647],{"start":46},[31,107648,107649],{},"箭头函数的this",[24,107651,107652],{},[37,107653],{"alt":39,"src":107654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[24,107656,107657],{},[37,107658],{"alt":39,"src":107659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[24,107661,107662],{},[37,107663],{"alt":39,"src":107664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[14,107666,107668],{"id":107667},"_4162-this的改变","4.16.2 this的改变",[24,107670,107671],{},"call() apply() bind()",[28,107673,107674],{},[31,107675,107676],{},"call()",[24,107678,107679],{},[37,107680],{"alt":39,"src":107681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[24,107683,107684],{},"两个作用：①调用函数；②改变this指向",[146,107686,107688],{"className":71630,"code":107687,"language":71632,"meta":39,"style":39},"\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",[152,107689,107690,107698,107706,107710,107715,107719,107724,107729,107734,107738,107743,107751],{"__ignoreMap":39},[155,107691,107692,107694,107696],{"class":157,"line":158},[155,107693,20959],{"class":171},[155,107695,70363],{"class":69863},[155,107697,69870],{"class":171},[155,107699,107700,107702,107704],{"class":157,"line":46},[155,107701,70707],{"class":171},[155,107703,70376],{"class":69863},[155,107705,69870],{"class":171},[155,107707,107708],{"class":157,"line":121},[155,107709,90086],{"class":171},[155,107711,107712],{"class":157,"line":180},[155,107713,107714],{"class":171},"      uname: 'pink'\n",[155,107716,107717],{"class":157,"line":194},[155,107718,22074],{"class":171},[155,107720,107721],{"class":157,"line":200},[155,107722,107723],{"class":171},"    function fn(x, y) {\n",[155,107725,107726],{"class":157,"line":213},[155,107727,107728],{"class":171},"      console.log(this)  \u002F\u002Fwindow\n",[155,107730,107731],{"class":157,"line":220},[155,107732,107733],{"class":171},"      console.log(x + y)\n",[155,107735,107736],{"class":157,"line":245},[155,107737,22074],{"class":171},[155,107739,107740],{"class":157,"line":251},[155,107741,107742],{"class":171},"    fn.call(obj, 1, 2)\n",[155,107744,107745,107747,107749],{"class":157,"line":257},[155,107746,70980],{"class":171},[155,107748,70376],{"class":69863},[155,107750,69870],{"class":171},[155,107752,107753,107755,107757],{"class":157,"line":270},[155,107754,70348],{"class":171},[155,107756,70363],{"class":69863},[155,107758,69870],{"class":171},[24,107760,107761],{},[37,107762],{"alt":39,"src":107763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[28,107765,107766],{"start":46},[31,107767,107768],{},"apply()",[24,107770,107771],{},[37,107772],{"alt":39,"src":107773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[24,107775,107684],{},[24,107777,107778],{},"call传递的是普通参数，而apply必须传递的是数组",[146,107780,107782],{"className":69196,"code":107781,"language":69198,"meta":39,"style":39},"\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",[152,107783,107784,107794,107808,107812,107820,107834,107854,107866,107874,107878,107886,107894,107904,107911,107915,107920,107936,107948,107962,107966,107971,107990,107995,107999,108004,108009,108017,108022,108044,108049,108065,108081,108093,108097,108102,108121,108129,108137,108141],{"__ignoreMap":39},[155,107785,107786,107788,107790,107792],{"class":157,"line":158},[155,107787,69860],{"class":171},[155,107789,69864],{"class":69863},[155,107791,69867],{"class":226},[155,107793,69870],{"class":171},[155,107795,107796,107798,107800,107802,107804,107806],{"class":157,"line":46},[155,107797,20959],{"class":171},[155,107799,69198],{"class":69863},[155,107801,69879],{"class":226},[155,107803,317],{"class":171},[155,107805,69884],{"class":732},[155,107807,69870],{"class":171},[155,107809,107810],{"class":157,"line":121},[155,107811,217],{"emptyLinePlaceholder":216},[155,107813,107814,107816,107818],{"class":157,"line":180},[155,107815,20959],{"class":171},[155,107817,69897],{"class":69863},[155,107819,69870],{"class":171},[155,107821,107822,107824,107826,107828,107830,107832],{"class":157,"line":194},[155,107823,70707],{"class":171},[155,107825,69907],{"class":69863},[155,107827,69910],{"class":226},[155,107829,317],{"class":171},[155,107831,69915],{"class":732},[155,107833,69870],{"class":171},[155,107835,107836,107838,107840,107842,107844,107846,107848,107850,107852],{"class":157,"line":200},[155,107837,70707],{"class":171},[155,107839,69907],{"class":69863},[155,107841,34745],{"class":226},[155,107843,317],{"class":171},[155,107845,69954],{"class":732},[155,107847,69934],{"class":226},[155,107849,317],{"class":171},[155,107851,69961],{"class":732},[155,107853,69870],{"class":171},[155,107855,107856,107858,107860,107862,107864],{"class":157,"line":213},[155,107857,70707],{"class":171},[155,107859,69970],{"class":69863},[155,107861,69973],{"class":171},[155,107863,69970],{"class":69863},[155,107865,69870],{"class":171},[155,107867,107868,107870,107872],{"class":157,"line":220},[155,107869,70348],{"class":171},[155,107871,69897],{"class":69863},[155,107873,69870],{"class":171},[155,107875,107876],{"class":157,"line":245},[155,107877,217],{"emptyLinePlaceholder":216},[155,107879,107880,107882,107884],{"class":157,"line":251},[155,107881,20959],{"class":171},[155,107883,70363],{"class":69863},[155,107885,69870],{"class":171},[155,107887,107888,107890,107892],{"class":157,"line":257},[155,107889,70707],{"class":171},[155,107891,70376],{"class":69863},[155,107893,69870],{"class":171},[155,107895,107896,107898,107900,107902],{"class":157,"line":270},[155,107897,31049],{"class":167},[155,107899,88534],{"class":263},[155,107901,33391],{"class":167},[155,107903,35397],{"class":171},[155,107905,107906,107908],{"class":157,"line":276},[155,107907,90189],{"class":171},[155,107909,107910],{"class":263},"18\n",[155,107912,107913],{"class":157,"line":297},[155,107914,22074],{"class":171},[155,107916,107917],{"class":157,"line":302},[155,107918,107919],{"class":161},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[155,107921,107922,107924,107926,107928,107930,107932,107934],{"class":157,"line":308},[155,107923,88647],{"class":167},[155,107925,107413],{"class":226},[155,107927,230],{"class":171},[155,107929,20874],{"class":323},[155,107931,7589],{"class":171},[155,107933,20899],{"class":323},[155,107935,32269],{"class":171},[155,107937,107938,107940,107942,107944,107946],{"class":157,"line":366},[155,107939,76807],{"class":171},[155,107941,76810],{"class":226},[155,107943,230],{"class":171},[155,107945,105556],{"class":263},[155,107947,363],{"class":171},[155,107949,107950,107952,107954,107957,107959],{"class":157,"line":379},[155,107951,76807],{"class":171},[155,107953,76810],{"class":226},[155,107955,107956],{"class":171},"(x ",[155,107958,1274],{"class":167},[155,107960,107961],{"class":171}," y)\n",[155,107963,107964],{"class":157,"line":385},[155,107965,22074],{"class":171},[155,107967,107968],{"class":157,"line":415},[155,107969,107970],{"class":161},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[155,107972,107973,107976,107979,107982,107984,107986,107988],{"class":157,"line":452},[155,107974,107975],{"class":171},"    fn.",[155,107977,107978],{"class":226},"apply",[155,107980,107981],{"class":171},"(obj, [",[155,107983,329],{"class":263},[155,107985,7589],{"class":171},[155,107987,360],{"class":263},[155,107989,17676],{"class":171},[155,107991,107992],{"class":157,"line":480},[155,107993,107994],{"class":161},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[155,107996,107997],{"class":157,"line":486},[155,107998,217],{"emptyLinePlaceholder":216},[155,108000,108001],{"class":157,"line":499},[155,108002,108003],{"class":161},"    \u002F\u002F 使用场景：求数组最大值\n",[155,108005,108006],{"class":157,"line":505},[155,108007,108008],{"class":161},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[155,108010,108011,108014],{"class":157,"line":528},[155,108012,108013],{"class":161},"    \u002F\u002F console.log(max)",[155,108015,108016],{"class":161},"   \u002F\u002F3\n",[155,108018,108019],{"class":157,"line":549},[155,108020,108021],{"class":161},"    \u002F\u002F 指向空或者Math都是可以的\n",[155,108023,108024,108026,108028,108030,108032,108034,108036,108038,108040,108042],{"class":157,"line":570},[155,108025,31049],{"class":167},[155,108027,76258],{"class":263},[155,108029,33391],{"class":167},[155,108031,70789],{"class":171},[155,108033,20389],{"class":263},[155,108035,7589],{"class":171},[155,108037,20570],{"class":263},[155,108039,7589],{"class":171},[155,108041,20600],{"class":263},[155,108043,2845],{"class":171},[155,108045,108046],{"class":157,"line":575},[155,108047,108048],{"class":161},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[155,108050,108051,108053,108055,108057,108060,108062],{"class":157,"line":581},[155,108052,31049],{"class":167},[155,108054,25814],{"class":263},[155,108056,33391],{"class":167},[155,108058,108059],{"class":171}," Math.max.",[155,108061,107978],{"class":226},[155,108063,108064],{"class":171},"(Math, arr)\n",[155,108066,108067,108069,108072,108074,108077,108079],{"class":157,"line":592},[155,108068,31049],{"class":167},[155,108070,108071],{"class":263}," min",[155,108073,33391],{"class":167},[155,108075,108076],{"class":171}," Math.min.",[155,108078,107978],{"class":226},[155,108080,108064],{"class":171},[155,108082,108083,108085,108087,108090],{"class":157,"line":610},[155,108084,92316],{"class":171},[155,108086,76810],{"class":226},[155,108088,108089],{"class":171},"(max, min)     ",[155,108091,108092],{"class":161},"\u002F\u002F100,4\n",[155,108094,108095],{"class":157,"line":622},[155,108096,217],{"emptyLinePlaceholder":216},[155,108098,108099],{"class":157,"line":638},[155,108100,108101],{"class":161},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[155,108103,108104,108106,108108,108111,108113,108115,108118],{"class":157,"line":650},[155,108105,92316],{"class":171},[155,108107,76810],{"class":226},[155,108109,108110],{"class":171},"(Max.",[155,108112,25878],{"class":226},[155,108114,230],{"class":171},[155,108116,108117],{"class":167},"...",[155,108119,108120],{"class":171},"arr))\n",[155,108122,108123,108125,108127],{"class":157,"line":662},[155,108124,70980],{"class":171},[155,108126,70376],{"class":69863},[155,108128,69870],{"class":171},[155,108130,108131,108133,108135],{"class":157,"line":678},[155,108132,70348],{"class":171},[155,108134,70363],{"class":69863},[155,108136,69870],{"class":171},[155,108138,108139],{"class":157,"line":694},[155,108140,217],{"emptyLinePlaceholder":216},[155,108142,108143,108145,108147],{"class":157,"line":706},[155,108144,70348],{"class":171},[155,108146,69198],{"class":69863},[155,108148,69870],{"class":171},[24,108150,108151],{},[37,108152],{"alt":39,"src":108153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[28,108155,108156],{"start":121},[31,108157,108158],{},"bind()",[24,108160,108161],{},[37,108162],{"alt":39,"src":108163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[24,108165,108166],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[24,108168,108169],{},"bind的语法跟call很相似",[146,108171,108173],{"className":71630,"code":108172,"language":71632,"meta":39,"style":39},"\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",[152,108174,108175,108183,108191,108195,108200,108204,108208,108213,108217,108222,108227,108232,108237,108242,108247,108252,108256,108264],{"__ignoreMap":39},[155,108176,108177,108179,108181],{"class":157,"line":158},[155,108178,20959],{"class":171},[155,108180,70363],{"class":69863},[155,108182,69870],{"class":171},[155,108184,108185,108187,108189],{"class":157,"line":46},[155,108186,70707],{"class":171},[155,108188,70376],{"class":69863},[155,108190,69870],{"class":171},[155,108192,108193],{"class":157,"line":121},[155,108194,90086],{"class":171},[155,108196,108197],{"class":157,"line":180},[155,108198,108199],{"class":171},"      age: 18\n",[155,108201,108202],{"class":157,"line":194},[155,108203,22074],{"class":171},[155,108205,108206],{"class":157,"line":200},[155,108207,95706],{"class":171},[155,108209,108210],{"class":157,"line":213},[155,108211,108212],{"class":171},"      console.log(this)\n",[155,108214,108215],{"class":157,"line":220},[155,108216,22074],{"class":171},[155,108218,108219],{"class":157,"line":245},[155,108220,108221],{"class":171},"    \u002F\u002F 1.bind 不会调用函数\n",[155,108223,108224],{"class":157,"line":251},[155,108225,108226],{"class":171},"    \u002F\u002F 2.bind能改变this的指向\n",[155,108228,108229],{"class":157,"line":257},[155,108230,108231],{"class":171},"    fn.bind()\n",[155,108233,108234],{"class":157,"line":270},[155,108235,108236],{"class":171},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[155,108238,108239],{"class":157,"line":276},[155,108240,108241],{"class":171},"    const fun = fn.bind(obj)\n",[155,108243,108244],{"class":157,"line":297},[155,108245,108246],{"class":171},"    \u002F\u002F console.log(fun)\n",[155,108248,108249],{"class":157,"line":302},[155,108250,108251],{"class":171},"    \u002F\u002F 调用,查看this的指向\n",[155,108253,108254],{"class":157,"line":308},[155,108255,71214],{"class":171},[155,108257,108258,108260,108262],{"class":157,"line":366},[155,108259,70980],{"class":171},[155,108261,70376],{"class":69863},[155,108263,69870],{"class":171},[155,108265,108266,108268,108270],{"class":157,"line":379},[155,108267,70348],{"class":171},[155,108269,70363],{"class":69863},[155,108271,69870],{"class":171},[24,108273,108274],{},[37,108275],{"alt":39,"src":108276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[28,108278,108279],{"start":180},[31,108280,108281],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[146,108283,108285],{"className":71630,"code":108284,"language":71632,"meta":39,"style":39},"\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",[152,108286,108287,108295,108308,108316,108321,108325,108330,108335,108340,108345,108350,108355,108360,108365,108369,108377],{"__ignoreMap":39},[155,108288,108289,108291,108293],{"class":157,"line":158},[155,108290,20959],{"class":171},[155,108292,70363],{"class":69863},[155,108294,69870],{"class":171},[155,108296,108297,108299,108301,108304,108306],{"class":157,"line":46},[155,108298,70707],{"class":171},[155,108300,72450],{"class":69863},[155,108302,108303],{"class":171},">禁用\u003C\u002F",[155,108305,72450],{"class":69863},[155,108307,69870],{"class":171},[155,108309,108310,108312,108314],{"class":157,"line":121},[155,108311,70707],{"class":171},[155,108313,70376],{"class":69863},[155,108315,69870],{"class":171},[155,108317,108318],{"class":157,"line":180},[155,108319,108320],{"class":171},"    const btn = document.querySelector('button')\n",[155,108322,108323],{"class":157,"line":194},[155,108324,77579],{"class":171},[155,108326,108327],{"class":157,"line":200},[155,108328,108329],{"class":171},"      this.disabled = true\n",[155,108331,108332],{"class":157,"line":213},[155,108333,108334],{"class":171},"      \u002F\u002F 定时器是window进行调用的\n",[155,108336,108337],{"class":157,"line":220},[155,108338,108339],{"class":171},"      setTimeout(function () {\n",[155,108341,108342],{"class":157,"line":245},[155,108343,108344],{"class":171},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[155,108346,108347],{"class":157,"line":251},[155,108348,108349],{"class":171},"        this.disabled = false\n",[155,108351,108352],{"class":157,"line":257},[155,108353,108354],{"class":171},"      }.bind(this), 2000)\n",[155,108356,108357],{"class":157,"line":270},[155,108358,108359],{"class":171},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[155,108361,108362],{"class":157,"line":276},[155,108363,108364],{"class":171},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[155,108366,108367],{"class":157,"line":297},[155,108368,3065],{"class":171},[155,108370,108371,108373,108375],{"class":157,"line":302},[155,108372,70980],{"class":171},[155,108374,70376],{"class":69863},[155,108376,69870],{"class":171},[155,108378,108379,108381,108383],{"class":157,"line":308},[155,108380,70348],{"class":171},[155,108382,70363],{"class":69863},[155,108384,69870],{"class":171},[28,108386,108387],{"start":194},[31,108388,41745],{},[24,108390,108391],{},[37,108392],{"alt":39,"src":108393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[20037,108395,108397],{"id":108396},"_417-性能优化","4.17 性能优化",[14,108399,108401],{"id":108400},"_4171-防抖","4.17.1 防抖",[24,108403,108404],{},[37,108405],{"alt":39,"src":108406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[24,108408,108409],{},[20234,108410,108411],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[24,108413,108414],{},"防抖实现方式：",[21052,108416,108417],{},[31,108418,108419],{},"lodash 提供了防抖处理",[24,108421,108422],{},"_.debounce(func,[wait=0],[options={}])",[24,108424,108425],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[146,108427,108429],{"className":69196,"code":108428,"language":69198,"meta":39,"style":39},"\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",[152,108430,108431,108441,108455,108459,108467,108481,108501,108513,108521,108527,108537,108549,108561,108572,108584,108594,108604,108617,108621,108629,108637,108641,108649,108667,108685,108693,108712,108722,108731,108742,108747,108751,108756,108761,108766,108791,108799,108807,108811],{"__ignoreMap":39},[155,108432,108433,108435,108437,108439],{"class":157,"line":158},[155,108434,69860],{"class":171},[155,108436,69864],{"class":69863},[155,108438,69867],{"class":226},[155,108440,69870],{"class":171},[155,108442,108443,108445,108447,108449,108451,108453],{"class":157,"line":46},[155,108444,20959],{"class":171},[155,108446,69198],{"class":69863},[155,108448,69879],{"class":226},[155,108450,317],{"class":171},[155,108452,69884],{"class":732},[155,108454,69870],{"class":171},[155,108456,108457],{"class":157,"line":121},[155,108458,217],{"emptyLinePlaceholder":216},[155,108460,108461,108463,108465],{"class":157,"line":180},[155,108462,20959],{"class":171},[155,108464,69897],{"class":69863},[155,108466,69870],{"class":171},[155,108468,108469,108471,108473,108475,108477,108479],{"class":157,"line":194},[155,108470,70707],{"class":171},[155,108472,69907],{"class":69863},[155,108474,69910],{"class":226},[155,108476,317],{"class":171},[155,108478,69915],{"class":732},[155,108480,69870],{"class":171},[155,108482,108483,108485,108487,108489,108491,108493,108495,108497,108499],{"class":157,"line":200},[155,108484,70707],{"class":171},[155,108486,69907],{"class":69863},[155,108488,34745],{"class":226},[155,108490,317],{"class":171},[155,108492,69954],{"class":732},[155,108494,69934],{"class":226},[155,108496,317],{"class":171},[155,108498,69961],{"class":732},[155,108500,69870],{"class":171},[155,108502,108503,108505,108507,108509,108511],{"class":157,"line":213},[155,108504,70707],{"class":171},[155,108506,69970],{"class":69863},[155,108508,69973],{"class":171},[155,108510,69970],{"class":69863},[155,108512,69870],{"class":171},[155,108514,108515,108517,108519],{"class":157,"line":220},[155,108516,70707],{"class":171},[155,108518,20011],{"class":69863},[155,108520,69870],{"class":171},[155,108522,108523,108525],{"class":157,"line":245},[155,108524,73315],{"class":226},[155,108526,35397],{"class":171},[155,108528,108529,108531,108533,108535],{"class":157,"line":251},[155,108530,91159],{"class":263},[155,108532,70000],{"class":171},[155,108534,79068],{"class":263},[155,108536,21206],{"class":171},[155,108538,108539,108541,108543,108545,108547],{"class":157,"line":257},[155,108540,73334],{"class":263},[155,108542,70000],{"class":171},[155,108544,21619],{"class":263},[155,108546,70055],{"class":167},[155,108548,21206],{"class":171},[155,108550,108551,108553,108555,108557,108559],{"class":157,"line":270},[155,108552,73348],{"class":263},[155,108554,70000],{"class":171},[155,108556,21619],{"class":263},[155,108558,70055],{"class":167},[155,108560,21206],{"class":171},[155,108562,108563,108565,108567,108570],{"class":157,"line":276},[155,108564,73447],{"class":263},[155,108566,70000],{"class":171},[155,108568,108569],{"class":263},"gray",[155,108571,21206],{"class":171},[155,108573,108574,108576,108578,108580,108582],{"class":157,"line":297},[155,108575,73485],{"class":263},[155,108577,70000],{"class":171},[155,108579,20879],{"class":263},[155,108581,70055],{"class":167},[155,108583,21206],{"class":171},[155,108585,108586,108588,108590,108592],{"class":157,"line":302},[155,108587,75979],{"class":263},[155,108589,70000],{"class":171},[155,108591,79405],{"class":263},[155,108593,21206],{"class":171},[155,108595,108596,108598,108600,108602],{"class":157,"line":308},[155,108597,75849],{"class":263},[155,108599,70000],{"class":171},[155,108601,70155],{"class":263},[155,108603,21206],{"class":171},[155,108605,108606,108609,108611,108613,108615],{"class":157,"line":366},[155,108607,108608],{"class":263},"      padding-top",[155,108610,70000],{"class":171},[155,108612,350],{"class":263},[155,108614,70055],{"class":167},[155,108616,21206],{"class":171},[155,108618,108619],{"class":157,"line":379},[155,108620,22074],{"class":171},[155,108622,108623,108625,108627],{"class":157,"line":385},[155,108624,70980],{"class":171},[155,108626,20011],{"class":69863},[155,108628,69870],{"class":171},[155,108630,108631,108633,108635],{"class":157,"line":415},[155,108632,70348],{"class":171},[155,108634,69897],{"class":69863},[155,108636,69870],{"class":171},[155,108638,108639],{"class":157,"line":452},[155,108640,217],{"emptyLinePlaceholder":216},[155,108642,108643,108645,108647],{"class":157,"line":480},[155,108644,20959],{"class":171},[155,108646,70363],{"class":69863},[155,108648,69870],{"class":171},[155,108650,108651,108653,108655,108657,108659,108661,108663,108665],{"class":157,"line":486},[155,108652,70707],{"class":171},[155,108654,70174],{"class":69863},[155,108656,72049],{"class":226},[155,108658,317],{"class":171},[155,108660,72054],{"class":732},[155,108662,73877],{"class":171},[155,108664,70174],{"class":69863},[155,108666,69870],{"class":171},[155,108668,108669,108671,108673,108675,108677,108679,108681,108683],{"class":157,"line":499},[155,108670,70707],{"class":171},[155,108672,70376],{"class":69863},[155,108674,73802],{"class":226},[155,108676,317],{"class":171},[155,108678,106837],{"class":732},[155,108680,73877],{"class":171},[155,108682,70376],{"class":69863},[155,108684,69870],{"class":171},[155,108686,108687,108689,108691],{"class":157,"line":505},[155,108688,70707],{"class":171},[155,108690,70376],{"class":69863},[155,108692,69870],{"class":171},[155,108694,108695,108697,108699,108701,108703,108705,108707,108710],{"class":157,"line":528},[155,108696,31049],{"class":167},[155,108698,105496],{"class":263},[155,108700,33391],{"class":167},[155,108702,72959],{"class":171},[155,108704,72962],{"class":226},[155,108706,230],{"class":171},[155,108708,108709],{"class":732},"'.box'",[155,108711,363],{"class":171},[155,108713,108714,108716,108718,108720],{"class":157,"line":549},[155,108715,70782],{"class":167},[155,108717,29287],{"class":171},[155,108719,317],{"class":167},[155,108721,16959],{"class":263},[155,108723,108724,108726,108729],{"class":157,"line":570},[155,108725,88647],{"class":167},[155,108727,108728],{"class":226}," mouseMove",[155,108730,30681],{"class":171},[155,108732,108733,108736,108738,108740],{"class":157,"line":575},[155,108734,108735],{"class":171},"      box.innerHTML ",[155,108737,317],{"class":167},[155,108739,22907],{"class":171},[155,108741,22579],{"class":167},[155,108743,108744],{"class":157,"line":581},[155,108745,108746],{"class":161},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[155,108748,108749],{"class":157,"line":592},[155,108750,22074],{"class":171},[155,108752,108753],{"class":157,"line":610},[155,108754,108755],{"class":161},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[155,108757,108758],{"class":157,"line":622},[155,108759,108760],{"class":161},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[155,108762,108763],{"class":157,"line":638},[155,108764,108765],{"class":161},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[155,108767,108768,108771,108773,108775,108778,108781,108784,108787,108789],{"class":157,"line":650},[155,108769,108770],{"class":171},"    box.",[155,108772,76376],{"class":226},[155,108774,230],{"class":171},[155,108776,108777],{"class":732},"'mousemove'",[155,108779,108780],{"class":171},", _.",[155,108782,108783],{"class":226},"debounce",[155,108785,108786],{"class":171},"(mouseMove, ",[155,108788,83637],{"class":263},[155,108790,1238],{"class":171},[155,108792,108793,108795,108797],{"class":157,"line":662},[155,108794,70980],{"class":171},[155,108796,70376],{"class":69863},[155,108798,69870],{"class":171},[155,108800,108801,108803,108805],{"class":157,"line":678},[155,108802,70348],{"class":171},[155,108804,70363],{"class":69863},[155,108806,69870],{"class":171},[155,108808,108809],{"class":157,"line":694},[155,108810,217],{"emptyLinePlaceholder":216},[155,108812,108813,108815,108817],{"class":157,"line":706},[155,108814,70348],{"class":171},[155,108816,69198],{"class":69863},[155,108818,69870],{"class":171},[21052,108820,108821],{},[31,108822,108823],{},"手写一个防抖函数来处理",[24,108825,108826],{},"防抖的核心就是利用定时器来实现的：",[24,108828,108829],{},"①声明一个定时器变量",[24,108831,108832],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[24,108834,108835],{},"③如果没有定时器则开启定时器，记得存到变量里面",[146,108837,108839],{"className":69196,"code":108838,"language":69198,"meta":39,"style":39},"\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",[152,108840,108841,108851,108865,108869,108877,108891,108911,108923,108931,108937,108947,108959,108971,108981,108993,109003,109013,109025,109029,109037,109045,109049,109057,109075,109093,109101,109119,109129,109137,109147,109151,109155,109159,109164,109169,109174,109179,109184,109189,109207,109214,109219,109227,109232,109245,109261,109271,109276,109280,109284,109304,109308,109313,109318,109323,109328,109336,109344,109348],{"__ignoreMap":39},[155,108842,108843,108845,108847,108849],{"class":157,"line":158},[155,108844,69860],{"class":171},[155,108846,69864],{"class":69863},[155,108848,69867],{"class":226},[155,108850,69870],{"class":171},[155,108852,108853,108855,108857,108859,108861,108863],{"class":157,"line":46},[155,108854,20959],{"class":171},[155,108856,69198],{"class":69863},[155,108858,69879],{"class":226},[155,108860,317],{"class":171},[155,108862,69884],{"class":732},[155,108864,69870],{"class":171},[155,108866,108867],{"class":157,"line":121},[155,108868,217],{"emptyLinePlaceholder":216},[155,108870,108871,108873,108875],{"class":157,"line":180},[155,108872,20959],{"class":171},[155,108874,69897],{"class":69863},[155,108876,69870],{"class":171},[155,108878,108879,108881,108883,108885,108887,108889],{"class":157,"line":194},[155,108880,70707],{"class":171},[155,108882,69907],{"class":69863},[155,108884,69910],{"class":226},[155,108886,317],{"class":171},[155,108888,69915],{"class":732},[155,108890,69870],{"class":171},[155,108892,108893,108895,108897,108899,108901,108903,108905,108907,108909],{"class":157,"line":200},[155,108894,70707],{"class":171},[155,108896,69907],{"class":69863},[155,108898,34745],{"class":226},[155,108900,317],{"class":171},[155,108902,69954],{"class":732},[155,108904,69934],{"class":226},[155,108906,317],{"class":171},[155,108908,69961],{"class":732},[155,108910,69870],{"class":171},[155,108912,108913,108915,108917,108919,108921],{"class":157,"line":213},[155,108914,70707],{"class":171},[155,108916,69970],{"class":69863},[155,108918,69973],{"class":171},[155,108920,69970],{"class":69863},[155,108922,69870],{"class":171},[155,108924,108925,108927,108929],{"class":157,"line":220},[155,108926,70707],{"class":171},[155,108928,20011],{"class":69863},[155,108930,69870],{"class":171},[155,108932,108933,108935],{"class":157,"line":245},[155,108934,73315],{"class":226},[155,108936,35397],{"class":171},[155,108938,108939,108941,108943,108945],{"class":157,"line":251},[155,108940,91159],{"class":263},[155,108942,70000],{"class":171},[155,108944,79068],{"class":263},[155,108946,21206],{"class":171},[155,108948,108949,108951,108953,108955,108957],{"class":157,"line":257},[155,108950,73334],{"class":263},[155,108952,70000],{"class":171},[155,108954,21619],{"class":263},[155,108956,70055],{"class":167},[155,108958,21206],{"class":171},[155,108960,108961,108963,108965,108967,108969],{"class":157,"line":270},[155,108962,73348],{"class":263},[155,108964,70000],{"class":171},[155,108966,21619],{"class":263},[155,108968,70055],{"class":167},[155,108970,21206],{"class":171},[155,108972,108973,108975,108977,108979],{"class":157,"line":276},[155,108974,73447],{"class":263},[155,108976,70000],{"class":171},[155,108978,108569],{"class":263},[155,108980,21206],{"class":171},[155,108982,108983,108985,108987,108989,108991],{"class":157,"line":297},[155,108984,73485],{"class":263},[155,108986,70000],{"class":171},[155,108988,20879],{"class":263},[155,108990,70055],{"class":167},[155,108992,21206],{"class":171},[155,108994,108995,108997,108999,109001],{"class":157,"line":302},[155,108996,75979],{"class":263},[155,108998,70000],{"class":171},[155,109000,79405],{"class":263},[155,109002,21206],{"class":171},[155,109004,109005,109007,109009,109011],{"class":157,"line":308},[155,109006,75849],{"class":263},[155,109008,70000],{"class":171},[155,109010,70155],{"class":263},[155,109012,21206],{"class":171},[155,109014,109015,109017,109019,109021,109023],{"class":157,"line":366},[155,109016,108608],{"class":263},[155,109018,70000],{"class":171},[155,109020,350],{"class":263},[155,109022,70055],{"class":167},[155,109024,21206],{"class":171},[155,109026,109027],{"class":157,"line":379},[155,109028,22074],{"class":171},[155,109030,109031,109033,109035],{"class":157,"line":385},[155,109032,70980],{"class":171},[155,109034,20011],{"class":69863},[155,109036,69870],{"class":171},[155,109038,109039,109041,109043],{"class":157,"line":415},[155,109040,70348],{"class":171},[155,109042,69897],{"class":69863},[155,109044,69870],{"class":171},[155,109046,109047],{"class":157,"line":452},[155,109048,217],{"emptyLinePlaceholder":216},[155,109050,109051,109053,109055],{"class":157,"line":480},[155,109052,20959],{"class":171},[155,109054,70363],{"class":69863},[155,109056,69870],{"class":171},[155,109058,109059,109061,109063,109065,109067,109069,109071,109073],{"class":157,"line":486},[155,109060,70707],{"class":171},[155,109062,70174],{"class":69863},[155,109064,72049],{"class":226},[155,109066,317],{"class":171},[155,109068,72054],{"class":732},[155,109070,73877],{"class":171},[155,109072,70174],{"class":69863},[155,109074,69870],{"class":171},[155,109076,109077,109079,109081,109083,109085,109087,109089,109091],{"class":157,"line":499},[155,109078,70707],{"class":171},[155,109080,70376],{"class":69863},[155,109082,73802],{"class":226},[155,109084,317],{"class":171},[155,109086,106837],{"class":732},[155,109088,73877],{"class":171},[155,109090,70376],{"class":69863},[155,109092,69870],{"class":171},[155,109094,109095,109097,109099],{"class":157,"line":505},[155,109096,70707],{"class":171},[155,109098,70376],{"class":69863},[155,109100,69870],{"class":171},[155,109102,109103,109105,109107,109109,109111,109113,109115,109117],{"class":157,"line":528},[155,109104,31049],{"class":167},[155,109106,105496],{"class":263},[155,109108,33391],{"class":167},[155,109110,72959],{"class":171},[155,109112,72962],{"class":226},[155,109114,230],{"class":171},[155,109116,108709],{"class":732},[155,109118,363],{"class":171},[155,109120,109121,109123,109125,109127],{"class":157,"line":549},[155,109122,70782],{"class":167},[155,109124,29287],{"class":171},[155,109126,317],{"class":167},[155,109128,16959],{"class":263},[155,109130,109131,109133,109135],{"class":157,"line":570},[155,109132,88647],{"class":167},[155,109134,108728],{"class":226},[155,109136,30681],{"class":171},[155,109138,109139,109141,109143,109145],{"class":157,"line":575},[155,109140,108735],{"class":171},[155,109142,317],{"class":167},[155,109144,22907],{"class":171},[155,109146,22579],{"class":167},[155,109148,109149],{"class":157,"line":581},[155,109150,108746],{"class":161},[155,109152,109153],{"class":157,"line":592},[155,109154,22074],{"class":171},[155,109156,109157],{"class":157,"line":610},[155,109158,108755],{"class":161},[155,109160,109161],{"class":157,"line":622},[155,109162,109163],{"class":161},"    \u002F\u002F 手写防抖函数\n",[155,109165,109166],{"class":157,"line":638},[155,109167,109168],{"class":161},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[155,109170,109171],{"class":157,"line":650},[155,109172,109173],{"class":161},"    \u002F\u002F 1.声明定时器变量\n",[155,109175,109176],{"class":157,"line":662},[155,109177,109178],{"class":161},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[155,109180,109181],{"class":157,"line":678},[155,109182,109183],{"class":161},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[155,109185,109186],{"class":157,"line":694},[155,109187,109188],{"class":161},"    \u002F\u002F 4.定时器里面写函数调用\n",[155,109190,109191,109193,109196,109198,109201,109203,109205],{"class":157,"line":706},[155,109192,88647],{"class":167},[155,109194,109195],{"class":226}," debounce",[155,109197,230],{"class":171},[155,109199,109200],{"class":323},"fn",[155,109202,7589],{"class":171},[155,109204,20776],{"class":323},[155,109206,32269],{"class":171},[155,109208,109209,109211],{"class":157,"line":715},[155,109210,98335],{"class":167},[155,109212,109213],{"class":171}," timer\n",[155,109215,109216],{"class":157,"line":720},[155,109217,109218],{"class":161},"      \u002F\u002F return 返回一个匿名函数\n",[155,109220,109221,109223,109225],{"class":157,"line":739},[155,109222,92545],{"class":167},[155,109224,77481],{"class":167},[155,109226,73015],{"class":171},[155,109228,109229],{"class":157,"line":745},[155,109230,109231],{"class":161},"        \u002F\u002F 这里边写第二三四步\n",[155,109233,109234,109236,109239,109242],{"class":157,"line":773},[155,109235,2803],{"class":167},[155,109237,109238],{"class":171}," (timer) ",[155,109240,109241],{"class":226},"clearTimeout",[155,109243,109244],{"class":171},"(timer)\n",[155,109246,109247,109250,109252,109255,109257,109259],{"class":157,"line":779},[155,109248,109249],{"class":171},"        timer ",[155,109251,317],{"class":167},[155,109253,109254],{"class":226}," setTimeout",[155,109256,230],{"class":171},[155,109258,73012],{"class":167},[155,109260,73015],{"class":171},[155,109262,109263,109266,109268],{"class":157,"line":785},[155,109264,109265],{"class":226},"          fn",[155,109267,32877],{"class":171},[155,109269,109270],{"class":161},"\u002F\u002F加小括号调用fn }, t)\n",[155,109272,109273],{"class":157,"line":791},[155,109274,109275],{"class":171},"        }, t)\n",[155,109277,109278],{"class":157,"line":796},[155,109279,70961],{"class":171},[155,109281,109282],{"class":157,"line":802},[155,109283,22074],{"class":171},[155,109285,109286,109288,109290,109292,109294,109296,109298,109300,109302],{"class":157,"line":808},[155,109287,108770],{"class":171},[155,109289,76376],{"class":226},[155,109291,230],{"class":171},[155,109293,108777],{"class":732},[155,109295,7589],{"class":171},[155,109297,108783],{"class":226},[155,109299,108786],{"class":171},[155,109301,83637],{"class":263},[155,109303,1238],{"class":171},[155,109305,109306],{"class":157,"line":819},[155,109307,217],{"emptyLinePlaceholder":216},[155,109309,109310],{"class":157,"line":1832},[155,109311,109312],{"class":161},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[155,109314,109315],{"class":157,"line":1838},[155,109316,109317],{"class":161},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[155,109319,109320],{"class":157,"line":1844},[155,109321,109322],{"class":161},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[155,109324,109325],{"class":157,"line":1850},[155,109326,109327],{"class":161},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[155,109329,109330,109332,109334],{"class":157,"line":1861},[155,109331,70980],{"class":171},[155,109333,70376],{"class":69863},[155,109335,69870],{"class":171},[155,109337,109338,109340,109342],{"class":157,"line":1866},[155,109339,70348],{"class":171},[155,109341,70363],{"class":69863},[155,109343,69870],{"class":171},[155,109345,109346],{"class":157,"line":1871},[155,109347,217],{"emptyLinePlaceholder":216},[155,109349,109350,109352,109354],{"class":157,"line":1877},[155,109351,70348],{"class":171},[155,109353,69198],{"class":69863},[155,109355,69870],{"class":171},[14,109357,109359],{"id":109358},"_4172-节流","4.17.2 节流",[24,109361,109362],{},[37,109363],{"alt":39,"src":109364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[24,109366,109367],{},[37,109368],{"alt":39,"src":109369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[24,109371,109372],{},[20234,109373,109374],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[24,109376,109377],{},"实现方式：",[21052,109379,109380],{},[31,109381,109382],{},"lodash 提供的节流函数来处理",[24,109384,109385],{},"_.throttle(func,[wait=0],[options=])",[24,109387,109388],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[146,109390,109392],{"className":69196,"code":109391,"language":69198,"meta":39,"style":39},"\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",[152,109393,109394,109404,109418,109422,109430,109444,109464,109476,109484,109490,109500,109512,109524,109534,109546,109556,109566,109578,109582,109590,109598,109602,109610,109628,109646,109654,109672,109682,109690,109700,109704,109708,109712,109717,109722,109743,109751,109759,109763],{"__ignoreMap":39},[155,109395,109396,109398,109400,109402],{"class":157,"line":158},[155,109397,69860],{"class":171},[155,109399,69864],{"class":69863},[155,109401,69867],{"class":226},[155,109403,69870],{"class":171},[155,109405,109406,109408,109410,109412,109414,109416],{"class":157,"line":46},[155,109407,20959],{"class":171},[155,109409,69198],{"class":69863},[155,109411,69879],{"class":226},[155,109413,317],{"class":171},[155,109415,69884],{"class":732},[155,109417,69870],{"class":171},[155,109419,109420],{"class":157,"line":121},[155,109421,217],{"emptyLinePlaceholder":216},[155,109423,109424,109426,109428],{"class":157,"line":180},[155,109425,20959],{"class":171},[155,109427,69897],{"class":69863},[155,109429,69870],{"class":171},[155,109431,109432,109434,109436,109438,109440,109442],{"class":157,"line":194},[155,109433,70707],{"class":171},[155,109435,69907],{"class":69863},[155,109437,69910],{"class":226},[155,109439,317],{"class":171},[155,109441,69915],{"class":732},[155,109443,69870],{"class":171},[155,109445,109446,109448,109450,109452,109454,109456,109458,109460,109462],{"class":157,"line":200},[155,109447,70707],{"class":171},[155,109449,69907],{"class":69863},[155,109451,34745],{"class":226},[155,109453,317],{"class":171},[155,109455,69954],{"class":732},[155,109457,69934],{"class":226},[155,109459,317],{"class":171},[155,109461,69961],{"class":732},[155,109463,69870],{"class":171},[155,109465,109466,109468,109470,109472,109474],{"class":157,"line":213},[155,109467,70707],{"class":171},[155,109469,69970],{"class":69863},[155,109471,69973],{"class":171},[155,109473,69970],{"class":69863},[155,109475,69870],{"class":171},[155,109477,109478,109480,109482],{"class":157,"line":220},[155,109479,70707],{"class":171},[155,109481,20011],{"class":69863},[155,109483,69870],{"class":171},[155,109485,109486,109488],{"class":157,"line":245},[155,109487,73315],{"class":226},[155,109489,35397],{"class":171},[155,109491,109492,109494,109496,109498],{"class":157,"line":251},[155,109493,91159],{"class":263},[155,109495,70000],{"class":171},[155,109497,79068],{"class":263},[155,109499,21206],{"class":171},[155,109501,109502,109504,109506,109508,109510],{"class":157,"line":257},[155,109503,73334],{"class":263},[155,109505,70000],{"class":171},[155,109507,21619],{"class":263},[155,109509,70055],{"class":167},[155,109511,21206],{"class":171},[155,109513,109514,109516,109518,109520,109522],{"class":157,"line":270},[155,109515,73348],{"class":263},[155,109517,70000],{"class":171},[155,109519,21619],{"class":263},[155,109521,70055],{"class":167},[155,109523,21206],{"class":171},[155,109525,109526,109528,109530,109532],{"class":157,"line":276},[155,109527,73447],{"class":263},[155,109529,70000],{"class":171},[155,109531,108569],{"class":263},[155,109533,21206],{"class":171},[155,109535,109536,109538,109540,109542,109544],{"class":157,"line":297},[155,109537,73485],{"class":263},[155,109539,70000],{"class":171},[155,109541,20879],{"class":263},[155,109543,70055],{"class":167},[155,109545,21206],{"class":171},[155,109547,109548,109550,109552,109554],{"class":157,"line":302},[155,109549,75979],{"class":263},[155,109551,70000],{"class":171},[155,109553,79405],{"class":263},[155,109555,21206],{"class":171},[155,109557,109558,109560,109562,109564],{"class":157,"line":308},[155,109559,75849],{"class":263},[155,109561,70000],{"class":171},[155,109563,70155],{"class":263},[155,109565,21206],{"class":171},[155,109567,109568,109570,109572,109574,109576],{"class":157,"line":366},[155,109569,108608],{"class":263},[155,109571,70000],{"class":171},[155,109573,350],{"class":263},[155,109575,70055],{"class":167},[155,109577,21206],{"class":171},[155,109579,109580],{"class":157,"line":379},[155,109581,22074],{"class":171},[155,109583,109584,109586,109588],{"class":157,"line":385},[155,109585,70980],{"class":171},[155,109587,20011],{"class":69863},[155,109589,69870],{"class":171},[155,109591,109592,109594,109596],{"class":157,"line":415},[155,109593,70348],{"class":171},[155,109595,69897],{"class":69863},[155,109597,69870],{"class":171},[155,109599,109600],{"class":157,"line":452},[155,109601,217],{"emptyLinePlaceholder":216},[155,109603,109604,109606,109608],{"class":157,"line":480},[155,109605,20959],{"class":171},[155,109607,70363],{"class":69863},[155,109609,69870],{"class":171},[155,109611,109612,109614,109616,109618,109620,109622,109624,109626],{"class":157,"line":486},[155,109613,70707],{"class":171},[155,109615,70174],{"class":69863},[155,109617,72049],{"class":226},[155,109619,317],{"class":171},[155,109621,72054],{"class":732},[155,109623,73877],{"class":171},[155,109625,70174],{"class":69863},[155,109627,69870],{"class":171},[155,109629,109630,109632,109634,109636,109638,109640,109642,109644],{"class":157,"line":499},[155,109631,70707],{"class":171},[155,109633,70376],{"class":69863},[155,109635,73802],{"class":226},[155,109637,317],{"class":171},[155,109639,106837],{"class":732},[155,109641,73877],{"class":171},[155,109643,70376],{"class":69863},[155,109645,69870],{"class":171},[155,109647,109648,109650,109652],{"class":157,"line":505},[155,109649,70707],{"class":171},[155,109651,70376],{"class":69863},[155,109653,69870],{"class":171},[155,109655,109656,109658,109660,109662,109664,109666,109668,109670],{"class":157,"line":528},[155,109657,31049],{"class":167},[155,109659,105496],{"class":263},[155,109661,33391],{"class":167},[155,109663,72959],{"class":171},[155,109665,72962],{"class":226},[155,109667,230],{"class":171},[155,109669,108709],{"class":732},[155,109671,363],{"class":171},[155,109673,109674,109676,109678,109680],{"class":157,"line":549},[155,109675,70782],{"class":167},[155,109677,29287],{"class":171},[155,109679,317],{"class":167},[155,109681,16959],{"class":263},[155,109683,109684,109686,109688],{"class":157,"line":570},[155,109685,88647],{"class":167},[155,109687,108728],{"class":226},[155,109689,30681],{"class":171},[155,109691,109692,109694,109696,109698],{"class":157,"line":575},[155,109693,108735],{"class":171},[155,109695,317],{"class":167},[155,109697,22907],{"class":171},[155,109699,22579],{"class":167},[155,109701,109702],{"class":157,"line":581},[155,109703,108746],{"class":161},[155,109705,109706],{"class":157,"line":592},[155,109707,22074],{"class":171},[155,109709,109710],{"class":157,"line":610},[155,109711,108755],{"class":161},[155,109713,109714],{"class":157,"line":622},[155,109715,109716],{"class":161},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[155,109718,109719],{"class":157,"line":638},[155,109720,109721],{"class":161},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[155,109723,109724,109726,109728,109730,109732,109734,109737,109739,109741],{"class":157,"line":650},[155,109725,108770],{"class":171},[155,109727,76376],{"class":226},[155,109729,230],{"class":171},[155,109731,108777],{"class":732},[155,109733,108780],{"class":171},[155,109735,109736],{"class":226},"throttle",[155,109738,108786],{"class":171},[155,109740,83637],{"class":263},[155,109742,1238],{"class":171},[155,109744,109745,109747,109749],{"class":157,"line":662},[155,109746,70980],{"class":171},[155,109748,70376],{"class":69863},[155,109750,69870],{"class":171},[155,109752,109753,109755,109757],{"class":157,"line":678},[155,109754,70348],{"class":171},[155,109756,70363],{"class":69863},[155,109758,69870],{"class":171},[155,109760,109761],{"class":157,"line":694},[155,109762,217],{"emptyLinePlaceholder":216},[155,109764,109765,109767,109769],{"class":157,"line":706},[155,109766,70348],{"class":171},[155,109768,69198],{"class":69863},[155,109770,69870],{"class":171},[21052,109772,109773],{},[31,109774,109775],{},"手写一个节流函数来处理",[24,109777,89515],{},[24,109779,108829],{},[24,109781,109782],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[24,109784,109785],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[146,109787,109789],{"className":69196,"code":109788,"language":69198,"meta":39,"style":39},"\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",[152,109790,109791,109801,109815,109819,109827,109841,109861,109873,109881,109887,109897,109909,109921,109931,109943,109953,109963,109975,109979,109987,109995,109999,110007,110025,110043,110051,110069,110079,110087,110097,110101,110105,110109,110114,110119,110124,110129,110134,110139,110156,110162,110170,110181,110196,110203,110208,110213,110223,110228,110233,110238,110242,110246,110250,110270,110278,110286,110290],{"__ignoreMap":39},[155,109792,109793,109795,109797,109799],{"class":157,"line":158},[155,109794,69860],{"class":171},[155,109796,69864],{"class":69863},[155,109798,69867],{"class":226},[155,109800,69870],{"class":171},[155,109802,109803,109805,109807,109809,109811,109813],{"class":157,"line":46},[155,109804,20959],{"class":171},[155,109806,69198],{"class":69863},[155,109808,69879],{"class":226},[155,109810,317],{"class":171},[155,109812,69884],{"class":732},[155,109814,69870],{"class":171},[155,109816,109817],{"class":157,"line":121},[155,109818,217],{"emptyLinePlaceholder":216},[155,109820,109821,109823,109825],{"class":157,"line":180},[155,109822,20959],{"class":171},[155,109824,69897],{"class":69863},[155,109826,69870],{"class":171},[155,109828,109829,109831,109833,109835,109837,109839],{"class":157,"line":194},[155,109830,70707],{"class":171},[155,109832,69907],{"class":69863},[155,109834,69910],{"class":226},[155,109836,317],{"class":171},[155,109838,69915],{"class":732},[155,109840,69870],{"class":171},[155,109842,109843,109845,109847,109849,109851,109853,109855,109857,109859],{"class":157,"line":200},[155,109844,70707],{"class":171},[155,109846,69907],{"class":69863},[155,109848,34745],{"class":226},[155,109850,317],{"class":171},[155,109852,69954],{"class":732},[155,109854,69934],{"class":226},[155,109856,317],{"class":171},[155,109858,69961],{"class":732},[155,109860,69870],{"class":171},[155,109862,109863,109865,109867,109869,109871],{"class":157,"line":213},[155,109864,70707],{"class":171},[155,109866,69970],{"class":69863},[155,109868,69973],{"class":171},[155,109870,69970],{"class":69863},[155,109872,69870],{"class":171},[155,109874,109875,109877,109879],{"class":157,"line":220},[155,109876,70707],{"class":171},[155,109878,20011],{"class":69863},[155,109880,69870],{"class":171},[155,109882,109883,109885],{"class":157,"line":245},[155,109884,73315],{"class":226},[155,109886,35397],{"class":171},[155,109888,109889,109891,109893,109895],{"class":157,"line":251},[155,109890,91159],{"class":263},[155,109892,70000],{"class":171},[155,109894,79068],{"class":263},[155,109896,21206],{"class":171},[155,109898,109899,109901,109903,109905,109907],{"class":157,"line":257},[155,109900,73334],{"class":263},[155,109902,70000],{"class":171},[155,109904,21619],{"class":263},[155,109906,70055],{"class":167},[155,109908,21206],{"class":171},[155,109910,109911,109913,109915,109917,109919],{"class":157,"line":270},[155,109912,73348],{"class":263},[155,109914,70000],{"class":171},[155,109916,21619],{"class":263},[155,109918,70055],{"class":167},[155,109920,21206],{"class":171},[155,109922,109923,109925,109927,109929],{"class":157,"line":276},[155,109924,73447],{"class":263},[155,109926,70000],{"class":171},[155,109928,108569],{"class":263},[155,109930,21206],{"class":171},[155,109932,109933,109935,109937,109939,109941],{"class":157,"line":297},[155,109934,73485],{"class":263},[155,109936,70000],{"class":171},[155,109938,20879],{"class":263},[155,109940,70055],{"class":167},[155,109942,21206],{"class":171},[155,109944,109945,109947,109949,109951],{"class":157,"line":302},[155,109946,75979],{"class":263},[155,109948,70000],{"class":171},[155,109950,79405],{"class":263},[155,109952,21206],{"class":171},[155,109954,109955,109957,109959,109961],{"class":157,"line":308},[155,109956,75849],{"class":263},[155,109958,70000],{"class":171},[155,109960,70155],{"class":263},[155,109962,21206],{"class":171},[155,109964,109965,109967,109969,109971,109973],{"class":157,"line":366},[155,109966,108608],{"class":263},[155,109968,70000],{"class":171},[155,109970,350],{"class":263},[155,109972,70055],{"class":167},[155,109974,21206],{"class":171},[155,109976,109977],{"class":157,"line":379},[155,109978,22074],{"class":171},[155,109980,109981,109983,109985],{"class":157,"line":385},[155,109982,70980],{"class":171},[155,109984,20011],{"class":69863},[155,109986,69870],{"class":171},[155,109988,109989,109991,109993],{"class":157,"line":415},[155,109990,70348],{"class":171},[155,109992,69897],{"class":69863},[155,109994,69870],{"class":171},[155,109996,109997],{"class":157,"line":452},[155,109998,217],{"emptyLinePlaceholder":216},[155,110000,110001,110003,110005],{"class":157,"line":480},[155,110002,20959],{"class":171},[155,110004,70363],{"class":69863},[155,110006,69870],{"class":171},[155,110008,110009,110011,110013,110015,110017,110019,110021,110023],{"class":157,"line":486},[155,110010,70707],{"class":171},[155,110012,70174],{"class":69863},[155,110014,72049],{"class":226},[155,110016,317],{"class":171},[155,110018,72054],{"class":732},[155,110020,73877],{"class":171},[155,110022,70174],{"class":69863},[155,110024,69870],{"class":171},[155,110026,110027,110029,110031,110033,110035,110037,110039,110041],{"class":157,"line":499},[155,110028,70707],{"class":171},[155,110030,70376],{"class":69863},[155,110032,73802],{"class":226},[155,110034,317],{"class":171},[155,110036,106837],{"class":732},[155,110038,73877],{"class":171},[155,110040,70376],{"class":69863},[155,110042,69870],{"class":171},[155,110044,110045,110047,110049],{"class":157,"line":505},[155,110046,70707],{"class":171},[155,110048,70376],{"class":69863},[155,110050,69870],{"class":171},[155,110052,110053,110055,110057,110059,110061,110063,110065,110067],{"class":157,"line":528},[155,110054,31049],{"class":167},[155,110056,105496],{"class":263},[155,110058,33391],{"class":167},[155,110060,72959],{"class":171},[155,110062,72962],{"class":226},[155,110064,230],{"class":171},[155,110066,108709],{"class":732},[155,110068,363],{"class":171},[155,110070,110071,110073,110075,110077],{"class":157,"line":549},[155,110072,70782],{"class":167},[155,110074,29287],{"class":171},[155,110076,317],{"class":167},[155,110078,16959],{"class":263},[155,110080,110081,110083,110085],{"class":157,"line":570},[155,110082,88647],{"class":167},[155,110084,108728],{"class":226},[155,110086,30681],{"class":171},[155,110088,110089,110091,110093,110095],{"class":157,"line":575},[155,110090,108735],{"class":171},[155,110092,317],{"class":167},[155,110094,22907],{"class":171},[155,110096,22579],{"class":167},[155,110098,110099],{"class":157,"line":581},[155,110100,108746],{"class":161},[155,110102,110103],{"class":157,"line":592},[155,110104,22074],{"class":171},[155,110106,110107],{"class":157,"line":610},[155,110108,108755],{"class":161},[155,110110,110111],{"class":157,"line":622},[155,110112,110113],{"class":161},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[155,110115,110116],{"class":157,"line":638},[155,110117,110118],{"class":161},"    \u002F\u002F 1.声明一个定时器变量\n",[155,110120,110121],{"class":157,"line":650},[155,110122,110123],{"class":161},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[155,110125,110126],{"class":157,"line":662},[155,110127,110128],{"class":161},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[155,110130,110131],{"class":157,"line":678},[155,110132,110133],{"class":161},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[155,110135,110136],{"class":157,"line":694},[155,110137,110138],{"class":161},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[155,110140,110141,110143,110146,110148,110150,110152,110154],{"class":157,"line":706},[155,110142,88647],{"class":167},[155,110144,110145],{"class":226}," throttle",[155,110147,230],{"class":171},[155,110149,109200],{"class":323},[155,110151,7589],{"class":171},[155,110153,20776],{"class":323},[155,110155,32269],{"class":171},[155,110157,110158,110160],{"class":157,"line":715},[155,110159,98335],{"class":167},[155,110161,109213],{"class":171},[155,110163,110164,110166,110168],{"class":157,"line":720},[155,110165,92545],{"class":167},[155,110167,77481],{"class":167},[155,110169,73015],{"class":171},[155,110171,110172,110174,110176,110178],{"class":157,"line":739},[155,110173,2803],{"class":167},[155,110175,21561],{"class":171},[155,110177,20306],{"class":167},[155,110179,110180],{"class":171},"timer) {\n",[155,110182,110183,110186,110188,110190,110192,110194],{"class":157,"line":745},[155,110184,110185],{"class":171},"          timer ",[155,110187,317],{"class":167},[155,110189,109254],{"class":226},[155,110191,230],{"class":171},[155,110193,73012],{"class":167},[155,110195,73015],{"class":171},[155,110197,110198,110201],{"class":157,"line":773},[155,110199,110200],{"class":226},"            fn",[155,110202,294],{"class":171},[155,110204,110205],{"class":157,"line":779},[155,110206,110207],{"class":161},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[155,110209,110210],{"class":157,"line":785},[155,110211,110212],{"class":161},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[155,110214,110215,110218,110220],{"class":157,"line":791},[155,110216,110217],{"class":171},"            timer ",[155,110219,317],{"class":167},[155,110221,110222],{"class":263}," null\n",[155,110224,110225],{"class":157,"line":796},[155,110226,110227],{"class":161},"            \u002F\u002F 不能用clearTimeout(timer)\n",[155,110229,110230],{"class":157,"line":802},[155,110231,110232],{"class":161},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[155,110234,110235],{"class":157,"line":808},[155,110236,110237],{"class":171},"          }, t)\n",[155,110239,110240],{"class":157,"line":819},[155,110241,22414],{"class":171},[155,110243,110244],{"class":157,"line":1832},[155,110245,70961],{"class":171},[155,110247,110248],{"class":157,"line":1838},[155,110249,22074],{"class":171},[155,110251,110252,110254,110256,110258,110260,110262,110264,110266,110268],{"class":157,"line":1844},[155,110253,108770],{"class":171},[155,110255,76376],{"class":226},[155,110257,230],{"class":171},[155,110259,108777],{"class":732},[155,110261,7589],{"class":171},[155,110263,109736],{"class":226},[155,110265,108786],{"class":171},[155,110267,83637],{"class":263},[155,110269,1238],{"class":171},[155,110271,110272,110274,110276],{"class":157,"line":1850},[155,110273,70980],{"class":171},[155,110275,70376],{"class":69863},[155,110277,69870],{"class":171},[155,110279,110280,110282,110284],{"class":157,"line":1861},[155,110281,70348],{"class":171},[155,110283,70363],{"class":69863},[155,110285,69870],{"class":171},[155,110287,110288],{"class":157,"line":1866},[155,110289,217],{"emptyLinePlaceholder":216},[155,110291,110292,110294,110296],{"class":157,"line":1871},[155,110293,70348],{"class":171},[155,110295,69198],{"class":69863},[155,110297,69870],{"class":171},[14,110299,110301],{"id":110300},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[146,110303,110305],{"className":71630,"code":110304,"language":71632,"meta":39,"style":39},"\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",[152,110306,110307,110315,110323,110328,110333,110338,110343,110347,110355],{"__ignoreMap":39},[155,110308,110309,110311,110313],{"class":157,"line":158},[155,110310,20959],{"class":171},[155,110312,70363],{"class":69863},[155,110314,69870],{"class":171},[155,110316,110317,110319,110321],{"class":157,"line":46},[155,110318,70707],{"class":171},[155,110320,70376],{"class":69863},[155,110322,69870],{"class":171},[155,110324,110325],{"class":157,"line":121},[155,110326,110327],{"class":171},"    let timer = null\n",[155,110329,110330],{"class":157,"line":180},[155,110331,110332],{"class":171},"    timer = setTimeout(() => {\n",[155,110334,110335],{"class":157,"line":194},[155,110336,110337],{"class":171},"      clearTimeout(timer)\n",[155,110339,110340],{"class":157,"line":200},[155,110341,110342],{"class":171},"      console.log(timer)\n",[155,110344,110345],{"class":157,"line":213},[155,110346,78788],{"class":171},[155,110348,110349,110351,110353],{"class":157,"line":220},[155,110350,70980],{"class":171},[155,110352,70376],{"class":69863},[155,110354,69870],{"class":171},[155,110356,110357,110359,110361],{"class":157,"line":245},[155,110358,70348],{"class":171},[155,110360,70363],{"class":69863},[155,110362,69870],{"class":171},[24,110364,110365],{},"输出为1",[24,110367,110368],{},"在开启的定时器里边写清除定时器",[24,110370,110371],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[14,110373,110375],{"id":110374},"_4174-节流综合案例","4.17.4 节流综合案例",[24,110377,110378],{},"页面打开，可以记录上一次的视频播放位置",[24,110380,110381],{},[37,110382],{"alt":39,"src":110383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[24,110385,110386],{},[37,110387],{"alt":39,"src":110388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[146,110390,110392],{"className":69196,"code":110391,"language":69198,"meta":39,"style":39},"\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",[152,110393,110394,110404,110418,110422,110430,110444,110464,110484,110506,110519,110527,110533,110543,110553,110563,110567,110571,110578,110591,110603,110607,110611,110621,110633,110647,110651,110655,110662,110672,110685,110697,110707,110717,110733,110745,110749,110753,110761,110771,110783,110793,110803,110813,110817,110821,110831,110842,110846,110854,110862,110866,110874,110889,110904,110919,110940,110948,110956,110971,110993,111001,111016,111042,111068,111094,111102,111110,111129,111137,111142,111161,111166,111184,111189,111194,111202,111207,111221,111229,111234,111251,111255,111260,111282,111286,111294,111302,111306],{"__ignoreMap":39},[155,110395,110396,110398,110400,110402],{"class":157,"line":158},[155,110397,69860],{"class":171},[155,110399,69864],{"class":69863},[155,110401,69867],{"class":226},[155,110403,69870],{"class":171},[155,110405,110406,110408,110410,110412,110414,110416],{"class":157,"line":46},[155,110407,20959],{"class":171},[155,110409,69198],{"class":69863},[155,110411,69879],{"class":226},[155,110413,317],{"class":171},[155,110415,69884],{"class":732},[155,110417,69870],{"class":171},[155,110419,110420],{"class":157,"line":121},[155,110421,217],{"emptyLinePlaceholder":216},[155,110423,110424,110426,110428],{"class":157,"line":180},[155,110425,20959],{"class":171},[155,110427,69897],{"class":69863},[155,110429,69870],{"class":171},[155,110431,110432,110434,110436,110438,110440,110442],{"class":157,"line":194},[155,110433,70707],{"class":171},[155,110435,69907],{"class":69863},[155,110437,69910],{"class":226},[155,110439,317],{"class":171},[155,110441,69915],{"class":732},[155,110443,77690],{"class":171},[155,110445,110446,110448,110450,110452,110454,110456,110458,110460,110462],{"class":157,"line":200},[155,110447,70707],{"class":171},[155,110449,69907],{"class":69863},[155,110451,69926],{"class":226},[155,110453,317],{"class":171},[155,110455,69931],{"class":732},[155,110457,69934],{"class":226},[155,110459,317],{"class":171},[155,110461,69939],{"class":732},[155,110463,77690],{"class":171},[155,110465,110466,110468,110470,110472,110474,110476,110478,110480,110482],{"class":157,"line":213},[155,110467,70707],{"class":171},[155,110469,69907],{"class":69863},[155,110471,34745],{"class":226},[155,110473,317],{"class":171},[155,110475,69954],{"class":732},[155,110477,69934],{"class":226},[155,110479,317],{"class":171},[155,110481,69961],{"class":732},[155,110483,77690],{"class":171},[155,110485,110486,110488,110490,110492,110494,110497,110499,110501,110504],{"class":157,"line":220},[155,110487,70707],{"class":171},[155,110489,69907],{"class":69863},[155,110491,34745],{"class":226},[155,110493,317],{"class":171},[155,110495,110496],{"class":732},"\"referrer\"",[155,110498,69934],{"class":226},[155,110500,317],{"class":171},[155,110502,110503],{"class":732},"\"never\"",[155,110505,77690],{"class":171},[155,110507,110508,110510,110512,110515,110517],{"class":157,"line":245},[155,110509,70707],{"class":171},[155,110511,69970],{"class":69863},[155,110513,110514],{"class":171},">综合案例\u003C\u002F",[155,110516,69970],{"class":69863},[155,110518,69870],{"class":171},[155,110520,110521,110523,110525],{"class":157,"line":251},[155,110522,70707],{"class":171},[155,110524,20011],{"class":69863},[155,110526,69870],{"class":171},[155,110528,110529,110531],{"class":157,"line":257},[155,110530,26266],{"class":69863},[155,110532,35397],{"class":171},[155,110534,110535,110537,110539,110541],{"class":157,"line":270},[155,110536,73258],{"class":263},[155,110538,70000],{"class":171},[155,110540,1109],{"class":263},[155,110542,21206],{"class":171},[155,110544,110545,110547,110549,110551],{"class":157,"line":276},[155,110546,73269],{"class":263},[155,110548,70000],{"class":171},[155,110550,1109],{"class":263},[155,110552,21206],{"class":171},[155,110554,110555,110557,110559,110561],{"class":157,"line":297},[155,110556,91159],{"class":263},[155,110558,70000],{"class":171},[155,110560,79068],{"class":263},[155,110562,21206],{"class":171},[155,110564,110565],{"class":157,"line":302},[155,110566,22074],{"class":171},[155,110568,110569],{"class":157,"line":308},[155,110570,217],{"emptyLinePlaceholder":216},[155,110572,110573,110576],{"class":157,"line":366},[155,110574,110575],{"class":226},"    .container",[155,110577,35397],{"class":171},[155,110579,110580,110582,110584,110587,110589],{"class":157,"line":379},[155,110581,73334],{"class":263},[155,110583,70000],{"class":171},[155,110585,110586],{"class":263},"1200",[155,110588,70055],{"class":167},[155,110590,21206],{"class":171},[155,110592,110593,110595,110597,110599,110601],{"class":157,"line":385},[155,110594,73269],{"class":263},[155,110596,70000],{"class":171},[155,110598,1109],{"class":263},[155,110600,70119],{"class":263},[155,110602,21206],{"class":171},[155,110604,110605],{"class":157,"line":415},[155,110606,22074],{"class":171},[155,110608,110609],{"class":157,"line":452},[155,110610,217],{"emptyLinePlaceholder":216},[155,110612,110613,110616,110619],{"class":157,"line":480},[155,110614,110615],{"class":226},"    .video",[155,110617,110618],{"class":69863}," video",[155,110620,35397],{"class":171},[155,110622,110623,110625,110627,110629,110631],{"class":157,"line":486},[155,110624,73334],{"class":263},[155,110626,70000],{"class":171},[155,110628,20389],{"class":263},[155,110630,2938],{"class":167},[155,110632,21206],{"class":171},[155,110634,110635,110637,110639,110641,110643,110645],{"class":157,"line":499},[155,110636,73258],{"class":263},[155,110638,70000],{"class":171},[155,110640,3458],{"class":263},[155,110642,70055],{"class":167},[155,110644,1151],{"class":263},[155,110646,21206],{"class":171},[155,110648,110649],{"class":157,"line":505},[155,110650,22074],{"class":171},[155,110652,110653],{"class":157,"line":528},[155,110654,217],{"emptyLinePlaceholder":216},[155,110656,110657,110660],{"class":157,"line":549},[155,110658,110659],{"class":226},"    .elevator",[155,110661,35397],{"class":171},[155,110663,110664,110666,110668,110670],{"class":157,"line":570},[155,110665,73322],{"class":263},[155,110667,70000],{"class":171},[155,110669,104796],{"class":263},[155,110671,21206],{"class":171},[155,110673,110674,110676,110678,110681,110683],{"class":157,"line":575},[155,110675,73510],{"class":263},[155,110677,70000],{"class":171},[155,110679,110680],{"class":263},"280",[155,110682,70055],{"class":167},[155,110684,21206],{"class":171},[155,110686,110687,110689,110691,110693,110695],{"class":157,"line":581},[155,110688,104990],{"class":263},[155,110690,70000],{"class":171},[155,110692,3458],{"class":263},[155,110694,70055],{"class":167},[155,110696,21206],{"class":171},[155,110698,110699,110701,110703,110705],{"class":157,"line":592},[155,110700,104803],{"class":263},[155,110702,70000],{"class":171},[155,110704,104808],{"class":263},[155,110706,21206],{"class":171},[155,110708,110709,110711,110713,110715],{"class":157,"line":610},[155,110710,80284],{"class":263},[155,110712,70000],{"class":171},[155,110714,79405],{"class":263},[155,110716,21206],{"class":171},[155,110718,110719,110721,110723,110725,110727,110729,110731],{"class":157,"line":622},[155,110720,80540],{"class":263},[155,110722,70000],{"class":171},[155,110724,329],{"class":263},[155,110726,70055],{"class":167},[155,110728,70084],{"class":263},[155,110730,80807],{"class":263},[155,110732,21206],{"class":171},[155,110734,110735,110737,110739,110741,110743],{"class":157,"line":638},[155,110736,73334],{"class":263},[155,110738,70000],{"class":171},[155,110740,2932],{"class":263},[155,110742,70055],{"class":167},[155,110744,21206],{"class":171},[155,110746,110747],{"class":157,"line":650},[155,110748,22074],{"class":171},[155,110750,110751],{"class":157,"line":662},[155,110752,217],{"emptyLinePlaceholder":216},[155,110754,110755,110757,110759],{"class":157,"line":678},[155,110756,110659],{"class":226},[155,110758,21311],{"class":69863},[155,110760,35397],{"class":171},[155,110762,110763,110765,110767,110769],{"class":157,"line":694},[155,110764,73572],{"class":263},[155,110766,70000],{"class":171},[155,110768,79432],{"class":263},[155,110770,21206],{"class":171},[155,110772,110773,110775,110777,110779,110781],{"class":157,"line":706},[155,110774,73258],{"class":263},[155,110776,70000],{"class":171},[155,110778,565],{"class":263},[155,110780,70055],{"class":167},[155,110782,21206],{"class":171},[155,110784,110785,110787,110789,110791],{"class":157,"line":715},[155,110786,82533],{"class":263},[155,110788,70000],{"class":171},[155,110790,73300],{"class":263},[155,110792,21206],{"class":171},[155,110794,110795,110797,110799,110801],{"class":157,"line":720},[155,110796,75849],{"class":263},[155,110798,70000],{"class":171},[155,110800,70155],{"class":263},[155,110802,21206],{"class":171},[155,110804,110805,110807,110809,110811],{"class":157,"line":739},[155,110806,75979],{"class":263},[155,110808,70000],{"class":171},[155,110810,80633],{"class":263},[155,110812,21206],{"class":171},[155,110814,110815],{"class":157,"line":745},[155,110816,22074],{"class":171},[155,110818,110819],{"class":157,"line":773},[155,110820,217],{"emptyLinePlaceholder":216},[155,110822,110823,110825,110827,110829],{"class":157,"line":779},[155,110824,110659],{"class":226},[155,110826,21311],{"class":69863},[155,110828,82587],{"class":226},[155,110830,35397],{"class":171},[155,110832,110833,110835,110837,110840],{"class":157,"line":785},[155,110834,75979],{"class":263},[155,110836,70000],{"class":171},[155,110838,110839],{"class":263},"#1286ff",[155,110841,21206],{"class":171},[155,110843,110844],{"class":157,"line":791},[155,110845,22074],{"class":171},[155,110847,110848,110850,110852],{"class":157,"line":796},[155,110849,70980],{"class":171},[155,110851,20011],{"class":69863},[155,110853,69870],{"class":171},[155,110855,110856,110858,110860],{"class":157,"line":802},[155,110857,70348],{"class":171},[155,110859,69897],{"class":69863},[155,110861,69870],{"class":171},[155,110863,110864],{"class":157,"line":808},[155,110865,217],{"emptyLinePlaceholder":216},[155,110867,110868,110870,110872],{"class":157,"line":819},[155,110869,20959],{"class":171},[155,110871,70363],{"class":69863},[155,110873,69870],{"class":171},[155,110875,110876,110878,110880,110882,110884,110887],{"class":157,"line":1832},[155,110877,70707],{"class":171},[155,110879,70174],{"class":69863},[155,110881,72049],{"class":226},[155,110883,317],{"class":171},[155,110885,110886],{"class":732},"\"container\"",[155,110888,69870],{"class":171},[155,110890,110891,110893,110895,110897,110899,110902],{"class":157,"line":1838},[155,110892,69904],{"class":171},[155,110894,70174],{"class":69863},[155,110896,72049],{"class":226},[155,110898,317],{"class":171},[155,110900,110901],{"class":732},"\"header\"",[155,110903,69870],{"class":171},[155,110905,110906,110908,110910,110912,110914,110917],{"class":157,"line":1844},[155,110907,73797],{"class":171},[155,110909,20318],{"class":69863},[155,110911,79620],{"class":226},[155,110913,317],{"class":171},[155,110915,110916],{"class":732},"\"http:\u002F\u002Fpip.itcast.cn\"",[155,110918,69870],{"class":171},[155,110920,110921,110923,110925,110927,110929,110932,110934,110936,110938],{"class":157,"line":1850},[155,110922,73865],{"class":171},[155,110924,37],{"class":69863},[155,110926,73802],{"class":226},[155,110928,317],{"class":171},[155,110930,110931],{"class":732},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[155,110933,73810],{"class":226},[155,110935,317],{"class":171},[155,110937,15430],{"class":732},[155,110939,77690],{"class":171},[155,110941,110942,110944,110946],{"class":157,"line":1861},[155,110943,73970],{"class":171},[155,110945,20318],{"class":69863},[155,110947,69870],{"class":171},[155,110949,110950,110952,110954],{"class":157,"line":1866},[155,110951,70339],{"class":171},[155,110953,70174],{"class":69863},[155,110955,69870],{"class":171},[155,110957,110958,110960,110962,110964,110966,110969],{"class":157,"line":1871},[155,110959,69904],{"class":171},[155,110961,70174],{"class":69863},[155,110963,72049],{"class":226},[155,110965,317],{"class":171},[155,110967,110968],{"class":732},"\"video\"",[155,110970,69870],{"class":171},[155,110972,110973,110975,110977,110979,110981,110984,110987,110989,110991],{"class":157,"line":1877},[155,110974,73797],{"class":171},[155,110976,47972],{"class":69863},[155,110978,73802],{"class":226},[155,110980,317],{"class":171},[155,110982,110983],{"class":732},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[155,110985,110986],{"class":226}," controls",[155,110988,73877],{"class":171},[155,110990,47972],{"class":69863},[155,110992,69870],{"class":171},[155,110994,110995,110997,110999],{"class":157,"line":1883},[155,110996,70339],{"class":171},[155,110998,70174],{"class":69863},[155,111000,69870],{"class":171},[155,111002,111003,111005,111007,111009,111011,111014],{"class":157,"line":1894},[155,111004,69904],{"class":171},[155,111006,70174],{"class":69863},[155,111008,72049],{"class":226},[155,111010,317],{"class":171},[155,111012,111013],{"class":732},"\"elevator\"",[155,111015,69870],{"class":171},[155,111017,111018,111020,111022,111024,111026,111028,111031,111033,111035,111038,111040],{"class":157,"line":1900},[155,111019,73797],{"class":171},[155,111021,20318],{"class":69863},[155,111023,79620],{"class":226},[155,111025,317],{"class":171},[155,111027,82799],{"class":732},[155,111029,111030],{"class":226}," data-ref",[155,111032,317],{"class":171},[155,111034,110968],{"class":732},[155,111036,111037],{"class":171},">视频介绍\u003C\u002F",[155,111039,20318],{"class":69863},[155,111041,69870],{"class":171},[155,111043,111044,111046,111048,111050,111052,111054,111056,111058,111061,111064,111066],{"class":157,"line":1911},[155,111045,73797],{"class":171},[155,111047,20318],{"class":69863},[155,111049,79620],{"class":226},[155,111051,317],{"class":171},[155,111053,82799],{"class":732},[155,111055,111030],{"class":226},[155,111057,317],{"class":171},[155,111059,111060],{"class":732},"\"intro\"",[155,111062,111063],{"class":171},">课程简介\u003C\u002F",[155,111065,20318],{"class":69863},[155,111067,69870],{"class":171},[155,111069,111070,111072,111074,111076,111078,111080,111082,111084,111087,111090,111092],{"class":157,"line":1917},[155,111071,73797],{"class":171},[155,111073,20318],{"class":69863},[155,111075,79620],{"class":226},[155,111077,317],{"class":171},[155,111079,82799],{"class":732},[155,111081,111030],{"class":226},[155,111083,317],{"class":171},[155,111085,111086],{"class":732},"\"outline\"",[155,111088,111089],{"class":171},">评论列表\u003C\u002F",[155,111091,20318],{"class":69863},[155,111093,69870],{"class":171},[155,111095,111096,111098,111100],{"class":157,"line":1927},[155,111097,70339],{"class":171},[155,111099,70174],{"class":69863},[155,111101,69870],{"class":171},[155,111103,111104,111106,111108],{"class":157,"line":1933},[155,111105,70980],{"class":171},[155,111107,70174],{"class":69863},[155,111109,69870],{"class":171},[155,111111,111112,111114,111116,111118,111120,111123,111125,111127],{"class":157,"line":1943},[155,111113,70707],{"class":171},[155,111115,70376],{"class":69863},[155,111117,73802],{"class":226},[155,111119,317],{"class":171},[155,111121,111122],{"class":732},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[155,111124,73877],{"class":171},[155,111126,70376],{"class":69863},[155,111128,69870],{"class":171},[155,111130,111131,111133,111135],{"class":157,"line":1949},[155,111132,70707],{"class":171},[155,111134,70376],{"class":69863},[155,111136,69870],{"class":171},[155,111138,111139],{"class":157,"line":1959},[155,111140,111141],{"class":161},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[155,111143,111144,111146,111148,111150,111152,111154,111156,111159],{"class":157,"line":1964},[155,111145,31049],{"class":167},[155,111147,110618],{"class":263},[155,111149,33391],{"class":167},[155,111151,72959],{"class":171},[155,111153,72962],{"class":226},[155,111155,230],{"class":171},[155,111157,111158],{"class":732},"'video'",[155,111160,363],{"class":171},[155,111162,111163],{"class":157,"line":1970},[155,111164,111165],{"class":161},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[155,111167,111168,111171,111173,111175,111177,111180,111182],{"class":157,"line":1981},[155,111169,111170],{"class":171},"    video.ontimeupdate ",[155,111172,317],{"class":167},[155,111174,106918],{"class":171},[155,111176,109736],{"class":226},[155,111178,111179],{"class":171},"(() ",[155,111181,103285],{"class":167},[155,111183,35397],{"class":171},[155,111185,111186],{"class":157,"line":1986},[155,111187,111188],{"class":161},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[155,111190,111191],{"class":157,"line":1991},[155,111192,111193],{"class":161},"      \u002F\u002F 控制台输出当前的时间\n",[155,111195,111196,111199],{"class":157,"line":1997},[155,111197,111198],{"class":161},"      \u002F\u002F console.log(video.currentTime)",[155,111200,111201],{"class":161},"  \u002F\u002F获得当前的视频时间\n",[155,111203,111204],{"class":157,"line":2014},[155,111205,111206],{"class":161},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[155,111208,111209,111211,111213,111215,111218],{"class":157,"line":2046},[155,111210,93246],{"class":171},[155,111212,90217],{"class":226},[155,111214,230],{"class":171},[155,111216,111217],{"class":732},"'currentTime'",[155,111219,111220],{"class":171},", video.currentTime)\n",[155,111222,111223,111225,111227],{"class":157,"line":2062},[155,111224,73098],{"class":171},[155,111226,26273],{"class":263},[155,111228,363],{"class":171},[155,111230,111231],{"class":157,"line":2067},[155,111232,111233],{"class":161},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[155,111235,111236,111239,111242,111244,111247,111249],{"class":157,"line":2073},[155,111237,111238],{"class":171},"    video.",[155,111240,111241],{"class":226},"onloadeddata",[155,111243,33391],{"class":167},[155,111245,111246],{"class":171}," () ",[155,111248,103285],{"class":167},[155,111250,35397],{"class":171},[155,111252,111253],{"class":157,"line":2079},[155,111254,78575],{"class":161},[155,111256,111257],{"class":157,"line":2089},[155,111258,111259],{"class":161},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[155,111261,111262,111265,111267,111270,111272,111274,111276,111278,111280],{"class":157,"line":2095},[155,111263,111264],{"class":171},"      video.currentTime ",[155,111266,317],{"class":167},[155,111268,111269],{"class":171}," localStorage.",[155,111271,90248],{"class":226},[155,111273,230],{"class":171},[155,111275,111217],{"class":732},[155,111277,33541],{"class":171},[155,111279,89920],{"class":167},[155,111281,16959],{"class":263},[155,111283,111284],{"class":157,"line":2106},[155,111285,22074],{"class":171},[155,111287,111288,111290,111292],{"class":157,"line":2112},[155,111289,70980],{"class":171},[155,111291,70376],{"class":69863},[155,111293,69870],{"class":171},[155,111295,111296,111298,111300],{"class":157,"line":2122},[155,111297,70348],{"class":171},[155,111299,70363],{"class":69863},[155,111301,69870],{"class":171},[155,111303,111304],{"class":157,"line":2128},[155,111305,217],{"emptyLinePlaceholder":216},[155,111307,111308,111310,111312],{"class":157,"line":2138},[155,111309,70348],{"class":171},[155,111311,69198],{"class":69863},[155,111313,69870],{"class":171},[20011,111315,111316],{},"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":39,"searchDepth":46,"depth":46,"links":111318},[111319,111324,111328,111329,111330,111335,111340,111341,111342,111343,111350,111355,111356,111366,111370,111371,111375],{"id":95254,"depth":46,"text":95255,"children":111320},[111321,111322,111323],{"id":95258,"depth":121,"text":95259},{"id":95283,"depth":121,"text":95284},{"id":95295,"depth":121,"text":95296},{"id":95307,"depth":46,"text":95308,"children":111325},[111326,111327],{"id":95311,"depth":121,"text":95312},{"id":95326,"depth":121,"text":95327},{"id":95378,"depth":46,"text":95379},{"id":95422,"depth":46,"text":95423},{"id":95439,"depth":46,"text":95440,"children":111331},[111332,111333,111334],{"id":95443,"depth":121,"text":95444},{"id":95456,"depth":121,"text":95457},{"id":95561,"depth":121,"text":95562},{"id":95850,"depth":46,"text":95851,"children":111336},[111337,111338,111339],{"id":95854,"depth":121,"text":95855},{"id":96297,"depth":121,"text":96298},{"id":96708,"depth":121,"text":96709},{"id":96771,"depth":46,"text":96772},{"id":96850,"depth":46,"text":96851},{"id":96943,"depth":46,"text":96944},{"id":98788,"depth":46,"text":98789,"children":111344},[111345,111346,111347,111348,111349],{"id":98792,"depth":121,"text":98793},{"id":98804,"depth":121,"text":98805},{"id":99023,"depth":121,"text":99024},{"id":99041,"depth":121,"text":99042},{"id":99101,"depth":121,"text":99102},{"id":103369,"depth":46,"text":103370,"children":111351},[111352,111353,111354],{"id":103373,"depth":121,"text":103374},{"id":103391,"depth":121,"text":103392},{"id":103417,"depth":121,"text":103418},{"id":103426,"depth":46,"text":103427},{"id":103448,"depth":46,"text":103449,"children":111357},[111358,111359,111360,111361,111362,111363,111364,111365],{"id":103452,"depth":121,"text":103453},{"id":103713,"depth":121,"text":103714},{"id":103899,"depth":121,"text":103900},{"id":104266,"depth":121,"text":104267},{"id":104382,"depth":121,"text":104383},{"id":104418,"depth":121,"text":104419},{"id":104465,"depth":121,"text":104466},{"id":104499,"depth":121,"text":104500},{"id":105862,"depth":46,"text":105863,"children":111367},[111368,111369],{"id":105866,"depth":121,"text":105867},{"id":105903,"depth":121,"text":105904},{"id":107258,"depth":46,"text":107259},{"id":107629,"depth":46,"text":107630,"children":111372},[111373,111374],{"id":107633,"depth":121,"text":107634},{"id":107667,"depth":121,"text":107668},{"id":108396,"depth":46,"text":108397,"children":111376},[111377,111378,111379,111380],{"id":108400,"depth":121,"text":108401},{"id":109358,"depth":121,"text":109359},{"id":110300,"depth":121,"text":110301},{"id":110374,"depth":121,"text":110375},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":95243,"description":20020},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":111387,"title":111388,"body":111389,"description":111400,"extension":20021,"meta":111401,"navigation":216,"path":111403,"seo":111404,"stem":111405,"__hash__":111406},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":111390,"toc":111398},[111391],[24,111392,111393,111394],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[20318,111395,111396],{"href":111396,"rel":111397},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[43656],{"title":39,"searchDepth":46,"depth":46,"links":111399},[],"三件套第三套学习",{"category":111402},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":111388,"description":111400},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":111408,"title":111409,"body":111410,"description":20020,"extension":20021,"meta":111515,"navigation":216,"path":111516,"seo":111517,"stem":111518,"__hash__":111519},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":111411,"toc":111510},[111412,111419,111422,111425,111428,111432,111441,111444,111447,111451,111460,111463,111467,111470,111490,111493,111507],[24,111413,111414],{},[20318,111415,111418],{"href":111416,"rel":111417},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[43656],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,111420,111409],{"id":111421},"_1安装",[24,111423,111424],{},"numpy是科学计算基础库,底层是C语言",[24,111426,111427],{},"三种方式：",[20037,111429,111431],{"id":111430},"_11-通过pip安装","1.1 通过pip安装",[146,111433,111435],{"className":148,"code":111434,"language":150,"meta":39,"style":39},"pip install numpy\n",[152,111436,111437],{"__ignoreMap":39},[155,111438,111439],{"class":157,"line":158},[155,111440,111434],{"class":171},[24,111442,111443],{},"首选方式，自动处理依赖项",[24,111445,111446],{},"在提示系统命令符中使用cmd",[20037,111448,111450],{"id":111449},"_12-通过anaconda安装","1.2 通过Anaconda安装",[146,111452,111454],{"className":148,"code":111453,"language":150,"meta":39,"style":39},"conda install numpy\n",[152,111455,111456],{"__ignoreMap":39},[155,111457,111458],{"class":157,"line":158},[155,111459,111453],{"class":171},[24,111461,111462],{},"自动解决环境依赖",[20037,111464,111466],{"id":111465},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[24,111468,111469],{},"对于Debian\u002FUbuntu",[146,111471,111473],{"className":148,"code":111472,"language":150,"meta":39,"style":39},"sudo apt-get install python3-numpy\n",[152,111474,111475],{"__ignoreMap":39},[155,111476,111477,111480,111482,111485,111487],{"class":157,"line":158},[155,111478,111479],{"class":171},"sudo apt",[155,111481,2039],{"class":167},[155,111483,111484],{"class":171},"get install python3",[155,111486,2039],{"class":167},[155,111488,111489],{"class":171},"numpy\n",[24,111491,111492],{},"对于Fedora:",[146,111494,111496],{"className":148,"code":111495,"language":150,"meta":39,"style":39},"sudo dnf install python3-numpy\n",[152,111497,111498],{"__ignoreMap":39},[155,111499,111500,111503,111505],{"class":157,"line":158},[155,111501,111502],{"class":171},"sudo dnf install python3",[155,111504,2039],{"class":167},[155,111506,111489],{"class":171},[20011,111508,111509],{},"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":39,"searchDepth":46,"depth":46,"links":111511},[111512,111513,111514],{"id":111430,"depth":46,"text":111431},{"id":111449,"depth":46,"text":111450},{"id":111465,"depth":46,"text":111466},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":111409,"description":20020},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":111521,"title":111522,"body":111523,"description":20020,"extension":20021,"meta":111636,"navigation":216,"path":111637,"seo":111638,"stem":111639,"__hash__":111640},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":111524,"toc":111634},[111525,111528,111531,111534,111537,111540,111543,111546,111549,111552,111628,111631],[10,111526,111522],{"id":111527},"_10算数函数",[24,111529,111530],{},"加减乘除运算跟python基础语法没区别",[24,111532,111533],{},"除了python那种方法外还可以使用函数",[24,111535,111536],{},"加：np.add(a,b)",[24,111538,111539],{},"减：np.subtract(a,b)",[24,111541,111542],{},"乘：np.multiply(a,b)",[24,111544,111545],{},"除：np.divide(a,b) == a\u002Fb",[24,111547,111548],{},"取余：np.mod(a,b) == a%b",[24,111550,111551],{},"必须会的用法：",[146,111553,111555],{"className":148,"code":111554,"language":150,"meta":39,"style":39},"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",[152,111556,111557,111579,111600,111610,111623],{"__ignoreMap":39},[155,111558,111559,111561,111563,111566,111568,111571,111573,111575,111577],{"class":157,"line":158},[155,111560,20318],{"class":171},[155,111562,317],{"class":167},[155,111564,111565],{"class":171},"np.arange(",[155,111567,20492],{"class":263},[155,111569,111570],{"class":171},").reshape(",[155,111572,4444],{"class":263},[155,111574,332],{"class":171},[155,111576,4444],{"class":263},[155,111578,363],{"class":171},[155,111580,111581,111583,111585,111588,111590,111592,111594,111596,111598],{"class":157,"line":46},[155,111582,20342],{"class":171},[155,111584,317],{"class":167},[155,111586,111587],{"class":171},"np.array([",[155,111589,565],{"class":263},[155,111591,332],{"class":171},[155,111593,565],{"class":263},[155,111595,332],{"class":171},[155,111597,565],{"class":263},[155,111599,17676],{"class":171},[155,111601,111602,111605,111607],{"class":157,"line":121},[155,111603,111604],{"class":171},"result",[155,111606,317],{"class":167},[155,111608,111609],{"class":171},"np.empty_like(a)\n",[155,111611,111612,111615,111618,111620],{"class":157,"line":180},[155,111613,111614],{"class":171},"np.add(a,b,",[155,111616,111617],{"class":323},"out",[155,111619,317],{"class":167},[155,111621,111622],{"class":171},"result)\n",[155,111624,111625],{"class":157,"line":194},[155,111626,111627],{"class":171},"result\n",[24,111629,111630],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[20011,111632,111633],{},"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":39,"searchDepth":46,"depth":46,"links":111635},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":111522,"description":20020},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":111642,"title":111643,"body":111644,"description":20020,"extension":20021,"meta":112406,"navigation":216,"path":112407,"seo":112408,"stem":112409,"__hash__":112410},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":111645,"toc":112393},[111646,111649,111652,111655,111659,111698,111702,111746,111806,111810,111813,111852,111855,111900,111904,111940,111944,112013,112017,112081,112085,112088,112091,112094,112097,112133,112137,112177,112181,112253,112256,112260,112323,112327,112390],[10,111647,111643],{"id":111648},"_11统计函数",[24,111650,111651],{},"sum max min mean",[24,111653,111654],{},"这些有axis参数，可以指定方向",[20037,111656,111658],{"id":111657},"_111-sum求和函数","11.1 sum()求和函数",[146,111660,111662],{"className":148,"code":111661,"language":150,"meta":39,"style":39},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[152,111663,111664,111669,111690],{"__ignoreMap":39},[155,111665,111666],{"class":157,"line":158},[155,111667,111668],{"class":161},"#创建一维数组\n",[155,111670,111671,111673,111675,111678,111680,111682,111684,111686,111688],{"class":157,"line":46},[155,111672,20318],{"class":171},[155,111674,317],{"class":167},[155,111676,111677],{"class":171},"np.random.randint(",[155,111679,329],{"class":263},[155,111681,332],{"class":171},[155,111683,20389],{"class":263},[155,111685,332],{"class":171},[155,111687,3458],{"class":263},[155,111689,363],{"class":171},[155,111691,111692,111695],{"class":157,"line":121},[155,111693,111694],{"class":171},"np.sum(a)",[155,111696,111697],{"class":161},"#求和\n",[20037,111699,111701],{"id":111700},"_112-max求最大值函数","11.2 max()求最大值函数",[146,111703,111705],{"className":148,"code":111704,"language":150,"meta":39,"style":39},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[152,111706,111707,111711,111731,111736,111741],{"__ignoreMap":39},[155,111708,111709],{"class":157,"line":158},[155,111710,111668],{"class":161},[155,111712,111713,111715,111717,111719,111721,111723,111725,111727,111729],{"class":157,"line":46},[155,111714,20318],{"class":171},[155,111716,317],{"class":167},[155,111718,111677],{"class":171},[155,111720,329],{"class":263},[155,111722,332],{"class":171},[155,111724,20389],{"class":263},[155,111726,332],{"class":171},[155,111728,3458],{"class":263},[155,111730,363],{"class":171},[155,111732,111733],{"class":157,"line":121},[155,111734,111735],{"class":171},"np.max(a)\n",[155,111737,111738],{"class":157,"line":180},[155,111739,111740],{"class":161},"#最大索引(求最大元素的索引)arg\n",[155,111742,111743],{"class":157,"line":194},[155,111744,111745],{"class":171},"np.argmax(a)\n",[146,111747,111749],{"className":148,"code":111748,"language":150,"meta":39,"style":39},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[152,111750,111751,111772,111792,111796],{"__ignoreMap":39},[155,111752,111753,111755,111757,111760,111762,111764,111766,111768,111770],{"class":157,"line":158},[155,111754,30747],{"class":171},[155,111756,317],{"class":167},[155,111758,111759],{"class":171}," np.array([",[155,111761,329],{"class":263},[155,111763,7589],{"class":171},[155,111765,350],{"class":263},[155,111767,7589],{"class":171},[155,111769,4444],{"class":263},[155,111771,17676],{"class":171},[155,111773,111774,111776,111778,111780,111782,111784,111786,111788,111790],{"class":157,"line":46},[155,111775,30773],{"class":171},[155,111777,317],{"class":167},[155,111779,111759],{"class":171},[155,111781,4444],{"class":263},[155,111783,7589],{"class":171},[155,111785,360],{"class":263},[155,111787,7589],{"class":171},[155,111789,1264],{"class":263},[155,111791,17676],{"class":171},[155,111793,111794],{"class":157,"line":121},[155,111795,217],{"emptyLinePlaceholder":216},[155,111797,111798,111800,111803],{"class":157,"line":180},[155,111799,15451],{"class":263},[155,111801,111802],{"class":171},"(np.maximum(a, b))   ",[155,111804,111805],{"class":161},"# [3 5 4]，每个位置上取较大值\n",[20037,111807,111809],{"id":111808},"_113-mean求平均值函数","11.3 mean()求平均值函数",[24,111811,111812],{},"①一维数组：",[146,111814,111816],{"className":148,"code":111815,"language":150,"meta":39,"style":39},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[152,111817,111818,111822,111842,111847],{"__ignoreMap":39},[155,111819,111820],{"class":157,"line":158},[155,111821,111668],{"class":161},[155,111823,111824,111826,111828,111830,111832,111834,111836,111838,111840],{"class":157,"line":46},[155,111825,20318],{"class":171},[155,111827,317],{"class":167},[155,111829,111677],{"class":171},[155,111831,329],{"class":263},[155,111833,332],{"class":171},[155,111835,20389],{"class":263},[155,111837,332],{"class":171},[155,111839,3458],{"class":263},[155,111841,363],{"class":171},[155,111843,111844],{"class":157,"line":121},[155,111845,111846],{"class":161},"#求平均值\n",[155,111848,111849],{"class":157,"line":180},[155,111850,111851],{"class":171},"np.mean(a)\n",[24,111853,111854],{},"②二维数组",[146,111856,111858],{"className":148,"code":111857,"language":150,"meta":39,"style":39},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[152,111859,111860,111865,111890,111895],{"__ignoreMap":39},[155,111861,111862],{"class":157,"line":158},[155,111863,111864],{"class":161},"#二维数组\n",[155,111866,111867,111870,111872,111874,111876,111878,111880,111882,111884,111886,111888],{"class":157,"line":46},[155,111868,111869],{"class":171},"aa",[155,111871,317],{"class":167},[155,111873,111565],{"class":171},[155,111875,329],{"class":263},[155,111877,332],{"class":171},[155,111879,20589],{"class":263},[155,111881,111570],{"class":171},[155,111883,4444],{"class":263},[155,111885,332],{"class":171},[155,111887,1264],{"class":263},[155,111889,363],{"class":171},[155,111891,111892],{"class":157,"line":121},[155,111893,111894],{"class":161},"#对数组中的所有数求平均\n",[155,111896,111897],{"class":157,"line":180},[155,111898,111899],{"class":171},"np.mean(aa)\n",[20037,111901,111903],{"id":111902},"_114-median求中位数函数","11.4 median()求中位数函数",[146,111905,111907],{"className":148,"code":111906,"language":150,"meta":39,"style":39},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[152,111908,111909,111914,111930,111935],{"__ignoreMap":39},[155,111910,111911],{"class":157,"line":158},[155,111912,111913],{"class":161},"#求中位数\n",[155,111915,111916,111918,111920,111922,111924,111926,111928],{"class":157,"line":46},[155,111917,20342],{"class":171},[155,111919,317],{"class":167},[155,111921,111565],{"class":171},[155,111923,329],{"class":263},[155,111925,332],{"class":171},[155,111927,565],{"class":263},[155,111929,363],{"class":171},[155,111931,111932],{"class":157,"line":121},[155,111933,111934],{"class":171},"np.median(b)\n",[155,111936,111937],{"class":157,"line":180},[155,111938,111939],{"class":161},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[20037,111941,111943],{"id":111942},"_115-power求幂运算函数","11.5 power()求幂运算函数",[146,111945,111947],{"className":148,"code":111946,"language":150,"meta":39,"style":39},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[152,111948,111949,111965,111970,111975,111984,111989,111998],{"__ignoreMap":39},[155,111950,111951,111953,111955,111957,111959,111961,111963],{"class":157,"line":158},[155,111952,20342],{"class":171},[155,111954,317],{"class":167},[155,111956,111565],{"class":171},[155,111958,329],{"class":263},[155,111960,332],{"class":171},[155,111962,565],{"class":263},[155,111964,363],{"class":171},[155,111966,111967],{"class":157,"line":46},[155,111968,111969],{"class":161},"#幂运算\n",[155,111971,111972],{"class":157,"line":121},[155,111973,111974],{"class":161},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[155,111976,111977,111980,111982],{"class":157,"line":180},[155,111978,111979],{"class":171},"np.power(b,",[155,111981,360],{"class":263},[155,111983,363],{"class":171},[155,111985,111986],{"class":157,"line":194},[155,111987,111988],{"class":161},"#或者以下代码，将数据存储起来\n",[155,111990,111991,111993,111995],{"class":157,"line":200},[155,111992,20899],{"class":171},[155,111994,317],{"class":167},[155,111996,111997],{"class":171},"np.empty_like(b)\n",[155,111999,112000,112002,112004,112006,112008,112010],{"class":157,"line":213},[155,112001,111979],{"class":171},[155,112003,360],{"class":263},[155,112005,332],{"class":171},[155,112007,111617],{"class":323},[155,112009,317],{"class":167},[155,112011,112012],{"class":171},"y)\n",[20037,112014,112016],{"id":112015},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[146,112018,112020],{"className":148,"code":112019,"language":150,"meta":39,"style":39},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[152,112021,112022,112038,112043,112048,112052,112070],{"__ignoreMap":39},[155,112023,112024,112026,112028,112030,112032,112034,112036],{"class":157,"line":158},[155,112025,20342],{"class":171},[155,112027,317],{"class":167},[155,112029,111565],{"class":171},[155,112031,329],{"class":263},[155,112033,332],{"class":171},[155,112035,565],{"class":263},[155,112037,363],{"class":171},[155,112039,112040],{"class":157,"line":46},[155,112041,112042],{"class":161},"#开方\n",[155,112044,112045],{"class":157,"line":121},[155,112046,112047],{"class":171},"np.sqrt(b)\n",[155,112049,112050],{"class":157,"line":180},[155,112051,111988],{"class":161},[155,112053,112054,112056,112058,112061,112064,112066,112068],{"class":157,"line":194},[155,112055,20899],{"class":171},[155,112057,317],{"class":167},[155,112059,112060],{"class":171},"np.empty_like(b,",[155,112062,112063],{"class":323},"dtype",[155,112065,317],{"class":167},[155,112067,2833],{"class":263},[155,112069,363],{"class":171},[155,112071,112072,112075,112077,112079],{"class":157,"line":200},[155,112073,112074],{"class":171},"np.sqrt(b,",[155,112076,111617],{"class":323},[155,112078,317],{"class":167},[155,112080,112012],{"class":171},[20037,112082,112084],{"id":112083},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[24,112086,112087],{},"对数组中的元素累计求和，可指定轴",[24,112089,112090],{},"#累计求和的意思是：",[24,112092,112093],{},"a = np.array([1, 2, 3, 4])",[24,112095,112096],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[146,112098,112100],{"className":148,"code":112099,"language":150,"meta":39,"style":39},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[152,112101,112102,112118,112123,112128],{"__ignoreMap":39},[155,112103,112104,112106,112108,112110,112112,112114,112116],{"class":157,"line":158},[155,112105,20342],{"class":171},[155,112107,317],{"class":167},[155,112109,111565],{"class":171},[155,112111,329],{"class":263},[155,112113,332],{"class":171},[155,112115,565],{"class":263},[155,112117,363],{"class":171},[155,112119,112120],{"class":157,"line":46},[155,112121,112122],{"class":171},"np.cumsum(b)\n",[155,112124,112125],{"class":157,"line":121},[155,112126,112127],{"class":161},"#结果：\n",[155,112129,112130],{"class":157,"line":180},[155,112131,112132],{"class":161},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[20037,112134,112136],{"id":112135},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[146,112138,112140],{"className":148,"code":112139,"language":150,"meta":39,"style":39},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[152,112141,112142,112158,112163,112168,112172],{"__ignoreMap":39},[155,112143,112144,112146,112148,112150,112152,112154,112156],{"class":157,"line":158},[155,112145,20342],{"class":171},[155,112147,317],{"class":167},[155,112149,111565],{"class":171},[155,112151,329],{"class":263},[155,112153,332],{"class":171},[155,112155,565],{"class":263},[155,112157,363],{"class":171},[155,112159,112160],{"class":157,"line":46},[155,112161,112162],{"class":161},"#对数组中的元素累计求积，可指定轴\n",[155,112164,112165],{"class":157,"line":121},[155,112166,112167],{"class":171},"np.cumprod(b)\n",[155,112169,112170],{"class":157,"line":180},[155,112171,112127],{"class":161},[155,112173,112174],{"class":157,"line":194},[155,112175,112176],{"class":161},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[20037,112178,112180],{"id":112179},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[146,112182,112184],{"className":148,"code":112183,"language":150,"meta":39,"style":39},"#删除数组中的重复数据，并对数据进行排序\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",[152,112185,112186,112191,112239,112244,112248],{"__ignoreMap":39},[155,112187,112188],{"class":157,"line":158},[155,112189,112190],{"class":161},"#删除数组中的重复数据，并对数据进行排序\n",[155,112192,112193,112195,112197,112199,112201,112203,112205,112207,112209,112211,112213,112215,112217,112219,112221,112223,112225,112227,112229,112231,112233,112235,112237],{"class":157,"line":46},[155,112194,20318],{"class":171},[155,112196,317],{"class":167},[155,112198,111587],{"class":171},[155,112200,329],{"class":263},[155,112202,332],{"class":171},[155,112204,360],{"class":263},[155,112206,332],{"class":171},[155,112208,4444],{"class":263},[155,112210,332],{"class":171},[155,112212,1231],{"class":263},[155,112214,332],{"class":171},[155,112216,4444],{"class":263},[155,112218,332],{"class":171},[155,112220,565],{"class":263},[155,112222,332],{"class":171},[155,112224,11868],{"class":263},[155,112226,332],{"class":171},[155,112228,1109],{"class":263},[155,112230,332],{"class":171},[155,112232,20831],{"class":263},[155,112234,332],{"class":171},[155,112236,1264],{"class":263},[155,112238,17676],{"class":171},[155,112240,112241],{"class":157,"line":121},[155,112242,112243],{"class":171},"np.unique(a)\n",[155,112245,112246],{"class":157,"line":180},[155,112247,112127],{"class":161},[155,112249,112250],{"class":157,"line":194},[155,112251,112252],{"class":161},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[24,112254,112255],{},"升序形式排序",[20037,112257,112259],{"id":112258},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[146,112261,112263],{"className":148,"code":112262,"language":150,"meta":39,"style":39},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[152,112264,112265,112313,112318],{"__ignoreMap":39},[155,112266,112267,112269,112271,112273,112275,112277,112279,112281,112283,112285,112287,112289,112291,112293,112295,112297,112299,112301,112303,112305,112307,112309,112311],{"class":157,"line":158},[155,112268,20318],{"class":171},[155,112270,317],{"class":167},[155,112272,111587],{"class":171},[155,112274,329],{"class":263},[155,112276,332],{"class":171},[155,112278,360],{"class":263},[155,112280,332],{"class":171},[155,112282,4444],{"class":263},[155,112284,332],{"class":171},[155,112286,1231],{"class":263},[155,112288,332],{"class":171},[155,112290,4444],{"class":263},[155,112292,332],{"class":171},[155,112294,565],{"class":263},[155,112296,332],{"class":171},[155,112298,11868],{"class":263},[155,112300,332],{"class":171},[155,112302,1109],{"class":263},[155,112304,332],{"class":171},[155,112306,20831],{"class":263},[155,112308,332],{"class":171},[155,112310,1264],{"class":263},[155,112312,17676],{"class":171},[155,112314,112315],{"class":157,"line":46},[155,112316,112317],{"class":161},"#返回数组中非零元素的索引\n",[155,112319,112320],{"class":157,"line":121},[155,112321,112322],{"class":171},"np.nonzero(a)\n",[20037,112324,112326],{"id":112325},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[146,112328,112330],{"className":148,"code":112329,"language":150,"meta":39,"style":39},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[152,112331,112332,112380,112385],{"__ignoreMap":39},[155,112333,112334,112336,112338,112340,112342,112344,112346,112348,112350,112352,112354,112356,112358,112360,112362,112364,112366,112368,112370,112372,112374,112376,112378],{"class":157,"line":158},[155,112335,20318],{"class":171},[155,112337,317],{"class":167},[155,112339,111587],{"class":171},[155,112341,329],{"class":263},[155,112343,332],{"class":171},[155,112345,360],{"class":263},[155,112347,332],{"class":171},[155,112349,4444],{"class":263},[155,112351,332],{"class":171},[155,112353,1231],{"class":263},[155,112355,332],{"class":171},[155,112357,4444],{"class":263},[155,112359,332],{"class":171},[155,112361,565],{"class":263},[155,112363,332],{"class":171},[155,112365,11868],{"class":263},[155,112367,332],{"class":171},[155,112369,1109],{"class":263},[155,112371,332],{"class":171},[155,112373,20831],{"class":263},[155,112375,332],{"class":171},[155,112377,1264],{"class":263},[155,112379,17676],{"class":171},[155,112381,112382],{"class":157,"line":46},[155,112383,112384],{"class":161},"#计算一组数中最大值与最小值的差，可指定轴\n",[155,112386,112387],{"class":157,"line":121},[155,112388,112389],{"class":171},"np.ptp(a)\n",[20011,112391,112392],{},"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":39,"searchDepth":46,"depth":46,"links":112394},[112395,112396,112397,112398,112399,112400,112401,112402,112403,112404,112405],{"id":111657,"depth":46,"text":111658},{"id":111700,"depth":46,"text":111701},{"id":111808,"depth":46,"text":111809},{"id":111902,"depth":46,"text":111903},{"id":111942,"depth":46,"text":111943},{"id":112015,"depth":46,"text":112016},{"id":112083,"depth":46,"text":112084},{"id":112135,"depth":46,"text":112136},{"id":112179,"depth":46,"text":112180},{"id":112258,"depth":46,"text":112259},{"id":112325,"depth":46,"text":112326},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":111643,"description":20020},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":112412,"title":112413,"body":112414,"description":20020,"extension":20021,"meta":113069,"navigation":216,"path":113070,"seo":113071,"stem":113072,"__hash__":113073},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":112415,"toc":113057},[112416,112419,112423,112426,112642,112646,112649,112858,112862,112928,112933,112937,112940,112943,112981,112985,112988,112993,112997,113000,113003,113008,113012,113015,113019,113022,113025,113030,113034,113037,113040,113045,113049,113054],[10,112417,112413],{"id":112418},"_12其他常用函数",[20037,112420,112422],{"id":112421},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[24,112424,112425],{},"将数组的数据按照行列复制扩展",[146,112427,112429],{"className":148,"code":112428,"language":150,"meta":39,"style":39},"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",[152,112430,112431,112447,112456,112460,112465,112470,112483,112487,112492,112497,112502,112506,112511,112535,112547,112551,112555,112560,112565,112570,112575,112579,112592,112596,112600,112605,112610,112615,112620,112625,112629,112633,112638],{"__ignoreMap":39},[155,112432,112433,112435,112437,112439,112441,112443,112445],{"class":157,"line":158},[155,112434,20318],{"class":171},[155,112436,317],{"class":167},[155,112438,111565],{"class":171},[155,112440,329],{"class":263},[155,112442,332],{"class":171},[155,112444,350],{"class":263},[155,112446,363],{"class":171},[155,112448,112449,112452,112454],{"class":157,"line":46},[155,112450,112451],{"class":171},"np.tile(a,",[155,112453,360],{"class":263},[155,112455,363],{"class":171},[155,112457,112458],{"class":157,"line":121},[155,112459,112127],{"class":161},[155,112461,112462],{"class":157,"line":180},[155,112463,112464],{"class":161},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[155,112466,112467],{"class":157,"line":194},[155,112468,112469],{"class":161},"#行复制两次，列复制三次\n",[155,112471,112472,112475,112477,112479,112481],{"class":157,"line":200},[155,112473,112474],{"class":171},"np.tile(a,(",[155,112476,360],{"class":263},[155,112478,332],{"class":171},[155,112480,4444],{"class":263},[155,112482,1238],{"class":171},[155,112484,112485],{"class":157,"line":213},[155,112486,112127],{"class":161},[155,112488,112489],{"class":157,"line":220},[155,112490,112491],{"class":732},"'''\n",[155,112493,112494],{"class":157,"line":245},[155,112495,112496],{"class":732},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[155,112498,112499],{"class":157,"line":251},[155,112500,112501],{"class":732},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[155,112503,112504],{"class":157,"line":257},[155,112505,112491],{"class":732},[155,112507,112508],{"class":157,"line":270},[155,112509,112510],{"class":161},"#创建二维数组\n",[155,112512,112513,112515,112517,112519,112521,112523,112525,112527,112529,112531,112533],{"class":157,"line":276},[155,112514,111869],{"class":171},[155,112516,317],{"class":167},[155,112518,111565],{"class":171},[155,112520,329],{"class":263},[155,112522,332],{"class":171},[155,112524,20589],{"class":263},[155,112526,111570],{"class":171},[155,112528,1264],{"class":263},[155,112530,332],{"class":171},[155,112532,4444],{"class":263},[155,112534,363],{"class":171},[155,112536,112537,112540,112542,112544],{"class":157,"line":297},[155,112538,112539],{"class":171},"np.tile(aa,",[155,112541,360],{"class":263},[155,112543,20501],{"class":171},[155,112545,112546],{"class":161},"#一个数的时候就是行\n",[155,112548,112549],{"class":157,"line":302},[155,112550,112127],{"class":161},[155,112552,112553],{"class":157,"line":308},[155,112554,112491],{"class":732},[155,112556,112557],{"class":157,"line":366},[155,112558,112559],{"class":732},"array([[ 1,  2,  3,  1,  2,  3],\n",[155,112561,112562],{"class":157,"line":379},[155,112563,112564],{"class":732},"       [ 4,  5,  6,  4,  5,  6],\n",[155,112566,112567],{"class":157,"line":385},[155,112568,112569],{"class":732},"       [ 7,  8,  9,  7,  8,  9],\n",[155,112571,112572],{"class":157,"line":415},[155,112573,112574],{"class":732},"       [10, 11, 12, 10, 11, 12]])\n",[155,112576,112577],{"class":157,"line":452},[155,112578,112491],{"class":732},[155,112580,112581,112584,112586,112588,112590],{"class":157,"line":480},[155,112582,112583],{"class":171},"np.tile(aa,(",[155,112585,360],{"class":263},[155,112587,332],{"class":171},[155,112589,4444],{"class":263},[155,112591,1238],{"class":171},[155,112593,112594],{"class":157,"line":486},[155,112595,112127],{"class":161},[155,112597,112598],{"class":157,"line":499},[155,112599,112491],{"class":732},[155,112601,112602],{"class":157,"line":505},[155,112603,112604],{"class":732},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[155,112606,112607],{"class":157,"line":528},[155,112608,112609],{"class":732},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[155,112611,112612],{"class":157,"line":549},[155,112613,112614],{"class":732},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[155,112616,112617],{"class":157,"line":570},[155,112618,112619],{"class":732},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[155,112621,112622],{"class":157,"line":575},[155,112623,112624],{"class":732},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[155,112626,112627],{"class":157,"line":581},[155,112628,112609],{"class":732},[155,112630,112631],{"class":157,"line":592},[155,112632,112614],{"class":732},[155,112634,112635],{"class":157,"line":610},[155,112636,112637],{"class":732},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[155,112639,112640],{"class":157,"line":622},[155,112641,112491],{"class":732},[20037,112643,112645],{"id":112644},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[24,112647,112648],{},"repeat()将数组中的每个元素重复若干次",[146,112650,112652],{"className":148,"code":112651,"language":150,"meta":39,"style":39},"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",[152,112653,112654,112670,112679,112683,112688,112712,112717,112726,112730,112735,112739,112744,112760,112764,112768,112773,112778,112783,112787,112792,112796,112801,112806,112810,112826,112830,112834,112839,112844,112849,112854],{"__ignoreMap":39},[155,112655,112656,112658,112660,112662,112664,112666,112668],{"class":157,"line":158},[155,112657,20318],{"class":171},[155,112659,317],{"class":167},[155,112661,111565],{"class":171},[155,112663,329],{"class":263},[155,112665,332],{"class":171},[155,112667,350],{"class":263},[155,112669,363],{"class":171},[155,112671,112672,112675,112677],{"class":157,"line":46},[155,112673,112674],{"class":171},"np.repeat(a,",[155,112676,4444],{"class":263},[155,112678,363],{"class":171},[155,112680,112681],{"class":157,"line":121},[155,112682,112127],{"class":161},[155,112684,112685],{"class":157,"line":180},[155,112686,112687],{"class":161},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[155,112689,112690,112692,112694,112696,112698,112700,112702,112704,112706,112708,112710],{"class":157,"line":194},[155,112691,111869],{"class":171},[155,112693,317],{"class":167},[155,112695,111565],{"class":171},[155,112697,329],{"class":263},[155,112699,332],{"class":171},[155,112701,20589],{"class":263},[155,112703,111570],{"class":171},[155,112705,1264],{"class":263},[155,112707,332],{"class":171},[155,112709,4444],{"class":263},[155,112711,363],{"class":171},[155,112713,112714],{"class":157,"line":200},[155,112715,112716],{"class":161},"#这个重复之后二维变成一维\n",[155,112718,112719,112722,112724],{"class":157,"line":213},[155,112720,112721],{"class":171},"np.repeat(aa,",[155,112723,360],{"class":263},[155,112725,363],{"class":171},[155,112727,112728],{"class":157,"line":220},[155,112729,112491],{"class":732},[155,112731,112732],{"class":157,"line":245},[155,112733,112734],{"class":732},"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",[155,112736,112737],{"class":157,"line":251},[155,112738,112491],{"class":732},[155,112740,112741],{"class":157,"line":257},[155,112742,112743],{"class":161},"#指定axis\n",[155,112745,112746,112748,112750,112752,112754,112756,112758],{"class":157,"line":270},[155,112747,112721],{"class":171},[155,112749,360],{"class":263},[155,112751,332],{"class":171},[155,112753,17140],{"class":323},[155,112755,317],{"class":167},[155,112757,1109],{"class":263},[155,112759,363],{"class":171},[155,112761,112762],{"class":157,"line":276},[155,112763,112127],{"class":161},[155,112765,112766],{"class":157,"line":297},[155,112767,112491],{"class":732},[155,112769,112770],{"class":157,"line":302},[155,112771,112772],{"class":732},"array([[ 1,  2,  3],\n",[155,112774,112775],{"class":157,"line":308},[155,112776,112777],{"class":732},"       [ 1,  2,  3],\n",[155,112779,112780],{"class":157,"line":366},[155,112781,112782],{"class":732},"       [ 4,  5,  6],\n",[155,112784,112785],{"class":157,"line":379},[155,112786,112782],{"class":732},[155,112788,112789],{"class":157,"line":385},[155,112790,112791],{"class":732},"       [ 7,  8,  9],\n",[155,112793,112794],{"class":157,"line":415},[155,112795,112791],{"class":732},[155,112797,112798],{"class":157,"line":452},[155,112799,112800],{"class":732},"       [10, 11, 12],\n",[155,112802,112803],{"class":157,"line":480},[155,112804,112805],{"class":732},"       [10, 11, 12]])\n",[155,112807,112808],{"class":157,"line":486},[155,112809,112491],{"class":732},[155,112811,112812,112814,112816,112818,112820,112822,112824],{"class":157,"line":499},[155,112813,112721],{"class":171},[155,112815,360],{"class":263},[155,112817,332],{"class":171},[155,112819,17140],{"class":323},[155,112821,317],{"class":167},[155,112823,329],{"class":263},[155,112825,363],{"class":171},[155,112827,112828],{"class":157,"line":505},[155,112829,112127],{"class":161},[155,112831,112832],{"class":157,"line":528},[155,112833,112491],{"class":732},[155,112835,112836],{"class":157,"line":549},[155,112837,112838],{"class":732},"array([[ 1,  1,  2,  2,  3,  3],\n",[155,112840,112841],{"class":157,"line":570},[155,112842,112843],{"class":732},"       [ 4,  4,  5,  5,  6,  6],\n",[155,112845,112846],{"class":157,"line":575},[155,112847,112848],{"class":732},"       [ 7,  7,  8,  8,  9,  9],\n",[155,112850,112851],{"class":157,"line":581},[155,112852,112853],{"class":732},"       [10, 10, 11, 11, 12, 12]])\n",[155,112855,112856],{"class":157,"line":592},[155,112857,112491],{"class":732},[20037,112859,112861],{"id":112860},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[146,112863,112865],{"className":148,"code":112864,"language":150,"meta":39,"style":39},"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",[152,112866,112867,112883,112888,112900,112904,112909,112919,112923],{"__ignoreMap":39},[155,112868,112869,112871,112873,112875,112877,112879,112881],{"class":157,"line":158},[155,112870,20318],{"class":171},[155,112872,317],{"class":167},[155,112874,111565],{"class":171},[155,112876,329],{"class":263},[155,112878,332],{"class":171},[155,112880,350],{"class":263},[155,112882,363],{"class":171},[155,112884,112885],{"class":157,"line":46},[155,112886,112887],{"class":161},"#array([，2，3，4])\n",[155,112889,112890,112893,112895,112897],{"class":157,"line":121},[155,112891,112892],{"class":171},"np.roll(a,",[155,112894,360],{"class":263},[155,112896,20501],{"class":171},[155,112898,112899],{"class":161},"#传正数向后调多少位，传负数向前调多少位\n",[155,112901,112902],{"class":157,"line":180},[155,112903,112127],{"class":161},[155,112905,112906],{"class":157,"line":194},[155,112907,112908],{"class":161},"#array([3, 4, 1, 2])\n",[155,112910,112911,112913,112915,112917],{"class":157,"line":200},[155,112912,112892],{"class":171},[155,112914,2039],{"class":167},[155,112916,329],{"class":263},[155,112918,363],{"class":171},[155,112920,112921],{"class":157,"line":213},[155,112922,112127],{"class":161},[155,112924,112925],{"class":157,"line":220},[155,112926,112927],{"class":161},"#array([2, 3, 4, 1])\n",[24,112929,112930],{},[37,112931],{"alt":39,"src":112932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[20037,112934,112936],{"id":112935},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[24,112938,112939],{},"resize()重新调整数组的大小",[24,112941,112942],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[146,112944,112946],{"className":148,"code":112945,"language":150,"meta":39,"style":39},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[152,112947,112948,112953,112966],{"__ignoreMap":39},[155,112949,112950],{"class":157,"line":158},[155,112951,112952],{"class":161},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[155,112954,112955,112958,112960,112962,112964],{"class":157,"line":46},[155,112956,112957],{"class":171},"np.resize(aa,(",[155,112959,360],{"class":263},[155,112961,332],{"class":171},[155,112963,340],{"class":263},[155,112965,1238],{"class":171},[155,112967,112968,112970,112972,112974,112976,112978],{"class":157,"line":121},[155,112969,112957],{"class":171},[155,112971,360],{"class":263},[155,112973,332],{"class":171},[155,112975,20492],{"class":263},[155,112977,101334],{"class":171},[155,112979,112980],{"class":161},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[20037,112982,112984],{"id":112983},"_125-placeput函数","12.5 place()\u002Fput()函数",[24,112986,112987],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[24,112989,112990],{},[37,112991],{"alt":39,"src":112992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[20037,112994,112996],{"id":112995},"_126-保存加载文件","12.6 保存加载文件",[24,112998,112999],{},"savetxt():将数据保存到txt文件中",[24,113001,113002],{},"loadtxt():从文件加载数据",[24,113004,113005],{},[37,113006],{"alt":39,"src":113007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[20037,113009,113011],{"id":113010},"_127-genfromtxt函数","12.7 genfromtxt()函数",[24,113013,113014],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[20037,113016,113018],{"id":113017},"_128-anyall函数","12.8 any()\u002Fall()函数",[24,113020,113021],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[24,113023,113024],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[24,113026,113027],{},[37,113028],{"alt":39,"src":113029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[20037,113031,113033],{"id":113032},"_129-where语句","12.9 where语句",[24,113035,113036],{},"np.where(条件,x,y)",[24,113038,113039],{},"如果条件为True,对应值为x,否则对应值为y",[24,113041,113042],{},[37,113043],{"alt":39,"src":113044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[20037,113046,113048],{"id":113047},"_1210-dot矩阵","12.10 dot()矩阵",[24,113050,113051],{},[37,113052],{"alt":39,"src":113053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[20011,113055,113056],{},"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":39,"searchDepth":46,"depth":46,"links":113058},[113059,113060,113061,113062,113063,113064,113065,113066,113067,113068],{"id":112421,"depth":46,"text":112422},{"id":112644,"depth":46,"text":112645},{"id":112860,"depth":46,"text":112861},{"id":112935,"depth":46,"text":112936},{"id":112983,"depth":46,"text":112984},{"id":112995,"depth":46,"text":112996},{"id":113010,"depth":46,"text":113011},{"id":113017,"depth":46,"text":113018},{"id":113032,"depth":46,"text":113033},{"id":113047,"depth":46,"text":113048},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":112413,"description":20020},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":113075,"title":113076,"body":113077,"description":20020,"extension":20021,"meta":113430,"navigation":216,"path":113431,"seo":113432,"stem":113433,"__hash__":113434},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":113078,"toc":113428},[113079,113082,113085,113088,113091,113094,113159,113161,113425],[10,113080,113076],{"id":113081},"_13数组排序",[24,113083,113084],{},"排序主要用到的方法是np.sort和np.argsort",[24,113086,113087],{},"其中np.sort()对数组直接排序",[24,113089,113090],{},"而np.argsort()是返回排序后的原始索引",[24,113092,113093],{},"①一维数组",[146,113095,113097],{"className":148,"code":113096,"language":150,"meta":39,"style":39},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[152,113098,113099,113103,113143,113151],{"__ignoreMap":39},[155,113100,113101],{"class":157,"line":158},[155,113102,111668],{"class":161},[155,113104,113105,113107,113109,113111,113113,113115,113117,113119,113121,113123,113125,113127,113129,113131,113133,113135,113137,113139,113141],{"class":157,"line":46},[155,113106,20318],{"class":171},[155,113108,317],{"class":167},[155,113110,111587],{"class":171},[155,113112,4444],{"class":263},[155,113114,332],{"class":171},[155,113116,1231],{"class":263},[155,113118,332],{"class":171},[155,113120,1636],{"class":263},[155,113122,332],{"class":171},[155,113124,20831],{"class":263},[155,113126,332],{"class":171},[155,113128,20358],{"class":263},[155,113130,332],{"class":171},[155,113132,20945],{"class":263},[155,113134,332],{"class":171},[155,113136,340],{"class":263},[155,113138,332],{"class":171},[155,113140,565],{"class":263},[155,113142,17676],{"class":171},[155,113144,113145,113148],{"class":157,"line":121},[155,113146,113147],{"class":171},"np.sort(a)",[155,113149,113150],{"class":161},"#升序排序\n",[155,113152,113153,113156],{"class":157,"line":180},[155,113154,113155],{"class":171},"np.argsort(a)",[155,113157,113158],{"class":161},"#按照元素大小来索引排序\n",[24,113160,111854],{},[146,113162,113164],{"className":148,"code":113163,"language":150,"meta":39,"style":39},"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",[152,113165,113166,113178,113204,113209,113213,113218,113223,113228,113233,113237,113245,113249,113254,113259,113264,113269,113273,113278,113291,113295,113300,113305,113310,113315,113319,113324,113336,113340,113344,113348,113352,113356,113360,113365,113380,113385,113394,113399,113403,113407,113412,113416,113421],{"__ignoreMap":39},[155,113167,113168,113171,113173,113175],{"class":157,"line":158},[155,113169,113170],{"class":171},"np.random.seed(",[155,113172,1109],{"class":263},[155,113174,20501],{"class":171},[155,113176,113177],{"class":161},"#保证每次值一样\n",[155,113179,113180,113182,113184,113186,113188,113190,113192,113194,113196,113198,113200,113202],{"class":157,"line":46},[155,113181,111869],{"class":171},[155,113183,317],{"class":167},[155,113185,111677],{"class":171},[155,113187,20389],{"class":263},[155,113189,332],{"class":171},[155,113191,1020],{"class":323},[155,113193,317],{"class":167},[155,113195,230],{"class":171},[155,113197,1264],{"class":263},[155,113199,332],{"class":171},[155,113201,340],{"class":263},[155,113203,1238],{"class":171},[155,113205,113206],{"class":157,"line":121},[155,113207,113208],{"class":161},"#原数组：\n",[155,113210,113211],{"class":157,"line":180},[155,113212,112491],{"class":732},[155,113214,113215],{"class":157,"line":194},[155,113216,113217],{"class":732},"array([[44, 47, 64, 67, 67,  9],\n",[155,113219,113220],{"class":157,"line":200},[155,113221,113222],{"class":732},"       [83, 21, 36, 87, 70, 88],\n",[155,113224,113225],{"class":157,"line":213},[155,113226,113227],{"class":732},"       [88, 12, 58, 65, 39, 87],\n",[155,113229,113230],{"class":157,"line":220},[155,113231,113232],{"class":732},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[155,113234,113235],{"class":157,"line":245},[155,113236,112491],{"class":732},[155,113238,113239,113242],{"class":157,"line":251},[155,113240,113241],{"class":171},"np.sort(aa)",[155,113243,113244],{"class":161},"#每行进行了排序\n",[155,113246,113247],{"class":157,"line":257},[155,113248,112491],{"class":732},[155,113250,113251],{"class":157,"line":270},[155,113252,113253],{"class":732},"array([[ 9, 44, 47, 64, 67, 67],\n",[155,113255,113256],{"class":157,"line":276},[155,113257,113258],{"class":732},"       [21, 36, 70, 83, 87, 88],\n",[155,113260,113261],{"class":157,"line":297},[155,113262,113263],{"class":732},"       [12, 39, 58, 65, 87, 88],\n",[155,113265,113266],{"class":157,"line":302},[155,113267,113268],{"class":732},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[155,113270,113271],{"class":157,"line":308},[155,113272,112491],{"class":732},[155,113274,113275],{"class":157,"line":366},[155,113276,113277],{"class":161},"#axis=0时\n",[155,113279,113280,113283,113285,113287,113289],{"class":157,"line":379},[155,113281,113282],{"class":171},"np.sort(aa,",[155,113284,17140],{"class":323},[155,113286,317],{"class":167},[155,113288,1109],{"class":263},[155,113290,363],{"class":171},[155,113292,113293],{"class":157,"line":385},[155,113294,112491],{"class":732},[155,113296,113297],{"class":157,"line":415},[155,113298,113299],{"class":732},"array([[44, 12, 36, 37, 25,  9],\n",[155,113301,113302],{"class":157,"line":452},[155,113303,113304],{"class":732},"       [46, 21, 58, 65, 39, 77],\n",[155,113306,113307],{"class":157,"line":480},[155,113308,113309],{"class":732},"       [83, 47, 64, 67, 67, 87],\n",[155,113311,113312],{"class":157,"line":486},[155,113313,113314],{"class":732},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[155,113316,113317],{"class":157,"line":499},[155,113318,112491],{"class":732},[155,113320,113321],{"class":157,"line":505},[155,113322,113323],{"class":161},"#axis=1时,为默认值\n",[155,113325,113326,113328,113330,113332,113334],{"class":157,"line":528},[155,113327,113282],{"class":171},[155,113329,17140],{"class":323},[155,113331,317],{"class":167},[155,113333,329],{"class":263},[155,113335,363],{"class":171},[155,113337,113338],{"class":157,"line":549},[155,113339,112491],{"class":732},[155,113341,113342],{"class":157,"line":570},[155,113343,113253],{"class":732},[155,113345,113346],{"class":157,"line":575},[155,113347,113258],{"class":732},[155,113349,113350],{"class":157,"line":581},[155,113351,113263],{"class":732},[155,113353,113354],{"class":157,"line":592},[155,113355,113268],{"class":732},[155,113357,113358],{"class":157,"line":610},[155,113359,112491],{"class":732},[155,113361,113362],{"class":157,"line":622},[155,113363,113364],{"class":161},"#按最后一列排序\n",[155,113366,113367,113369,113371,113374,113376,113378],{"class":157,"line":638},[155,113368,20342],{"class":171},[155,113370,317],{"class":167},[155,113372,113373],{"class":171},"aa[:,",[155,113375,2039],{"class":167},[155,113377,329],{"class":263},[155,113379,2845],{"class":171},[155,113381,113382],{"class":157,"line":650},[155,113383,113384],{"class":161},"#获取最后一列排好序的索引\n",[155,113386,113387,113389,113391],{"class":157,"line":662},[155,113388,92621],{"class":171},[155,113390,317],{"class":167},[155,113392,113393],{"class":171},"np.argsort(b)\n",[155,113395,113396],{"class":157,"line":678},[155,113397,113398],{"class":171},"aa[index]\n",[155,113400,113401],{"class":157,"line":694},[155,113402,112491],{"class":732},[155,113404,113405],{"class":157,"line":706},[155,113406,113217],{"class":732},[155,113408,113409],{"class":157,"line":715},[155,113410,113411],{"class":732},"       [46, 88, 81, 37, 25, 77],\n",[155,113413,113414],{"class":157,"line":720},[155,113415,113227],{"class":732},[155,113417,113418],{"class":157,"line":739},[155,113419,113420],{"class":732},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[155,113422,113423],{"class":157,"line":745},[155,113424,112491],{"class":732},[20011,113426,113427],{},"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":39,"searchDepth":46,"depth":46,"links":113429},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":113076,"description":20020},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":113436,"title":113437,"body":113438,"description":20020,"extension":20021,"meta":113468,"navigation":216,"path":113469,"seo":113470,"stem":113471,"__hash__":113472},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":113439,"toc":113466},[113440,113443,113446,113449,113452,113455,113458,113461],[10,113441,113437],{"id":113442},"_14广播机制",[24,113444,113445],{},"广播的规则：",[24,113447,113448],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[24,113450,113451],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[24,113453,113454],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[24,113456,113457],{},"3.如果没有维度形状为1，则会引发异常",[24,113459,113460],{},"也就是只有维度或者个数为1才可以进行广播操作",[24,113462,113463],{},[37,113464],{"alt":39,"src":113465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":39,"searchDepth":46,"depth":46,"links":113467},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":113437,"description":20020},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":113474,"title":113475,"body":113476,"description":20020,"extension":20021,"meta":113574,"navigation":216,"path":113575,"seo":113576,"stem":113577,"__hash__":113578},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":113477,"toc":113572},[113478,113481,113484,113569],[10,113479,113475],{"id":113480},"_15比较掩码",[24,113482,113483],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[146,113485,113487],{"className":148,"code":113486,"language":150,"meta":39,"style":39},"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",[152,113488,113489,113535,113546,113560,113564],{"__ignoreMap":39},[155,113490,113491,113493,113495,113498,113500,113502,113504,113506,113508,113510,113512,113514,113516,113518,113520,113522,113524,113526,113528,113530,113532],{"class":157,"line":158},[155,113492,20318],{"class":171},[155,113494,317],{"class":167},[155,113496,113497],{"class":171},"np.array([[",[155,113499,329],{"class":263},[155,113501,332],{"class":171},[155,113503,360],{"class":263},[155,113505,332],{"class":171},[155,113507,4444],{"class":263},[155,113509,17660],{"class":171},[155,113511,4416],{"class":263},[155,113513,332],{"class":171},[155,113515,1231],{"class":263},[155,113517,332],{"class":171},[155,113519,20589],{"class":263},[155,113521,17660],{"class":171},[155,113523,20781],{"class":263},[155,113525,332],{"class":171},[155,113527,20806],{"class":263},[155,113529,332],{"class":171},[155,113531,20831],{"class":263},[155,113533,113534],{"class":171},"]])\n",[155,113536,113537,113539,113541,113543],{"class":157,"line":46},[155,113538,20318],{"class":171},[155,113540,20959],{"class":167},[155,113542,3458],{"class":263},[155,113544,113545],{"class":161},"#结果是一个由True,False组成的数组\n",[155,113547,113548,113551,113553,113555,113557],{"class":157,"line":121},[155,113549,113550],{"class":171},"a[a",[155,113552,20959],{"class":167},[155,113554,3458],{"class":263},[155,113556,2813],{"class":171},[155,113558,113559],{"class":161},"#小于20的元素会存到这个数组中\n",[155,113561,113562],{"class":157,"line":180},[155,113563,112127],{"class":161},[155,113565,113566],{"class":157,"line":194},[155,113567,113568],{"class":161},"#array([ 1,  2,  3, 11, 12, 13])\n",[20011,113570,113571],{},"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":39,"searchDepth":46,"depth":46,"links":113573},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":113475,"description":20020},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":113580,"title":113581,"body":113582,"description":20020,"extension":20021,"meta":113674,"navigation":216,"path":113675,"seo":113676,"stem":113677,"__hash__":113678},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":113583,"toc":113672},[113584,113587,113590,113593,113596,113599,113664,113669],[10,113585,113581],{"id":113586},"_16魔法命令time",[24,113588,113589],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[24,113591,113592],{},"%:行模式",[24,113594,113595],{},"%%:单元格模式",[24,113597,113598],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[146,113600,113602],{"className":148,"code":113601,"language":150,"meta":39,"style":39},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[152,113603,113604,113609,113616,113621,113630,113643,113647,113655],{"__ignoreMap":39},[155,113605,113606],{"class":157,"line":158},[155,113607,113608],{"class":161},"#程序执行时间\n",[155,113610,113611,113613],{"class":157,"line":46},[155,113612,168],{"class":167},[155,113614,113615],{"class":171}," time \n",[155,113617,113618],{"class":157,"line":121},[155,113619,113620],{"class":161},"#获取时间\n",[155,113622,113623,113626,113628],{"class":157,"line":180},[155,113624,113625],{"class":171},"start",[155,113627,317],{"class":167},[155,113629,1978],{"class":171},[155,113631,113632,113635,113638,113640],{"class":157,"line":194},[155,113633,113634],{"class":171},"time.sleep(",[155,113636,113637],{"class":263},"0.4",[155,113639,20501],{"class":171},[155,113641,113642],{"class":161},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[155,113644,113645],{"class":157,"line":200},[155,113646,113620],{"class":161},[155,113648,113649,113651,113653],{"class":157,"line":213},[155,113650,15425],{"class":171},[155,113652,317],{"class":167},[155,113654,1978],{"class":171},[155,113656,113657,113659,113661],{"class":157,"line":220},[155,113658,15425],{"class":171},[155,113660,2039],{"class":167},[155,113662,113663],{"class":171},"start\n",[24,113665,113666],{},[37,113667],{"alt":39,"src":113668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[20011,113670,113671],{},"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":39,"searchDepth":46,"depth":46,"links":113673},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":113581,"description":20020},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":113680,"title":113681,"body":113682,"description":20020,"extension":20021,"meta":113717,"navigation":216,"path":113718,"seo":113719,"stem":113720,"__hash__":113721},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":113683,"toc":113715},[113684,113687,113690,113693,113696,113699,113702,113705,113710],[10,113685,113681],{"id":113686},"_17魔法命令timeit",[24,113688,113689],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[24,113691,113692],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[24,113694,113695],{},"单元格模式：",[24,113697,113698],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[24,113700,113701],{},"初始化语句执行次数由轮数来决定",[24,113703,113704],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[24,113706,113707],{},[37,113708],{"alt":39,"src":113709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[24,113711,113712],{},[37,113713],{"alt":39,"src":113714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":39,"searchDepth":46,"depth":46,"links":113716},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":113681,"description":20020},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":113723,"title":113724,"body":113725,"description":20020,"extension":20021,"meta":113743,"navigation":216,"path":113744,"seo":113745,"stem":113746,"__hash__":113747},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":113726,"toc":113741},[113727,113730,113733,113736],[10,113728,113724],{"id":113729},"_18魔法命令writefile和run",[24,113731,113732],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[24,113734,113735],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[24,113737,113738],{},[37,113739],{"alt":39,"src":113740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":39,"searchDepth":46,"depth":46,"links":113742},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":113724,"description":20020},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":113749,"title":113750,"body":113751,"description":20020,"extension":20021,"meta":113804,"navigation":216,"path":113805,"seo":113806,"stem":113807,"__hash__":113808},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":113752,"toc":113802},[113753,113756,113759,113761,113764,113767,113772,113775,113778,113781,113784,113787,113790,113793,113796,113799],[10,113754,113750],{"id":113755},"_19魔法命令memit",[24,113757,113758],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[24,113760,44391],{},[24,113762,113763],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[24,113765,113766],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[24,113768,113769],{},[37,113770],{"alt":39,"src":113771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[24,113773,113774],{},"补充：",[24,113776,113777],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[24,113779,113780],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[24,113782,113783],{},"解决方法：",[24,113785,113786],{},"1.cmd",[24,113788,113789],{},"2.依次输入以下代码：",[24,113791,113792],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[24,113794,113795],{},"pip install --upgrade ipython",[24,113797,113798],{},"#升级 memory_profiler 和 setuptools",[24,113800,113801],{},"pip install --upgrade memory_profiler setuptools",{"title":39,"searchDepth":46,"depth":46,"links":113803},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":113750,"description":20020},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":113810,"title":113811,"body":113812,"description":20020,"extension":20021,"meta":115458,"navigation":216,"path":115459,"seo":115460,"stem":115461,"__hash__":115462},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":113813,"toc":115428},[113814,113817,113821,113825,113886,113889,113894,113898,113903,113908,113913,113918,113921,113926,113930,113934,113967,113970,113973,113976,114028,114031,114067,114070,114112,114116,114137,114139,114176,114178,114183,114185,114190,114194,114197,114225,114229,114233,114286,114290,114382,114386,114390,114393,114398,114402,114427,114432,114436,114439,114442,114445,114448,114451,114454,114457,114469,114473,114477,114480,114512,114515,114538,114541,114567,114570,114596,114599,114633,114636,114698,114702,114705,114709,114712,114738,114741,114744,114749,114752,114821,114823,114828,114889,114892,114903,114909,114914,114918,114921,114934,114938,114953,114955,114978,114980,115006,115009,115012,115015,115063,115065,115070,115074,115078,115105,115109,115136,115139,115144,115149,115239,115243,115301,115306,115309,115312,115354,115358,115414,115419,115422,115425],[10,113815,113811],{"id":113816},"_2创建数组",[20037,113818,113820],{"id":113819},"_21-array函数创建数组","2.1 array()函数创建数组",[14,113822,113824],{"id":113823},"_221-函数语句","2.2.1 函数语句",[146,113826,113828],{"className":148,"code":113827,"language":150,"meta":39,"style":39},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[152,113829,113830],{"__ignoreMap":39},[155,113831,113832,113835,113838,113840,113842,113844,113846,113848,113851,113853,113856,113858,113861,113863,113865,113867,113870,113872,113875,113877,113880,113882,113884],{"class":157,"line":158},[155,113833,113834],{"class":171},"numpy.array(",[155,113836,113837],{"class":263},"object",[155,113839,7589],{"class":171},[155,113841,112063],{"class":323},[155,113843,33391],{"class":167},[155,113845,8545],{"class":263},[155,113847,7589],{"class":171},[155,113849,113850],{"class":323},"copy",[155,113852,33391],{"class":167},[155,113854,113855],{"class":263}," True",[155,113857,7589],{"class":171},[155,113859,113860],{"class":323},"order",[155,113862,33391],{"class":167},[155,113864,8545],{"class":263},[155,113866,7589],{"class":171},[155,113868,113869],{"class":323},"subok",[155,113871,33391],{"class":167},[155,113873,113874],{"class":263}," False",[155,113876,7589],{"class":171},[155,113878,113879],{"class":323},"ndmin",[155,113881,33391],{"class":167},[155,113883,1151],{"class":263},[155,113885,363],{"class":171},[24,113887,113888],{},"参数：",[24,113890,113891],{},[37,113892],{"alt":39,"src":113893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[14,113895,113897],{"id":113896},"_222-实例","2.2.2 实例",[24,113899,113900],{},[37,113901],{"alt":39,"src":113902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[24,113904,113905],{},[37,113906],{"alt":39,"src":113907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[24,113909,113910],{},[37,113911],{"alt":39,"src":113912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[24,113914,113915],{},[37,113916],{"alt":39,"src":113917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[24,113919,113920],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[24,113922,113923],{},[37,113924],{"alt":39,"src":113925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[20037,113927,113929],{"id":113928},"_22-随机数创建数组","2.2 随机数创建数组",[14,113931,113933],{"id":113932},"_221-random语句","2.2.1 random语句",[146,113935,113937],{"className":148,"code":113936,"language":150,"meta":39,"style":39},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[152,113938,113939,113944,113949,113957,113962],{"__ignoreMap":39},[155,113940,113941],{"class":157,"line":158},[155,113942,113943],{"class":161},"#random.random()\n",[155,113945,113946],{"class":157,"line":46},[155,113947,113948],{"class":161},"#确定随机种子,就是每次运行结果是相同的\n",[155,113950,113951,113953,113955],{"class":157,"line":121},[155,113952,113170],{"class":171},[155,113954,1109],{"class":263},[155,113956,363],{"class":171},[155,113958,113959],{"class":157,"line":180},[155,113960,113961],{"class":171},"np.random.random()\n",[155,113963,113964],{"class":157,"line":194},[155,113965,113966],{"class":161},"#生成一个随机的数目\n",[24,113968,113969],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[24,113971,113972],{},"可以指定数组形状 size",[24,113974,113975],{},"①生成一维数组",[146,113977,113979],{"className":148,"code":113978,"language":150,"meta":39,"style":39},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[152,113980,113981,113986,113999,114004,114020],{"__ignoreMap":39},[155,113982,113983],{"class":157,"line":158},[155,113984,113985],{"class":161},"#random.random(size())\n",[155,113987,113988,113991,113993,113995,113997],{"class":157,"line":46},[155,113989,113990],{"class":171},"np.random.random(",[155,113992,1020],{"class":323},[155,113994,317],{"class":167},[155,113996,350],{"class":263},[155,113998,363],{"class":171},[155,114000,114001],{"class":157,"line":121},[155,114002,114003],{"class":161},"#生成一位的五个元素\n",[155,114005,114006,114008,114010,114012,114014,114016,114018],{"class":157,"line":180},[155,114007,20318],{"class":171},[155,114009,317],{"class":167},[155,114011,113990],{"class":171},[155,114013,1020],{"class":323},[155,114015,317],{"class":167},[155,114017,1264],{"class":263},[155,114019,363],{"class":171},[155,114021,114022,114025],{"class":157,"line":194},[155,114023,114024],{"class":171},"a.shape ",[155,114026,114027],{"class":161},"#输出数组形状\n",[24,114029,114030],{},"②生成二维数组",[146,114032,114034],{"className":148,"code":114033,"language":150,"meta":39,"style":39},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[152,114035,114036,114040,114062],{"__ignoreMap":39},[155,114037,114038],{"class":157,"line":158},[155,114039,111864],{"class":161},[155,114041,114042,114044,114046,114048,114050,114052,114054,114056,114058,114060],{"class":157,"line":46},[155,114043,111869],{"class":171},[155,114045,317],{"class":167},[155,114047,113990],{"class":171},[155,114049,1020],{"class":323},[155,114051,317],{"class":167},[155,114053,230],{"class":171},[155,114055,1264],{"class":263},[155,114057,332],{"class":171},[155,114059,350],{"class":263},[155,114061,1238],{"class":171},[155,114063,114064],{"class":157,"line":121},[155,114065,114066],{"class":161},"#生成四行五列的数组\n",[24,114068,114069],{},"③生成三维数组",[146,114071,114073],{"className":148,"code":114072,"language":150,"meta":39,"style":39},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[152,114074,114075,114080,114107],{"__ignoreMap":39},[155,114076,114077],{"class":157,"line":158},[155,114078,114079],{"class":161},"#三维数组\n",[155,114081,114082,114085,114087,114089,114091,114093,114095,114097,114099,114101,114103,114105],{"class":157,"line":46},[155,114083,114084],{"class":171},"aaa",[155,114086,317],{"class":167},[155,114088,113990],{"class":171},[155,114090,1020],{"class":323},[155,114092,317],{"class":167},[155,114094,230],{"class":171},[155,114096,360],{"class":263},[155,114098,332],{"class":171},[155,114100,4444],{"class":263},[155,114102,332],{"class":171},[155,114104,1264],{"class":263},[155,114106,1238],{"class":171},[155,114108,114109],{"class":157,"line":121},[155,114110,114111],{"class":171},"aaa.shape\n",[14,114113,114115],{"id":114114},"_222-randint语句","2.2.2 randint语句",[146,114117,114119],{"className":148,"code":114118,"language":150,"meta":39,"style":39},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[152,114120,114121,114126],{"__ignoreMap":39},[155,114122,114123],{"class":157,"line":158},[155,114124,114125],{"class":161},"#生成随机的整数 random.randint(low,high,size)\n",[155,114127,114128,114130,114132,114134],{"class":157,"line":46},[155,114129,111677],{"class":171},[155,114131,350],{"class":263},[155,114133,33541],{"class":171},[155,114135,114136],{"class":161},"#0~5中的随机一个数\n",[24,114138,113975],{},[146,114140,114142],{"className":148,"code":114141,"language":150,"meta":39,"style":39},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[152,114143,114144,114149,114171],{"__ignoreMap":39},[155,114145,114146],{"class":157,"line":158},[155,114147,114148],{"class":161},"#一维\n",[155,114150,114151,114153,114155,114157,114159,114161,114163,114165,114167,114169],{"class":157,"line":46},[155,114152,111677],{"class":171},[155,114154,329],{"class":263},[155,114156,332],{"class":171},[155,114158,4416],{"class":263},[155,114160,332],{"class":171},[155,114162,1020],{"class":323},[155,114164,317],{"class":167},[155,114166,230],{"class":171},[155,114168,565],{"class":263},[155,114170,1238],{"class":171},[155,114172,114173],{"class":157,"line":121},[155,114174,114175],{"class":161},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[24,114177,114030],{},[24,114179,114180],{},[37,114181],{"alt":39,"src":114182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[24,114184,114069],{},[24,114186,114187],{},[37,114188],{"alt":39,"src":114189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[14,114191,114193],{"id":114192},"_222-rand语句","2.2.2 rand语句",[24,114195,114196],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[146,114198,114200],{"className":148,"code":114199,"language":150,"meta":39,"style":39},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[152,114201,114202,114215,114220],{"__ignoreMap":39},[155,114203,114204,114207,114209,114211,114213],{"class":157,"line":158},[155,114205,114206],{"class":171},"np.random.rand(",[155,114208,20389],{"class":263},[155,114210,332],{"class":171},[155,114212,565],{"class":263},[155,114214,363],{"class":171},[155,114216,114217],{"class":157,"line":46},[155,114218,114219],{"class":161},"#第一个参数100：行数，表示有100个样本\n",[155,114221,114222],{"class":157,"line":121},[155,114223,114224],{"class":161},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[20037,114226,114228],{"id":114227},"_23-arange创建数组","2.3 arange()创建数组",[14,114230,114232],{"id":114231},"_231-函数语句","2.3.1 函数语句",[146,114234,114236],{"className":148,"code":114235,"language":150,"meta":39,"style":39},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[152,114237,114238,114252,114257,114262,114267,114272,114277,114282],{"__ignoreMap":39},[155,114239,114240,114243,114245,114247,114250],{"class":157,"line":158},[155,114241,114242],{"class":171},"numpy.arange([start,] stop[, step], ",[155,114244,112063],{"class":323},[155,114246,317],{"class":167},[155,114248,114249],{"class":263},"None",[155,114251,363],{"class":171},[155,114253,114254],{"class":157,"line":46},[155,114255,114256],{"class":161},"#参数\n",[155,114258,114259],{"class":157,"line":121},[155,114260,114261],{"class":732},"\"\"\"\n",[155,114263,114264],{"class":157,"line":180},[155,114265,114266],{"class":732},"start:起始值，可选，默认从 0 开始。\n",[155,114268,114269],{"class":157,"line":194},[155,114270,114271],{"class":732},"stop:结束值（不包含该值）。\n",[155,114273,114274],{"class":157,"line":200},[155,114275,114276],{"class":732},"step:步长，可选，默认是 1。可以为浮点数。\n",[155,114278,114279],{"class":157,"line":213},[155,114280,114281],{"class":732},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[155,114283,114284],{"class":157,"line":220},[155,114285,114261],{"class":732},[14,114287,114289],{"id":114288},"_232-实例","2.3.2 实例",[146,114291,114293],{"className":148,"code":114292,"language":150,"meta":39,"style":39},"#创建一维数组\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",[152,114294,114295,114299,114323,114328,114333,114337,114360,114364,114368,114373,114378],{"__ignoreMap":39},[155,114296,114297],{"class":157,"line":158},[155,114298,111668],{"class":161},[155,114300,114301,114303,114305,114307,114309,114311,114313,114315,114317,114319,114321],{"class":157,"line":46},[155,114302,111565],{"class":171},[155,114304,329],{"class":263},[155,114306,332],{"class":171},[155,114308,20781],{"class":263},[155,114310,332],{"class":171},[155,114312,329],{"class":263},[155,114314,332],{"class":171},[155,114316,112063],{"class":323},[155,114318,317],{"class":167},[155,114320,15239],{"class":263},[155,114322,363],{"class":171},[155,114324,114325],{"class":157,"line":121},[155,114326,114327],{"class":161},"#输出结果：\n",[155,114329,114330],{"class":157,"line":180},[155,114331,114332],{"class":161},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[155,114334,114335],{"class":157,"line":194},[155,114336,112510],{"class":161},[155,114338,114339,114342,114344,114346,114348,114351,114353,114355,114357],{"class":157,"line":200},[155,114340,114341],{"class":171},"np.array([np.arange(",[155,114343,329],{"class":263},[155,114345,332],{"class":171},[155,114347,1264],{"class":263},[155,114349,114350],{"class":171},"),np.arange(",[155,114352,1264],{"class":263},[155,114354,332],{"class":171},[155,114356,8408],{"class":263},[155,114358,114359],{"class":171},")])\n",[155,114361,114362],{"class":157,"line":213},[155,114363,112127],{"class":161},[155,114365,114366],{"class":157,"line":220},[155,114367,114261],{"class":732},[155,114369,114370],{"class":157,"line":245},[155,114371,114372],{"class":732},"array([[1, 2, 3],\n",[155,114374,114375],{"class":157,"line":251},[155,114376,114377],{"class":732},"       [4, 5, 6]])\n",[155,114379,114380],{"class":157,"line":257},[155,114381,114261],{"class":732},[20037,114383,114385],{"id":114384},"_24-生态分布","2.4 生态分布",[14,114387,114389],{"id":114388},"_241-标准正态分布","2.4.1 标准正态分布",[24,114391,114392],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[24,114394,114395],{},[37,114396],{"alt":39,"src":114397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[14,114399,114401],{"id":114400},"_242-常规正态分布","2.4.2 常规正态分布",[146,114403,114405],{"className":148,"code":114404,"language":150,"meta":39,"style":39},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[152,114406,114407,114412,114417,114422],{"__ignoreMap":39},[155,114408,114409],{"class":157,"line":158},[155,114410,114411],{"class":171},"random.normal(loc,scale,size)也可以生成正态分布\n",[155,114413,114414],{"class":157,"line":46},[155,114415,114416],{"class":161},"#loc:期望\n",[155,114418,114419],{"class":157,"line":121},[155,114420,114421],{"class":161},"#scale:方差\n",[155,114423,114424],{"class":157,"line":180},[155,114425,114426],{"class":161},"#size:用于确定是几维的数列\n",[24,114428,114429],{},[37,114430],{"alt":39,"src":114431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[20037,114433,114435],{"id":114434},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[24,114437,114438],{},"ndim:秩，维度个数",[24,114440,114441],{},"size:数组元素的个数",[24,114443,114444],{},"shape:数组的形状",[24,114446,114447],{},"dtype:数组元素的类型",[24,114449,114450],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[24,114452,114453],{},"他们都是属性，通过数组.属性的形式来确定",[24,114455,114456],{},"如果需要输出多个可以通过以下方式：",[146,114458,114460],{"className":148,"code":114459,"language":150,"meta":39,"style":39},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[152,114461,114462],{"__ignoreMap":39},[155,114463,114464,114466],{"class":157,"line":158},[155,114465,15451],{"class":263},[155,114467,114468],{"class":171},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[20037,114470,114472],{"id":114471},"_26-其他方式创建数组","2.6 其他方式创建数组",[14,114474,114476],{"id":114475},"_261-zeros创建数组","2.6.1 zeros()创建数组",[24,114478,114479],{},"①创建一维数组",[146,114481,114483],{"className":148,"code":114482,"language":150,"meta":39,"style":39},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[152,114484,114485,114494,114498,114503,114508],{"__ignoreMap":39},[155,114486,114487,114490,114492],{"class":157,"line":158},[155,114488,114489],{"class":171},"np.zeros(",[155,114491,565],{"class":263},[155,114493,363],{"class":171},[155,114495,114496],{"class":157,"line":46},[155,114497,114261],{"class":732},[155,114499,114500],{"class":157,"line":121},[155,114501,114502],{"class":732},"输出结果：\n",[155,114504,114505],{"class":157,"line":180},[155,114506,114507],{"class":732},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[155,114509,114510],{"class":157,"line":194},[155,114511,114261],{"class":732},[24,114513,114514],{},"上方代码等价于：",[146,114516,114518],{"className":148,"code":114517,"language":150,"meta":39,"style":39},"np.zeros(shape=(10))#创建10个元素的0数组\n",[152,114519,114520],{"__ignoreMap":39},[155,114521,114522,114524,114527,114529,114531,114533,114535],{"class":157,"line":158},[155,114523,114489],{"class":171},[155,114525,114526],{"class":323},"shape",[155,114528,317],{"class":167},[155,114530,230],{"class":171},[155,114532,565],{"class":263},[155,114534,101334],{"class":171},[155,114536,114537],{"class":161},"#创建10个元素的0数组\n",[24,114539,114540],{},"也可以指定类型",[146,114542,114544],{"className":148,"code":114543,"language":150,"meta":39,"style":39},"#指定类型\nnp.zeros(5,dtype=int)\n",[152,114545,114546,114551],{"__ignoreMap":39},[155,114547,114548],{"class":157,"line":158},[155,114549,114550],{"class":161},"#指定类型\n",[155,114552,114553,114555,114557,114559,114561,114563,114565],{"class":157,"line":46},[155,114554,114489],{"class":171},[155,114556,350],{"class":263},[155,114558,332],{"class":171},[155,114560,112063],{"class":323},[155,114562,317],{"class":167},[155,114564,15239],{"class":263},[155,114566,363],{"class":171},[24,114568,114569],{},"②创建二维数组",[146,114571,114573],{"className":148,"code":114572,"language":150,"meta":39,"style":39},"np.zeros((3,4),dtype=int)\n",[152,114574,114575],{"__ignoreMap":39},[155,114576,114577,114580,114582,114584,114586,114588,114590,114592,114594],{"class":157,"line":158},[155,114578,114579],{"class":171},"np.zeros((",[155,114581,4444],{"class":263},[155,114583,332],{"class":171},[155,114585,1264],{"class":263},[155,114587,11871],{"class":171},[155,114589,112063],{"class":323},[155,114591,317],{"class":167},[155,114593,15239],{"class":263},[155,114595,363],{"class":171},[24,114597,114598],{},"③创建三维数组",[146,114600,114602],{"className":148,"code":114601,"language":150,"meta":39,"style":39},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[152,114603,114604,114609],{"__ignoreMap":39},[155,114605,114606],{"class":157,"line":158},[155,114607,114608],{"class":161},"#创建三维数组\n",[155,114610,114611,114613,114615,114617,114619,114621,114623,114625,114627,114629,114631],{"class":157,"line":46},[155,114612,114579],{"class":171},[155,114614,4444],{"class":263},[155,114616,332],{"class":171},[155,114618,1264],{"class":263},[155,114620,332],{"class":171},[155,114622,350],{"class":263},[155,114624,11871],{"class":171},[155,114626,112063],{"class":323},[155,114628,317],{"class":167},[155,114630,15239],{"class":263},[155,114632,363],{"class":171},[24,114634,114635],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[146,114637,114639],{"className":148,"code":114638,"language":150,"meta":39,"style":39},"#使用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",[152,114640,114641,114646,114661,114666,114671,114693],{"__ignoreMap":39},[155,114642,114643],{"class":157,"line":158},[155,114644,114645],{"class":161},"#使用zeros_like将创建的一维数组变成全0的数组\n",[155,114647,114648,114650,114652,114654,114656,114658],{"class":157,"line":46},[155,114649,20318],{"class":171},[155,114651,317],{"class":167},[155,114653,111565],{"class":171},[155,114655,1264],{"class":263},[155,114657,20501],{"class":171},[155,114659,114660],{"class":161},"#这个得到的结果：一维数组0，1，2，3\n",[155,114662,114663],{"class":157,"line":121},[155,114664,114665],{"class":171},"np.zeros_like(a)\n",[155,114667,114668],{"class":157,"line":180},[155,114669,114670],{"class":161},"#使用zeros_like将创建的二维数组变成全0的数组\n",[155,114672,114673,114675,114677,114679,114681,114683,114685,114687,114689,114691],{"class":157,"line":194},[155,114674,111869],{"class":171},[155,114676,317],{"class":167},[155,114678,113990],{"class":171},[155,114680,1020],{"class":323},[155,114682,317],{"class":167},[155,114684,230],{"class":171},[155,114686,1264],{"class":263},[155,114688,332],{"class":171},[155,114690,350],{"class":263},[155,114692,1238],{"class":171},[155,114694,114695],{"class":157,"line":200},[155,114696,114697],{"class":171},"np.zeros_like(aa)\n",[14,114699,114701],{"id":114700},"_262-ones创建数组","2.6.2 ones()创建数组",[24,114703,114704],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[14,114706,114708],{"id":114707},"_263-empty创建数组","2.6.3 empty()创建数组",[24,114710,114711],{},"①empty()用法",[146,114713,114715],{"className":148,"code":114714,"language":150,"meta":39,"style":39},"numpy.empty(shape,dtype=float,order='c')\n",[152,114716,114717],{"__ignoreMap":39},[155,114718,114719,114722,114724,114726,114728,114730,114732,114734,114736],{"class":157,"line":158},[155,114720,114721],{"class":171},"numpy.empty(shape,",[155,114723,112063],{"class":323},[155,114725,317],{"class":167},[155,114727,2833],{"class":263},[155,114729,332],{"class":171},[155,114731,113860],{"class":323},[155,114733,317],{"class":167},[155,114735,94591],{"class":732},[155,114737,363],{"class":171},[24,114739,114740],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[24,114742,114743],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[24,114745,114746],{},[37,114747],{"alt":39,"src":114748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[24,114750,114751],{},"②empty()用法",[146,114753,114755],{"className":148,"code":114754,"language":150,"meta":39,"style":39},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[152,114756,114757,114778,114790,114811,114816],{"__ignoreMap":39},[155,114758,114759,114761,114763,114766,114768,114770,114772,114774,114776],{"class":157,"line":158},[155,114760,20899],{"class":171},[155,114762,317],{"class":167},[155,114764,114765],{"class":171},"np.empty(",[155,114767,565],{"class":263},[155,114769,332],{"class":171},[155,114771,112063],{"class":323},[155,114773,317],{"class":167},[155,114775,15239],{"class":263},[155,114777,363],{"class":171},[155,114779,114780,114782,114784,114786,114788],{"class":157,"line":46},[155,114781,20874],{"class":171},[155,114783,317],{"class":167},[155,114785,111565],{"class":171},[155,114787,350],{"class":263},[155,114789,363],{"class":171},[155,114791,114792,114795,114797,114800,114802,114804,114807,114809],{"class":157,"line":121},[155,114793,114794],{"class":171},"np.add(",[155,114796,360],{"class":263},[155,114798,114799],{"class":171},",x,",[155,114801,111617],{"class":323},[155,114803,317],{"class":167},[155,114805,114806],{"class":171},"y[:",[155,114808,350],{"class":263},[155,114810,17676],{"class":171},[155,114812,114813],{"class":157,"line":180},[155,114814,114815],{"class":161},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[155,114817,114818],{"class":157,"line":194},[155,114819,114820],{"class":171},"y\n",[24,114822,31342],{},[24,114824,114825],{},[37,114826],{"alt":39,"src":114827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[146,114829,114831],{"className":148,"code":114830,"language":150,"meta":39,"style":39},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[152,114832,114833,114849,114869,114884],{"__ignoreMap":39},[155,114834,114835,114837,114839,114841,114843,114845,114847],{"class":157,"line":158},[155,114836,20874],{"class":171},[155,114838,317],{"class":167},[155,114840,111565],{"class":171},[155,114842,329],{"class":263},[155,114844,332],{"class":171},[155,114846,340],{"class":263},[155,114848,363],{"class":171},[155,114850,114851,114853,114855,114857,114859,114861,114863,114865,114867],{"class":157,"line":46},[155,114852,20899],{"class":171},[155,114854,317],{"class":167},[155,114856,114765],{"class":171},[155,114858,350],{"class":263},[155,114860,332],{"class":171},[155,114862,112063],{"class":323},[155,114864,317],{"class":167},[155,114866,15239],{"class":263},[155,114868,363],{"class":171},[155,114870,114871,114874,114876,114878,114880,114882],{"class":157,"line":121},[155,114872,114873],{"class":171},"np.add(x,",[155,114875,360],{"class":263},[155,114877,332],{"class":171},[155,114879,111617],{"class":323},[155,114881,317],{"class":167},[155,114883,112012],{"class":171},[155,114885,114886],{"class":157,"line":180},[155,114887,114888],{"class":161},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[24,114890,114891],{},"③empty_like()",[24,114893,114894],{},[20234,114895,114896,114897,114902],{},"创建一个",[20234,114898,114899],{},[20234,114900,114901],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[24,114904,114905,114908],{},[152,114906,114907],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[24,114910,114911],{},[37,114912],{"alt":39,"src":114913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[14,114915,114917],{"id":114916},"_264-用法","2.6.4 ？？用法",[24,114919,114920],{},"当想查看一个函数的参数时，可以通过？？来实现",[146,114922,114924],{"className":148,"code":114923,"language":150,"meta":39,"style":39},"np.full??\n",[152,114925,114926],{"__ignoreMap":39},[155,114927,114928,114931],{"class":157,"line":158},[155,114929,114930],{"class":171},"np.full",[155,114932,114933],{"class":95966},"??\n",[14,114935,114937],{"id":114936},"_265-full创建数组","2.6.5 full()创建数组",[146,114939,114941],{"className":148,"code":114940,"language":150,"meta":39,"style":39},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[152,114942,114943,114948],{"__ignoreMap":39},[155,114944,114945],{"class":157,"line":158},[155,114946,114947],{"class":171},"full(shape,fill_value)\n",[155,114949,114950],{"class":157,"line":46},[155,114951,114952],{"class":171},"创建全为某个指定值的数组\n",[24,114954,113093],{},[146,114956,114958],{"className":148,"code":114957,"language":150,"meta":39,"style":39},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[152,114959,114960,114965],{"__ignoreMap":39},[155,114961,114962],{"class":157,"line":158},[155,114963,114964],{"class":161},"#创建一个一维数组,以20进行填充\n",[155,114966,114967,114970,114972,114974,114976],{"class":157,"line":46},[155,114968,114969],{"class":171},"np.full(",[155,114971,565],{"class":263},[155,114973,332],{"class":171},[155,114975,3458],{"class":263},[155,114977,363],{"class":171},[24,114979,111854],{},[146,114981,114983],{"className":148,"code":114982,"language":150,"meta":39,"style":39},"#创建二维数组\nnp.full((3,5),11)\n",[152,114984,114985,114989],{"__ignoreMap":39},[155,114986,114987],{"class":157,"line":158},[155,114988,112510],{"class":161},[155,114990,114991,114994,114996,114998,115000,115002,115004],{"class":157,"line":46},[155,114992,114993],{"class":171},"np.full((",[155,114995,4444],{"class":263},[155,114997,332],{"class":171},[155,114999,350],{"class":263},[155,115001,11871],{"class":171},[155,115003,4416],{"class":263},[155,115005,363],{"class":171},[24,115007,115008],{},"③full_like用法",[24,115010,115011],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[24,115013,115014],{},"这里是指定填充而已",[146,115016,115018],{"className":148,"code":115017,"language":150,"meta":39,"style":39},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[152,115019,115020,115025,115049,115054],{"__ignoreMap":39},[155,115021,115022],{"class":157,"line":158},[155,115023,115024],{"class":161},"#创建一个指定形状数组\n",[155,115026,115027,115029,115031,115033,115035,115037,115039,115041,115043,115045,115047],{"class":157,"line":46},[155,115028,20318],{"class":171},[155,115030,317],{"class":167},[155,115032,111565],{"class":171},[155,115034,329],{"class":263},[155,115036,332],{"class":171},[155,115038,20402],{"class":263},[155,115040,111570],{"class":171},[155,115042,1264],{"class":263},[155,115044,332],{"class":171},[155,115046,20492],{"class":263},[155,115048,363],{"class":171},[155,115050,115051],{"class":157,"line":121},[155,115052,115053],{"class":161},"#进行指定填充\n",[155,115055,115056,115059,115061],{"class":157,"line":180},[155,115057,115058],{"class":171},"np.full_like(a,",[155,115060,565],{"class":263},[155,115062,363],{"class":171},[24,115064,31342],{},[24,115066,115067],{},[37,115068],{"alt":39,"src":115069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[14,115071,115073],{"id":115072},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[19,115075,115077],{"id":115076},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[146,115079,115081],{"className":148,"code":115080,"language":150,"meta":39,"style":39},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[152,115082,115083,115100],{"__ignoreMap":39},[155,115084,115085,115088,115090,115092,115094,115096,115098],{"class":157,"line":158},[155,115086,115087],{"class":171},"np.eye(",[155,115089,1264],{"class":263},[155,115091,332],{"class":171},[155,115093,112063],{"class":323},[155,115095,317],{"class":167},[155,115097,15239],{"class":263},[155,115099,363],{"class":171},[155,115101,115102],{"class":157,"line":46},[155,115103,115104],{"class":161},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[19,115106,115108],{"id":115107},"_2662-法2identity","2.6.6.2 法2：identity()",[146,115110,115112],{"className":148,"code":115111,"language":150,"meta":39,"style":39},"#identity()\nnp.identity(5,dtype=int)\n",[152,115113,115114,115119],{"__ignoreMap":39},[155,115115,115116],{"class":157,"line":158},[155,115117,115118],{"class":161},"#identity()\n",[155,115120,115121,115124,115126,115128,115130,115132,115134],{"class":157,"line":46},[155,115122,115123],{"class":171},"np.identity(",[155,115125,350],{"class":263},[155,115127,332],{"class":171},[155,115129,112063],{"class":323},[155,115131,317],{"class":167},[155,115133,15239],{"class":263},[155,115135,363],{"class":171},[24,115137,115138],{},"两个函数是有区别的",[24,115140,115141],{},[37,115142],{"alt":39,"src":115143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[24,115145,115146],{},[37,115147],{"alt":39,"src":115148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[146,115150,115152],{"className":148,"code":115151,"language":150,"meta":39,"style":39},"# 创建一个 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",[152,115153,115154,115159,115171,115176,115181,115186,115191,115195,115200,115220,115224,115229,115234],{"__ignoreMap":39},[155,115155,115156],{"class":157,"line":158},[155,115157,115158],{"class":161},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[155,115160,115161,115163,115165,115167,115169],{"class":157,"line":46},[155,115162,115087],{"class":171},[155,115164,4444],{"class":263},[155,115166,7589],{"class":171},[155,115168,1264],{"class":263},[155,115170,363],{"class":171},[155,115172,115173],{"class":157,"line":121},[155,115174,115175],{"class":161},"# 输出:\n",[155,115177,115178],{"class":157,"line":180},[155,115179,115180],{"class":161},"# [[1. 0. 0. 0.]\n",[155,115182,115183],{"class":157,"line":194},[155,115184,115185],{"class":161},"#  [0. 1. 0. 0.]\n",[155,115187,115188],{"class":157,"line":200},[155,115189,115190],{"class":161},"#  [0. 0. 1. 0.]]\n",[155,115192,115193],{"class":157,"line":213},[155,115194,217],{"emptyLinePlaceholder":216},[155,115196,115197],{"class":157,"line":220},[155,115198,115199],{"class":161},"# 对角线向上偏移1\n",[155,115201,115202,115204,115206,115208,115210,115212,115214,115216,115218],{"class":157,"line":245},[155,115203,115087],{"class":171},[155,115205,4444],{"class":263},[155,115207,7589],{"class":171},[155,115209,1264],{"class":263},[155,115211,7589],{"class":171},[155,115213,15234],{"class":323},[155,115215,317],{"class":167},[155,115217,329],{"class":263},[155,115219,363],{"class":171},[155,115221,115222],{"class":157,"line":251},[155,115223,115175],{"class":161},[155,115225,115226],{"class":157,"line":257},[155,115227,115228],{"class":161},"# [[0. 1. 0. 0.]\n",[155,115230,115231],{"class":157,"line":270},[155,115232,115233],{"class":161},"#  [0. 0. 1. 0.]\n",[155,115235,115236],{"class":157,"line":276},[155,115237,115238],{"class":161},"#  [0. 0. 0. 1.]]\n",[14,115240,115242],{"id":115241},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[146,115244,115246],{"className":148,"code":115245,"language":150,"meta":39,"style":39},"#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",[152,115247,115248,115253,115257,115262,115267,115272,115277,115282,115287,115292,115297],{"__ignoreMap":39},[155,115249,115250],{"class":157,"line":158},[155,115251,115252],{"class":161},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[155,115254,115255],{"class":157,"line":46},[155,115256,114261],{"class":732},[155,115258,115259],{"class":157,"line":121},[155,115260,115261],{"class":732},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[155,115263,115264],{"class":157,"line":180},[155,115265,115266],{"class":732},"参数介绍：\n",[155,115268,115269],{"class":157,"line":194},[155,115270,115271],{"class":732},"start：序列的起始值\n",[155,115273,115274],{"class":157,"line":200},[155,115275,115276],{"class":732},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[155,115278,115279],{"class":157,"line":213},[155,115280,115281],{"class":732},"num：要生长的等步长的样本数量，默认为50\n",[155,115283,115284],{"class":157,"line":220},[155,115285,115286],{"class":732},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[155,115288,115289],{"class":157,"line":245},[155,115290,115291],{"class":732},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[155,115293,115294],{"class":157,"line":251},[155,115295,115296],{"class":732},"dtype：ndarry的数据类型\n",[155,115298,115299],{"class":157,"line":257},[155,115300,114261],{"class":732},[24,115302,115303],{},[37,115304],{"alt":39,"src":115305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[24,115307,115308],{},"这里num=是可以省略的",[24,115310,115311],{},"也就是下方两行代码结果是一模一样的",[146,115313,115315],{"className":148,"code":115314,"language":150,"meta":39,"style":39},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[152,115316,115317,115334],{"__ignoreMap":39},[155,115318,115319,115322,115324,115326,115328,115330,115332],{"class":157,"line":158},[155,115320,115321],{"class":171},"np.linspace(",[155,115323,329],{"class":263},[155,115325,332],{"class":171},[155,115327,350],{"class":263},[155,115329,332],{"class":171},[155,115331,350],{"class":263},[155,115333,363],{"class":171},[155,115335,115336,115338,115340,115342,115344,115346,115348,115350,115352],{"class":157,"line":46},[155,115337,115321],{"class":171},[155,115339,329],{"class":263},[155,115341,332],{"class":171},[155,115343,350],{"class":263},[155,115345,332],{"class":171},[155,115347,21568],{"class":323},[155,115349,317],{"class":167},[155,115351,350],{"class":263},[155,115353,363],{"class":171},[14,115355,115357],{"id":115356},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[146,115359,115361],{"className":148,"code":115360,"language":150,"meta":39,"style":39},"#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",[152,115362,115363,115368,115372,115377,115382,115387,115392,115396,115401,115406,115410],{"__ignoreMap":39},[155,115364,115365],{"class":157,"line":158},[155,115366,115367],{"class":161},"#logspace函数用于创建一个等比数列，格式如下：\n",[155,115369,115370],{"class":157,"line":46},[155,115371,114261],{"class":732},[155,115373,115374],{"class":157,"line":121},[155,115375,115376],{"class":732},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[155,115378,115379],{"class":157,"line":180},[155,115380,115381],{"class":732},"参数为：\n",[155,115383,115384],{"class":157,"line":194},[155,115385,115386],{"class":732},"start:序列的起始位置为：base**start\n",[155,115388,115389],{"class":157,"line":200},[155,115390,115391],{"class":732},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[155,115393,115394],{"class":157,"line":213},[155,115395,115281],{"class":732},[155,115397,115398],{"class":157,"line":220},[155,115399,115400],{"class":732},"endpoint：是否包含 stop 这个值，默认是 True\n",[155,115402,115403],{"class":157,"line":245},[155,115404,115405],{"class":732},"base：对数的底数，默认是 10（常见对数）\n",[155,115407,115408],{"class":157,"line":251},[155,115409,115296],{"class":732},[155,115411,115412],{"class":157,"line":257},[155,115413,114261],{"class":732},[24,115415,115416],{},[37,115417],{"alt":39,"src":115418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[24,115420,115421],{},"logspace()函数中的num参数也是可以不写num=的",[24,115423,115424],{},"endpoint是不可以省略的",[20011,115426,115427],{},"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":39,"searchDepth":46,"depth":46,"links":115429},[115430,115434,115439,115443,115447,115448],{"id":113819,"depth":46,"text":113820,"children":115431},[115432,115433],{"id":113823,"depth":121,"text":113824},{"id":113896,"depth":121,"text":113897},{"id":113928,"depth":46,"text":113929,"children":115435},[115436,115437,115438],{"id":113932,"depth":121,"text":113933},{"id":114114,"depth":121,"text":114115},{"id":114192,"depth":121,"text":114193},{"id":114227,"depth":46,"text":114228,"children":115440},[115441,115442],{"id":114231,"depth":121,"text":114232},{"id":114288,"depth":121,"text":114289},{"id":114384,"depth":46,"text":114385,"children":115444},[115445,115446],{"id":114388,"depth":121,"text":114389},{"id":114400,"depth":121,"text":114401},{"id":114434,"depth":46,"text":114435},{"id":114471,"depth":46,"text":114472,"children":115449},[115450,115451,115452,115453,115454,115455,115456,115457],{"id":114475,"depth":121,"text":114476},{"id":114700,"depth":121,"text":114701},{"id":114707,"depth":121,"text":114708},{"id":114916,"depth":121,"text":114917},{"id":114936,"depth":121,"text":114937},{"id":115072,"depth":121,"text":115073},{"id":115241,"depth":121,"text":115242},{"id":115356,"depth":121,"text":115357},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":113811,"description":20020},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":115464,"title":115465,"body":115466,"description":20020,"extension":20021,"meta":115559,"navigation":216,"path":115560,"seo":115561,"stem":115562,"__hash__":115563},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":115467,"toc":115557},[115468,115471,115474,115477,115480,115483,115486,115489,115492,115495,115498,115501,115503,115506,115509,115514,115517,115520,115554],[10,115469,115465],{"id":115470},"_20魔法命令mprun",[24,115472,115473],{},"逐行分析数据内存的使用情况",[24,115475,115476],{},"语法格式：",[24,115478,115479],{},"%mprun -f 模块名.函数名 模块名.函数名()",[24,115481,115482],{},"分析结果列如下：",[24,115484,115485],{},"Line行号",[24,115487,115488],{},"Mem usage内存使用大小",[24,115490,115491],{},"increment内存增量",[24,115493,115494],{},"Line content代码内容",[24,115496,115497],{},"补充说明：",[24,115499,115500],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[24,115502,113766],{},[24,115504,115505],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[24,115507,115508],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[24,115510,115511],{},[37,115512],{"alt":39,"src":115513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[24,115515,115516],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[24,115518,115519],{},"这时候需要重新加载模块",[146,115521,115523],{"className":148,"code":115522,"language":150,"meta":39,"style":39},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[152,115524,115525,115530,115537,115542],{"__ignoreMap":39},[155,115526,115527],{"class":157,"line":158},[155,115528,115529],{"class":161},"#重新加载模块\n",[155,115531,115532,115534],{"class":157,"line":46},[155,115533,168],{"class":167},[155,115535,115536],{"class":171}," importlib\n",[155,115538,115539],{"class":157,"line":121},[155,115540,115541],{"class":171},"importlib.reload(mprun_test)\n",[155,115543,115544,115546,115549,115551],{"class":157,"line":180},[155,115545,2938],{"class":167},[155,115547,115548],{"class":171},"mprun ",[155,115550,2039],{"class":167},[155,115552,115553],{"class":171},"f mprun_test.fun_test mprun_test.fun_test()\n",[20011,115555,115556],{},"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":39,"searchDepth":46,"depth":46,"links":115558},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":115465,"description":20020},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":115565,"title":115566,"body":115567,"description":20020,"extension":20021,"meta":115584,"navigation":216,"path":115585,"seo":115586,"stem":115587,"__hash__":115588},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":115568,"toc":115582},[115569,115572,115577],[10,115570,115566],{"id":115571},"_3一维数组的索引和切片",[24,115573,115574],{},[37,115575],{"alt":39,"src":115576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[24,115578,115579],{},[37,115580],{"alt":39,"src":115581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":39,"searchDepth":46,"depth":46,"links":115583},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":115566,"description":20020},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":115590,"title":115591,"body":115592,"description":20020,"extension":20021,"meta":116075,"navigation":216,"path":116076,"seo":116077,"stem":116078,"__hash__":116079},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":115593,"toc":116073},[115594,115597,115600,115605,115638,115641,115679,115682,115716,115719,115824,115827,115864,115867,115968,115971,116022,116025,116067,116070],[10,115595,115591],{"id":115596},"_4二维数组的索引与切片",[24,115598,115599],{},"①获取指定单个元素",[24,115601,115602],{},[37,115603],{"alt":39,"src":115604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[146,115606,115608],{"className":148,"code":115607,"language":150,"meta":39,"style":39},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[152,115609,115610,115615,115620,115625],{"__ignoreMap":39},[155,115611,115612],{"class":157,"line":158},[155,115613,115614],{"class":161},"#获取元素9\n",[155,115616,115617],{"class":157,"line":46},[155,115618,115619],{"class":161},"#先获取所在行，再获取所在列\n",[155,115621,115622],{"class":157,"line":121},[155,115623,115624],{"class":161},"#数组[行索引号，列索引号]\n",[155,115626,115627,115630,115632,115634,115636],{"class":157,"line":180},[155,115628,115629],{"class":171},"a[",[155,115631,329],{"class":263},[155,115633,332],{"class":171},[155,115635,360],{"class":263},[155,115637,2845],{"class":171},[24,115639,115640],{},"②获取整行元素",[146,115642,115644],{"className":148,"code":115643,"language":150,"meta":39,"style":39},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[152,115645,115646,115651,115656,115664,115669],{"__ignoreMap":39},[155,115647,115648],{"class":157,"line":158},[155,115649,115650],{"class":161},"#获取整行 数组[行索引号]\n",[155,115652,115653],{"class":157,"line":46},[155,115654,115655],{"class":161},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[155,115657,115658,115660,115662],{"class":157,"line":121},[155,115659,115629],{"class":171},[155,115661,360],{"class":263},[155,115663,2845],{"class":171},[155,115665,115666],{"class":157,"line":180},[155,115667,115668],{"class":161},"#也可以负索引获取一行\n",[155,115670,115671,115673,115675,115677],{"class":157,"line":194},[155,115672,115629],{"class":171},[155,115674,2039],{"class":167},[155,115676,329],{"class":263},[155,115678,2845],{"class":171},[24,115680,115681],{},"③获取整列元素",[146,115683,115685],{"className":148,"code":115684,"language":150,"meta":39,"style":39},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[152,115686,115687,115692,115701,115706],{"__ignoreMap":39},[155,115688,115689],{"class":157,"line":158},[155,115690,115691],{"class":161},"#获取整列 数组名[:,列索引]\n",[155,115693,115694,115697,115699],{"class":157,"line":46},[155,115695,115696],{"class":171},"a[:,",[155,115698,360],{"class":263},[155,115700,2845],{"class":171},[155,115702,115703],{"class":157,"line":121},[155,115704,115705],{"class":161},"#也可以负索引获取一列\n",[155,115707,115708,115710,115712,115714],{"class":157,"line":180},[155,115709,115696],{"class":171},[155,115711,2039],{"class":167},[155,115713,329],{"class":263},[155,115715,2845],{"class":171},[24,115717,115718],{},"④部分行部分列的元素",[146,115720,115722],{"className":148,"code":115721,"language":150,"meta":39,"style":39},"#部分行部分列 数组名[行切片，列切片]\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",[152,115723,115724,115729,115739,115743,115747,115752,115757,115761,115773,115777,115781,115786,115791,115796,115801,115805,115810],{"__ignoreMap":39},[155,115725,115726],{"class":157,"line":158},[155,115727,115728],{"class":161},"#部分行部分列 数组名[行切片，列切片]\n",[155,115730,115731,115734,115736],{"class":157,"line":46},[155,115732,115733],{"class":171},"a[:",[155,115735,360],{"class":263},[155,115737,115738],{"class":171},",:]\n",[155,115740,115741],{"class":157,"line":121},[155,115742,112127],{"class":161},[155,115744,115745],{"class":157,"line":180},[155,115746,112491],{"class":732},[155,115748,115749],{"class":157,"line":194},[155,115750,115751],{"class":732},"array([[ 1,  2,  3,  4,  5,  6],\n",[155,115753,115754],{"class":157,"line":200},[155,115755,115756],{"class":732},"       [ 7,  8,  9, 10, 11, 12]])\n",[155,115758,115759],{"class":157,"line":213},[155,115760,112491],{"class":732},[155,115762,115763,115765,115767,115769,115771],{"class":157,"line":220},[155,115764,115696],{"class":171},[155,115766,329],{"class":263},[155,115768,3017],{"class":171},[155,115770,1264],{"class":263},[155,115772,2845],{"class":171},[155,115774,115775],{"class":157,"line":245},[155,115776,112127],{"class":161},[155,115778,115779],{"class":157,"line":251},[155,115780,112491],{"class":732},[155,115782,115783],{"class":157,"line":257},[155,115784,115785],{"class":732},"array([[ 2,  3,  4],\n",[155,115787,115788],{"class":157,"line":270},[155,115789,115790],{"class":732},"       [ 8,  9, 10],\n",[155,115792,115793],{"class":157,"line":276},[155,115794,115795],{"class":732},"       [14, 15, 16],\n",[155,115797,115798],{"class":157,"line":297},[155,115799,115800],{"class":732},"       [20, 21, 22]])\n",[155,115802,115803],{"class":157,"line":302},[155,115804,112491],{"class":732},[155,115806,115807],{"class":157,"line":308},[155,115808,115809],{"class":161},"#对列行同时进行切片，使用了step参数\n",[155,115811,115812,115815,115817,115820,115822],{"class":157,"line":366},[155,115813,115814],{"class":171},"a[::",[155,115816,360],{"class":263},[155,115818,115819],{"class":171},",::",[155,115821,360],{"class":263},[155,115823,2845],{"class":171},[24,115825,115826],{},"⑤同时获取两个元素",[146,115828,115830],{"className":148,"code":115829,"language":150,"meta":39,"style":39},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[152,115831,115832,115837,115842],{"__ignoreMap":39},[155,115833,115834],{"class":157,"line":158},[155,115835,115836],{"class":161},"#同时获取第三行第二列，第四行第一列\n",[155,115838,115839],{"class":157,"line":46},[155,115840,115841],{"class":161},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[155,115843,115844,115847,115849,115851,115853,115855,115857,115859,115861],{"class":157,"line":121},[155,115845,115846],{"class":171},"a[(",[155,115848,360],{"class":263},[155,115850,332],{"class":171},[155,115852,4444],{"class":263},[155,115854,11861],{"class":171},[155,115856,329],{"class":263},[155,115858,332],{"class":171},[155,115860,1109],{"class":263},[155,115862,115863],{"class":171},")]\n",[24,115865,115866],{},"⑥切片，对行进行反向获取",[146,115868,115870],{"className":148,"code":115869,"language":150,"meta":39,"style":39},"#切片 对所有行进行反向获取\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",[152,115871,115872,115877,115887,115891,115895,115900,115905,115910,115915,115919,115924,115940,115944,115949,115954,115959,115964],{"__ignoreMap":39},[155,115873,115874],{"class":157,"line":158},[155,115875,115876],{"class":161},"#切片 对所有行进行反向获取\n",[155,115878,115879,115881,115883,115885],{"class":157,"line":46},[155,115880,115814],{"class":171},[155,115882,2039],{"class":167},[155,115884,329],{"class":263},[155,115886,2845],{"class":171},[155,115888,115889],{"class":157,"line":121},[155,115890,112127],{"class":161},[155,115892,115893],{"class":157,"line":180},[155,115894,112491],{"class":732},[155,115896,115897],{"class":157,"line":194},[155,115898,115899],{"class":732},"array([[19, 20, 21, 22, 23, 24],\n",[155,115901,115902],{"class":157,"line":200},[155,115903,115904],{"class":732},"       [13, 14, 15, 16, 17, 18],\n",[155,115906,115907],{"class":157,"line":213},[155,115908,115909],{"class":732},"       [ 7,  8,  9, 10, 11, 12],\n",[155,115911,115912],{"class":157,"line":220},[155,115913,115914],{"class":732},"       [ 1,  2,  3,  4,  5,  6]])\n",[155,115916,115917],{"class":157,"line":245},[155,115918,112491],{"class":732},[155,115920,115921],{"class":157,"line":251},[155,115922,115923],{"class":161},"#对行列都进行反向切片获取\n",[155,115925,115926,115928,115930,115932,115934,115936,115938],{"class":157,"line":257},[155,115927,115814],{"class":171},[155,115929,2039],{"class":167},[155,115931,329],{"class":263},[155,115933,115819],{"class":171},[155,115935,2039],{"class":167},[155,115937,329],{"class":263},[155,115939,2845],{"class":171},[155,115941,115942],{"class":157,"line":270},[155,115943,112491],{"class":732},[155,115945,115946],{"class":157,"line":276},[155,115947,115948],{"class":732},"array([[24, 23, 22, 21, 20, 19],\n",[155,115950,115951],{"class":157,"line":297},[155,115952,115953],{"class":732},"       [18, 17, 16, 15, 14, 13],\n",[155,115955,115956],{"class":157,"line":302},[155,115957,115958],{"class":732},"       [12, 11, 10,  9,  8,  7],\n",[155,115960,115961],{"class":157,"line":308},[155,115962,115963],{"class":732},"       [ 6,  5,  4,  3,  2,  1]])\n",[155,115965,115966],{"class":157,"line":366},[155,115967,112491],{"class":732},[24,115969,115970],{},"⑦修改元素",[146,115972,115974],{"className":148,"code":115973,"language":150,"meta":39,"style":39},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[152,115975,115976,115981,115999,116004],{"__ignoreMap":39},[155,115977,115978],{"class":157,"line":158},[155,115979,115980],{"class":161},"#获取前两行和前两列\n",[155,115982,115983,115986,115988,115990,115992,115995,115997],{"class":157,"line":46},[155,115984,115985],{"class":171},"sub_a",[155,115987,317],{"class":167},[155,115989,115733],{"class":171},[155,115991,360],{"class":263},[155,115993,115994],{"class":171},",:",[155,115996,360],{"class":263},[155,115998,2845],{"class":171},[155,116000,116001],{"class":157,"line":121},[155,116002,116003],{"class":161},"#修改sub_a第一个元素的值\n",[155,116005,116006,116009,116011,116013,116015,116017,116019],{"class":157,"line":180},[155,116007,116008],{"class":171},"sub_a[",[155,116010,1109],{"class":263},[155,116012,332],{"class":171},[155,116014,1109],{"class":263},[155,116016,2813],{"class":171},[155,116018,317],{"class":167},[155,116020,116021],{"class":263},"100\n",[24,116023,116024],{},"⑧数组复制copy()",[146,116026,116028],{"className":148,"code":116027,"language":150,"meta":39,"style":39},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[152,116029,116030,116035,116045,116050],{"__ignoreMap":39},[155,116031,116032],{"class":157,"line":158},[155,116033,116034],{"class":161},"#数组复制\n",[155,116036,116037,116040,116042],{"class":157,"line":46},[155,116038,116039],{"class":171},"copy_a",[155,116041,317],{"class":167},[155,116043,116044],{"class":171},"np.copy(sub_a)\n",[155,116046,116047],{"class":157,"line":121},[155,116048,116049],{"class":161},"#修改copy_a后不影响原数组\n",[155,116051,116052,116055,116057,116059,116061,116063,116065],{"class":157,"line":180},[155,116053,116054],{"class":171},"copy_a[",[155,116056,1109],{"class":263},[155,116058,332],{"class":171},[155,116060,1109],{"class":263},[155,116062,2813],{"class":171},[155,116064,317],{"class":167},[155,116066,116021],{"class":263},[24,116068,116069],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[20011,116071,116072],{},"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":39,"searchDepth":46,"depth":46,"links":116074},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":115591,"description":20020},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":116081,"title":116082,"body":116083,"description":20020,"extension":20021,"meta":116575,"navigation":216,"path":116576,"seo":116577,"stem":116578,"__hash__":116579},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":116084,"toc":116567},[116085,116088,116092,116095,116098,116151,116154,116179,116182,116201,116221,116224,116240,116244,116290,116294,116336,116340,116343,116346,116349,116352,116355,116417,116477,116481,116484,116541,116545,116550,116559,116564],[10,116086,116082],{"id":116087},"_5改变数组的维度",[20037,116089,116091],{"id":116090},"_51-使用reshape","5.1 使用reshape()",[24,116093,116094],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[24,116096,116097],{},"①一维数组转换为二维数组",[146,116099,116101],{"className":148,"code":116100,"language":150,"meta":39,"style":39},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[152,116102,116103,116119,116124,116129,116134],{"__ignoreMap":39},[155,116104,116105,116107,116109,116111,116113,116115,116117],{"class":157,"line":158},[155,116106,20318],{"class":171},[155,116108,317],{"class":167},[155,116110,111565],{"class":171},[155,116112,329],{"class":263},[155,116114,332],{"class":171},[155,116116,20589],{"class":263},[155,116118,363],{"class":171},[155,116120,116121],{"class":157,"line":46},[155,116122,116123],{"class":161},"#将一维数组进行转换\n",[155,116125,116126],{"class":157,"line":121},[155,116127,116128],{"class":161},"#注意点：元素个数不可以变\n",[155,116130,116131],{"class":157,"line":180},[155,116132,116133],{"class":161},"#转换维度要保持一致，不一致就异常！！！\n",[155,116135,116136,116138,116140,116143,116145,116147,116149],{"class":157,"line":194},[155,116137,111869],{"class":171},[155,116139,317],{"class":167},[155,116141,116142],{"class":171},"a.reshape(",[155,116144,360],{"class":263},[155,116146,332],{"class":171},[155,116148,340],{"class":263},[155,116150,363],{"class":171},[24,116152,116153],{},"②一维数组转换为三维数组",[146,116155,116157],{"className":148,"code":116156,"language":150,"meta":39,"style":39},"aaa=a.reshape(2,3,2)\n",[152,116158,116159],{"__ignoreMap":39},[155,116160,116161,116163,116165,116167,116169,116171,116173,116175,116177],{"class":157,"line":158},[155,116162,114084],{"class":171},[155,116164,317],{"class":167},[155,116166,116142],{"class":171},[155,116168,360],{"class":263},[155,116170,332],{"class":171},[155,116172,4444],{"class":263},[155,116174,332],{"class":171},[155,116176,360],{"class":263},[155,116178,363],{"class":171},[24,116180,116181],{},"③二维数组转化为一维数组",[146,116183,116185],{"className":148,"code":116184,"language":150,"meta":39,"style":39},"#知道元素个数：\naa.reshape(12)\n",[152,116186,116187,116192],{"__ignoreMap":39},[155,116188,116189],{"class":157,"line":158},[155,116190,116191],{"class":161},"#知道元素个数：\n",[155,116193,116194,116197,116199],{"class":157,"line":46},[155,116195,116196],{"class":171},"aa.reshape(",[155,116198,1231],{"class":263},[155,116200,363],{"class":171},[146,116202,116204],{"className":148,"code":116203,"language":150,"meta":39,"style":39},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[152,116205,116206,116211],{"__ignoreMap":39},[155,116207,116208],{"class":157,"line":158},[155,116209,116210],{"class":161},"#不知道元素个数，参数传递-1\n",[155,116212,116213,116215,116217,116219],{"class":157,"line":46},[155,116214,116196],{"class":171},[155,116216,2039],{"class":167},[155,116218,329],{"class":263},[155,116220,363],{"class":171},[24,116222,116223],{},"④三维数组转换为一维数组",[146,116225,116227],{"className":148,"code":116226,"language":150,"meta":39,"style":39},"aaa.reshape(-1)\n",[152,116228,116229],{"__ignoreMap":39},[155,116230,116231,116234,116236,116238],{"class":157,"line":158},[155,116232,116233],{"class":171},"aaa.reshape(",[155,116235,2039],{"class":167},[155,116237,329],{"class":263},[155,116239,363],{"class":171},[20037,116241,116243],{"id":116242},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[146,116245,116247],{"className":148,"code":116246,"language":150,"meta":39,"style":39},"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",[152,116248,116249,116276,116281,116285],{"__ignoreMap":39},[155,116250,116251,116253,116255,116257,116259,116261,116263,116265,116267,116269,116271,116273],{"class":157,"line":158},[155,116252,111869],{"class":171},[155,116254,317],{"class":167},[155,116256,111565],{"class":171},[155,116258,329],{"class":263},[155,116260,332],{"class":171},[155,116262,20589],{"class":263},[155,116264,111570],{"class":171},[155,116266,360],{"class":263},[155,116268,332],{"class":171},[155,116270,340],{"class":263},[155,116272,20501],{"class":171},[155,116274,116275],{"class":161},"#转换为2行6列的数组\n",[155,116277,116278],{"class":157,"line":46},[155,116279,116280],{"class":171},"aa.revel()\n",[155,116282,116283],{"class":157,"line":121},[155,116284,112127],{"class":161},[155,116286,116287],{"class":157,"line":180},[155,116288,116289],{"class":161},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[20037,116291,116293],{"id":116292},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[146,116295,116297],{"className":148,"code":116296,"language":150,"meta":39,"style":39},"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",[152,116298,116299,116323,116328,116332],{"__ignoreMap":39},[155,116300,116301,116303,116305,116307,116309,116311,116313,116315,116317,116319,116321],{"class":157,"line":158},[155,116302,111869],{"class":171},[155,116304,317],{"class":167},[155,116306,111565],{"class":171},[155,116308,329],{"class":263},[155,116310,332],{"class":171},[155,116312,20589],{"class":263},[155,116314,111570],{"class":171},[155,116316,360],{"class":263},[155,116318,332],{"class":171},[155,116320,340],{"class":263},[155,116322,363],{"class":171},[155,116324,116325],{"class":157,"line":46},[155,116326,116327],{"class":171},"aa.flatten()\n",[155,116329,116330],{"class":157,"line":121},[155,116331,112127],{"class":161},[155,116333,116334],{"class":157,"line":180},[155,116335,116289],{"class":161},[20037,116337,116339],{"id":116338},"_54-使用resize","5.4 使用resize()",[24,116341,116342],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[24,116344,116345],{},"通过resize方法可以改变数组的维度",[24,116347,116348],{},"#resize修改数组维度",[24,116350,116351],{},"#以元组的形式指定形状",[24,116353,116354],{},"#改变的是原数组",[146,116356,116358],{"className":148,"code":116357,"language":150,"meta":39,"style":39},"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",[152,116359,116360,116376,116396,116409,116413],{"__ignoreMap":39},[155,116361,116362,116364,116366,116368,116370,116372,116374],{"class":157,"line":158},[155,116363,20318],{"class":171},[155,116365,317],{"class":167},[155,116367,111565],{"class":171},[155,116369,329],{"class":263},[155,116371,332],{"class":171},[155,116373,20589],{"class":263},[155,116375,363],{"class":171},[155,116377,116378,116381,116383,116385,116387,116389,116391,116393],{"class":157,"line":46},[155,116379,116380],{"class":171},"a.shape",[155,116382,317],{"class":167},[155,116384,230],{"class":171},[155,116386,360],{"class":263},[155,116388,332],{"class":171},[155,116390,340],{"class":263},[155,116392,20501],{"class":171},[155,116394,116395],{"class":161},"#改变了原数组\n",[155,116397,116398,116400,116402,116405,116407],{"class":157,"line":121},[155,116399,20318],{"class":171},[155,116401,317],{"class":167},[155,116403,116404],{"class":171},"resize((",[155,116406,1231],{"class":263},[155,116408,1238],{"class":171},[155,116410,116411],{"class":157,"line":180},[155,116412,112127],{"class":161},[155,116414,116415],{"class":157,"line":194},[155,116416,116289],{"class":161},[146,116418,116420],{"className":148,"code":116419,"language":150,"meta":39,"style":39},"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",[152,116421,116422,116435,116439,116443,116448,116453,116458,116463,116468,116473],{"__ignoreMap":39},[155,116423,116424,116427,116429,116431,116433],{"class":157,"line":158},[155,116425,116426],{"class":171},"a.resize((",[155,116428,340],{"class":263},[155,116430,332],{"class":171},[155,116432,360],{"class":263},[155,116434,1238],{"class":171},[155,116436,116437],{"class":157,"line":46},[155,116438,112127],{"class":161},[155,116440,116441],{"class":157,"line":121},[155,116442,112491],{"class":732},[155,116444,116445],{"class":157,"line":180},[155,116446,116447],{"class":732},"array([[ 1,  2],\n",[155,116449,116450],{"class":157,"line":194},[155,116451,116452],{"class":732},"       [ 3,  4],\n",[155,116454,116455],{"class":157,"line":200},[155,116456,116457],{"class":732},"       [ 5,  6],\n",[155,116459,116460],{"class":157,"line":213},[155,116461,116462],{"class":732},"       [ 7,  8],\n",[155,116464,116465],{"class":157,"line":220},[155,116466,116467],{"class":732},"       [ 9, 10],\n",[155,116469,116470],{"class":157,"line":245},[155,116471,116472],{"class":732},"       [11, 12]])\n",[155,116474,116475],{"class":157,"line":251},[155,116476,112491],{"class":732},[20037,116478,116480],{"id":116479},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[24,116482,116483],{},"改变了原数组",[146,116485,116487],{"className":148,"code":116486,"language":150,"meta":39,"style":39},"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",[152,116488,116489,116505,116521,116525,116529,116533,116537],{"__ignoreMap":39},[155,116490,116491,116493,116495,116497,116499,116501,116503],{"class":157,"line":158},[155,116492,20318],{"class":171},[155,116494,317],{"class":167},[155,116496,111565],{"class":171},[155,116498,329],{"class":263},[155,116500,332],{"class":171},[155,116502,20589],{"class":263},[155,116504,363],{"class":171},[155,116506,116507,116509,116511,116513,116515,116517,116519],{"class":157,"line":46},[155,116508,116380],{"class":171},[155,116510,317],{"class":167},[155,116512,230],{"class":171},[155,116514,360],{"class":263},[155,116516,332],{"class":171},[155,116518,340],{"class":263},[155,116520,363],{"class":171},[155,116522,116523],{"class":157,"line":121},[155,116524,112127],{"class":161},[155,116526,116527],{"class":157,"line":180},[155,116528,112491],{"class":732},[155,116530,116531],{"class":157,"line":194},[155,116532,115751],{"class":732},[155,116534,116535],{"class":157,"line":200},[155,116536,115756],{"class":732},[155,116538,116539],{"class":157,"line":213},[155,116540,112491],{"class":732},[20037,116542,116544],{"id":116543},"_56-重要比较","5.6 重要比较：",[24,116546,116547],{},[37,116548],{"alt":39,"src":116549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[24,116551,116552,116553,116555,116556,116558],{},"口诀：NumPy 函数要么用 ",[152,116554,114526],{},"，要么用 ",[152,116557,1020],{},"，创建结构用 shape，造数据用 size",[24,116560,116561],{},[37,116562],{"alt":39,"src":116563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[20011,116565,116566],{},"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":39,"searchDepth":46,"depth":46,"links":116568},[116569,116570,116571,116572,116573,116574],{"id":116090,"depth":46,"text":116091},{"id":116242,"depth":46,"text":116243},{"id":116292,"depth":46,"text":116293},{"id":116338,"depth":46,"text":116339},{"id":116479,"depth":46,"text":116480},{"id":116543,"depth":46,"text":116544},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":116082,"description":20020},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":116581,"title":116582,"body":116583,"description":20020,"extension":20021,"meta":117655,"navigation":216,"path":117656,"seo":117657,"stem":117658,"__hash__":117659},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":116584,"toc":117649},[116585,116588,116592,116595,116598,116601,116666,116669,116709,116712,116794,116797,116802,116824,116826,116831,116836,116839,116842,116997,117000,117202,117206,117209,117212,117280,117282,117287,117290,117293,117373,117377,117380,117382,117455,117457,117462,117464,117544,117548,117551,117554,117557,117560,117563,117566,117646],[10,116586,116582],{"id":116587},"_6数组的拼接",[20037,116589,116591],{"id":116590},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[24,116593,116594],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[24,116596,116597],{},"函数内部传两个数列构成的数列或者元组",[24,116599,116600],{},"①一维数组的拼接",[146,116602,116604],{"className":148,"code":116603,"language":150,"meta":39,"style":39},"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",[152,116605,116606,116626,116646,116651,116656,116661],{"__ignoreMap":39},[155,116607,116608,116610,116612,116614,116616,116618,116620,116622,116624],{"class":157,"line":158},[155,116609,20318],{"class":171},[155,116611,317],{"class":167},[155,116613,111587],{"class":171},[155,116615,329],{"class":263},[155,116617,332],{"class":171},[155,116619,360],{"class":263},[155,116621,332],{"class":171},[155,116623,4444],{"class":263},[155,116625,17676],{"class":171},[155,116627,116628,116630,116632,116634,116636,116638,116640,116642,116644],{"class":157,"line":46},[155,116629,20342],{"class":171},[155,116631,317],{"class":167},[155,116633,111587],{"class":171},[155,116635,1264],{"class":263},[155,116637,332],{"class":171},[155,116639,350],{"class":263},[155,116641,332],{"class":171},[155,116643,340],{"class":263},[155,116645,17676],{"class":171},[155,116647,116648],{"class":157,"line":121},[155,116649,116650],{"class":161},"#调用concatenate进行数组拼接\n",[155,116652,116653],{"class":157,"line":180},[155,116654,116655],{"class":171},"np.concatenate((a,b))\n",[155,116657,116658],{"class":157,"line":194},[155,116659,116660],{"class":161},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[155,116662,116663],{"class":157,"line":200},[155,116664,116665],{"class":161},"#np.concatenate([a,b])\n",[24,116667,116668],{},"②一维多个数组拼接",[146,116670,116672],{"className":148,"code":116671,"language":150,"meta":39,"style":39},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[152,116673,116674,116679,116699,116704],{"__ignoreMap":39},[155,116675,116676],{"class":157,"line":158},[155,116677,116678],{"class":161},"#也可以多个数组进行拼接\n",[155,116680,116681,116683,116685,116687,116689,116691,116693,116695,116697],{"class":157,"line":46},[155,116682,20367],{"class":171},[155,116684,317],{"class":167},[155,116686,111587],{"class":171},[155,116688,565],{"class":263},[155,116690,332],{"class":171},[155,116692,4416],{"class":263},[155,116694,332],{"class":171},[155,116696,20589],{"class":263},[155,116698,17676],{"class":171},[155,116700,116701],{"class":157,"line":121},[155,116702,116703],{"class":171},"c\n",[155,116705,116706],{"class":157,"line":180},[155,116707,116708],{"class":171},"np.concatenate((a,b,c))\n",[24,116710,116711],{},"③二维数组拼接",[146,116713,116715],{"className":148,"code":116714,"language":150,"meta":39,"style":39},"#二维数组使用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",[152,116716,116717,116722,116746,116771,116776,116781],{"__ignoreMap":39},[155,116718,116719],{"class":157,"line":158},[155,116720,116721],{"class":161},"#二维数组使用concatenate进行拼接\n",[155,116723,116724,116726,116728,116730,116732,116734,116736,116738,116740,116742,116744],{"class":157,"line":46},[155,116725,111869],{"class":171},[155,116727,317],{"class":167},[155,116729,111565],{"class":171},[155,116731,329],{"class":263},[155,116733,332],{"class":171},[155,116735,20589],{"class":263},[155,116737,111570],{"class":171},[155,116739,4444],{"class":263},[155,116741,332],{"class":171},[155,116743,1264],{"class":263},[155,116745,363],{"class":171},[155,116747,116748,116751,116753,116755,116757,116759,116761,116763,116765,116767,116769],{"class":157,"line":121},[155,116749,116750],{"class":171},"bb",[155,116752,317],{"class":167},[155,116754,111565],{"class":171},[155,116756,20413],{"class":263},[155,116758,332],{"class":171},[155,116760,20701],{"class":263},[155,116762,111570],{"class":171},[155,116764,4444],{"class":263},[155,116766,332],{"class":171},[155,116768,1264],{"class":263},[155,116770,363],{"class":171},[155,116772,116773],{"class":157,"line":180},[155,116774,116775],{"class":161},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[155,116777,116778],{"class":157,"line":194},[155,116779,116780],{"class":161},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[155,116782,116783,116786,116788,116790,116792],{"class":157,"line":200},[155,116784,116785],{"class":171},"np.concatenate((aa,bb),",[155,116787,17140],{"class":323},[155,116789,317],{"class":167},[155,116791,1109],{"class":263},[155,116793,363],{"class":171},[24,116795,116796],{},"结果：",[24,116798,116799],{},[37,116800],{"alt":39,"src":116801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[146,116803,116805],{"className":148,"code":116804,"language":150,"meta":39,"style":39},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[152,116806,116807,116812],{"__ignoreMap":39},[155,116808,116809],{"class":157,"line":158},[155,116810,116811],{"class":161},"#指定axis为1进行拼接\n",[155,116813,116814,116816,116818,116820,116822],{"class":157,"line":46},[155,116815,116785],{"class":171},[155,116817,17140],{"class":323},[155,116819,317],{"class":167},[155,116821,329],{"class":263},[155,116823,363],{"class":171},[24,116825,116796],{},[24,116827,116828],{},[37,116829],{"alt":39,"src":116830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[24,116832,116833],{},[20234,116834,116835],{},"二维数组总结：0竖着方向，1横着方向",[24,116837,116838],{},"④三维数组拼接",[24,116840,116841],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[146,116843,116845],{"className":148,"code":116844,"language":150,"meta":39,"style":39},"#两个三行六列\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",[152,116846,116847,116852,116880,116910,116915,116932,116937,116942,116947,116964,116969,116974,116979,116992],{"__ignoreMap":39},[155,116848,116849],{"class":157,"line":158},[155,116850,116851],{"class":161},"#两个三行六列\n",[155,116853,116854,116856,116858,116860,116862,116864,116866,116868,116870,116872,116874,116876,116878],{"class":157,"line":46},[155,116855,114084],{"class":171},[155,116857,317],{"class":167},[155,116859,111565],{"class":171},[155,116861,329],{"class":263},[155,116863,332],{"class":171},[155,116865,20402],{"class":263},[155,116867,111570],{"class":171},[155,116869,360],{"class":263},[155,116871,332],{"class":171},[155,116873,4444],{"class":263},[155,116875,332],{"class":171},[155,116877,340],{"class":263},[155,116879,363],{"class":171},[155,116881,116882,116885,116887,116889,116891,116893,116896,116898,116900,116902,116904,116906,116908],{"class":157,"line":121},[155,116883,116884],{"class":171},"bbb",[155,116886,317],{"class":167},[155,116888,111565],{"class":171},[155,116890,20413],{"class":263},[155,116892,332],{"class":171},[155,116894,116895],{"class":263},"137",[155,116897,111570],{"class":171},[155,116899,360],{"class":263},[155,116901,332],{"class":171},[155,116903,4444],{"class":263},[155,116905,332],{"class":171},[155,116907,340],{"class":263},[155,116909,363],{"class":171},[155,116911,116912],{"class":157,"line":180},[155,116913,116914],{"class":161},"#axis=0\n",[155,116916,116917,116919,116921,116924,116926,116928,116930],{"class":157,"line":194},[155,116918,20753],{"class":171},[155,116920,317],{"class":167},[155,116922,116923],{"class":171},"np.concatenate((aaa,bbb),",[155,116925,17140],{"class":323},[155,116927,317],{"class":167},[155,116929,1109],{"class":263},[155,116931,363],{"class":171},[155,116933,116934],{"class":157,"line":200},[155,116935,116936],{"class":171},"s.shape\n",[155,116938,116939],{"class":157,"line":213},[155,116940,116941],{"class":161},"#输出：(4,3,6)\n",[155,116943,116944],{"class":157,"line":220},[155,116945,116946],{"class":161},"#axis=1\n",[155,116948,116949,116952,116954,116956,116958,116960,116962],{"class":157,"line":245},[155,116950,116951],{"class":171},"ss",[155,116953,317],{"class":167},[155,116955,116923],{"class":171},[155,116957,17140],{"class":323},[155,116959,317],{"class":167},[155,116961,329],{"class":263},[155,116963,363],{"class":171},[155,116965,116966],{"class":157,"line":251},[155,116967,116968],{"class":171},"ss.shape\n",[155,116970,116971],{"class":157,"line":257},[155,116972,116973],{"class":161},"#输出：(2,6,6)\n",[155,116975,116976],{"class":157,"line":270},[155,116977,116978],{"class":161},"#axis=2\n",[155,116980,116981,116983,116985,116987,116989],{"class":157,"line":276},[155,116982,116923],{"class":171},[155,116984,17140],{"class":323},[155,116986,317],{"class":167},[155,116988,360],{"class":263},[155,116990,116991],{"class":171},").shape\n",[155,116993,116994],{"class":157,"line":297},[155,116995,116996],{"class":161},"#输出：（2，3，12）\n",[24,116998,116999],{},"⑤四维数组拼接",[146,117001,117003],{"className":148,"code":117002,"language":150,"meta":39,"style":39},"#两个三行六列\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",[152,117004,117005,117009,117037,117065,117090,117116,117120,117133,117138,117142,117154,117159,117163,117175,117180,117185,117197],{"__ignoreMap":39},[155,117006,117007],{"class":157,"line":158},[155,117008,116851],{"class":161},[155,117010,117011,117013,117015,117017,117019,117021,117023,117025,117027,117029,117031,117033,117035],{"class":157,"line":46},[155,117012,114084],{"class":171},[155,117014,317],{"class":167},[155,117016,111565],{"class":171},[155,117018,329],{"class":263},[155,117020,332],{"class":171},[155,117022,20402],{"class":263},[155,117024,111570],{"class":171},[155,117026,360],{"class":263},[155,117028,332],{"class":171},[155,117030,4444],{"class":263},[155,117032,332],{"class":171},[155,117034,340],{"class":263},[155,117036,363],{"class":171},[155,117038,117039,117041,117043,117045,117047,117049,117051,117053,117055,117057,117059,117061,117063],{"class":157,"line":121},[155,117040,116884],{"class":171},[155,117042,317],{"class":167},[155,117044,111565],{"class":171},[155,117046,20413],{"class":263},[155,117048,332],{"class":171},[155,117050,116895],{"class":263},[155,117052,111570],{"class":171},[155,117054,360],{"class":263},[155,117056,332],{"class":171},[155,117058,4444],{"class":263},[155,117060,332],{"class":171},[155,117062,340],{"class":263},[155,117064,363],{"class":171},[155,117066,117067,117070,117072,117074,117076,117078,117080,117082,117084,117086,117088],{"class":157,"line":180},[155,117068,117069],{"class":171},"aaaa",[155,117071,317],{"class":167},[155,117073,116233],{"class":171},[155,117075,360],{"class":263},[155,117077,332],{"class":171},[155,117079,4444],{"class":263},[155,117081,332],{"class":171},[155,117083,4444],{"class":263},[155,117085,332],{"class":171},[155,117087,360],{"class":263},[155,117089,363],{"class":171},[155,117091,117092,117095,117097,117100,117102,117104,117106,117108,117110,117112,117114],{"class":157,"line":194},[155,117093,117094],{"class":171},"bbbb",[155,117096,317],{"class":167},[155,117098,117099],{"class":171},"bbb.reshape(",[155,117101,360],{"class":263},[155,117103,332],{"class":171},[155,117105,4444],{"class":263},[155,117107,332],{"class":171},[155,117109,4444],{"class":263},[155,117111,332],{"class":171},[155,117113,360],{"class":263},[155,117115,363],{"class":171},[155,117117,117118],{"class":157,"line":200},[155,117119,116914],{"class":161},[155,117121,117122,117125,117127,117129,117131],{"class":157,"line":213},[155,117123,117124],{"class":171},"np.concatenate((aaaa,bbbb),",[155,117126,17140],{"class":323},[155,117128,317],{"class":167},[155,117130,1109],{"class":263},[155,117132,116991],{"class":171},[155,117134,117135],{"class":157,"line":220},[155,117136,117137],{"class":161},"#结果：（4，3，3，2）\n",[155,117139,117140],{"class":157,"line":245},[155,117141,116946],{"class":161},[155,117143,117144,117146,117148,117150,117152],{"class":157,"line":251},[155,117145,117124],{"class":171},[155,117147,17140],{"class":323},[155,117149,317],{"class":167},[155,117151,329],{"class":263},[155,117153,116991],{"class":171},[155,117155,117156],{"class":157,"line":257},[155,117157,117158],{"class":161},"#结果：（2，6，3，2）\n",[155,117160,117161],{"class":157,"line":270},[155,117162,116978],{"class":161},[155,117164,117165,117167,117169,117171,117173],{"class":157,"line":276},[155,117166,117124],{"class":171},[155,117168,17140],{"class":323},[155,117170,317],{"class":167},[155,117172,360],{"class":263},[155,117174,116991],{"class":171},[155,117176,117177],{"class":157,"line":297},[155,117178,117179],{"class":161},"#结果：（2，3，6，2）\n",[155,117181,117182],{"class":157,"line":302},[155,117183,117184],{"class":161},"#axis=3\n",[155,117186,117187,117189,117191,117193,117195],{"class":157,"line":308},[155,117188,117124],{"class":171},[155,117190,17140],{"class":323},[155,117192,317],{"class":167},[155,117194,4444],{"class":263},[155,117196,116991],{"class":171},[155,117198,117199],{"class":157,"line":366},[155,117200,117201],{"class":161},"#结果：（2，3，3，4）\n",[20037,117203,117205],{"id":117204},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[24,117207,117208],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[24,117210,117211],{},"①二维数组",[146,117213,117215],{"className":148,"code":117214,"language":150,"meta":39,"style":39},"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",[152,117216,117217,117241,117265,117270,117275],{"__ignoreMap":39},[155,117218,117219,117221,117223,117225,117227,117229,117231,117233,117235,117237,117239],{"class":157,"line":158},[155,117220,111869],{"class":171},[155,117222,317],{"class":167},[155,117224,111565],{"class":171},[155,117226,329],{"class":263},[155,117228,332],{"class":171},[155,117230,20589],{"class":263},[155,117232,111570],{"class":171},[155,117234,4444],{"class":263},[155,117236,332],{"class":171},[155,117238,1264],{"class":263},[155,117240,363],{"class":171},[155,117242,117243,117245,117247,117249,117251,117253,117255,117257,117259,117261,117263],{"class":157,"line":46},[155,117244,116750],{"class":171},[155,117246,317],{"class":167},[155,117248,111565],{"class":171},[155,117250,20413],{"class":263},[155,117252,332],{"class":171},[155,117254,20701],{"class":263},[155,117256,111570],{"class":171},[155,117258,4444],{"class":263},[155,117260,332],{"class":171},[155,117262,1264],{"class":263},[155,117264,363],{"class":171},[155,117266,117267],{"class":157,"line":121},[155,117268,117269],{"class":171},"np.hstack((aa,bb))\n",[155,117271,117272],{"class":157,"line":180},[155,117273,117274],{"class":161},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[155,117276,117277],{"class":157,"line":194},[155,117278,117279],{"class":161},"#np.hstack([aa,bb])\n",[24,117281,116796],{},[24,117283,117284],{},[37,117285],{"alt":39,"src":117286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[24,117288,117289],{},"等效于concatenate()函数中axis=1时的情况",[24,117291,117292],{},"②三维数组",[146,117294,117296],{"className":148,"code":117295,"language":150,"meta":39,"style":39},"#两个三行六列\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",[152,117297,117298,117302,117330,117358,117363,117368],{"__ignoreMap":39},[155,117299,117300],{"class":157,"line":158},[155,117301,116851],{"class":161},[155,117303,117304,117306,117308,117310,117312,117314,117316,117318,117320,117322,117324,117326,117328],{"class":157,"line":46},[155,117305,114084],{"class":171},[155,117307,317],{"class":167},[155,117309,111565],{"class":171},[155,117311,329],{"class":263},[155,117313,332],{"class":171},[155,117315,20402],{"class":263},[155,117317,111570],{"class":171},[155,117319,360],{"class":263},[155,117321,332],{"class":171},[155,117323,4444],{"class":263},[155,117325,332],{"class":171},[155,117327,340],{"class":263},[155,117329,363],{"class":171},[155,117331,117332,117334,117336,117338,117340,117342,117344,117346,117348,117350,117352,117354,117356],{"class":157,"line":121},[155,117333,116884],{"class":171},[155,117335,317],{"class":167},[155,117337,111565],{"class":171},[155,117339,20413],{"class":263},[155,117341,332],{"class":171},[155,117343,116895],{"class":263},[155,117345,111570],{"class":171},[155,117347,360],{"class":263},[155,117349,332],{"class":171},[155,117351,4444],{"class":263},[155,117353,332],{"class":171},[155,117355,340],{"class":263},[155,117357,363],{"class":171},[155,117359,117360],{"class":157,"line":180},[155,117361,117362],{"class":161},"#使用hstack\n",[155,117364,117365],{"class":157,"line":194},[155,117366,117367],{"class":171},"np.hstack((aaa,bbb)).shape\n",[155,117369,117370],{"class":157,"line":200},[155,117371,117372],{"class":161},"#输出：（2，6，6）\n",[20037,117374,117376],{"id":117375},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[24,117378,117379],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[24,117381,117211],{},[146,117383,117385],{"className":148,"code":117384,"language":150,"meta":39,"style":39},"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",[152,117386,117387,117411,117435,117440,117445,117450],{"__ignoreMap":39},[155,117388,117389,117391,117393,117395,117397,117399,117401,117403,117405,117407,117409],{"class":157,"line":158},[155,117390,111869],{"class":171},[155,117392,317],{"class":167},[155,117394,111565],{"class":171},[155,117396,329],{"class":263},[155,117398,332],{"class":171},[155,117400,20589],{"class":263},[155,117402,111570],{"class":171},[155,117404,4444],{"class":263},[155,117406,332],{"class":171},[155,117408,1264],{"class":263},[155,117410,363],{"class":171},[155,117412,117413,117415,117417,117419,117421,117423,117425,117427,117429,117431,117433],{"class":157,"line":46},[155,117414,116750],{"class":171},[155,117416,317],{"class":167},[155,117418,111565],{"class":171},[155,117420,20413],{"class":263},[155,117422,332],{"class":171},[155,117424,20701],{"class":263},[155,117426,111570],{"class":171},[155,117428,4444],{"class":263},[155,117430,332],{"class":171},[155,117432,1264],{"class":263},[155,117434,363],{"class":171},[155,117436,117437],{"class":157,"line":121},[155,117438,117439],{"class":161},"#vstack 垂直方向进行堆叠\n",[155,117441,117442],{"class":157,"line":180},[155,117443,117444],{"class":171},"np.vstack((aa,bb))\n",[155,117446,117447],{"class":157,"line":194},[155,117448,117449],{"class":161},"#与hstack传的参数类似，等价于：\n",[155,117451,117452],{"class":157,"line":200},[155,117453,117454],{"class":171},"np.vstack([aa,bb])\n",[24,117456,116796],{},[24,117458,117459],{},[37,117460],{"alt":39,"src":117461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[24,117463,117292],{},[146,117465,117467],{"className":148,"code":117466,"language":150,"meta":39,"style":39},"#两个三行六列\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",[152,117468,117469,117473,117501,117529,117534,117539],{"__ignoreMap":39},[155,117470,117471],{"class":157,"line":158},[155,117472,116851],{"class":161},[155,117474,117475,117477,117479,117481,117483,117485,117487,117489,117491,117493,117495,117497,117499],{"class":157,"line":46},[155,117476,114084],{"class":171},[155,117478,317],{"class":167},[155,117480,111565],{"class":171},[155,117482,329],{"class":263},[155,117484,332],{"class":171},[155,117486,20402],{"class":263},[155,117488,111570],{"class":171},[155,117490,360],{"class":263},[155,117492,332],{"class":171},[155,117494,4444],{"class":263},[155,117496,332],{"class":171},[155,117498,340],{"class":263},[155,117500,363],{"class":171},[155,117502,117503,117505,117507,117509,117511,117513,117515,117517,117519,117521,117523,117525,117527],{"class":157,"line":121},[155,117504,116884],{"class":171},[155,117506,317],{"class":167},[155,117508,111565],{"class":171},[155,117510,20413],{"class":263},[155,117512,332],{"class":171},[155,117514,116895],{"class":263},[155,117516,111570],{"class":171},[155,117518,360],{"class":263},[155,117520,332],{"class":171},[155,117522,4444],{"class":263},[155,117524,332],{"class":171},[155,117526,340],{"class":263},[155,117528,363],{"class":171},[155,117530,117531],{"class":157,"line":180},[155,117532,117533],{"class":161},"#使用vstack\n",[155,117535,117536],{"class":157,"line":194},[155,117537,117538],{"class":171},"np.vstack((aaa,bbb)).shape\n",[155,117540,117541],{"class":157,"line":200},[155,117542,117543],{"class":161},"#输出：（4，3，6）\n",[20037,117545,117547],{"id":117546},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[24,117549,117550],{},"该方法是三维数组特有的方法",[24,117552,117553],{},"也就是说",[24,117555,117556],{},"一维数组拼接方法用：concatenate()",[24,117558,117559],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[24,117561,117562],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[24,117564,117565],{},"四维数组及多维数组只能用concatenate进行拼接",[146,117567,117569],{"className":148,"code":117568,"language":150,"meta":39,"style":39},"#两个三行六列\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",[152,117570,117571,117575,117603,117631,117636,117641],{"__ignoreMap":39},[155,117572,117573],{"class":157,"line":158},[155,117574,116851],{"class":161},[155,117576,117577,117579,117581,117583,117585,117587,117589,117591,117593,117595,117597,117599,117601],{"class":157,"line":46},[155,117578,114084],{"class":171},[155,117580,317],{"class":167},[155,117582,111565],{"class":171},[155,117584,329],{"class":263},[155,117586,332],{"class":171},[155,117588,20402],{"class":263},[155,117590,111570],{"class":171},[155,117592,360],{"class":263},[155,117594,332],{"class":171},[155,117596,4444],{"class":263},[155,117598,332],{"class":171},[155,117600,340],{"class":263},[155,117602,363],{"class":171},[155,117604,117605,117607,117609,117611,117613,117615,117617,117619,117621,117623,117625,117627,117629],{"class":157,"line":121},[155,117606,116884],{"class":171},[155,117608,317],{"class":167},[155,117610,111565],{"class":171},[155,117612,20413],{"class":263},[155,117614,332],{"class":171},[155,117616,116895],{"class":263},[155,117618,111570],{"class":171},[155,117620,360],{"class":263},[155,117622,332],{"class":171},[155,117624,4444],{"class":263},[155,117626,332],{"class":171},[155,117628,340],{"class":263},[155,117630,363],{"class":171},[155,117632,117633],{"class":157,"line":180},[155,117634,117635],{"class":161},"#使用dstack\n",[155,117637,117638],{"class":157,"line":194},[155,117639,117640],{"class":171},"np.dstack((aaa,bbb)).shape\n",[155,117642,117643],{"class":157,"line":200},[155,117644,117645],{"class":161},"#结果：（2，3，12）\n",[20011,117647,117648],{},"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":39,"searchDepth":46,"depth":46,"links":117650},[117651,117652,117653,117654],{"id":116590,"depth":46,"text":116591},{"id":117204,"depth":46,"text":117205},{"id":117375,"depth":46,"text":117376},{"id":117546,"depth":46,"text":117547},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":116582,"description":20020},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":117661,"title":117662,"body":117663,"description":20020,"extension":20021,"meta":117938,"navigation":216,"path":117939,"seo":117940,"stem":117941,"__hash__":117942},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":117664,"toc":117936},[117665,117668,117671,117765,117768,117771,117774,117777,117780,117783,117786,117789,117933],[10,117666,117662],{"id":117667},"_7数组转置",[24,117669,117670],{},"使用transpose()函数",[146,117672,117674],{"className":148,"code":117673,"language":150,"meta":39,"style":39},"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",[152,117675,117676,117686,117710,117715,117720,117725,117730,117738,117742,117746,117751,117756,117761],{"__ignoreMap":39},[155,117677,117678,117680,117682,117684],{"class":157,"line":158},[155,117679,168],{"class":167},[155,117681,904],{"class":171},[155,117683,907],{"class":167},[155,117685,910],{"class":171},[155,117687,117688,117690,117692,117694,117696,117698,117700,117702,117704,117706,117708],{"class":157,"line":46},[155,117689,20318],{"class":171},[155,117691,317],{"class":167},[155,117693,1250],{"class":171},[155,117695,329],{"class":263},[155,117697,332],{"class":171},[155,117699,20589],{"class":263},[155,117701,111570],{"class":171},[155,117703,1264],{"class":263},[155,117705,332],{"class":171},[155,117707,4444],{"class":263},[155,117709,363],{"class":171},[155,117711,117712],{"class":157,"line":121},[155,117713,117714],{"class":161},"#二维数组转置\n",[155,117716,117717],{"class":157,"line":180},[155,117718,117719],{"class":161},"#调用transpose()函数\n",[155,117721,117722],{"class":157,"line":194},[155,117723,117724],{"class":171},"a.transpose()\n",[155,117726,117727],{"class":157,"line":200},[155,117728,117729],{"class":161},"#对于二维数组也可以采用.T来实现\n",[155,117731,117732,117735],{"class":157,"line":213},[155,117733,117734],{"class":171},"a.T",[155,117736,117737],{"class":161},"#与上述代码一样\n",[155,117739,117740],{"class":157,"line":220},[155,117741,112127],{"class":161},[155,117743,117744],{"class":157,"line":245},[155,117745,112491],{"class":732},[155,117747,117748],{"class":157,"line":251},[155,117749,117750],{"class":732},"array([[ 1,  4,  7, 10],\n",[155,117752,117753],{"class":157,"line":257},[155,117754,117755],{"class":732},"       [ 2,  5,  8, 11],\n",[155,117757,117758],{"class":157,"line":270},[155,117759,117760],{"class":732},"       [ 3,  6,  9, 12]])\n",[155,117762,117763],{"class":157,"line":276},[155,117764,112491],{"class":732},[24,117766,117767],{},"也可以使用np.transpose()的形式",[24,117769,117770],{},"#多维数组进行转置 np.transpose()",[24,117772,117773],{},"#对二维数组也可以使用np.transpose()进行转置",[24,117775,117776],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[24,117778,117779],{},"第二个参数，维度可以理解为用axis中的数来理解",[24,117781,117782],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[24,117784,117785],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[24,117787,117788],{},"四维及以上的数组也是一样的道理",[146,117790,117792],{"className":148,"code":117791,"language":150,"meta":39,"style":39},"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",[152,117793,117794,117822,117827,117832,117837,117855,117860,117892,117897,117902,117907,117928],{"__ignoreMap":39},[155,117795,117796,117798,117800,117802,117804,117806,117808,117810,117812,117814,117816,117818,117820],{"class":157,"line":158},[155,117797,20874],{"class":171},[155,117799,317],{"class":167},[155,117801,111565],{"class":171},[155,117803,329],{"class":263},[155,117805,332],{"class":171},[155,117807,20402],{"class":263},[155,117809,111570],{"class":171},[155,117811,4444],{"class":263},[155,117813,332],{"class":171},[155,117815,340],{"class":263},[155,117817,332],{"class":171},[155,117819,360],{"class":263},[155,117821,363],{"class":171},[155,117823,117824],{"class":157,"line":46},[155,117825,117826],{"class":171},"x.shape\n",[155,117828,117829],{"class":157,"line":121},[155,117830,117831],{"class":161},"#结果：（3,6,2）\n",[155,117833,117834],{"class":157,"line":180},[155,117835,117836],{"class":161},"#使用np.transpose()进行转置 变为(2,6,3)\n",[155,117838,117839,117842,117844,117846,117848,117850,117852],{"class":157,"line":194},[155,117840,117841],{"class":171},"np.transpose(x,(",[155,117843,360],{"class":263},[155,117845,332],{"class":171},[155,117847,329],{"class":263},[155,117849,332],{"class":171},[155,117851,1109],{"class":263},[155,117853,117854],{"class":171},")).shape\n",[155,117856,117857],{"class":157,"line":200},[155,117858,117859],{"class":161},"#结果：(2,6,3)\n",[155,117861,117862,117864,117866,117868,117870,117872,117874,117876,117878,117880,117882,117884,117886,117888,117890],{"class":157,"line":213},[155,117863,117069],{"class":171},[155,117865,317],{"class":167},[155,117867,111565],{"class":171},[155,117869,329],{"class":263},[155,117871,332],{"class":171},[155,117873,20402],{"class":263},[155,117875,111570],{"class":171},[155,117877,4444],{"class":263},[155,117879,332],{"class":171},[155,117881,360],{"class":263},[155,117883,332],{"class":171},[155,117885,329],{"class":263},[155,117887,332],{"class":171},[155,117889,340],{"class":263},[155,117891,363],{"class":171},[155,117893,117894],{"class":157,"line":220},[155,117895,117896],{"class":171},"aaaa.shape\n",[155,117898,117899],{"class":157,"line":245},[155,117900,117901],{"class":161},"#结果：（3，2，1，6）\n",[155,117903,117904],{"class":157,"line":251},[155,117905,117906],{"class":161},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[155,117908,117909,117912,117914,117916,117918,117920,117922,117924,117926],{"class":157,"line":257},[155,117910,117911],{"class":171},"np.transpose(aaaa,(",[155,117913,329],{"class":263},[155,117915,332],{"class":171},[155,117917,360],{"class":263},[155,117919,332],{"class":171},[155,117921,1109],{"class":263},[155,117923,332],{"class":171},[155,117925,4444],{"class":263},[155,117927,117854],{"class":171},[155,117929,117930],{"class":157,"line":270},[155,117931,117932],{"class":161},"#结果：(2,1,3,6)\n",[20011,117934,117935],{},"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":39,"searchDepth":46,"depth":46,"links":117937},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":117662,"description":20020},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":117944,"title":117945,"body":117946,"description":20020,"extension":20021,"meta":118680,"navigation":216,"path":118681,"seo":118682,"stem":118683,"__hash__":118684},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":117947,"toc":118678},[117948,117951,117954,117957,117960,117963,117966,117969,117972,118081,118084,118087,118675],[10,117949,117945],{"id":117950},"_8数组分割",[24,117952,117953],{},"split分割",[24,117955,117956],{},"numpy.split(ary,indics_or_sections,axis)",[24,117958,117959],{},"解释：",[24,117961,117962],{},"ary:被分割的数组",[24,117964,117965],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[24,117967,117968],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[24,117970,117971],{},"①一维数组的分割",[146,117973,117975],{"className":148,"code":117974,"language":150,"meta":39,"style":39},"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",[152,117976,117977,117993,117998,118007,118011,118016,118024,118028,118033,118038,118051,118055,118060,118072,118076],{"__ignoreMap":39},[155,117978,117979,117981,117983,117985,117987,117989,117991],{"class":157,"line":158},[155,117980,20318],{"class":171},[155,117982,317],{"class":167},[155,117984,111565],{"class":171},[155,117986,329],{"class":263},[155,117988,332],{"class":171},[155,117990,20492],{"class":263},[155,117992,363],{"class":171},[155,117994,117995],{"class":157,"line":46},[155,117996,117997],{"class":161},"#如果传入整数，必须能够平分，否则会报错\n",[155,117999,118000,118003,118005],{"class":157,"line":121},[155,118001,118002],{"class":171},"np.split(a,",[155,118004,360],{"class":263},[155,118006,363],{"class":171},[155,118008,118009],{"class":157,"line":180},[155,118010,112127],{"class":161},[155,118012,118013],{"class":157,"line":194},[155,118014,118015],{"class":161},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[155,118017,118018,118020,118022],{"class":157,"line":200},[155,118019,118002],{"class":171},[155,118021,1264],{"class":263},[155,118023,363],{"class":171},[155,118025,118026],{"class":157,"line":213},[155,118027,112127],{"class":161},[155,118029,118030],{"class":157,"line":220},[155,118031,118032],{"class":161},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[155,118034,118035],{"class":157,"line":245},[155,118036,118037],{"class":161},"#传入数组\n",[155,118039,118040,118043,118045,118047,118049],{"class":157,"line":251},[155,118041,118042],{"class":171},"np.split(a,[",[155,118044,4444],{"class":263},[155,118046,332],{"class":171},[155,118048,350],{"class":263},[155,118050,17676],{"class":171},[155,118052,118053],{"class":157,"line":257},[155,118054,112127],{"class":161},[155,118056,118057],{"class":157,"line":270},[155,118058,118059],{"class":161},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[155,118061,118062,118064,118066,118068,118070],{"class":157,"line":276},[155,118063,118042],{"class":171},[155,118065,350],{"class":263},[155,118067,332],{"class":171},[155,118069,8408],{"class":263},[155,118071,17676],{"class":171},[155,118073,118074],{"class":157,"line":297},[155,118075,112127],{"class":161},[155,118077,118078],{"class":157,"line":302},[155,118079,118080],{"class":161},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[24,118082,118083],{},"②二维数组的分割",[24,118085,118086],{},"使用split()",[146,118088,118090],{"className":148,"code":118089,"language":150,"meta":39,"style":39},"#二维数组分割\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",[152,118091,118092,118097,118121,118126,118135,118139,118143,118148,118153,118158,118163,118168,118173,118178,118182,118195,118199,118203,118207,118211,118215,118220,118225,118230,118234,118239,118255,118259,118263,118268,118273,118278,118283,118288,118293,118298,118303,118308,118313,118318,118323,118328,118333,118338,118343,118348,118353,118357,118361,118381,118385,118389,118394,118399,118404,118409,118414,118419,118424,118429,118434,118439,118444,118449,118454,118459,118464,118469,118474,118479,118483,118488,118497,118501,118505,118509,118513,118517,118521,118525,118529,118533,118542,118546,118550,118554,118558,118562,118566,118570,118574,118578,118582,118586,118590,118594,118598,118602,118606,118610,118614,118618,118622,118626,118639,118643,118647,118651,118655,118659,118663,118667,118671],{"__ignoreMap":39},[155,118093,118094],{"class":157,"line":158},[155,118095,118096],{"class":161},"#二维数组分割\n",[155,118098,118099,118101,118103,118105,118107,118109,118111,118113,118115,118117,118119],{"class":157,"line":46},[155,118100,111869],{"class":171},[155,118102,317],{"class":167},[155,118104,111565],{"class":171},[155,118106,329],{"class":263},[155,118108,332],{"class":171},[155,118110,20402],{"class":263},[155,118112,111570],{"class":171},[155,118114,340],{"class":263},[155,118116,332],{"class":171},[155,118118,340],{"class":263},[155,118120,363],{"class":171},[155,118122,118123],{"class":157,"line":121},[155,118124,118125],{"class":161},"#默认axis=0  传入整数平均分,按行来的\n",[155,118127,118128,118131,118133],{"class":157,"line":180},[155,118129,118130],{"class":171},"np.split(aa,",[155,118132,4444],{"class":263},[155,118134,363],{"class":171},[155,118136,118137],{"class":157,"line":194},[155,118138,114327],{"class":161},[155,118140,118141],{"class":157,"line":200},[155,118142,112491],{"class":732},[155,118144,118145],{"class":157,"line":213},[155,118146,118147],{"class":732},"[array([[ 1,  2,  3,  4,  5,  6],\n",[155,118149,118150],{"class":157,"line":220},[155,118151,118152],{"class":732},"        [ 7,  8,  9, 10, 11, 12]]),\n",[155,118154,118155],{"class":157,"line":245},[155,118156,118157],{"class":732}," array([[13, 14, 15, 16, 17, 18],\n",[155,118159,118160],{"class":157,"line":251},[155,118161,118162],{"class":732},"        [19, 20, 21, 22, 23, 24]]),\n",[155,118164,118165],{"class":157,"line":257},[155,118166,118167],{"class":732}," array([[25, 26, 27, 28, 29, 30],\n",[155,118169,118170],{"class":157,"line":270},[155,118171,118172],{"class":732},"        [31, 32, 33, 34, 35, 36]])]\n",[155,118174,118175],{"class":157,"line":276},[155,118176,118177],{"class":732}," '''\n",[155,118179,118180],{"class":157,"line":297},[155,118181,118037],{"class":161},[155,118183,118184,118187,118189,118191,118193],{"class":157,"line":302},[155,118185,118186],{"class":171},"np.split(aa,[",[155,118188,360],{"class":263},[155,118190,332],{"class":171},[155,118192,350],{"class":263},[155,118194,17676],{"class":171},[155,118196,118197],{"class":157,"line":308},[155,118198,114327],{"class":161},[155,118200,118201],{"class":157,"line":366},[155,118202,112491],{"class":732},[155,118204,118205],{"class":157,"line":379},[155,118206,118147],{"class":732},[155,118208,118209],{"class":157,"line":385},[155,118210,118152],{"class":732},[155,118212,118213],{"class":157,"line":415},[155,118214,118157],{"class":732},[155,118216,118217],{"class":157,"line":452},[155,118218,118219],{"class":732},"        [19, 20, 21, 22, 23, 24],\n",[155,118221,118222],{"class":157,"line":480},[155,118223,118224],{"class":732},"        [25, 26, 27, 28, 29, 30]]),\n",[155,118226,118227],{"class":157,"line":486},[155,118228,118229],{"class":732}," array([[31, 32, 33, 34, 35, 36]])]\n",[155,118231,118232],{"class":157,"line":499},[155,118233,112491],{"class":732},[155,118235,118236],{"class":157,"line":505},[155,118237,118238],{"class":161},"#axis=1 按照列来分\n",[155,118240,118241,118243,118245,118247,118249,118251,118253],{"class":157,"line":528},[155,118242,118130],{"class":171},[155,118244,4444],{"class":263},[155,118246,332],{"class":171},[155,118248,17140],{"class":323},[155,118250,317],{"class":167},[155,118252,329],{"class":263},[155,118254,363],{"class":171},[155,118256,118257],{"class":157,"line":549},[155,118258,114327],{"class":161},[155,118260,118261],{"class":157,"line":570},[155,118262,112491],{"class":732},[155,118264,118265],{"class":157,"line":575},[155,118266,118267],{"class":732},"[array([[ 1,  2],\n",[155,118269,118270],{"class":157,"line":581},[155,118271,118272],{"class":732},"        [ 7,  8],\n",[155,118274,118275],{"class":157,"line":592},[155,118276,118277],{"class":732},"        [13, 14],\n",[155,118279,118280],{"class":157,"line":610},[155,118281,118282],{"class":732},"        [19, 20],\n",[155,118284,118285],{"class":157,"line":622},[155,118286,118287],{"class":732},"        [25, 26],\n",[155,118289,118290],{"class":157,"line":638},[155,118291,118292],{"class":732},"        [31, 32]]),\n",[155,118294,118295],{"class":157,"line":650},[155,118296,118297],{"class":732}," array([[ 3,  4],\n",[155,118299,118300],{"class":157,"line":662},[155,118301,118302],{"class":732},"        [ 9, 10],\n",[155,118304,118305],{"class":157,"line":678},[155,118306,118307],{"class":732},"        [15, 16],\n",[155,118309,118310],{"class":157,"line":694},[155,118311,118312],{"class":732},"        [21, 22],\n",[155,118314,118315],{"class":157,"line":706},[155,118316,118317],{"class":732},"        [27, 28],\n",[155,118319,118320],{"class":157,"line":715},[155,118321,118322],{"class":732},"        [33, 34]]),\n",[155,118324,118325],{"class":157,"line":720},[155,118326,118327],{"class":732}," array([[ 5,  6],\n",[155,118329,118330],{"class":157,"line":739},[155,118331,118332],{"class":732},"        [11, 12],\n",[155,118334,118335],{"class":157,"line":745},[155,118336,118337],{"class":732},"        [17, 18],\n",[155,118339,118340],{"class":157,"line":773},[155,118341,118342],{"class":732},"        [23, 24],\n",[155,118344,118345],{"class":157,"line":779},[155,118346,118347],{"class":732},"        [29, 30],\n",[155,118349,118350],{"class":157,"line":785},[155,118351,118352],{"class":732},"        [35, 36]])]\n",[155,118354,118355],{"class":157,"line":791},[155,118356,118177],{"class":732},[155,118358,118359],{"class":157,"line":796},[155,118360,118037],{"class":161},[155,118362,118363,118365,118367,118369,118371,118373,118375,118377,118379],{"class":157,"line":802},[155,118364,118186],{"class":171},[155,118366,329],{"class":263},[155,118368,332],{"class":171},[155,118370,360],{"class":263},[155,118372,11222],{"class":171},[155,118374,17140],{"class":323},[155,118376,317],{"class":167},[155,118378,329],{"class":263},[155,118380,363],{"class":171},[155,118382,118383],{"class":157,"line":808},[155,118384,112127],{"class":161},[155,118386,118387],{"class":157,"line":819},[155,118388,112491],{"class":732},[155,118390,118391],{"class":157,"line":1832},[155,118392,118393],{"class":732},"[array([[ 1],\n",[155,118395,118396],{"class":157,"line":1838},[155,118397,118398],{"class":732},"        [ 7],\n",[155,118400,118401],{"class":157,"line":1844},[155,118402,118403],{"class":732},"        [13],\n",[155,118405,118406],{"class":157,"line":1850},[155,118407,118408],{"class":732},"        [19],\n",[155,118410,118411],{"class":157,"line":1861},[155,118412,118413],{"class":732},"        [25],\n",[155,118415,118416],{"class":157,"line":1866},[155,118417,118418],{"class":732},"        [31]]),\n",[155,118420,118421],{"class":157,"line":1871},[155,118422,118423],{"class":732}," array([[ 2],\n",[155,118425,118426],{"class":157,"line":1877},[155,118427,118428],{"class":732},"        [ 8],\n",[155,118430,118431],{"class":157,"line":1883},[155,118432,118433],{"class":732},"        [14],\n",[155,118435,118436],{"class":157,"line":1894},[155,118437,118438],{"class":732},"        [20],\n",[155,118440,118441],{"class":157,"line":1900},[155,118442,118443],{"class":732},"        [26],\n",[155,118445,118446],{"class":157,"line":1911},[155,118447,118448],{"class":732},"        [32]]),\n",[155,118450,118451],{"class":157,"line":1917},[155,118452,118453],{"class":732}," array([[ 3,  4,  5,  6],\n",[155,118455,118456],{"class":157,"line":1927},[155,118457,118458],{"class":732},"        [ 9, 10, 11, 12],\n",[155,118460,118461],{"class":157,"line":1933},[155,118462,118463],{"class":732},"        [15, 16, 17, 18],\n",[155,118465,118466],{"class":157,"line":1943},[155,118467,118468],{"class":732},"        [21, 22, 23, 24],\n",[155,118470,118471],{"class":157,"line":1949},[155,118472,118473],{"class":732},"        [27, 28, 29, 30],\n",[155,118475,118476],{"class":157,"line":1959},[155,118477,118478],{"class":732},"        [33, 34, 35, 36]])]\n",[155,118480,118481],{"class":157,"line":1964},[155,118482,112491],{"class":732},[155,118484,118485],{"class":157,"line":1970},[155,118486,118487],{"class":161},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[155,118489,118490,118493,118495],{"class":157,"line":1981},[155,118491,118492],{"class":171},"np.vsplit(aa,",[155,118494,4444],{"class":263},[155,118496,363],{"class":171},[155,118498,118499],{"class":157,"line":1986},[155,118500,112127],{"class":161},[155,118502,118503],{"class":157,"line":1991},[155,118504,112491],{"class":732},[155,118506,118507],{"class":157,"line":1997},[155,118508,118147],{"class":732},[155,118510,118511],{"class":157,"line":2014},[155,118512,118152],{"class":732},[155,118514,118515],{"class":157,"line":2046},[155,118516,118157],{"class":732},[155,118518,118519],{"class":157,"line":2062},[155,118520,118162],{"class":732},[155,118522,118523],{"class":157,"line":2067},[155,118524,118167],{"class":732},[155,118526,118527],{"class":157,"line":2073},[155,118528,118172],{"class":732},[155,118530,118531],{"class":157,"line":2079},[155,118532,112491],{"class":732},[155,118534,118535,118538,118540],{"class":157,"line":2089},[155,118536,118537],{"class":171},"np.hsplit(aa,",[155,118539,4444],{"class":263},[155,118541,363],{"class":171},[155,118543,118544],{"class":157,"line":2095},[155,118545,112127],{"class":161},[155,118547,118548],{"class":157,"line":2106},[155,118549,112491],{"class":732},[155,118551,118552],{"class":157,"line":2112},[155,118553,118267],{"class":732},[155,118555,118556],{"class":157,"line":2122},[155,118557,118272],{"class":732},[155,118559,118560],{"class":157,"line":2128},[155,118561,118277],{"class":732},[155,118563,118564],{"class":157,"line":2138},[155,118565,118282],{"class":732},[155,118567,118568],{"class":157,"line":2144},[155,118569,118287],{"class":732},[155,118571,118572],{"class":157,"line":2154},[155,118573,118292],{"class":732},[155,118575,118576],{"class":157,"line":2160},[155,118577,118297],{"class":732},[155,118579,118580],{"class":157,"line":2170},[155,118581,118302],{"class":732},[155,118583,118584],{"class":157,"line":2176},[155,118585,118307],{"class":732},[155,118587,118588],{"class":157,"line":2191},[155,118589,118312],{"class":732},[155,118591,118592],{"class":157,"line":2197},[155,118593,118317],{"class":732},[155,118595,118596],{"class":157,"line":2208},[155,118597,118322],{"class":732},[155,118599,118600],{"class":157,"line":2214},[155,118601,118327],{"class":732},[155,118603,118604],{"class":157,"line":2225},[155,118605,118332],{"class":732},[155,118607,118608],{"class":157,"line":2231},[155,118609,118337],{"class":732},[155,118611,118612],{"class":157,"line":2237},[155,118613,118342],{"class":732},[155,118615,118616],{"class":157,"line":2243},[155,118617,118347],{"class":732},[155,118619,118620],{"class":157,"line":2249},[155,118621,118352],{"class":732},[155,118623,118624],{"class":157,"line":2260},[155,118625,112491],{"class":732},[155,118627,118628,118631,118633,118635,118637],{"class":157,"line":2266},[155,118629,118630],{"class":171},"np.vsplit(aa,[",[155,118632,360],{"class":263},[155,118634,332],{"class":171},[155,118636,350],{"class":263},[155,118638,17676],{"class":171},[155,118640,118641],{"class":157,"line":2286},[155,118642,112127],{"class":161},[155,118644,118645],{"class":157,"line":2292},[155,118646,112491],{"class":732},[155,118648,118649],{"class":157,"line":2303},[155,118650,118147],{"class":732},[155,118652,118653],{"class":157,"line":2309},[155,118654,118152],{"class":732},[155,118656,118657],{"class":157,"line":2315},[155,118658,118157],{"class":732},[155,118660,118661],{"class":157,"line":2321},[155,118662,118219],{"class":732},[155,118664,118665],{"class":157,"line":2327},[155,118666,118224],{"class":732},[155,118668,118669],{"class":157,"line":2333},[155,118670,118229],{"class":732},[155,118672,118673],{"class":157,"line":2339},[155,118674,118177],{"class":732},[20011,118676,118677],{},"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":39,"searchDepth":46,"depth":46,"links":118679},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":117945,"description":20020},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":118686,"title":118687,"body":118688,"description":20020,"extension":20021,"meta":119182,"navigation":216,"path":119183,"seo":119184,"stem":119185,"__hash__":119186},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":118689,"toc":119173},[118690,118693,118696,118721,118725,118784,118836,118840,118842,118878,118932,118934,118972,119043,119047,119052,119056,119059,119092,119095,119099,119102,119105,119108,119111,119116,119120,119123,119126,119129,119132,119137,119141,119146,119149,119170],[10,118691,118687],{"id":118692},"_9数学函数",[24,118694,118695],{},"补充回顾：python的列表推导式",[146,118697,118699],{"className":148,"code":118698,"language":150,"meta":39,"style":39},"[1\u002Fi for i in a]\n",[152,118700,118701],{"__ignoreMap":39},[155,118702,118703,118705,118707,118709,118712,118714,118716,118718],{"class":157,"line":158},[155,118704,4091],{"class":171},[155,118706,329],{"class":263},[155,118708,2028],{"class":167},[155,118710,118711],{"class":171},"i ",[155,118713,1125],{"class":167},[155,118715,29287],{"class":171},[155,118717,1131],{"class":167},[155,118719,118720],{"class":171}," a]\n",[20037,118722,118724],{"id":118723},"_91-求倒数","9.1 求倒数",[146,118726,118728],{"className":148,"code":118727,"language":150,"meta":39,"style":39},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[152,118729,118730,118735,118763,118775],{"__ignoreMap":39},[155,118731,118732],{"class":157,"line":158},[155,118733,118734],{"class":161},"#数组求倒数\n",[155,118736,118737,118739,118741,118743,118745,118747,118749,118751,118753,118755,118757,118759,118761],{"class":157,"line":46},[155,118738,20318],{"class":171},[155,118740,317],{"class":167},[155,118742,4091],{"class":171},[155,118744,329],{"class":263},[155,118746,332],{"class":171},[155,118748,360],{"class":263},[155,118750,332],{"class":171},[155,118752,4444],{"class":263},[155,118754,332],{"class":171},[155,118756,1264],{"class":263},[155,118758,332],{"class":171},[155,118760,350],{"class":263},[155,118762,2845],{"class":171},[155,118764,118765,118767,118769,118772],{"class":157,"line":121},[155,118766,20342],{"class":171},[155,118768,317],{"class":167},[155,118770,118771],{"class":171},"np.array(a)",[155,118773,118774],{"class":161},"#将列表转换为数组\n",[155,118776,118777,118779,118781],{"class":157,"line":180},[155,118778,329],{"class":263},[155,118780,2028],{"class":167},[155,118782,118783],{"class":171},"b\n",[146,118785,118787],{"className":148,"code":118786,"language":150,"meta":39,"style":39},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[152,118788,118789,118817,118826,118831],{"__ignoreMap":39},[155,118790,118791,118793,118795,118797,118799,118801,118803,118805,118807,118809,118811,118813,118815],{"class":157,"line":158},[155,118792,20318],{"class":171},[155,118794,317],{"class":167},[155,118796,4091],{"class":171},[155,118798,329],{"class":263},[155,118800,332],{"class":171},[155,118802,360],{"class":263},[155,118804,332],{"class":171},[155,118806,4444],{"class":263},[155,118808,332],{"class":171},[155,118810,1264],{"class":263},[155,118812,332],{"class":171},[155,118814,350],{"class":263},[155,118816,2845],{"class":171},[155,118818,118819,118821,118823],{"class":157,"line":46},[155,118820,20342],{"class":171},[155,118822,317],{"class":167},[155,118824,118825],{"class":171},"np.array(a)\n",[155,118827,118828],{"class":157,"line":121},[155,118829,118830],{"class":161},"#调用numpy中的函数reciprocal()\n",[155,118832,118833],{"class":157,"line":180},[155,118834,118835],{"class":171},"np.reciprocal(b)\n",[20037,118837,118839],{"id":118838},"_92-求平方","9.2 求平方",[24,118841,113093],{},[146,118843,118845],{"className":148,"code":118844,"language":150,"meta":39,"style":39},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[152,118846,118847,118852,118857,118873],{"__ignoreMap":39},[155,118848,118849],{"class":157,"line":158},[155,118850,118851],{"class":161},"#square()，求平方\n",[155,118853,118854],{"class":157,"line":46},[155,118855,118856],{"class":161},"#一维数组\n",[155,118858,118859,118861,118863,118865,118867,118869,118871],{"class":157,"line":121},[155,118860,20318],{"class":171},[155,118862,317],{"class":167},[155,118864,111565],{"class":171},[155,118866,329],{"class":263},[155,118868,332],{"class":171},[155,118870,565],{"class":263},[155,118872,363],{"class":171},[155,118874,118875],{"class":157,"line":180},[155,118876,118877],{"class":171},"np.square(a)\n",[146,118879,118881],{"className":148,"code":118880,"language":150,"meta":39,"style":39},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[152,118882,118883,118888,118893,118914],{"__ignoreMap":39},[155,118884,118885],{"class":157,"line":158},[155,118886,118887],{"class":161},"#或者通过循环遍历的形式来计算\n",[155,118889,118890],{"class":157,"line":46},[155,118891,118892],{"class":161},"#这是一个列表\n",[155,118894,118895,118898,118900,118902,118904,118906,118908,118911],{"class":157,"line":121},[155,118896,118897],{"class":171},"[i",[155,118899,1563],{"class":167},[155,118901,118711],{"class":171},[155,118903,1125],{"class":167},[155,118905,29287],{"class":171},[155,118907,1131],{"class":167},[155,118909,118910],{"class":171}," a]",[155,118912,118913],{"class":161},"#这个求完之后在数列当中\n",[155,118915,118916,118919,118921,118923,118925,118927,118929],{"class":157,"line":180},[155,118917,118918],{"class":171},"np.array([i",[155,118920,1563],{"class":167},[155,118922,118711],{"class":171},[155,118924,1125],{"class":167},[155,118926,29287],{"class":171},[155,118928,1131],{"class":167},[155,118930,118931],{"class":171}," a])\n",[24,118933,111854],{},[146,118935,118937],{"className":148,"code":118936,"language":150,"meta":39,"style":39},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[152,118938,118939,118943,118967],{"__ignoreMap":39},[155,118940,118941],{"class":157,"line":158},[155,118942,111864],{"class":161},[155,118944,118945,118947,118949,118951,118953,118955,118957,118959,118961,118963,118965],{"class":157,"line":46},[155,118946,111869],{"class":171},[155,118948,317],{"class":167},[155,118950,111565],{"class":171},[155,118952,329],{"class":263},[155,118954,332],{"class":171},[155,118956,20589],{"class":263},[155,118958,111570],{"class":171},[155,118960,1264],{"class":263},[155,118962,332],{"class":171},[155,118964,4444],{"class":263},[155,118966,363],{"class":171},[155,118968,118969],{"class":157,"line":121},[155,118970,118971],{"class":171},"np.square(aa)\n",[146,118973,118975],{"className":148,"code":118974,"language":150,"meta":39,"style":39},"#传统的方式\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",[152,118976,118977,118982,118991,119007,119023,119038],{"__ignoreMap":39},[155,118978,118979],{"class":157,"line":158},[155,118980,118981],{"class":161},"#传统的方式\n",[155,118983,118984,118986,118988],{"class":157,"line":46},[155,118985,116750],{"class":171},[155,118987,317],{"class":167},[155,118989,118990],{"class":171},"np.empty_like(aa)\n",[155,118992,118993,118995,118997,118999,119001,119003,119005],{"class":157,"line":121},[155,118994,1125],{"class":167},[155,118996,29287],{"class":171},[155,118998,1131],{"class":167},[155,119000,2008],{"class":263},[155,119002,230],{"class":171},[155,119004,1264],{"class":263},[155,119006,242],{"class":171},[155,119008,119009,119011,119013,119015,119017,119019,119021],{"class":157,"line":180},[155,119010,2000],{"class":167},[155,119012,29348],{"class":171},[155,119014,1131],{"class":167},[155,119016,2008],{"class":263},[155,119018,230],{"class":171},[155,119020,4444],{"class":263},[155,119022,242],{"class":171},[155,119024,119025,119028,119030,119033,119035],{"class":157,"line":194},[155,119026,119027],{"class":171},"        bb[i,j]",[155,119029,317],{"class":167},[155,119031,119032],{"class":171},"aa[i,j]",[155,119034,1563],{"class":167},[155,119036,119037],{"class":171},"aa[i,j]\n",[155,119039,119040],{"class":157,"line":200},[155,119041,119042],{"class":171},"bb\n",[20037,119044,119046],{"id":119045},"_93-求各元素的符号","9.3 求各元素的符号",[24,119048,119049],{},[37,119050],{"alt":39,"src":119051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[20037,119053,119055],{"id":119054},"_94-modf函数","9.4 modf函数",[24,119057,119058],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[146,119060,119062],{"className":148,"code":119061,"language":150,"meta":39,"style":39},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[152,119063,119064,119087],{"__ignoreMap":39},[155,119065,119066,119068,119070,119072,119074,119076,119078,119080,119082,119085],{"class":157,"line":158},[155,119067,20318],{"class":171},[155,119069,317],{"class":167},[155,119071,111565],{"class":171},[155,119073,2039],{"class":167},[155,119075,565],{"class":263},[155,119077,332],{"class":171},[155,119079,565],{"class":263},[155,119081,332],{"class":171},[155,119083,119084],{"class":263},"0.3",[155,119086,363],{"class":171},[155,119088,119089],{"class":157,"line":46},[155,119090,119091],{"class":171},"np.modf(a)\n",[24,119093,119094],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[20037,119096,119098],{"id":119097},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[24,119100,119101],{},"np.cell()",[24,119103,119104],{},"np.floor()",[24,119106,119107],{},"np.rint()",[24,119109,119110],{},"对各元素分别向上取整、向下取整、四舍五入",[24,119112,119113],{},[37,119114],{"alt":39,"src":119115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[20037,119117,119119],{"id":119118},"_96-around函数","9.6 around()函数",[24,119121,119122],{},"around()函数也可以实现对数的小数位数进行操作",[24,119124,119125],{},"其中的参数：",[24,119127,119128],{},"1.要传的数组",[24,119130,119131],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[24,119133,119134],{},[37,119135],{"alt":39,"src":119136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[20037,119138,119140],{"id":119139},"_97-三角函数","9.7 三角函数",[24,119142,119143],{},[37,119144],{"alt":39,"src":119145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[24,119147,119148],{},"引入图像模块非常重要",[146,119150,119152],{"className":148,"code":119151,"language":150,"meta":39,"style":39},"from matplotlib import pyplot as plt\n",[152,119153,119154],{"__ignoreMap":39},[155,119155,119156,119158,119161,119163,119166,119168],{"class":157,"line":158},[155,119157,183],{"class":167},[155,119159,119160],{"class":171}," matplotlib ",[155,119162,168],{"class":167},[155,119164,119165],{"class":171}," pyplot ",[155,119167,907],{"class":167},[155,119169,961],{"class":171},[20011,119171,119172],{},"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":39,"searchDepth":46,"depth":46,"links":119174},[119175,119176,119177,119178,119179,119180,119181],{"id":118723,"depth":46,"text":118724},{"id":118838,"depth":46,"text":118839},{"id":119045,"depth":46,"text":119046},{"id":119054,"depth":46,"text":119055},{"id":119097,"depth":46,"text":119098},{"id":119118,"depth":46,"text":119119},{"id":119139,"depth":46,"text":119140},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":118687,"description":20020},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":119188,"title":119189,"body":119190,"description":20020,"extension":20021,"meta":119194,"navigation":216,"path":119195,"seo":119196,"stem":119197,"__hash__":119198},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":119191,"toc":119192},[],{"title":39,"searchDepth":46,"depth":46,"links":119193},[],{"category":68983},"\u002Fwiki\u002F2025-08-14-numpy",{"title":119189,"description":20020},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":119200,"title":119201,"body":119202,"description":39,"extension":20021,"meta":121210,"navigation":216,"path":121211,"seo":121212,"stem":121213,"__hash__":121214},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":119203,"toc":121186},[119204,119207,119211,119214,119217,119223,119226,119249,119252,119286,119289,119330,119334,119337,119430,119433,119477,119480,119497,119500,119514,119517,119520,119565,119568,119605,119609,119612,119618,119623,119643,119647,119650,119716,119719,119737,119741,119744,119773,119783,119789,119793,119796,119802,119813,119817,119820,119850,119853,120133,120136,120139,120150,120153,120156,120178,120185,120188,120206,120209,120212,120226,120234,120237,120263,120269,120272,120275,120285,120297,120317,120326,120346,120356,120380,120393,120407,120412,120453,120470,120495,120507,120527,120533,120578,120597,120614,120627,120643,120650,120662,120671,120706,120727,120752,120765,120789,120804,120829,120832,120853,120862,120865,120876,120880,120883,120889,120901,120908,120912,120915,120927,120930,120944,120947,120957,120967,120970,121010,121013,121017,121023,121026,121040,121044,121047,121080,121084,121087,121110,121118,121121,121127,121133,121136,121139,121167,121171,121174,121180,121183],[10,119205,119201],{"id":119206},"_1环境安装与第一个-mujoco-程序",[20037,119208,119210],{"id":119209},"_1目标说明","1.目标说明",[24,119212,119213],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[24,119215,119216],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[146,119218,119221],{"className":119219,"code":119220,"language":25051,"meta":39},[25049],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[152,119222,119220],{"__ignoreMap":39},[24,119224,119225],{},"需要掌握:",[28,119227,119228,119231,119234,119239,119244],{},[31,119229,119230],{},"Fedora 44 下 MuJoCo 的系统依赖",[31,119232,119233],{},"Python 虚拟环境创建",[31,119235,119236],{},[152,119237,119238],{},"mujoco.MjModel",[31,119240,119241],{},[152,119242,119243],{},"mujoco.MjData",[31,119245,119246],{},[152,119247,119248],{},"mujoco.mj_step(model, data)",[24,119250,119251],{},"MuJoCo 中最重要的两个对象:",[20222,119253,119254,119264],{},[20225,119255,119256],{},[20228,119257,119258,119261],{},[20231,119259,119260],{"align":43527},"对象",[20231,119262,119263],{"align":43527},"含义",[20269,119265,119266,119276],{},[20228,119267,119268,119273],{},[20274,119269,119270],{"align":43527},[152,119271,119272],{},"MjModel",[20274,119274,119275],{"align":43527},"模型结构，来自 XML，基本不随时间变化",[20228,119277,119278,119283],{},[20274,119279,119280],{"align":43527},[152,119281,119282],{},"MjData",[20274,119284,119285],{"align":43527},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[24,119287,119288],{},"可以先用一个类比理解：",[20222,119290,119291,119301],{},[20225,119292,119293],{},[20228,119294,119295,119298],{},[20231,119296,119297],{"align":43527},"类比",[20231,119299,119300],{"align":43527},"MuJoCo 对象",[20269,119302,119303,119312,119321],{},[20228,119304,119305,119308],{},[20274,119306,119307],{"align":43527},"游戏地图和角色配置",[20274,119309,119310],{"align":43527},[152,119311,119272],{},[20228,119313,119314,119317],{},[20274,119315,119316],{"align":43527},"游戏运行到当前帧的状态",[20274,119318,119319],{"align":43527},[152,119320,119282],{},[20228,119322,119323,119326],{},[20274,119324,119325],{"align":43527},"前进一帧",[20274,119327,119328],{"align":43527},[152,119329,119248],{},[20037,119331,119333],{"id":119332},"_2环境与依赖安装","2.环境与依赖安装",[24,119335,119336],{},"Fedora 44 系统依赖:",[146,119338,119340],{"className":43613,"code":119339,"language":43615,"meta":39,"style":39},"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",[152,119341,119342,119354,119367,119380,119390,119400,119419],{"__ignoreMap":39},[155,119343,119344,119346,119348,119350,119352],{"class":157,"line":158},[155,119345,44368],{"class":226},[155,119347,46104],{"class":732},[155,119349,43625],{"class":732},[155,119351,46189],{"class":263},[155,119353,44470],{"class":263},[155,119355,119356,119359,119362,119365],{"class":157,"line":46},[155,119357,119358],{"class":732},"  python3",[155,119360,119361],{"class":732}," python3-pip",[155,119363,119364],{"class":732}," python3-virtualenv",[155,119366,44470],{"class":263},[155,119368,119369,119372,119375,119378],{"class":157,"line":121},[155,119370,119371],{"class":732},"  mesa-libGL",[155,119373,119374],{"class":732}," mesa-libGLU",[155,119376,119377],{"class":732}," mesa-dri-drivers",[155,119379,44470],{"class":263},[155,119381,119382,119385,119388],{"class":157,"line":180},[155,119383,119384],{"class":732},"  libglvnd-glx",[155,119386,119387],{"class":732}," libglvnd-opengl",[155,119389,44470],{"class":263},[155,119391,119392,119395,119398],{"class":157,"line":194},[155,119393,119394],{"class":732},"  glfw",[155,119396,119397],{"class":732}," glfw-devel",[155,119399,44470],{"class":263},[155,119401,119402,119405,119408,119411,119414,119417],{"class":157,"line":200},[155,119403,119404],{"class":732},"  libX11",[155,119406,119407],{"class":732}," libXcursor",[155,119409,119410],{"class":732}," libXi",[155,119412,119413],{"class":732}," libXinerama",[155,119415,119416],{"class":732}," libXrandr",[155,119418,44470],{"class":263},[155,119420,119421,119424,119427],{"class":157,"line":213},[155,119422,119423],{"class":732},"  gcc",[155,119425,119426],{"class":732}," gcc-c++",[155,119428,119429],{"class":732}," make\n",[24,119431,119432],{},"创建 Python 环境:",[146,119434,119436],{"className":43613,"code":119435,"language":43615,"meta":39,"style":39},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[152,119437,119438,119452,119460],{"__ignoreMap":39},[155,119439,119440,119443,119446,119449],{"class":157,"line":158},[155,119441,119442],{"class":226},"python3",[155,119444,119445],{"class":263}," -m",[155,119447,119448],{"class":732}," venv",[155,119450,119451],{"class":732}," .venv\n",[155,119453,119454,119457],{"class":157,"line":46},[155,119455,119456],{"class":263},"source",[155,119458,119459],{"class":732}," .venv\u002Fbin\u002Factivate\n",[155,119461,119462,119464,119466,119469,119471,119474],{"class":157,"line":121},[155,119463,150],{"class":226},[155,119465,119445],{"class":263},[155,119467,119468],{"class":732}," pip",[155,119470,43625],{"class":732},[155,119472,119473],{"class":263}," --upgrade",[155,119475,119476],{"class":732}," pip\n",[24,119478,119479],{},"pip 安装:",[146,119481,119483],{"className":43613,"code":119482,"language":43615,"meta":39,"style":39},"pip install \"mujoco>=2.3\" numpy\n",[152,119484,119485],{"__ignoreMap":39},[155,119486,119487,119489,119491,119494],{"class":157,"line":158},[155,119488,43622],{"class":226},[155,119490,43625],{"class":732},[155,119492,119493],{"class":732}," \"mujoco>=2.3\"",[155,119495,119496],{"class":732}," numpy\n",[24,119498,119499],{},"安装完成后，先做最小检查：",[146,119501,119503],{"className":43613,"code":119502,"language":43615,"meta":39,"style":39},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[152,119504,119505],{"__ignoreMap":39},[155,119506,119507,119509,119511],{"class":157,"line":158},[155,119508,150],{"class":226},[155,119510,50147],{"class":263},[155,119512,119513],{"class":732}," \"import mujoco; print(mujoco.__version__)\"\n",[24,119515,119516],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[24,119518,119519],{},"conda 安装:",[146,119521,119523],{"className":43613,"code":119522,"language":43615,"meta":39,"style":39},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[152,119524,119525,119545,119555],{"__ignoreMap":39},[155,119526,119527,119529,119531,119533,119536,119539,119542],{"class":157,"line":158},[155,119528,50119],{"class":226},[155,119530,48965],{"class":732},[155,119532,44907],{"class":263},[155,119534,119535],{"class":732}," mujoco-study",[155,119537,119538],{"class":732}," python=",[155,119540,119541],{"class":263},"3.10",[155,119543,119544],{"class":263}," -y\n",[155,119546,119547,119549,119552],{"class":157,"line":46},[155,119548,50119],{"class":226},[155,119550,119551],{"class":732}," activate",[155,119553,119554],{"class":732}," mujoco-study\n",[155,119556,119557,119559,119561,119563],{"class":157,"line":121},[155,119558,43622],{"class":226},[155,119560,43625],{"class":732},[155,119562,119493],{"class":732},[155,119564,119496],{"class":732},[24,119566,119567],{},"版本冲突说明:",[28,119569,119570,119576,119586,119595],{},[31,119571,119572,119573,48174],{},"不要安装 ",[152,119574,119575],{},"mujoco-py",[31,119577,119578,119579,119581,119582,119585],{},"如果旧项目里同时安装了 ",[152,119580,119575],{}," 和 ",[152,119583,119584],{},"mujoco","，建议新建干净虚拟环境。",[31,119587,119588,119591,119592,48174],{},[152,119589,119590],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[152,119593,119594],{},"~\u002F.mujoco\u002Fmujoco210",[31,119596,119597,119598,101102,119601,119604],{},"离屏渲染可能涉及 OpenGL 后端，",[152,119599,119600],{},"MUJOCO_GL=egl",[152,119602,119603],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[20037,119606,119608],{"id":119607},"_3核心概念解释","3.核心概念解释",[24,119610,119611],{},"MuJoCo 的基本执行流程:",[146,119613,119616],{"className":119614,"code":119615,"language":25051,"meta":39},[25049],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[152,119617,119615],{"__ignoreMap":39},[24,119619,119620,119622],{},[152,119621,119272],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[24,119624,119625,119627,119628,20293,119631,20293,119634,20293,119637,20293,119640,48174],{},[152,119626,119282],{}," 存放仿真运行时状态，例如 ",[152,119629,119630],{},"data.time",[152,119632,119633],{},"data.qpos",[152,119635,119636],{},"data.qvel",[152,119638,119639],{},"data.ctrl",[152,119641,119642],{},"data.xpos",[14,119644,119646],{"id":119645},"xml-是什么","XML 是什么",[24,119648,119649],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[146,119651,119653],{"className":71630,"code":119652,"language":71632,"meta":39,"style":39},"\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",[152,119654,119655,119677,119708],{"__ignoreMap":39},[155,119656,119657,119659,119661,119663,119665,119667,119670,119672,119675],{"class":157,"line":158},[155,119658,20959],{"class":171},[155,119660,70363],{"class":69863},[155,119662,34745],{"class":226},[155,119664,317],{"class":171},[155,119666,72054],{"class":732},[155,119668,119669],{"class":226}," pos",[155,119671,317],{"class":171},[155,119673,119674],{"class":732},"\"0 0 1\"",[155,119676,69870],{"class":171},[155,119678,119679,119681,119684,119686,119688,119691,119693,119695,119697,119700,119702,119705],{"class":157,"line":46},[155,119680,70707],{"class":171},[155,119682,119683],{"class":69863},"geom",[155,119685,34745],{"class":226},[155,119687,317],{"class":171},[155,119689,119690],{"class":732},"\"box_geom\"",[155,119692,72387],{"class":226},[155,119694,317],{"class":171},[155,119696,72054],{"class":732},[155,119698,119699],{"class":226}," size",[155,119701,317],{"class":171},[155,119703,119704],{"class":732},"\"0.1 0.1 0.1\"",[155,119706,119707],{"class":171},"\u002F>\n",[155,119709,119710,119712,119714],{"class":157,"line":121},[155,119711,70348],{"class":171},[155,119713,70363],{"class":69863},[155,119715,69870],{"class":171},[24,119717,119718],{},"这段意思是：",[28,119720,119721,119727,119734],{},[31,119722,119723,119724,119726],{},"创建一个叫 ",[152,119725,72277],{}," 的刚体。",[31,119728,119729,119730,119733],{},"它初始放在 ",[152,119731,119732],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[31,119735,119736],{},"它里面有一个盒子形状的几何体。",[14,119738,119740],{"id":119739},"timestep-是什么","timestep 是什么",[24,119742,119743],{},"XML 里的：",[146,119745,119747],{"className":71630,"code":119746,"language":71632,"meta":39,"style":39},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[152,119748,119749],{"__ignoreMap":39},[155,119750,119751,119753,119755,119758,119760,119763,119766,119768,119771],{"class":157,"line":158},[155,119752,20959],{"class":171},[155,119754,87729],{"class":69863},[155,119756,119757],{"class":226}," timestep",[155,119759,317],{"class":171},[155,119761,119762],{"class":732},"\"0.01\"",[155,119764,119765],{"class":226}," gravity",[155,119767,317],{"class":171},[155,119769,119770],{"class":732},"\"0 0 -9.81\"",[155,119772,119707],{"class":171},[24,119774,119775,119776,119779,119780,119782],{},"表示每调用一次 ",[152,119777,119778],{},"mj_step","，仿真时间前进 ",[152,119781,8598],{}," 秒。循环 100 次，大约就是 1 秒：",[146,119784,119787],{"className":119785,"code":119786,"language":25051,"meta":39},[25049],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[152,119788,119786],{"__ignoreMap":39},[14,119790,119792],{"id":119791},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[24,119794,119795],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[146,119797,119800],{"className":119798,"code":119799,"language":25051,"meta":39},[25049],"x y z qw qx qy qz\n",[152,119801,119799],{"__ignoreMap":39},[24,119803,119804,119805,119808,119809,119812],{},"表示一个自由刚体的位置和姿态。其中 ",[152,119806,119807],{},"x y z"," 是位置，",[152,119810,119811],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[20037,119814,119816],{"id":119815},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[24,119818,119819],{},"新建文件:",[146,119821,119823],{"className":43613,"code":119822,"language":43615,"meta":39,"style":39},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[152,119824,119825,119835,119842],{"__ignoreMap":39},[155,119826,119827,119830,119832],{"class":157,"line":158},[155,119828,119829],{"class":226},"mkdir",[155,119831,49005],{"class":263},[155,119833,119834],{"class":732}," mujoco_tutorial\n",[155,119836,119837,119840],{"class":157,"line":46},[155,119838,119839],{"class":263},"cd",[155,119841,119834],{"class":732},[155,119843,119844,119847],{"class":157,"line":121},[155,119845,119846],{"class":226},"touch",[155,119848,119849],{"class":732}," ch1_first_sim.py\n",[24,119851,119852],{},"写入:",[146,119854,119856],{"className":148,"code":119855,"language":150,"meta":39,"style":39},"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",[152,119857,119858,119865,119869,119873,119883,119888,119893,119897,119902,119907,119911,119916,119921,119926,119931,119936,119941,119945,119949,119953,119966,119980,119990,119994,120006,120018,120030,120042,120054,120058,120075,120080,120084,120095,120106,120110,120114,120128],{"__ignoreMap":39},[155,119859,119860,119862],{"class":157,"line":158},[155,119861,168],{"class":167},[155,119863,119864],{"class":171}," mujoco\n",[155,119866,119867],{"class":157,"line":46},[155,119868,217],{"emptyLinePlaceholder":216},[155,119870,119871],{"class":157,"line":121},[155,119872,217],{"emptyLinePlaceholder":216},[155,119874,119875,119878,119880],{"class":157,"line":180},[155,119876,119877],{"class":263},"XML",[155,119879,33391],{"class":167},[155,119881,119882],{"class":732}," \"\"\"\n",[155,119884,119885],{"class":157,"line":194},[155,119886,119887],{"class":732},"\u003Cmujoco model=\"first_sim\">\n",[155,119889,119890],{"class":157,"line":200},[155,119891,119892],{"class":732},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[155,119894,119895],{"class":157,"line":213},[155,119896,217],{"emptyLinePlaceholder":216},[155,119898,119899],{"class":157,"line":220},[155,119900,119901],{"class":732},"  \u003Cworldbody>\n",[155,119903,119904],{"class":157,"line":245},[155,119905,119906],{"class":732},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[155,119908,119909],{"class":157,"line":251},[155,119910,217],{"emptyLinePlaceholder":216},[155,119912,119913],{"class":157,"line":257},[155,119914,119915],{"class":732},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[155,119917,119918],{"class":157,"line":270},[155,119919,119920],{"class":732},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[155,119922,119923],{"class":157,"line":276},[155,119924,119925],{"class":732},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[155,119927,119928],{"class":157,"line":297},[155,119929,119930],{"class":732},"    \u003C\u002Fbody>\n",[155,119932,119933],{"class":157,"line":302},[155,119934,119935],{"class":732},"  \u003C\u002Fworldbody>\n",[155,119937,119938],{"class":157,"line":308},[155,119939,119940],{"class":732},"\u003C\u002Fmujoco>\n",[155,119942,119943],{"class":157,"line":366},[155,119944,114261],{"class":732},[155,119946,119947],{"class":157,"line":379},[155,119948,217],{"emptyLinePlaceholder":216},[155,119950,119951],{"class":157,"line":385},[155,119952,217],{"emptyLinePlaceholder":216},[155,119954,119955,119957,119959,119962,119964],{"class":157,"line":415},[155,119956,1484],{"class":167},[155,119958,21861],{"class":226},[155,119960,119961],{"class":171},"() -> ",[155,119963,114249],{"class":263},[155,119965,736],{"class":171},[155,119967,119968,119971,119973,119976,119978],{"class":157,"line":452},[155,119969,119970],{"class":171},"    model ",[155,119972,317],{"class":167},[155,119974,119975],{"class":171}," mujoco.MjModel.from_xml_string(",[155,119977,119877],{"class":263},[155,119979,363],{"class":171},[155,119981,119982,119985,119987],{"class":157,"line":480},[155,119983,119984],{"class":171},"    data ",[155,119986,317],{"class":167},[155,119988,119989],{"class":171}," mujoco.MjData(model)\n",[155,119991,119992],{"class":157,"line":486},[155,119993,217],{"emptyLinePlaceholder":216},[155,119995,119996,119998,120000,120003],{"class":157,"line":499},[155,119997,822],{"class":263},[155,119999,230],{"class":171},[155,120001,120002],{"class":732},"\"nq:\"",[155,120004,120005],{"class":171},", model.nq)\n",[155,120007,120008,120010,120012,120015],{"class":157,"line":505},[155,120009,822],{"class":263},[155,120011,230],{"class":171},[155,120013,120014],{"class":732},"\"nv:\"",[155,120016,120017],{"class":171},", model.nv)\n",[155,120019,120020,120022,120024,120027],{"class":157,"line":528},[155,120021,822],{"class":263},[155,120023,230],{"class":171},[155,120025,120026],{"class":732},"\"nu:\"",[155,120028,120029],{"class":171},", model.nu)\n",[155,120031,120032,120034,120036,120039],{"class":157,"line":549},[155,120033,822],{"class":263},[155,120035,230],{"class":171},[155,120037,120038],{"class":732},"\"initial time:\"",[155,120040,120041],{"class":171},", data.time)\n",[155,120043,120044,120046,120048,120051],{"class":157,"line":570},[155,120045,822],{"class":263},[155,120047,230],{"class":171},[155,120049,120050],{"class":732},"\"initial qpos:\"",[155,120052,120053],{"class":171},", data.qpos.copy())\n",[155,120055,120056],{"class":157,"line":575},[155,120057,217],{"emptyLinePlaceholder":216},[155,120059,120060,120062,120065,120067,120069,120071,120073],{"class":157,"line":581},[155,120061,2000],{"class":167},[155,120063,120064],{"class":171}," _ ",[155,120066,1131],{"class":167},[155,120068,2008],{"class":263},[155,120070,230],{"class":171},[155,120072,20389],{"class":263},[155,120074,242],{"class":171},[155,120076,120077],{"class":157,"line":592},[155,120078,120079],{"class":171},"        mujoco.mj_step(model, data)\n",[155,120081,120082],{"class":157,"line":610},[155,120083,217],{"emptyLinePlaceholder":216},[155,120085,120086,120088,120090,120093],{"class":157,"line":622},[155,120087,822],{"class":263},[155,120089,230],{"class":171},[155,120091,120092],{"class":732},"\"final time:\"",[155,120094,120041],{"class":171},[155,120096,120097,120099,120101,120104],{"class":157,"line":638},[155,120098,822],{"class":263},[155,120100,230],{"class":171},[155,120102,120103],{"class":732},"\"final qpos:\"",[155,120105,120053],{"class":171},[155,120107,120108],{"class":157,"line":650},[155,120109,217],{"emptyLinePlaceholder":216},[155,120111,120112],{"class":157,"line":662},[155,120113,217],{"emptyLinePlaceholder":216},[155,120115,120116,120118,120120,120123,120126],{"class":157,"line":678},[155,120117,723],{"class":167},[155,120119,726],{"class":263},[155,120121,120122],{"class":167}," ==",[155,120124,120125],{"class":732}," \"__main__\"",[155,120127,736],{"class":171},[155,120129,120130],{"class":157,"line":694},[155,120131,120132],{"class":171},"    main()\n",[14,120134,120135],{"id":120135},"代码逐段解释",[24,120137,120138],{},"导入库：",[146,120140,120142],{"className":148,"code":120141,"language":150,"meta":39,"style":39},"import mujoco\n",[152,120143,120144],{"__ignoreMap":39},[155,120145,120146,120148],{"class":157,"line":158},[155,120147,168],{"class":167},[155,120149,119864],{"class":171},[24,120151,120152],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[24,120154,120155],{},"定义 XML：",[146,120157,120159],{"className":148,"code":120158,"language":150,"meta":39,"style":39},"XML = \"\"\"\n...\n\"\"\"\n",[152,120160,120161,120169,120174],{"__ignoreMap":39},[155,120162,120163,120165,120167],{"class":157,"line":158},[155,120164,119877],{"class":263},[155,120166,33391],{"class":167},[155,120168,119882],{"class":732},[155,120170,120171],{"class":157,"line":46},[155,120172,120173],{"class":732},"...\n",[155,120175,120176],{"class":157,"line":121},[155,120177,114261],{"class":732},[24,120179,120180,120181,120184],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[152,120182,120183],{},"freejoint"," 的方块。",[24,120186,120187],{},"编译模型：",[146,120189,120191],{"className":148,"code":120190,"language":150,"meta":39,"style":39},"model = mujoco.MjModel.from_xml_string(XML)\n",[152,120192,120193],{"__ignoreMap":39},[155,120194,120195,120198,120200,120202,120204],{"class":157,"line":158},[155,120196,120197],{"class":171},"model ",[155,120199,317],{"class":167},[155,120201,119975],{"class":171},[155,120203,119877],{"class":263},[155,120205,363],{"class":171},[24,120207,120208],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[24,120210,120211],{},"创建数据：",[146,120213,120215],{"className":148,"code":120214,"language":150,"meta":39,"style":39},"data = mujoco.MjData(model)\n",[152,120216,120217],{"__ignoreMap":39},[155,120218,120219,120222,120224],{"class":157,"line":158},[155,120220,120221],{"class":171},"data ",[155,120223,317],{"class":167},[155,120225,119989],{"class":171},[24,120227,120228,120230,120231,120233],{},[152,120229,3003],{}," 会保存仿真当前状态。刚创建时，时间是 ",[152,120232,1109],{},"，方块还在初始位置。",[24,120235,120236],{},"推进仿真：",[146,120238,120240],{"className":148,"code":120239,"language":150,"meta":39,"style":39},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[152,120241,120242,120258],{"__ignoreMap":39},[155,120243,120244,120246,120248,120250,120252,120254,120256],{"class":157,"line":158},[155,120245,1125],{"class":167},[155,120247,120064],{"class":171},[155,120249,1131],{"class":167},[155,120251,2008],{"class":263},[155,120253,230],{"class":171},[155,120255,20389],{"class":263},[155,120257,242],{"class":171},[155,120259,120260],{"class":157,"line":46},[155,120261,120262],{"class":171},"    mujoco.mj_step(model, data)\n",[24,120264,120265,120266,120268],{},"每次 ",[152,120267,119778],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[14,120270,120271],{"id":120271},"代码逐行细讲",[24,120273,120274],{},"下面把完整代码按新手视角拆开讲。",[146,120276,120277],{"className":148,"code":120141,"language":150,"meta":39,"style":39},[152,120278,120279],{"__ignoreMap":39},[155,120280,120281,120283],{"class":157,"line":158},[155,120282,168],{"class":167},[155,120284,119864],{"class":171},[24,120286,120287,120289,120290,20293,120292,20293,120294,48174],{},[152,120288,168],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[152,120291,119238],{},[152,120293,119243],{},[152,120295,120296],{},"mujoco.mj_step",[146,120298,120299],{"className":148,"code":120158,"language":150,"meta":39,"style":39},[152,120300,120301,120309,120313],{"__ignoreMap":39},[155,120302,120303,120305,120307],{"class":157,"line":158},[155,120304,119877],{"class":263},[155,120306,33391],{"class":167},[155,120308,119882],{"class":732},[155,120310,120311],{"class":157,"line":46},[155,120312,120173],{"class":732},[155,120314,120315],{"class":157,"line":121},[155,120316,114261],{"class":732},[24,120318,120319,120321,120322,120325],{},[152,120320,119877],{}," 是一个变量名。右边的三引号 ",[152,120323,120324],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[146,120327,120328],{"className":71630,"code":119887,"language":71632,"meta":39,"style":39},[152,120329,120330],{"__ignoreMap":39},[155,120331,120332,120334,120336,120339,120341,120344],{"class":157,"line":158},[155,120333,20959],{"class":171},[155,120335,119584],{"class":69863},[155,120337,120338],{"class":226}," model",[155,120340,317],{"class":171},[155,120342,120343],{"class":732},"\"first_sim\"",[155,120345,69870],{"class":171},[24,120347,120348,120349,120352,120353,48174],{},"这是 XML 的根标签。",[152,120350,120351],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[152,120354,120355],{},"first_sim",[146,120357,120358],{"className":71630,"code":119746,"language":71632,"meta":39,"style":39},[152,120359,120360],{"__ignoreMap":39},[155,120361,120362,120364,120366,120368,120370,120372,120374,120376,120378],{"class":157,"line":158},[155,120363,20959],{"class":171},[155,120365,87729],{"class":69863},[155,120367,119757],{"class":226},[155,120369,317],{"class":171},[155,120371,119762],{"class":732},[155,120373,119765],{"class":226},[155,120375,317],{"class":171},[155,120377,119770],{"class":732},[155,120379,119707],{"class":171},[24,120381,120382,120384,120385,120388,120389,120392],{},[152,120383,87729],{}," 用来设置仿真参数。",[152,120386,120387],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[152,120390,120391],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[146,120394,120396],{"className":71630,"code":120395,"language":71632,"meta":39,"style":39},"\u003Cworldbody>\n",[152,120397,120398],{"__ignoreMap":39},[155,120399,120400,120402,120405],{"class":157,"line":158},[155,120401,20959],{"class":171},[155,120403,120404],{"class":69863},"worldbody",[155,120406,69870],{"class":171},[24,120408,120409,120411],{},[152,120410,120404],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[146,120413,120415],{"className":71630,"code":120414,"language":71632,"meta":39,"style":39},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[152,120416,120417],{"__ignoreMap":39},[155,120418,120419,120421,120423,120425,120427,120430,120432,120434,120437,120439,120441,120444,120446,120448,120451],{"class":157,"line":158},[155,120420,20959],{"class":171},[155,120422,119683],{"class":69863},[155,120424,34745],{"class":226},[155,120426,317],{"class":171},[155,120428,120429],{"class":732},"\"floor\"",[155,120431,72387],{"class":226},[155,120433,317],{"class":171},[155,120435,120436],{"class":732},"\"plane\"",[155,120438,119699],{"class":226},[155,120440,317],{"class":171},[155,120442,120443],{"class":732},"\"2 2 0.1\"",[155,120445,97330],{"class":226},[155,120447,317],{"class":171},[155,120449,120450],{"class":732},"\"0.8 0.8 0.8 1\"",[155,120452,119707],{"class":171},[24,120454,120455,120456,120458,120459,120462,120463,120466,120467,120469],{},"这行创建地面。",[152,120457,119683],{}," 是几何体。",[152,120460,120461],{},"name=\"floor\""," 是名字。",[152,120464,120465],{},"type=\"plane\""," 表示平面。",[152,120468,73673],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[146,120471,120473],{"className":71630,"code":120472,"language":71632,"meta":39,"style":39},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[152,120474,120475],{"__ignoreMap":39},[155,120476,120477,120479,120481,120483,120485,120487,120489,120491,120493],{"class":157,"line":158},[155,120478,20959],{"class":171},[155,120480,70363],{"class":69863},[155,120482,34745],{"class":226},[155,120484,317],{"class":171},[155,120486,72054],{"class":732},[155,120488,119669],{"class":226},[155,120490,317],{"class":171},[155,120492,119674],{"class":732},[155,120494,69870],{"class":171},[24,120496,120497,120498,48174,120500,120503,120504,120506],{},"这行创建一个刚体，名字叫 ",[152,120499,72277],{},[152,120501,120502],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[152,120505,119732],{},"，也就是离地面 1 米高。",[146,120508,120510],{"className":71630,"code":120509,"language":71632,"meta":39,"style":39},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[152,120511,120512],{"__ignoreMap":39},[155,120513,120514,120516,120518,120520,120522,120525],{"class":157,"line":158},[155,120515,20959],{"class":171},[155,120517,120183],{"class":69863},[155,120519,34745],{"class":226},[155,120521,317],{"class":171},[155,120523,120524],{"class":732},"\"box_free\"",[155,120526,119707],{"class":171},[24,120528,120529,120530,120532],{},"这行很重要。",[152,120531,120183],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[146,120534,120536],{"className":71630,"code":120535,"language":71632,"meta":39,"style":39},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[152,120537,120538],{"__ignoreMap":39},[155,120539,120540,120542,120544,120546,120548,120550,120552,120554,120556,120558,120560,120562,120565,120567,120569,120571,120573,120576],{"class":157,"line":158},[155,120541,20959],{"class":171},[155,120543,119683],{"class":69863},[155,120545,34745],{"class":226},[155,120547,317],{"class":171},[155,120549,119690],{"class":732},[155,120551,72387],{"class":226},[155,120553,317],{"class":171},[155,120555,72054],{"class":732},[155,120557,119699],{"class":226},[155,120559,317],{"class":171},[155,120561,119704],{"class":732},[155,120563,120564],{"class":226}," mass",[155,120566,317],{"class":171},[155,120568,23548],{"class":732},[155,120570,97330],{"class":226},[155,120572,317],{"class":171},[155,120574,120575],{"class":732},"\"1 0 0 1\"",[155,120577,119707],{"class":171},[24,120579,120580,120581,120584,120585,120588,120589,120592,120593,120596],{},"这行给 box body 添加一个盒子形状。",[152,120582,120583],{},"type=\"box\""," 表示形状是盒子。",[152,120586,120587],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[152,120590,120591],{},"mass=\"1\""," 表示质量是 1。",[152,120594,120595],{},"rgba=\"1 0 0 1\""," 表示红色。",[146,120598,120600],{"className":148,"code":120599,"language":150,"meta":39,"style":39},"def main() -> None:\n",[152,120601,120602],{"__ignoreMap":39},[155,120603,120604,120606,120608,120610,120612],{"class":157,"line":158},[155,120605,1484],{"class":167},[155,120607,21861],{"class":226},[155,120609,119961],{"class":171},[155,120611,114249],{"class":263},[155,120613,736],{"class":171},[24,120615,120616,120618,120619,120622,120623,120626],{},[152,120617,1484],{}," 用来定义函数。这里定义了一个叫 ",[152,120620,120621],{},"main"," 的函数。",[152,120624,120625],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[146,120628,120629],{"className":148,"code":120190,"language":150,"meta":39,"style":39},[152,120630,120631],{"__ignoreMap":39},[155,120632,120633,120635,120637,120639,120641],{"class":157,"line":158},[155,120634,120197],{"class":171},[155,120636,317],{"class":167},[155,120638,119975],{"class":171},[155,120640,119877],{"class":263},[155,120642,363],{"class":171},[24,120644,120645,120646,120649],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[152,120647,120648],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[146,120651,120652],{"className":148,"code":120214,"language":150,"meta":39,"style":39},[152,120653,120654],{"__ignoreMap":39},[155,120655,120656,120658,120660],{"class":157,"line":158},[155,120657,120221],{"class":171},[155,120659,317],{"class":167},[155,120661,119989],{"class":171},[24,120663,120664,120665,120667,120668,120670],{},"这行创建仿真数据。",[152,120666,3003],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[152,120669,3003],{}," 都会变化。",[146,120672,120674],{"className":148,"code":120673,"language":150,"meta":39,"style":39},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[152,120675,120676,120686,120696],{"__ignoreMap":39},[155,120677,120678,120680,120682,120684],{"class":157,"line":158},[155,120679,15451],{"class":263},[155,120681,230],{"class":171},[155,120683,120002],{"class":732},[155,120685,120005],{"class":171},[155,120687,120688,120690,120692,120694],{"class":157,"line":46},[155,120689,15451],{"class":263},[155,120691,230],{"class":171},[155,120693,120014],{"class":732},[155,120695,120017],{"class":171},[155,120697,120698,120700,120702,120704],{"class":157,"line":121},[155,120699,15451],{"class":263},[155,120701,230],{"class":171},[155,120703,120026],{"class":732},[155,120705,120029],{"class":171},[24,120707,120708,120710,120711,120714,120715,120718,120719,120722,120723,120726],{},[152,120709,15451],{}," 用来输出信息。",[152,120712,120713],{},"model.nq"," 是位置变量数量，",[152,120716,120717],{},"model.nv"," 是速度变量数量，",[152,120720,120721],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[152,120724,120725],{},"nu"," 是 0。",[146,120728,120730],{"className":148,"code":120729,"language":150,"meta":39,"style":39},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[152,120731,120732,120742],{"__ignoreMap":39},[155,120733,120734,120736,120738,120740],{"class":157,"line":158},[155,120735,15451],{"class":263},[155,120737,230],{"class":171},[155,120739,120038],{"class":732},[155,120741,120041],{"class":171},[155,120743,120744,120746,120748,120750],{"class":157,"line":46},[155,120745,15451],{"class":263},[155,120747,230],{"class":171},[155,120749,120050],{"class":732},[155,120751,120053],{"class":171},[24,120753,120754,120755,120757,120758,120760,120761,120764],{},"这里打印初始时间和初始位置。",[152,120756,119630],{}," 一开始是 0。",[152,120759,119633],{}," 是位置数组。",[152,120762,120763],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[146,120766,120767],{"className":148,"code":120239,"language":150,"meta":39,"style":39},[152,120768,120769,120785],{"__ignoreMap":39},[155,120770,120771,120773,120775,120777,120779,120781,120783],{"class":157,"line":158},[155,120772,1125],{"class":167},[155,120774,120064],{"class":171},[155,120776,1131],{"class":167},[155,120778,2008],{"class":263},[155,120780,230],{"class":171},[155,120782,20389],{"class":263},[155,120784,242],{"class":171},[155,120786,120787],{"class":157,"line":46},[155,120788,120262],{"class":171},[24,120790,120791,120793,120794,120797,120798,120800,120801,120803],{},[152,120792,1125],{}," 是循环。",[152,120795,120796],{},"range(100)"," 表示循环 100 次。",[152,120799,21037],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[152,120802,119778],{},"，仿真就前进一步。",[146,120805,120807],{"className":148,"code":120806,"language":150,"meta":39,"style":39},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[152,120808,120809,120819],{"__ignoreMap":39},[155,120810,120811,120813,120815,120817],{"class":157,"line":158},[155,120812,15451],{"class":263},[155,120814,230],{"class":171},[155,120816,120092],{"class":732},[155,120818,120041],{"class":171},[155,120820,120821,120823,120825,120827],{"class":157,"line":46},[155,120822,15451],{"class":263},[155,120824,230],{"class":171},[155,120826,120103],{"class":732},[155,120828,120053],{"class":171},[24,120830,120831],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[146,120833,120835],{"className":148,"code":120834,"language":150,"meta":39,"style":39},"if __name__ == \"__main__\":\n    main()\n",[152,120836,120837,120849],{"__ignoreMap":39},[155,120838,120839,120841,120843,120845,120847],{"class":157,"line":158},[155,120840,723],{"class":167},[155,120842,726],{"class":263},[155,120844,120122],{"class":167},[155,120846,120125],{"class":732},[155,120848,736],{"class":171},[155,120850,120851],{"class":157,"line":46},[155,120852,120132],{"class":171},[24,120854,120855,120856,120859,120860,48174],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[152,120857,120858],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[152,120861,120858],{},[24,120863,120864],{},"运行:",[146,120866,120868],{"className":43613,"code":120867,"language":43615,"meta":39,"style":39},"python ch1_first_sim.py\n",[152,120869,120870],{"__ignoreMap":39},[155,120871,120872,120874],{"class":157,"line":158},[155,120873,150],{"class":226},[155,120875,119849],{"class":732},[20037,120877,120879],{"id":120878},"_5运行结果说明","5.运行结果说明",[24,120881,120882],{},"你应该看到类似输出:",[146,120884,120887],{"className":120885,"code":120886,"language":25051,"meta":39},[25049],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[152,120888,120886],{"__ignoreMap":39},[24,120890,120891,120893,120894,120897,120898,48174],{},[152,120892,120183],{}," 有 7 个位置变量: ",[152,120895,120896],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[152,120899,120900],{},"vx vy vz wx wy wz",[24,120902,120903,120904,120907],{},"你还会看到 ",[152,120905,120906],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[20037,120909,120911],{"id":120910},"_6验证步骤","6.验证步骤",[24,120913,120914],{},"确认版本:",[146,120916,120917],{"className":43613,"code":119502,"language":43615,"meta":39,"style":39},[152,120918,120919],{"__ignoreMap":39},[155,120920,120921,120923,120925],{"class":157,"line":158},[155,120922,150],{"class":226},[155,120924,50147],{"class":263},[155,120926,119513],{"class":732},[24,120928,120929],{},"确认导入的是官方 bindings:",[146,120931,120933],{"className":43613,"code":120932,"language":43615,"meta":39,"style":39},"python -c \"import mujoco; print(mujoco)\"\n",[152,120934,120935],{"__ignoreMap":39},[155,120936,120937,120939,120941],{"class":157,"line":158},[155,120938,150],{"class":226},[155,120940,50147],{"class":263},[155,120942,120943],{"class":732}," \"import mujoco; print(mujoco)\"\n",[24,120945,120946],{},"运行程序:",[146,120948,120949],{"className":43613,"code":120867,"language":43615,"meta":39,"style":39},[152,120950,120951],{"__ignoreMap":39},[155,120952,120953,120955],{"class":157,"line":158},[155,120954,150],{"class":226},[155,120956,119849],{"class":732},[24,120958,120959,120960,120963,120964,48174],{},"检查 ",[152,120961,120962],{},"final time"," 是否约等于 ",[152,120965,120966],{},"1.0",[24,120968,120969],{},"再做几个小实验：",[28,120971,120972,120982,120990,121003],{},[31,120973,120974,120975,120977,120978,120981],{},"把 ",[152,120976,120502],{}," 改成 ",[152,120979,120980],{},"pos=\"0 0 2\"","，观察初始高度变化。",[31,120983,120974,120984,120977,120986,120989],{},[152,120985,120391],{},[152,120987,120988],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[31,120991,120974,120992,120977,120994,120997,120998,121000,121001,48174],{},[152,120993,120387],{},[152,120995,120996],{},"timestep=\"0.005\"","，观察 100 步后的 ",[152,120999,120962],{}," 是否变成约 ",[152,121002,4938],{},[31,121004,121005,121006,121009],{},"删除 ",[152,121007,121008],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[24,121011,121012],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[20037,121014,121016],{"id":121015},"_7常见错误与解决方案","7.常见错误与解决方案",[14,121018,121020],{"id":121019},"modulenotfounderror-no-module-named-mujoco",[152,121021,121022],{},"ModuleNotFoundError: No module named 'mujoco'",[24,121024,121025],{},"解决:",[146,121027,121029],{"className":43613,"code":121028,"language":43615,"meta":39,"style":39},"pip install \"mujoco>=2.3\"\n",[152,121030,121031],{"__ignoreMap":39},[155,121032,121033,121035,121037],{"class":157,"line":158},[155,121034,43622],{"class":226},[155,121036,43625],{"class":732},[155,121038,121039],{"class":732}," \"mujoco>=2.3\"\n",[14,121041,121043],{"id":121042},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[24,121045,121046],{},"先安装系统依赖:",[146,121048,121050],{"className":43613,"code":121049,"language":43615,"meta":39,"style":39},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[152,121051,121052],{"__ignoreMap":39},[155,121053,121054,121056,121058,121060,121062,121065,121067,121070,121072,121075,121077],{"class":157,"line":158},[155,121055,44368],{"class":226},[155,121057,46104],{"class":732},[155,121059,43625],{"class":732},[155,121061,46189],{"class":263},[155,121063,121064],{"class":732}," mesa-libGL",[155,121066,119377],{"class":732},[155,121068,121069],{"class":732}," glfw",[155,121071,119397],{"class":732},[155,121073,121074],{"class":732}," libX11",[155,121076,119410],{"class":732},[155,121078,121079],{"class":732}," libXrandr\n",[14,121081,121083],{"id":121082},"xml-解析失败","XML 解析失败",[24,121085,121086],{},"检查:",[28,121088,121089,121092,121095,121101],{},[31,121090,121091],{},"标签是否闭合",[31,121093,121094],{},"属性是否带引号",[31,121096,121097,121098],{},"根节点是否是 ",[152,121099,121100],{},"\u003Cmujoco>",[31,121102,121103,121105,121106,121109],{},[152,121104,70363],{}," 是否放在 ",[152,121107,121108],{},"\u003Cworldbody>"," 内部",[14,121111,121113,121115,121116],{"id":121112},"final-time-不是严格等于-10",[152,121114,120962],{}," 不是严格等于 ",[152,121117,120966],{},[24,121119,121120],{},"这通常不是错误。浮点数计算可能得到：",[146,121122,121125],{"className":121123,"code":121124,"language":25051,"meta":39},[25049],"1.0000000000000007\n",[152,121126,121124],{"__ignoreMap":39},[24,121128,121129,121130,121132],{},"只要接近 ",[152,121131,120966],{}," 就正常。",[14,121134,121135],{"id":121135},"方块没有掉下来",[24,121137,121138],{},"检查：",[28,121140,121141,121147,121153,121158],{},[31,121142,121143,121144],{},"方块 body 里是否有 ",[152,121145,121146],{},"\u003Cfreejoint\u002F>",[31,121148,121149,121150],{},"重力是否是 ",[152,121151,121152],{},"0 0 -9.81",[31,121154,121155,121156],{},"是否真的调用了 ",[152,121157,119248],{},[31,121159,121160,121161,121163,121164],{},"你看的是否是 ",[152,121162,120906],{},"，不是 ",[152,121165,121166],{},"initial qpos",[20037,121168,121170],{"id":121169},"_8本章小结","8.本章小结",[24,121172,121173],{},"本章你已经完成了 MuJoCo 的最小闭环：",[146,121175,121178],{"className":121176,"code":121177,"language":25051,"meta":39},[25049],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[152,121179,121177],{"__ignoreMap":39},[24,121181,121182],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[20011,121184,121185],{},"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":39,"searchDepth":46,"depth":46,"links":121187},[121188,121189,121190,121195,121199,121200,121201,121209],{"id":119209,"depth":46,"text":119210},{"id":119332,"depth":46,"text":119333},{"id":119607,"depth":46,"text":119608,"children":121191},[121192,121193,121194],{"id":119645,"depth":121,"text":119646},{"id":119739,"depth":121,"text":119740},{"id":119791,"depth":121,"text":119792},{"id":119815,"depth":46,"text":119816,"children":121196},[121197,121198],{"id":120135,"depth":121,"text":120135},{"id":120271,"depth":121,"text":120271},{"id":120878,"depth":46,"text":120879},{"id":120910,"depth":46,"text":120911},{"id":121015,"depth":46,"text":121016,"children":121202},[121203,121204,121205,121206,121208],{"id":121019,"depth":121,"text":121022},{"id":121042,"depth":121,"text":121043},{"id":121082,"depth":121,"text":121083},{"id":121112,"depth":121,"text":121207},"final time 不是严格等于 1.0",{"id":121135,"depth":121,"text":121135},{"id":121169,"depth":46,"text":121170},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":119201,"description":39},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":121216,"title":121217,"body":121218,"description":39,"extension":20021,"meta":122874,"navigation":216,"path":122875,"seo":122876,"stem":122877,"__hash__":122878},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":121219,"toc":122850},[121220,121223,121225,121228,121231,121248,121343,121346,121352,121354,121356,121380,121383,121397,121400,121441,121443,121456,121458,121461,121509,121521,121524,121527,121533,121546,121613,121616,121635,121638,121641,121647,121649,121658,121661,121665,121674,121756,121765,121769,121775,121789,121799,121801,122131,122134,122146,122148,122159,122161,122164,122182,122185,122188,122206,122217,122220,122235,122245,122247,122268,122285,122305,122311,122351,122367,122383,122389,122392,122416,122432,122437,122467,122484,122509,122512,122527,122536,122551,122560,122575,122582,122584,122594,122607,122614,122617,122656,122663,122665,122717,122719,122725,122728,122735,122742,122745,122747,122765,122768,122771,122805,122817,122819,122822,122844,122847],[10,121221,121217],{"id":121222},"_2xml-与-mjcf-物理建模基础",[20037,121224,119210],{"id":119209},[24,121226,121227],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[24,121229,121230],{},"本章结束后，你应该能看懂一个简单模型里：",[28,121232,121233,121236,121239,121242,121245],{},[31,121234,121235],{},"地面在哪里。",[31,121237,121238],{},"物体初始位置在哪里。",[31,121240,121241],{},"几何体是什么形状。",[31,121243,121244],{},"哪些 body 可以自由运动。",[31,121246,121247],{},"如何用名字在 Python 里找到 XML 中的对象。",[20222,121249,121250,121260],{},[20225,121251,121252],{},[20228,121253,121254,121257],{},[20231,121255,121256],{"align":43527},"标签",[20231,121258,121259],{"align":43527},"作用",[20269,121261,121262,121271,121281,121290,121300,121310,121323,121333],{},[20228,121263,121264,121268],{},[20274,121265,121266],{"align":43527},[152,121267,121100],{},[20274,121269,121270],{"align":43527},"根节点",[20228,121272,121273,121278],{},[20274,121274,121275],{"align":43527},[152,121276,121277],{},"\u003Coption>",[20274,121279,121280],{"align":43527},"仿真参数",[20228,121282,121283,121287],{},[20274,121284,121285],{"align":43527},[152,121286,121108],{},[20274,121288,121289],{"align":43527},"世界中的物体",[20228,121291,121292,121297],{},[20274,121293,121294],{"align":43527},[152,121295,121296],{},"\u003Cbody>",[20274,121298,121299],{"align":43527},"刚体",[20228,121301,121302,121307],{},[20274,121303,121304],{"align":43527},[152,121305,121306],{},"\u003Cgeom>",[20274,121308,121309],{"align":43527},"几何体、碰撞体、可视体",[20228,121311,121312,121320],{},[20274,121313,121314,44770,121317],{"align":43527},[152,121315,121316],{},"\u003Cjoint>",[152,121318,121319],{},"\u003Cfreejoint>",[20274,121321,121322],{"align":43527},"关节",[20228,121324,121325,121330],{},[20274,121326,121327],{"align":43527},[152,121328,121329],{},"\u003Csite>",[20274,121331,121332],{"align":43527},"标记点",[20228,121334,121335,121340],{},[20274,121336,121337],{"align":43527},[152,121338,121339],{},"\u003Cactuator>",[20274,121341,121342],{"align":43527},"控制器",[24,121344,121345],{},"初学时可以先记住：",[146,121347,121350],{"className":121348,"code":121349,"language":25051,"meta":39},[25049],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[152,121351,121349],{"__ignoreMap":39},[20037,121353,119333],{"id":119332},[24,121355,119336],{},[146,121357,121359],{"className":43613,"code":121358,"language":43615,"meta":39,"style":39},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[152,121360,121361],{"__ignoreMap":39},[155,121362,121363,121365,121367,121369,121371,121373,121375,121377],{"class":157,"line":158},[155,121364,44368],{"class":226},[155,121366,46104],{"class":732},[155,121368,43625],{"class":732},[155,121370,46189],{"class":263},[155,121372,121064],{"class":732},[155,121374,119377],{"class":732},[155,121376,121069],{"class":732},[155,121378,121379],{"class":732}," glfw-devel\n",[24,121381,121382],{},"pip:",[146,121384,121385],{"className":43613,"code":119482,"language":43615,"meta":39,"style":39},[152,121386,121387],{"__ignoreMap":39},[155,121388,121389,121391,121393,121395],{"class":157,"line":158},[155,121390,43622],{"class":226},[155,121392,43625],{"class":732},[155,121394,119493],{"class":732},[155,121396,119496],{"class":732},[24,121398,121399],{},"conda:",[146,121401,121403],{"className":43613,"code":121402,"language":43615,"meta":39,"style":39},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[152,121404,121405,121422,121431],{"__ignoreMap":39},[155,121406,121407,121409,121411,121413,121416,121418,121420],{"class":157,"line":158},[155,121408,50119],{"class":226},[155,121410,48965],{"class":732},[155,121412,44907],{"class":263},[155,121414,121415],{"class":732}," mujoco-xml",[155,121417,119538],{"class":732},[155,121419,119541],{"class":263},[155,121421,119544],{"class":263},[155,121423,121424,121426,121428],{"class":157,"line":46},[155,121425,50119],{"class":226},[155,121427,119551],{"class":732},[155,121429,121430],{"class":732}," mujoco-xml\n",[155,121432,121433,121435,121437,121439],{"class":157,"line":121},[155,121434,43622],{"class":226},[155,121436,43625],{"class":732},[155,121438,119493],{"class":732},[155,121440,119496],{"class":732},[24,121442,119567],{},[28,121444,121445,121448,121453],{},[31,121446,121447],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[31,121449,121450,121451,48174],{},"本章使用基础标签，适用于 ",[152,121452,119590],{},[31,121454,121455],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[20037,121457,119608],{"id":119607},[24,121459,121460],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[146,121462,121464],{"className":71630,"code":121463,"language":71632,"meta":39,"style":39},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[152,121465,121466,121480,121488,121493,121501],{"__ignoreMap":39},[155,121467,121468,121470,121472,121474,121476,121478],{"class":157,"line":158},[155,121469,20959],{"class":171},[155,121471,119584],{"class":69863},[155,121473,120338],{"class":226},[155,121475,317],{"class":171},[155,121477,81242],{"class":732},[155,121479,69870],{"class":171},[155,121481,121482,121484,121486],{"class":157,"line":46},[155,121483,70707],{"class":171},[155,121485,120404],{"class":69863},[155,121487,69870],{"class":171},[155,121489,121490],{"class":157,"line":121},[155,121491,121492],{"class":171},"    ...\n",[155,121494,121495,121497,121499],{"class":157,"line":180},[155,121496,70980],{"class":171},[155,121498,120404],{"class":69863},[155,121500,69870],{"class":171},[155,121502,121503,121505,121507],{"class":157,"line":194},[155,121504,70348],{"class":171},[155,121506,119584],{"class":69863},[155,121508,69870],{"class":171},[24,121510,121511,121513,121514,121516,121517,121520],{},[152,121512,70363],{}," 表示刚体。",[152,121515,119683],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[152,121518,121519],{},"joint"," 表示刚体相对父刚体如何运动。",[14,121522,121523],{"id":121523},"层级结构非常重要",[24,121525,121526],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[146,121528,121531],{"className":121529,"code":121530,"language":25051,"meta":39},[25049],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[152,121532,121530],{"__ignoreMap":39},[24,121534,121535,119581,121538,121541,121542,121545],{},[152,121536,121537],{},"red_box_geom",[152,121539,121540],{},"box_center"," 都属于 ",[152,121543,121544],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[146,121547,121549],{"className":71630,"code":121548,"language":71632,"meta":39,"style":39},"\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",[152,121550,121551,121571,121585,121605],{"__ignoreMap":39},[155,121552,121553,121555,121557,121559,121561,121563,121565,121567,121569],{"class":157,"line":158},[155,121554,20959],{"class":171},[155,121556,70363],{"class":69863},[155,121558,34745],{"class":226},[155,121560,317],{"class":171},[155,121562,72054],{"class":732},[155,121564,119669],{"class":226},[155,121566,317],{"class":171},[155,121568,119674],{"class":732},[155,121570,69870],{"class":171},[155,121572,121573,121575,121577,121579,121581,121583],{"class":157,"line":46},[155,121574,70707],{"class":171},[155,121576,120183],{"class":69863},[155,121578,34745],{"class":226},[155,121580,317],{"class":171},[155,121582,120524],{"class":732},[155,121584,119707],{"class":171},[155,121586,121587,121589,121591,121593,121595,121597,121599,121601,121603],{"class":157,"line":121},[155,121588,70707],{"class":171},[155,121590,119683],{"class":69863},[155,121592,72387],{"class":226},[155,121594,317],{"class":171},[155,121596,72054],{"class":732},[155,121598,119699],{"class":226},[155,121600,317],{"class":171},[155,121602,119704],{"class":732},[155,121604,119707],{"class":171},[155,121606,121607,121609,121611],{"class":157,"line":180},[155,121608,70348],{"class":171},[155,121610,70363],{"class":69863},[155,121612,69870],{"class":171},[24,121614,121615],{},"含义:",[28,121617,121618,121624,121629,121632],{},[31,121619,121620,121621,121623],{},"创建名为 ",[152,121622,72277],{}," 的刚体",[31,121625,121626,121627],{},"初始位置在世界坐标 ",[152,121628,119732],{},[31,121630,121631],{},"它有一个自由关节",[31,121633,121634],{},"它有一个盒子几何体",[14,121636,121637],{"id":121637},"坐标怎么理解",[24,121639,121640],{},"MuJoCo 默认使用三维坐标：",[146,121642,121645],{"className":121643,"code":121644,"language":25051,"meta":39},[25049],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[152,121646,121644],{"__ignoreMap":39},[24,121648,34460],{},[146,121650,121652],{"className":71630,"code":121651,"language":71632,"meta":39,"style":39},"pos=\"0 0 1\"\n",[152,121653,121654],{"__ignoreMap":39},[155,121655,121656],{"class":157,"line":158},[155,121657,121651],{"class":171},[24,121659,121660],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[14,121662,121664],{"id":121663},"geom-的-size-怎么理解","geom 的 size 怎么理解",[24,121666,121667,121668,101093,121671,121673],{},"不同 ",[152,121669,121670],{},"type",[152,121672,1020],{}," 含义不同：",[20222,121675,121676,121691],{},[20225,121677,121678],{},[20228,121679,121680,121684,121689],{},[20231,121681,121682],{"align":43527},[152,121683,121670],{},[20231,121685,121686,121688],{"align":43527},[152,121687,1020],{}," 示例",[20231,121690,119263],{"align":43527},[20269,121692,121693,121707,121722,121741],{},[20228,121694,121695,121699,121704],{},[20274,121696,121697],{"align":43527},[152,121698,72277],{},[20274,121700,121701],{"align":43527},[152,121702,121703],{},"size=\"0.1 0.2 0.3\"",[20274,121705,121706],{"align":43527},"x\u002Fy\u002Fz 半边长，不是完整长度",[20228,121708,121709,121714,121719],{},[20274,121710,121711],{"align":43527},[152,121712,121713],{},"sphere",[20274,121715,121716],{"align":43527},[152,121717,121718],{},"size=\"0.1\"",[20274,121720,121721],{"align":43527},"球半径",[20228,121723,121724,121729,121734],{},[20274,121725,121726],{"align":43527},[152,121727,121728],{},"capsule",[20274,121730,121731],{"align":43527},[152,121732,121733],{},"size=\"0.03\"",[20274,121735,121736,121737,121740],{"align":43527},"胶囊半径，长度常用 ",[152,121738,121739],{},"fromto"," 指定",[20228,121742,121743,121748,121753],{},[20274,121744,121745],{"align":43527},[152,121746,121747],{},"plane",[20274,121749,121750],{"align":43527},[152,121751,121752],{},"size=\"3 3 0.1\"",[20274,121754,121755],{"align":43527},"可视平面大小，通常当地面",[24,121757,121758,121759,121761,121762,121764],{},"最容易踩坑的是 box：",[152,121760,120587],{}," 表示边长大约是 ",[152,121763,1575],{},"，因为 MuJoCo 用的是半边长。",[14,121766,121768],{"id":121767},"site-是什么","site 是什么",[24,121770,121771,121774],{},[152,121772,121773],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[28,121776,121777,121780,121783,121786],{},[31,121778,121779],{},"标记机械臂末端。",[31,121781,121782],{},"标记目标位置。",[31,121784,121785],{},"放传感器或相机参考点。",[31,121787,121788],{},"在 Python 中读取某个关键点的世界坐标。",[24,121790,121791,121792,119581,121795,121798],{},"在后面的 Reacher 任务中，",[152,121793,121794],{},"tip",[152,121796,121797],{},"target"," 就会用 site 表示。",[20037,121800,119816],{"id":119815},[146,121802,121804],{"className":148,"code":121803,"language":150,"meta":39,"style":39},"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",[152,121805,121806,121812,121822,121826,121830,121838,121843,121847,121851,121855,121860,121864,121869,121874,121879,121884,121888,121892,121896,121900,121904,121908,121920,121932,121940,121944,121959,121974,121978,121991,122006,122019,122032,122036,122052,122056,122060,122071,122083,122095,122107,122111,122115,122127],{"__ignoreMap":39},[155,121807,121808,121810],{"class":157,"line":158},[155,121809,168],{"class":167},[155,121811,119864],{"class":171},[155,121813,121814,121816,121818,121820],{"class":157,"line":46},[155,121815,168],{"class":167},[155,121817,904],{"class":171},[155,121819,907],{"class":167},[155,121821,910],{"class":171},[155,121823,121824],{"class":157,"line":121},[155,121825,217],{"emptyLinePlaceholder":216},[155,121827,121828],{"class":157,"line":180},[155,121829,217],{"emptyLinePlaceholder":216},[155,121831,121832,121834,121836],{"class":157,"line":194},[155,121833,119877],{"class":263},[155,121835,33391],{"class":167},[155,121837,119882],{"class":732},[155,121839,121840],{"class":157,"line":200},[155,121841,121842],{"class":732},"\u003Cmujoco model=\"xml_basic\">\n",[155,121844,121845],{"class":157,"line":213},[155,121846,119892],{"class":732},[155,121848,121849],{"class":157,"line":220},[155,121850,217],{"emptyLinePlaceholder":216},[155,121852,121853],{"class":157,"line":245},[155,121854,119901],{"class":732},[155,121856,121857],{"class":157,"line":251},[155,121858,121859],{"class":732},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[155,121861,121862],{"class":157,"line":257},[155,121863,217],{"emptyLinePlaceholder":216},[155,121865,121866],{"class":157,"line":270},[155,121867,121868],{"class":732},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[155,121870,121871],{"class":157,"line":276},[155,121872,121873],{"class":732},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[155,121875,121876],{"class":157,"line":297},[155,121877,121878],{"class":732},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[155,121880,121881],{"class":157,"line":302},[155,121882,121883],{"class":732},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[155,121885,121886],{"class":157,"line":308},[155,121887,119930],{"class":732},[155,121889,121890],{"class":157,"line":366},[155,121891,119935],{"class":732},[155,121893,121894],{"class":157,"line":379},[155,121895,119940],{"class":732},[155,121897,121898],{"class":157,"line":385},[155,121899,114261],{"class":732},[155,121901,121902],{"class":157,"line":415},[155,121903,217],{"emptyLinePlaceholder":216},[155,121905,121906],{"class":157,"line":452},[155,121907,217],{"emptyLinePlaceholder":216},[155,121909,121910,121912,121914,121916,121918],{"class":157,"line":480},[155,121911,1484],{"class":167},[155,121913,21861],{"class":226},[155,121915,119961],{"class":171},[155,121917,114249],{"class":263},[155,121919,736],{"class":171},[155,121921,121922,121924,121926,121928,121930],{"class":157,"line":486},[155,121923,119970],{"class":171},[155,121925,317],{"class":167},[155,121927,119975],{"class":171},[155,121929,119877],{"class":263},[155,121931,363],{"class":171},[155,121933,121934,121936,121938],{"class":157,"line":499},[155,121935,119984],{"class":171},[155,121937,317],{"class":167},[155,121939,119989],{"class":171},[155,121941,121942],{"class":157,"line":505},[155,121943,217],{"emptyLinePlaceholder":216},[155,121945,121946,121949,121951,121954,121957],{"class":157,"line":528},[155,121947,121948],{"class":171},"    box_body_id ",[155,121950,317],{"class":167},[155,121952,121953],{"class":171}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[155,121955,121956],{"class":732},"\"red_box\"",[155,121958,363],{"class":171},[155,121960,121961,121964,121966,121969,121972],{"class":157,"line":549},[155,121962,121963],{"class":171},"    site_id ",[155,121965,317],{"class":167},[155,121967,121968],{"class":171}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[155,121970,121971],{"class":732},"\"box_center\"",[155,121973,363],{"class":171},[155,121975,121976],{"class":157,"line":570},[155,121977,217],{"emptyLinePlaceholder":216},[155,121979,121980,121982,121985,121987,121989],{"class":157,"line":575},[155,121981,1142],{"class":167},[155,121983,121984],{"class":171}," box_body_id ",[155,121986,20959],{"class":167},[155,121988,1151],{"class":263},[155,121990,736],{"class":171},[155,121992,121993,121996,121999,122001,122004],{"class":157,"line":581},[155,121994,121995],{"class":167},"        raise",[155,121997,121998],{"class":263}," RuntimeError",[155,122000,230],{"class":171},[155,122002,122003],{"class":732},"\"body red_box not found\"",[155,122005,363],{"class":171},[155,122007,122008,122010,122013,122015,122017],{"class":157,"line":592},[155,122009,1142],{"class":167},[155,122011,122012],{"class":171}," site_id ",[155,122014,20959],{"class":167},[155,122016,1151],{"class":263},[155,122018,736],{"class":171},[155,122020,122021,122023,122025,122027,122030],{"class":157,"line":610},[155,122022,121995],{"class":167},[155,122024,121998],{"class":263},[155,122026,230],{"class":171},[155,122028,122029],{"class":732},"\"site box_center not found\"",[155,122031,363],{"class":171},[155,122033,122034],{"class":157,"line":622},[155,122035,217],{"emptyLinePlaceholder":216},[155,122037,122038,122040,122042,122044,122046,122048,122050],{"class":157,"line":638},[155,122039,2000],{"class":167},[155,122041,120064],{"class":171},[155,122043,1131],{"class":167},[155,122045,2008],{"class":263},[155,122047,230],{"class":171},[155,122049,21619],{"class":263},[155,122051,242],{"class":171},[155,122053,122054],{"class":157,"line":650},[155,122055,120079],{"class":171},[155,122057,122058],{"class":157,"line":662},[155,122059,217],{"emptyLinePlaceholder":216},[155,122061,122062,122064,122066,122069],{"class":157,"line":678},[155,122063,822],{"class":263},[155,122065,230],{"class":171},[155,122067,122068],{"class":732},"\"simulation time:\"",[155,122070,120041],{"class":171},[155,122072,122073,122075,122077,122080],{"class":157,"line":694},[155,122074,822],{"class":263},[155,122076,230],{"class":171},[155,122078,122079],{"class":732},"\"box body position:\"",[155,122081,122082],{"class":171},", data.xpos[box_body_id].copy())\n",[155,122084,122085,122087,122089,122092],{"class":157,"line":706},[155,122086,822],{"class":263},[155,122088,230],{"class":171},[155,122090,122091],{"class":732},"\"site position:\"",[155,122093,122094],{"class":171},", data.site_xpos[site_id].copy())\n",[155,122096,122097,122099,122101,122104],{"class":157,"line":715},[155,122098,822],{"class":263},[155,122100,230],{"class":171},[155,122102,122103],{"class":732},"\"box qpos:\"",[155,122105,122106],{"class":171},", np.array(data.qpos))\n",[155,122108,122109],{"class":157,"line":720},[155,122110,217],{"emptyLinePlaceholder":216},[155,122112,122113],{"class":157,"line":739},[155,122114,217],{"emptyLinePlaceholder":216},[155,122116,122117,122119,122121,122123,122125],{"class":157,"line":745},[155,122118,723],{"class":167},[155,122120,726],{"class":263},[155,122122,120122],{"class":167},[155,122124,120125],{"class":732},[155,122126,736],{"class":171},[155,122128,122129],{"class":157,"line":773},[155,122130,120132],{"class":171},[24,122132,122133],{},"保存为：",[146,122135,122137],{"className":43613,"code":122136,"language":43615,"meta":39,"style":39},"touch ch2_xml_basic.py\n",[152,122138,122139],{"__ignoreMap":39},[155,122140,122141,122143],{"class":157,"line":158},[155,122142,119846],{"class":226},[155,122144,122145],{"class":732}," ch2_xml_basic.py\n",[24,122147,120864],{},[146,122149,122151],{"className":43613,"code":122150,"language":43615,"meta":39,"style":39},"python ch2_xml_basic.py\n",[152,122152,122153],{"__ignoreMap":39},[155,122154,122155,122157],{"class":157,"line":158},[155,122156,150],{"class":226},[155,122158,122145],{"class":732},[14,122160,120135],{"id":120135},[24,122162,122163],{},"用名字查找 body：",[146,122165,122167],{"className":148,"code":122166,"language":150,"meta":39,"style":39},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[152,122168,122169],{"__ignoreMap":39},[155,122170,122171,122174,122176,122178,122180],{"class":157,"line":158},[155,122172,122173],{"class":171},"box_body_id ",[155,122175,317],{"class":167},[155,122177,121953],{"class":171},[155,122179,121956],{"class":732},[155,122181,363],{"class":171},[24,122183,122184],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[24,122186,122187],{},"用名字查找 site：",[146,122189,122191],{"className":148,"code":122190,"language":150,"meta":39,"style":39},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[152,122192,122193],{"__ignoreMap":39},[155,122194,122195,122198,122200,122202,122204],{"class":157,"line":158},[155,122196,122197],{"class":171},"site_id ",[155,122199,317],{"class":167},[155,122201,121968],{"class":171},[155,122203,121971],{"class":732},[155,122205,363],{"class":171},[24,122207,122208,122209,122212,122213,122216],{},"注意第二个参数是对象类型。查 body 就用 ",[152,122210,122211],{},"mjOBJ_BODY","，查 site 就用 ",[152,122214,122215],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[24,122218,122219],{},"读取世界坐标：",[146,122221,122223],{"className":148,"code":122222,"language":150,"meta":39,"style":39},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[152,122224,122225,122230],{"__ignoreMap":39},[155,122226,122227],{"class":157,"line":158},[155,122228,122229],{"class":171},"data.xpos[box_body_id]\n",[155,122231,122232],{"class":157,"line":46},[155,122233,122234],{"class":171},"data.site_xpos[site_id]\n",[24,122236,122237,122240,122241,122244],{},[152,122238,122239],{},"xpos"," 是 body 的世界坐标，",[152,122242,122243],{},"site_xpos"," 是 site 的世界坐标。",[14,122246,120271],{"id":120271},[146,122248,122250],{"className":148,"code":122249,"language":150,"meta":39,"style":39},"import mujoco\nimport numpy as np\n",[152,122251,122252,122258],{"__ignoreMap":39},[155,122253,122254,122256],{"class":157,"line":158},[155,122255,168],{"class":167},[155,122257,119864],{"class":171},[155,122259,122260,122262,122264,122266],{"class":157,"line":46},[155,122261,168],{"class":167},[155,122263,904],{"class":171},[155,122265,907],{"class":167},[155,122267,910],{"class":171},[24,122269,122270,122271,122274,122275,122278,122279,20293,122282,48174],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[152,122272,122273],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[152,122276,122277],{},"as np"," 是习惯写法，后面就可以写 ",[152,122280,122281],{},"np.array(...)",[152,122283,122284],{},"np.round(...)",[146,122286,122287],{"className":148,"code":120158,"language":150,"meta":39,"style":39},[152,122288,122289,122297,122301],{"__ignoreMap":39},[155,122290,122291,122293,122295],{"class":157,"line":158},[155,122292,119877],{"class":263},[155,122294,33391],{"class":167},[155,122296,119882],{"class":732},[155,122298,122299],{"class":157,"line":46},[155,122300,120173],{"class":732},[155,122302,122303],{"class":157,"line":121},[155,122304,114261],{"class":732},[24,122306,122307,122308,48174],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[152,122309,122310],{},"mujoco.MjModel.from_xml_string(XML)",[146,122312,122314],{"className":71630,"code":122313,"language":71632,"meta":39,"style":39},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[152,122315,122316],{"__ignoreMap":39},[155,122317,122318,122320,122322,122324,122326,122328,122330,122332,122335,122337,122339,122342,122344,122346,122349],{"class":157,"line":158},[155,122319,20959],{"class":171},[155,122321,121773],{"class":69863},[155,122323,34745],{"class":226},[155,122325,317],{"class":171},[155,122327,121971],{"class":732},[155,122329,119669],{"class":226},[155,122331,317],{"class":171},[155,122333,122334],{"class":732},"\"0 0 0\"",[155,122336,119699],{"class":226},[155,122338,317],{"class":171},[155,122340,122341],{"class":732},"\"0.03\"",[155,122343,97330],{"class":226},[155,122345,317],{"class":171},[155,122347,122348],{"class":732},"\"0 1 0 1\"",[155,122350,119707],{"class":171},[24,122352,122353,122355,122356,122359,122360,122362,122363,122366],{},[152,122354,121773],{}," 是标记点。",[152,122357,122358],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[152,122361,121733],{}," 表示显示出来的小球大小。",[152,122364,122365],{},"rgba=\"0 1 0 1\""," 表示绿色。",[146,122368,122369],{"className":148,"code":122166,"language":150,"meta":39,"style":39},[152,122370,122371],{"__ignoreMap":39},[155,122372,122373,122375,122377,122379,122381],{"class":157,"line":158},[155,122374,122173],{"class":171},[155,122376,317],{"class":167},[155,122378,121953],{"class":171},[155,122380,121956],{"class":732},[155,122382,363],{"class":171},[24,122384,122385,122386,122388],{},"这行的作用是：根据名字 ",[152,122387,121956],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[24,122390,122391],{},"拆开看：",[28,122393,122394,122400,122405,122411],{},[31,122395,122396,122399],{},[152,122397,122398],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[31,122401,122402,122404],{},[152,122403,120648],{}," 是被查询的模型。",[31,122406,122407,122410],{},[152,122408,122409],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[31,122412,122413,122415],{},[152,122414,121956],{}," 是 XML 里写的名字。",[146,122417,122418],{"className":148,"code":122190,"language":150,"meta":39,"style":39},[152,122419,122420],{"__ignoreMap":39},[155,122421,122422,122424,122426,122428,122430],{"class":157,"line":158},[155,122423,122197],{"class":171},[155,122425,317],{"class":167},[155,122427,121968],{"class":171},[155,122429,121971],{"class":732},[155,122431,363],{"class":171},[24,122433,122434,122435,48174],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[152,122436,121971],{},[146,122438,122440],{"className":148,"code":122439,"language":150,"meta":39,"style":39},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[152,122441,122442,122454],{"__ignoreMap":39},[155,122443,122444,122446,122448,122450,122452],{"class":157,"line":158},[155,122445,723],{"class":167},[155,122447,121984],{"class":171},[155,122449,20959],{"class":167},[155,122451,1151],{"class":263},[155,122453,736],{"class":171},[155,122455,122456,122459,122461,122463,122465],{"class":157,"line":46},[155,122457,122458],{"class":167},"    raise",[155,122460,121998],{"class":263},[155,122462,230],{"class":171},[155,122464,122003],{"class":732},[155,122466,363],{"class":171},[24,122468,122469,122471,122472,122475,122476,122479,122480,122483],{},[152,122470,723],{}," 是条件判断。",[152,122473,122474],{},"mj_name2id"," 找不到对象时会返回 ",[152,122477,122478],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[152,122481,122482],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[146,122485,122487],{"className":148,"code":122486,"language":150,"meta":39,"style":39},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[152,122488,122489,122505],{"__ignoreMap":39},[155,122490,122491,122493,122495,122497,122499,122501,122503],{"class":157,"line":158},[155,122492,1125],{"class":167},[155,122494,120064],{"class":171},[155,122496,1131],{"class":167},[155,122498,2008],{"class":263},[155,122500,230],{"class":171},[155,122502,21619],{"class":263},[155,122504,242],{"class":171},[155,122506,122507],{"class":157,"line":46},[155,122508,120262],{"class":171},[24,122510,122511],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[146,122513,122515],{"className":148,"code":122514,"language":150,"meta":39,"style":39},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[152,122516,122517],{"__ignoreMap":39},[155,122518,122519,122521,122523,122525],{"class":157,"line":158},[155,122520,15451],{"class":263},[155,122522,230],{"class":171},[155,122524,122079],{"class":732},[155,122526,122082],{"class":171},[24,122528,122529,122531,122532,122535],{},[152,122530,119642],{}," 保存所有 body 的世界坐标。",[152,122533,122534],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[146,122537,122539],{"className":148,"code":122538,"language":150,"meta":39,"style":39},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[152,122540,122541],{"__ignoreMap":39},[155,122542,122543,122545,122547,122549],{"class":157,"line":158},[155,122544,15451],{"class":263},[155,122546,230],{"class":171},[155,122548,122091],{"class":732},[155,122550,122094],{"class":171},[24,122552,122553,122556,122557,122559],{},[152,122554,122555],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[152,122558,121540],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[146,122561,122563],{"className":148,"code":122562,"language":150,"meta":39,"style":39},"print(\"box qpos:\", np.array(data.qpos))\n",[152,122564,122565],{"__ignoreMap":39},[155,122566,122567,122569,122571,122573],{"class":157,"line":158},[155,122568,15451],{"class":263},[155,122570,230],{"class":171},[155,122572,122103],{"class":732},[155,122574,122106],{"class":171},[24,122576,122577,122578,122581],{},"这里打印广义位置数组。",[152,122579,122580],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[20037,122583,120879],{"id":120878},[24,122585,122586,122587,122590,122591,48174],{},"程序会输出 ",[152,122588,122589],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[152,122592,122593],{},"qpos",[24,122595,122596,122598,122599,122602,122603,122606],{},[152,122597,122534],{}," 是 body 的世界坐标位置。",[152,122600,122601],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[152,122604,122605],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[24,122608,100785,122609,101093,122611,122613],{},[152,122610,121540],{},[152,122612,122358],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[24,122615,122616],{},"如果你把 site 改成：",[146,122618,122620],{"className":71630,"code":122619,"language":71632,"meta":39,"style":39},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[152,122621,122622],{"__ignoreMap":39},[155,122623,122624,122626,122628,122630,122632,122635,122637,122639,122642,122644,122646,122648,122650,122652,122654],{"class":157,"line":158},[155,122625,20959],{"class":171},[155,122627,121773],{"class":69863},[155,122629,34745],{"class":226},[155,122631,317],{"class":171},[155,122633,122634],{"class":732},"\"box_top\"",[155,122636,119669],{"class":226},[155,122638,317],{"class":171},[155,122640,122641],{"class":732},"\"0 0 0.15\"",[155,122643,119699],{"class":226},[155,122645,317],{"class":171},[155,122647,122341],{"class":732},[155,122649,97330],{"class":226},[155,122651,317],{"class":171},[155,122653,122348],{"class":732},[155,122655,119707],{"class":171},[24,122657,122658,122659,122662],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[152,122660,122661],{},"site position"," 就会比 body position 的 z 坐标更高。",[20037,122664,120911],{"id":120910},[28,122666,122667,122676,122679,122686,122692,122703],{},[31,122668,120974,122669,122671,122672,120977,122674,48174],{},[152,122670,121544],{}," 的初始高度从 ",[152,122673,329],{},[152,122675,360],{},[31,122677,122678],{},"重新运行程序。",[31,122680,122681,122682,122685],{},"观察 ",[152,122683,122684],{},"box qpos"," 和最终位置是否变化。",[31,122687,122688,122689,122691],{},"故意把 ",[152,122690,121773],{}," 名称改错，确认程序能报错。",[31,122693,120974,122694,122696,122697,120977,122699,122702],{},[152,122695,119683],{}," 的颜色 ",[152,122698,120595],{},[152,122700,122701],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[31,122704,120974,122705,101093,122707,120977,122710,122713,122714,122716],{},[152,122706,121540],{},[152,122708,122709],{},"pos",[152,122711,122712],{},"0 0 0.2","，观察 ",[152,122715,122661],{}," 如何变化。",[20037,122718,121016],{"id":121015},[14,122720,122722],{"id":122721},"xml-error-schema-violation",[152,122723,122724],{},"XML Error: Schema violation",[24,122726,122727],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[14,122729,122731,99853,122733],{"id":122730},"mj_name2id-返回-1",[152,122732,122474],{},[152,122734,122478],{},[24,122736,122737,122738,122741],{},"说明名字没有找到。检查 XML 中 ",[152,122739,122740],{},"name=\"...\"","，并确认对象类型正确。",[14,122743,122744],{"id":122744},"物体不下落",[24,122746,121086],{},[28,122748,122749,122754,122759],{},[31,122750,122751,122752],{},"body 是否有 ",[152,122753,120183],{},[31,122755,122756,122757],{},"gravity 是否为 ",[152,122758,121152],{},[31,122760,122761,122762,122764],{},"body 是否被固定在 ",[152,122763,120404],{}," 中",[14,122766,122767],{"id":122767},"坐标看起来不符合预期",[24,122769,122770],{},"先区分两种坐标：",[20222,122772,122773,122782],{},[20225,122774,122775],{},[20228,122776,122777,122780],{},[20231,122778,122779],{"align":43527},"坐标",[20231,122781,119263],{"align":43527},[20269,122783,122784,122794],{},[20228,122785,122786,122791],{},[20274,122787,122788,122789],{"align":43527},"XML 里的 ",[152,122790,122709],{},[20274,122792,122793],{"align":43527},"相对父 body 的局部坐标",[20228,122795,122796,122802],{},[20274,122797,122798,44770,122800],{"align":43527},[152,122799,119642],{},[152,122801,122555],{},[20274,122803,122804],{"align":43527},"仿真更新后的世界坐标",[24,122806,122807,122808,122810,122811,101102,122814,122816],{},"如果你修改了 ",[152,122809,119633],{},"，但还没调用 ",[152,122812,122813],{},"mj_forward",[152,122815,119778],{},"，世界坐标可能还没有更新。",[20037,122818,121170],{"id":121169},[24,122820,122821],{},"MJCF 建模先掌握四件事：",[28,122823,122824,122829,122834,122839],{},[31,122825,122826,122828],{},[152,122827,70363],{}," 表示刚体层级。",[31,122830,122831,122833],{},[152,122832,119683],{}," 表示形状、碰撞和质量。",[31,122835,122836,122838],{},[152,122837,121519],{}," 决定 body 能不能动、怎么动。",[31,122840,122841,122843],{},[152,122842,121773],{}," 用来标记关键点，方便 Python 读取位置。",[24,122845,122846],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[20011,122848,122849],{},"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":39,"searchDepth":46,"depth":46,"links":122851},[122852,122853,122854,122860,122864,122865,122866,122873],{"id":119209,"depth":46,"text":119210},{"id":119332,"depth":46,"text":119333},{"id":119607,"depth":46,"text":119608,"children":122855},[122856,122857,122858,122859],{"id":121523,"depth":121,"text":121523},{"id":121637,"depth":121,"text":121637},{"id":121663,"depth":121,"text":121664},{"id":121767,"depth":121,"text":121768},{"id":119815,"depth":46,"text":119816,"children":122861},[122862,122863],{"id":120135,"depth":121,"text":120135},{"id":120271,"depth":121,"text":120271},{"id":120878,"depth":46,"text":120879},{"id":120910,"depth":46,"text":120911},{"id":121015,"depth":46,"text":121016,"children":122867},[122868,122869,122871,122872],{"id":122721,"depth":121,"text":122724},{"id":122730,"depth":121,"text":122870},"mj_name2id 返回 -1",{"id":122744,"depth":121,"text":122744},{"id":122767,"depth":121,"text":122767},{"id":121169,"depth":46,"text":121170},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":121217,"description":39},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":122880,"title":122881,"body":122882,"description":39,"extension":20021,"meta":124377,"navigation":216,"path":124378,"seo":124379,"stem":124380,"__hash__":124381},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":122883,"toc":124349},[122884,122887,122889,122892,122895,122933,122936,122942,122945,122947,122949,122976,122978,122992,122994,123035,123037,123061,123063,123066,123075,123084,123087,123096,123104,123113,123116,123126,123129,123181,123188,123194,123202,123250,123253,123272,123275,123283,123287,123296,123329,123331,123679,123681,123693,123695,123706,123708,123711,123732,123738,123741,123766,123776,123779,123787,123790,123793,123814,123825,123827,123847,123850,123871,123880,123899,123905,123930,123933,123947,123954,123978,123981,123989,123998,124014,124026,124034,124043,124045,124048,124072,124077,124080,124102,124104,124143,124145,124152,124154,124162,124165,124168,124180,124221,124228,124239,124246,124249,124298,124301,124304,124310,124312,124317,124343,124346],[10,122885,122881],{"id":122886},"_3python-控制接口读取状态与推进仿真",[20037,122888,119210],{"id":119209},[24,122890,122891],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[24,122893,122894],{},"你将学习:",[28,122896,122897,122902,122907,122911,122916,122927],{},[31,122898,122899],{},[152,122900,122901],{},"MjModel.from_xml_string",[31,122903,122904],{},[152,122905,122906],{},"MjData(model)",[31,122908,122909],{},[152,122910,119778],{},[31,122912,122913],{},[152,122914,122915],{},"mj_resetData",[31,122917,122918,122919,20293,122921,20293,122924],{},"读取 ",[152,122920,122593],{},[152,122922,122923],{},"qvel",[152,122925,122926],{},"ctrl",[31,122928,122929,122930],{},"使用 ",[152,122931,122932],{},"model.opt.timestep",[24,122934,122935],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[146,122937,122940],{"className":122938,"code":122939,"language":25051,"meta":39},[25049],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[152,122941,122939],{"__ignoreMap":39},[24,122943,122944],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[20037,122946,119333],{"id":119332},[24,122948,119336],{},[146,122950,122952],{"className":43613,"code":122951,"language":43615,"meta":39,"style":39},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[152,122953,122954],{"__ignoreMap":39},[155,122955,122956,122958,122960,122962,122964,122967,122969,122971,122973],{"class":157,"line":158},[155,122957,44368],{"class":226},[155,122959,46104],{"class":732},[155,122961,43625],{"class":732},[155,122963,46189],{"class":263},[155,122965,122966],{"class":732}," python3",[155,122968,119361],{"class":732},[155,122970,121064],{"class":732},[155,122972,119377],{"class":732},[155,122974,122975],{"class":732}," glfw\n",[24,122977,121382],{},[146,122979,122980],{"className":43613,"code":119482,"language":43615,"meta":39,"style":39},[152,122981,122982],{"__ignoreMap":39},[155,122983,122984,122986,122988,122990],{"class":157,"line":158},[155,122985,43622],{"class":226},[155,122987,43625],{"class":732},[155,122989,119493],{"class":732},[155,122991,119496],{"class":732},[24,122993,121399],{},[146,122995,122997],{"className":43613,"code":122996,"language":43615,"meta":39,"style":39},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[152,122998,122999,123016,123025],{"__ignoreMap":39},[155,123000,123001,123003,123005,123007,123010,123012,123014],{"class":157,"line":158},[155,123002,50119],{"class":226},[155,123004,48965],{"class":732},[155,123006,44907],{"class":263},[155,123008,123009],{"class":732}," mujoco-python-api",[155,123011,119538],{"class":732},[155,123013,119541],{"class":263},[155,123015,119544],{"class":263},[155,123017,123018,123020,123022],{"class":157,"line":46},[155,123019,50119],{"class":226},[155,123021,119551],{"class":732},[155,123023,123024],{"class":732}," mujoco-python-api\n",[155,123026,123027,123029,123031,123033],{"class":157,"line":121},[155,123028,43622],{"class":226},[155,123030,43625],{"class":732},[155,123032,119493],{"class":732},[155,123034,119496],{"class":732},[24,123036,119567],{},[28,123038,123039,123046,123055],{},[31,123040,123041,119581,123043,123045],{},[152,123042,119238],{},[152,123044,119243],{}," 是官方 Python bindings 的类名。",[31,123047,123048,123049,123052,123053,48174],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[152,123050,123051],{},"mjModel"," 在 Python 中是 ",[152,123054,119272],{},[31,123056,123057,123058,48174],{},"不要使用 ",[152,123059,123060],{},"sim = mujoco_py.MjSim(...)",[20037,123062,119608],{"id":119607},[24,123064,123065],{},"仿真推进核心代码:",[146,123067,123069],{"className":148,"code":123068,"language":150,"meta":39,"style":39},"mujoco.mj_step(model, data)\n",[152,123070,123071],{"__ignoreMap":39},[155,123072,123073],{"class":157,"line":158},[155,123074,123068],{"class":171},[24,123076,123077,123078,20293,123080,20293,123082,48174],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[152,123079,119633],{},[152,123081,119636],{},[152,123083,119630],{},[24,123085,123086],{},"重置仿真:",[146,123088,123090],{"className":148,"code":123089,"language":150,"meta":39,"style":39},"mujoco.mj_resetData(model, data)\n",[152,123091,123092],{"__ignoreMap":39},[155,123093,123094],{"class":157,"line":158},[155,123095,123089],{"class":171},[24,123097,123098,123099,101102,123101,123103],{},"如果手动修改了 ",[152,123100,119633],{},[152,123102,119636],{},"，通常应调用:",[146,123105,123107],{"className":148,"code":123106,"language":150,"meta":39,"style":39},"mujoco.mj_forward(model, data)\n",[152,123108,123109],{"__ignoreMap":39},[155,123110,123111],{"class":157,"line":158},[155,123112,123106],{"class":171},[24,123114,123115],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[14,123117,123119,20293,123121,20293,123123,123125],{"id":123118},"qposqvelctrl-是什么",[152,123120,122593],{},[152,123122,122923],{},[152,123124,122926],{}," 是什么",[24,123127,123128],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[20222,123130,123131,123143],{},[20225,123132,123133],{},[20228,123134,123135,123138,123140],{},[20231,123136,123137],{"align":43527},"字段",[20231,123139,119263],{"align":43527},[20231,123141,123142],{"align":43527},"谁来修改",[20269,123144,123145,123157,123169],{},[20228,123146,123147,123151,123154],{},[20274,123148,123149],{"align":43527},[152,123150,119633],{},[20274,123152,123153],{"align":43527},"广义位置，例如小车位置、关节角、自由物体位置姿态",[20274,123155,123156],{"align":43527},"MuJoCo 更新，也可以手动设置初始状态",[20228,123158,123159,123163,123166],{},[20274,123160,123161],{"align":43527},[152,123162,119636],{},[20274,123164,123165],{"align":43527},"广义速度，例如小车速度、关节角速度",[20274,123167,123168],{"align":43527},"MuJoCo 更新，也可以手动清零",[20228,123170,123171,123175,123178],{},[20274,123172,123173],{"align":43527},[152,123174,119639],{},[20274,123176,123177],{"align":43527},"actuator 的控制输入",[20274,123179,123180],{"align":43527},"主要由你的控制代码写入",[24,123182,28874,123183,119581,123185,123187],{},[152,123184,122593],{},[152,123186,122923],{}," 不一定同维。自由刚体就是典型例子：",[146,123189,123192],{"className":123190,"code":123191,"language":25051,"meta":39},[25049],"freejoint: qpos 7 维，qvel 6 维\n",[152,123193,123191],{"__ignoreMap":39},[14,123195,123197,119581,123199,123201],{"id":123196},"mj_step-和-mj_forward-的区别",[152,123198,119778],{},[152,123200,122813],{}," 的区别",[20222,123203,123204,123217],{},[20225,123205,123206],{},[20228,123207,123208,123211,123214],{},[20231,123209,123210],{"align":43527},"函数",[20231,123212,123213],{"align":43527},"是否推进时间",[20231,123215,123216],{"align":43527},"什么时候用",[20269,123218,123219,123232],{},[20228,123220,123221,123226,123229],{},[20274,123222,123223],{"align":43527},[152,123224,123225],{},"mj_step(model, data)",[20274,123227,123228],{"align":43527},"是",[20274,123230,123231],{"align":43527},"正常仿真循环，每调用一次前进一步",[20228,123233,123234,123239,123242],{},[20274,123235,123236],{"align":43527},[152,123237,123238],{},"mj_forward(model, data)",[20274,123240,123241],{"align":43527},"否",[20274,123243,123244,123245,20293,123247,123249],{"align":43527},"手动改了 ",[152,123246,122593],{},[152,123248,122923],{}," 后，刷新派生量",[24,123251,123252],{},"例如你写：",[146,123254,123256],{"className":148,"code":123255,"language":150,"meta":39,"style":39},"data.qpos[2] = 2.0\n",[152,123257,123258],{"__ignoreMap":39},[155,123259,123260,123263,123265,123267,123269],{"class":157,"line":158},[155,123261,123262],{"class":171},"data.qpos[",[155,123264,360],{"class":263},[155,123266,24309],{"class":171},[155,123268,317],{"class":167},[155,123270,123271],{"class":263}," 2.0\n",[24,123273,123274],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[146,123276,123277],{"className":148,"code":123106,"language":150,"meta":39,"style":39},[152,123278,123279],{"__ignoreMap":39},[155,123280,123281],{"class":157,"line":158},[155,123282,123106],{"class":171},[14,123284,123286],{"id":123285},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[24,123288,123289,123292,123293,123295],{},[152,123290,123291],{},"mujoco.mj_resetData(model, data)"," 会把 ",[152,123294,3003],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[146,123297,123299],{"className":148,"code":123298,"language":150,"meta":39,"style":39},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[152,123300,123301,123305,123315,123325],{"__ignoreMap":39},[155,123302,123303],{"class":157,"line":158},[155,123304,123089],{"class":171},[155,123306,123307,123310,123312],{"class":157,"line":46},[155,123308,123309],{"class":171},"data.qpos[:] ",[155,123311,317],{"class":167},[155,123313,123314],{"class":171}," random_qpos\n",[155,123316,123317,123320,123322],{"class":157,"line":121},[155,123318,123319],{"class":171},"data.qvel[:] ",[155,123321,317],{"class":167},[155,123323,123324],{"class":263}," 0.0\n",[155,123326,123327],{"class":157,"line":180},[155,123328,123106],{"class":171},[20037,123330,119816],{"id":119815},[146,123332,123334],{"className":148,"code":123333,"language":150,"meta":39,"style":39},"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",[152,123335,123336,123342,123352,123356,123360,123368,123373,123377,123381,123385,123390,123394,123399,123404,123409,123413,123417,123421,123425,123429,123433,123452,123459,123471,123482,123498,123514,123518,123522,123534,123546,123554,123558,123569,123573,123589,123593,123597,123606,123610,123615,123624,123628,123641,123646,123655,123659,123663,123675],{"__ignoreMap":39},[155,123337,123338,123340],{"class":157,"line":158},[155,123339,168],{"class":167},[155,123341,119864],{"class":171},[155,123343,123344,123346,123348,123350],{"class":157,"line":46},[155,123345,168],{"class":167},[155,123347,904],{"class":171},[155,123349,907],{"class":167},[155,123351,910],{"class":171},[155,123353,123354],{"class":157,"line":121},[155,123355,217],{"emptyLinePlaceholder":216},[155,123357,123358],{"class":157,"line":180},[155,123359,217],{"emptyLinePlaceholder":216},[155,123361,123362,123364,123366],{"class":157,"line":194},[155,123363,119877],{"class":263},[155,123365,33391],{"class":167},[155,123367,119882],{"class":732},[155,123369,123370],{"class":157,"line":200},[155,123371,123372],{"class":732},"\u003Cmujoco model=\"state_api\">\n",[155,123374,123375],{"class":157,"line":213},[155,123376,119892],{"class":732},[155,123378,123379],{"class":157,"line":220},[155,123380,217],{"emptyLinePlaceholder":216},[155,123382,123383],{"class":157,"line":245},[155,123384,119901],{"class":732},[155,123386,123387],{"class":157,"line":251},[155,123388,123389],{"class":732},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[155,123391,123392],{"class":157,"line":257},[155,123393,217],{"emptyLinePlaceholder":216},[155,123395,123396],{"class":157,"line":270},[155,123397,123398],{"class":732},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[155,123400,123401],{"class":157,"line":276},[155,123402,123403],{"class":732},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[155,123405,123406],{"class":157,"line":297},[155,123407,123408],{"class":732},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[155,123410,123411],{"class":157,"line":302},[155,123412,119930],{"class":732},[155,123414,123415],{"class":157,"line":308},[155,123416,119935],{"class":732},[155,123418,123419],{"class":157,"line":366},[155,123420,119940],{"class":732},[155,123422,123423],{"class":157,"line":379},[155,123424,114261],{"class":732},[155,123426,123427],{"class":157,"line":385},[155,123428,217],{"emptyLinePlaceholder":216},[155,123430,123431],{"class":157,"line":415},[155,123432,217],{"emptyLinePlaceholder":216},[155,123434,123435,123437,123440,123443,123445,123448,123450],{"class":157,"line":452},[155,123436,1484],{"class":167},[155,123438,123439],{"class":226}," print_state",[155,123441,123442],{"class":171},"(prefix: ",[155,123444,21215],{"class":263},[155,123446,123447],{"class":171},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[155,123449,114249],{"class":263},[155,123451,736],{"class":171},[155,123453,123454,123456],{"class":157,"line":480},[155,123455,822],{"class":263},[155,123457,123458],{"class":171},"(prefix)\n",[155,123460,123461,123463,123465,123468],{"class":157,"line":486},[155,123462,822],{"class":263},[155,123464,230],{"class":171},[155,123466,123467],{"class":732},"\"  timestep:\"",[155,123469,123470],{"class":171},", model.opt.timestep)\n",[155,123472,123473,123475,123477,123480],{"class":157,"line":499},[155,123474,822],{"class":263},[155,123476,230],{"class":171},[155,123478,123479],{"class":732},"\"  time:\"",[155,123481,120041],{"class":171},[155,123483,123484,123486,123488,123491,123494,123496],{"class":157,"line":505},[155,123485,822],{"class":263},[155,123487,230],{"class":171},[155,123489,123490],{"class":732},"\"  qpos:\"",[155,123492,123493],{"class":171},", np.round(data.qpos.copy(), ",[155,123495,1264],{"class":263},[155,123497,1238],{"class":171},[155,123499,123500,123502,123504,123507,123510,123512],{"class":157,"line":528},[155,123501,822],{"class":263},[155,123503,230],{"class":171},[155,123505,123506],{"class":732},"\"  qvel:\"",[155,123508,123509],{"class":171},", np.round(data.qvel.copy(), ",[155,123511,1264],{"class":263},[155,123513,1238],{"class":171},[155,123515,123516],{"class":157,"line":549},[155,123517,217],{"emptyLinePlaceholder":216},[155,123519,123520],{"class":157,"line":570},[155,123521,217],{"emptyLinePlaceholder":216},[155,123523,123524,123526,123528,123530,123532],{"class":157,"line":575},[155,123525,1484],{"class":167},[155,123527,21861],{"class":226},[155,123529,119961],{"class":171},[155,123531,114249],{"class":263},[155,123533,736],{"class":171},[155,123535,123536,123538,123540,123542,123544],{"class":157,"line":581},[155,123537,119970],{"class":171},[155,123539,317],{"class":167},[155,123541,119975],{"class":171},[155,123543,119877],{"class":263},[155,123545,363],{"class":171},[155,123547,123548,123550,123552],{"class":157,"line":592},[155,123549,119984],{"class":171},[155,123551,317],{"class":167},[155,123553,119989],{"class":171},[155,123555,123556],{"class":157,"line":610},[155,123557,217],{"emptyLinePlaceholder":216},[155,123559,123560,123563,123566],{"class":157,"line":622},[155,123561,123562],{"class":171},"    print_state(",[155,123564,123565],{"class":732},"\"initial\"",[155,123567,123568],{"class":171},", model, data)\n",[155,123570,123571],{"class":157,"line":638},[155,123572,217],{"emptyLinePlaceholder":216},[155,123574,123575,123577,123579,123581,123583,123585,123587],{"class":157,"line":650},[155,123576,2000],{"class":167},[155,123578,120064],{"class":171},[155,123580,1131],{"class":167},[155,123582,2008],{"class":263},[155,123584,230],{"class":171},[155,123586,20715],{"class":263},[155,123588,242],{"class":171},[155,123590,123591],{"class":157,"line":662},[155,123592,120079],{"class":171},[155,123594,123595],{"class":157,"line":678},[155,123596,217],{"emptyLinePlaceholder":216},[155,123598,123599,123601,123604],{"class":157,"line":694},[155,123600,123562],{"class":171},[155,123602,123603],{"class":732},"\"after 50 steps\"",[155,123605,123568],{"class":171},[155,123607,123608],{"class":157,"line":706},[155,123609,217],{"emptyLinePlaceholder":216},[155,123611,123612],{"class":157,"line":715},[155,123613,123614],{"class":171},"    mujoco.mj_resetData(model, data)\n",[155,123616,123617,123619,123622],{"class":157,"line":720},[155,123618,123562],{"class":171},[155,123620,123621],{"class":732},"\"after reset\"",[155,123623,123568],{"class":171},[155,123625,123626],{"class":157,"line":739},[155,123627,217],{"emptyLinePlaceholder":216},[155,123629,123630,123633,123635,123637,123639],{"class":157,"line":745},[155,123631,123632],{"class":171},"    data.qpos[",[155,123634,360],{"class":263},[155,123636,24309],{"class":171},[155,123638,317],{"class":167},[155,123640,123271],{"class":263},[155,123642,123643],{"class":157,"line":773},[155,123644,123645],{"class":171},"    mujoco.mj_forward(model, data)\n",[155,123647,123648,123650,123653],{"class":157,"line":779},[155,123649,123562],{"class":171},[155,123651,123652],{"class":732},"\"after manual qpos edit\"",[155,123654,123568],{"class":171},[155,123656,123657],{"class":157,"line":785},[155,123658,217],{"emptyLinePlaceholder":216},[155,123660,123661],{"class":157,"line":791},[155,123662,217],{"emptyLinePlaceholder":216},[155,123664,123665,123667,123669,123671,123673],{"class":157,"line":796},[155,123666,723],{"class":167},[155,123668,726],{"class":263},[155,123670,120122],{"class":167},[155,123672,120125],{"class":732},[155,123674,736],{"class":171},[155,123676,123677],{"class":157,"line":802},[155,123678,120132],{"class":171},[24,123680,122133],{},[146,123682,123684],{"className":43613,"code":123683,"language":43615,"meta":39,"style":39},"touch ch3_python_state.py\n",[152,123685,123686],{"__ignoreMap":39},[155,123687,123688,123690],{"class":157,"line":158},[155,123689,119846],{"class":226},[155,123691,123692],{"class":732}," ch3_python_state.py\n",[24,123694,120864],{},[146,123696,123698],{"className":43613,"code":123697,"language":43615,"meta":39,"style":39},"python ch3_python_state.py\n",[152,123699,123700],{"__ignoreMap":39},[155,123701,123702,123704],{"class":157,"line":158},[155,123703,150],{"class":226},[155,123705,123692],{"class":732},[14,123707,120135],{"id":120135},[24,123709,123710],{},"打印状态的函数：",[146,123712,123714],{"className":148,"code":123713,"language":150,"meta":39,"style":39},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[152,123715,123716],{"__ignoreMap":39},[155,123717,123718,123720,123722,123724,123726,123728,123730],{"class":157,"line":158},[155,123719,1484],{"class":167},[155,123721,123439],{"class":226},[155,123723,123442],{"class":171},[155,123725,21215],{"class":263},[155,123727,123447],{"class":171},[155,123729,114249],{"class":263},[155,123731,736],{"class":171},[24,123733,123734,123735,123737],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[152,123736,3003],{}," 里发生了什么。",[24,123739,123740],{},"推进 50 步：",[146,123742,123744],{"className":148,"code":123743,"language":150,"meta":39,"style":39},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[152,123745,123746,123762],{"__ignoreMap":39},[155,123747,123748,123750,123752,123754,123756,123758,123760],{"class":157,"line":158},[155,123749,1125],{"class":167},[155,123751,120064],{"class":171},[155,123753,1131],{"class":167},[155,123755,2008],{"class":263},[155,123757,230],{"class":171},[155,123759,20715],{"class":263},[155,123761,242],{"class":171},[155,123763,123764],{"class":157,"line":46},[155,123765,120262],{"class":171},[24,123767,123768,123769,123772,123773,123775],{},"由于 ",[152,123770,123771],{},"timestep=0.01","，所以 50 步后时间约为 ",[152,123774,4938],{}," 秒。",[24,123777,123778],{},"重置：",[146,123780,123781],{"className":148,"code":123089,"language":150,"meta":39,"style":39},[152,123782,123783],{"__ignoreMap":39},[155,123784,123785],{"class":157,"line":158},[155,123786,123089],{"class":171},[24,123788,123789],{},"这会把时间、位置、速度恢复到初始状态。",[24,123791,123792],{},"手动改高度：",[146,123794,123796],{"className":148,"code":123795,"language":150,"meta":39,"style":39},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[152,123797,123798,123810],{"__ignoreMap":39},[155,123799,123800,123802,123804,123806,123808],{"class":157,"line":158},[155,123801,123262],{"class":171},[155,123803,360],{"class":263},[155,123805,24309],{"class":171},[155,123807,317],{"class":167},[155,123809,123271],{"class":263},[155,123811,123812],{"class":157,"line":46},[155,123813,123106],{"class":171},[24,123815,123816,123817,123820,123821,123824],{},"这个例子里 ",[152,123818,123819],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[152,123822,123823],{},"2.0"," 表示把小球放到更高的位置。",[14,123826,120271],{"id":120271},[146,123828,123829],{"className":148,"code":123713,"language":150,"meta":39,"style":39},[152,123830,123831],{"__ignoreMap":39},[155,123832,123833,123835,123837,123839,123841,123843,123845],{"class":157,"line":158},[155,123834,1484],{"class":167},[155,123836,123439],{"class":226},[155,123838,123442],{"class":171},[155,123840,21215],{"class":263},[155,123842,123447],{"class":171},[155,123844,114249],{"class":263},[155,123846,736],{"class":171},[24,123848,123849],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[28,123851,123852,123861,123866],{},[31,123853,123854,123857,123858,123860],{},[152,123855,123856],{},"prefix","：一段文字，比如 ",[152,123859,123565],{},"，用来说明现在打印的是哪个阶段。",[31,123862,123863,123865],{},[152,123864,120648],{},"：MuJoCo 模型。",[31,123867,123868,123870],{},[152,123869,3003],{},"：MuJoCo 当前状态。",[24,123872,123873,20293,123876,123879],{},[152,123874,123875],{},"prefix: str",[152,123877,123878],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[146,123881,123883],{"className":148,"code":123882,"language":150,"meta":39,"style":39},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[152,123884,123885],{"__ignoreMap":39},[155,123886,123887,123889,123891,123893,123895,123897],{"class":157,"line":158},[155,123888,15451],{"class":263},[155,123890,230],{"class":171},[155,123892,123490],{"class":732},[155,123894,123493],{"class":171},[155,123896,1264],{"class":263},[155,123898,1238],{"class":171},[24,123900,123901,123904],{},[152,123902,123903],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[146,123906,123908],{"className":148,"code":123907,"language":150,"meta":39,"style":39},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[152,123909,123910,123922],{"__ignoreMap":39},[155,123911,123912,123914,123916,123918,123920],{"class":157,"line":158},[155,123913,120197],{"class":171},[155,123915,317],{"class":167},[155,123917,119975],{"class":171},[155,123919,119877],{"class":263},[155,123921,363],{"class":171},[155,123923,123924,123926,123928],{"class":157,"line":46},[155,123925,120221],{"class":171},[155,123927,317],{"class":167},[155,123929,119989],{"class":171},[24,123931,123932],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[146,123934,123936],{"className":148,"code":123935,"language":150,"meta":39,"style":39},"print_state(\"initial\", model, data)\n",[152,123937,123938],{"__ignoreMap":39},[155,123939,123940,123943,123945],{"class":157,"line":158},[155,123941,123942],{"class":171},"print_state(",[155,123944,123565],{"class":732},[155,123946,123568],{"class":171},[24,123948,123949,123950,123953],{},"调用刚才定义的 ",[152,123951,123952],{},"print_state"," 函数，打印初始状态。",[146,123955,123956],{"className":148,"code":123743,"language":150,"meta":39,"style":39},[152,123957,123958,123974],{"__ignoreMap":39},[155,123959,123960,123962,123964,123966,123968,123970,123972],{"class":157,"line":158},[155,123961,1125],{"class":167},[155,123963,120064],{"class":171},[155,123965,1131],{"class":167},[155,123967,2008],{"class":263},[155,123969,230],{"class":171},[155,123971,20715],{"class":263},[155,123973,242],{"class":171},[155,123975,123976],{"class":157,"line":46},[155,123977,120262],{"class":171},[24,123979,123980],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[146,123982,123983],{"className":148,"code":123089,"language":150,"meta":39,"style":39},[152,123984,123985],{"__ignoreMap":39},[155,123986,123987],{"class":157,"line":158},[155,123988,123089],{"class":171},[24,123990,123991,123992,123994,123995,123997],{},"重置 ",[152,123993,3003],{},"。注意它不会重新创建 ",[152,123996,120648],{},"，因为模型结构没有变，只是状态回到初始值。",[146,123999,124000],{"className":148,"code":123255,"language":150,"meta":39,"style":39},[152,124001,124002],{"__ignoreMap":39},[155,124003,124004,124006,124008,124010,124012],{"class":157,"line":158},[155,124005,123262],{"class":171},[155,124007,360],{"class":263},[155,124009,24309],{"class":171},[155,124011,317],{"class":167},[155,124013,123271],{"class":263},[24,124015,124016,124017,20293,124020,20293,124023,124025],{},"这行是“手动改状态”。在 freejoint 中，",[152,124018,124019],{},"qpos[0]",[152,124021,124022],{},"qpos[1]",[152,124024,123819],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[146,124027,124028],{"className":148,"code":123106,"language":150,"meta":39,"style":39},[152,124029,124030],{"__ignoreMap":39},[155,124031,124032],{"class":157,"line":158},[155,124033,123106],{"class":171},[24,124035,124036,124037,124039,124040,124042],{},"手动改完 ",[152,124038,122593],{}," 后，调用 ",[152,124041,122813],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[20037,124044,120879],{"id":120878},[24,124046,124047],{},"你会看到:",[28,124049,124050,124055,124060,124063],{},[31,124051,124052,124053],{},"初始时间为 ",[152,124054,1109],{},[31,124056,124057,124058],{},"50 步后时间约为 ",[152,124059,4938],{},[31,124061,124062],{},"reset 后状态恢复",[31,124064,124065,124066,124069,124070],{},"手动修改 ",[152,124067,124068],{},"data.qpos[2]"," 后，小球高度变为 ",[152,124071,123823],{},[24,124073,124074,124076],{},[152,124075,123819],{}," 在这个例子中表示自由刚体的 z 坐标。",[24,124078,124079],{},"输出里可以重点看三件事：",[28,124081,124082,124090,124095],{},[31,124083,124084,124086,124087,124089],{},[152,124085,22274],{}," 是否随着 ",[152,124088,119778],{}," 增加。",[31,124091,124092,124094],{},[152,124093,122593],{}," 的 z 坐标是否因为下落而变化。",[31,124096,124097,124099,124100,48174],{},[152,124098,122915],{}," 后时间是否回到 ",[152,124101,1109],{},[20037,124103,120911],{"id":120910},[28,124105,124106,124112,124118,124124,124127,124136],{},[31,124107,124108,124109,48174],{},"修改 timestep 为 ",[152,124110,124111],{},"0.005",[31,124113,124114,124115,48174],{},"重新运行，检查 50 步后时间是否约为 ",[152,124116,124117],{},"0.25",[31,124119,124120,124121,48174],{},"修改重力为 ",[152,124122,124123],{},"0 0 -1.0",[31,124125,124126],{},"观察小球下降速度是否变慢。",[31,124128,120974,124129,120977,124132,124135],{},[152,124130,124131],{},"data.qpos[2] = 2.0",[152,124133,124134],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[31,124137,124138,124139,124142],{},"注释掉 ",[152,124140,124141],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[20037,124144,121016],{"id":121015},[14,124146,124148,124149,124151],{"id":124147},"修改-dataqpos-后位置没有更新","修改 ",[152,124150,119633],{}," 后位置没有更新",[24,124153,121025],{},[146,124155,124156],{"className":148,"code":123106,"language":150,"meta":39,"style":39},[152,124157,124158],{"__ignoreMap":39},[155,124159,124160],{"class":157,"line":158},[155,124161,123106],{"class":171},[14,124163,124164],{"id":124164},"数组维度看不懂",[24,124166,124167],{},"打印模型维度:",[146,124169,124171],{"className":148,"code":124170,"language":150,"meta":39,"style":39},"print(model.nq, model.nv, model.nu)\n",[152,124172,124173],{"__ignoreMap":39},[155,124174,124175,124177],{"class":157,"line":158},[155,124176,15451],{"class":263},[155,124178,124179],{"class":171},"(model.nq, model.nv, model.nu)\n",[20222,124181,124182,124190],{},[20225,124183,124184],{},[20228,124185,124186,124188],{},[20231,124187,123137],{"align":43527},[20231,124189,119263],{"align":43527},[20269,124191,124192,124202,124212],{},[20228,124193,124194,124199],{},[20274,124195,124196],{"align":43527},[152,124197,124198],{},"nq",[20274,124200,124201],{"align":43527},"位置变量数量",[20228,124203,124204,124209],{},[20274,124205,124206],{"align":43527},[152,124207,124208],{},"nv",[20274,124210,124211],{"align":43527},"速度变量数量",[20228,124213,124214,124218],{},[20274,124215,124216],{"align":43527},[152,124217,120725],{},[20274,124219,124220],{"align":43527},"控制输入数量",[14,124222,124224,124225,124227],{"id":124223},"误以为-qpos-一定等于关节数","误以为 ",[152,124226,122593],{}," 一定等于关节数",[24,124229,124230,124231,101093,124233,124235,124236,124238],{},"不是。例如 ",[152,124232,120183],{},[152,124234,122593],{}," 是 7 维，但 ",[152,124237,122923],{}," 是 6 维。",[14,124240,124242,124243,124245],{"id":124241},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[152,124244,122593],{}," 的第几位",[24,124247,124248],{},"初学时可以先打印：",[146,124250,124252],{"className":148,"code":124251,"language":150,"meta":39,"style":39},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[152,124253,124254,124264,124274,124286],{"__ignoreMap":39},[155,124255,124256,124258,124260,124262],{"class":157,"line":158},[155,124257,15451],{"class":263},[155,124259,230],{"class":171},[155,124261,120002],{"class":732},[155,124263,120005],{"class":171},[155,124265,124266,124268,124270,124272],{"class":157,"line":46},[155,124267,15451],{"class":263},[155,124269,230],{"class":171},[155,124271,120014],{"class":732},[155,124273,120017],{"class":171},[155,124275,124276,124278,124280,124283],{"class":157,"line":121},[155,124277,15451],{"class":263},[155,124279,230],{"class":171},[155,124281,124282],{"class":732},"\"qpos:\"",[155,124284,124285],{"class":171},", data.qpos)\n",[155,124287,124288,124290,124292,124295],{"class":157,"line":180},[155,124289,15451],{"class":263},[155,124291,230],{"class":171},[155,124293,124294],{"class":732},"\"qvel:\"",[155,124296,124297],{"class":171},", data.qvel)\n",[24,124299,124300],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[14,124302,124303],{"id":124303},"仿真结果每次都一样",[24,124305,124306,124307,124309],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[152,124308,122593],{},"、目标点或控制输入。",[20037,124311,121170],{"id":121169},[24,124313,124314,124315,44410],{},"Python 控制 MuJoCo 的核心就是读写 ",[152,124316,3003],{},[28,124318,124319,124327,124332,124337],{},[31,124320,124321,124322,119581,124324,124326],{},"用 ",[152,124323,119633],{},[152,124325,119636],{}," 读取状态。",[31,124328,124321,124329,124331],{},[152,124330,119639],{}," 写入控制。",[31,124333,124321,124334,124336],{},[152,124335,119778],{}," 推进时间。",[31,124338,124339,124340,124342],{},"手动改状态后用 ",[152,124341,122813],{}," 刷新派生量。",[24,124344,124345],{},"理解这一章后，就可以进入关节和 actuator 控制。",[20011,124347,124348],{},"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":39,"searchDepth":46,"depth":46,"links":124350},[124351,124352,124353,124360,124364,124365,124366,124376],{"id":119209,"depth":46,"text":119210},{"id":119332,"depth":46,"text":119333},{"id":119607,"depth":46,"text":119608,"children":124354},[124355,124357,124359],{"id":123118,"depth":121,"text":124356},"qpos、qvel、ctrl 是什么",{"id":123196,"depth":121,"text":124358},"mj_step 和 mj_forward 的区别",{"id":123285,"depth":121,"text":123286},{"id":119815,"depth":46,"text":119816,"children":124361},[124362,124363],{"id":120135,"depth":121,"text":120135},{"id":120271,"depth":121,"text":120271},{"id":120878,"depth":46,"text":120879},{"id":120910,"depth":46,"text":120911},{"id":121015,"depth":46,"text":121016,"children":124367},[124368,124370,124371,124373,124375],{"id":124147,"depth":121,"text":124369},"修改 data.qpos 后位置没有更新",{"id":124164,"depth":121,"text":124164},{"id":124223,"depth":121,"text":124372},"误以为 qpos 一定等于关节数",{"id":124241,"depth":121,"text":124374},"不知道某个元素在 qpos 的第几位",{"id":124303,"depth":121,"text":124303},{"id":121169,"depth":46,"text":121170},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":122881,"description":39},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":124383,"title":124384,"body":124385,"description":39,"extension":20021,"meta":126075,"navigation":216,"path":126076,"seo":126077,"stem":126078,"__hash__":126079},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":124386,"toc":126051},[124387,124390,124392,124395,124397,124422,124425,124444,124447,124449,124451,124475,124477,124491,124493,124534,124536,124560,124562,124565,124599,124601,124614,124617,124685,124694,124698,124701,124735,124741,124744,124748,124787,124790,124810,124814,124857,124859,124888,124891,124897,124900,124902,125296,125298,125310,125312,125323,125325,125328,125357,125365,125368,125403,125406,125408,125416,125419,125421,125432,125442,125462,125465,125501,125513,125561,125580,125622,125635,125663,125668,125689,125699,125717,125720,125754,125757,125777,125780,125799,125805,125807,125810,125816,125822,125832,125835,125841,125850,125852,125898,125900,125906,125912,125915,125918,125938,125941,125947,125953,125955,125978,125981,125984,125993,125996,126034,126036,126039,126045,126048],[10,124388,124384],{"id":124389},"_4关节actuator-与力控制",[20037,124391,119210],{"id":119209},[24,124393,124394],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[24,124396,122894],{},[28,124398,124399,124405,124410,124414,124419],{},[31,124400,124401,124404],{},[152,124402,124403],{},"hinge"," 关节",[31,124406,124407],{},[152,124408,124409],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[31,124411,124412],{},[152,124413,119639],{},[31,124415,124416],{},[152,124417,124418],{},"ctrlrange",[31,124420,124421],{},"读取关节角和角速度",[24,124423,124424],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[146,124426,124428],{"className":148,"code":124427,"language":150,"meta":39,"style":39},"data.ctrl[0] = ...\n",[152,124429,124430],{"__ignoreMap":39},[155,124431,124432,124435,124437,124439,124441],{"class":157,"line":158},[155,124433,124434],{"class":171},"data.ctrl[",[155,124436,1109],{"class":263},[155,124438,24309],{"class":171},[155,124440,317],{"class":167},[155,124442,124443],{"class":263}," ...\n",[24,124445,124446],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[20037,124448,119333],{"id":119332},[24,124450,119336],{},[146,124452,124453],{"className":43613,"code":122951,"language":43615,"meta":39,"style":39},[152,124454,124455],{"__ignoreMap":39},[155,124456,124457,124459,124461,124463,124465,124467,124469,124471,124473],{"class":157,"line":158},[155,124458,44368],{"class":226},[155,124460,46104],{"class":732},[155,124462,43625],{"class":732},[155,124464,46189],{"class":263},[155,124466,122966],{"class":732},[155,124468,119361],{"class":732},[155,124470,121064],{"class":732},[155,124472,119377],{"class":732},[155,124474,122975],{"class":732},[24,124476,121382],{},[146,124478,124479],{"className":43613,"code":119482,"language":43615,"meta":39,"style":39},[152,124480,124481],{"__ignoreMap":39},[155,124482,124483,124485,124487,124489],{"class":157,"line":158},[155,124484,43622],{"class":226},[155,124486,43625],{"class":732},[155,124488,119493],{"class":732},[155,124490,119496],{"class":732},[24,124492,121399],{},[146,124494,124496],{"className":43613,"code":124495,"language":43615,"meta":39,"style":39},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[152,124497,124498,124515,124524],{"__ignoreMap":39},[155,124499,124500,124502,124504,124506,124509,124511,124513],{"class":157,"line":158},[155,124501,50119],{"class":226},[155,124503,48965],{"class":732},[155,124505,44907],{"class":263},[155,124507,124508],{"class":732}," mujoco-control",[155,124510,119538],{"class":732},[155,124512,119541],{"class":263},[155,124514,119544],{"class":263},[155,124516,124517,124519,124521],{"class":157,"line":46},[155,124518,50119],{"class":226},[155,124520,119551],{"class":732},[155,124522,124523],{"class":732}," mujoco-control\n",[155,124525,124526,124528,124530,124532],{"class":157,"line":121},[155,124527,43622],{"class":226},[155,124529,43625],{"class":732},[155,124531,119493],{"class":732},[155,124533,119496],{"class":732},[24,124535,119567],{},[28,124537,124538,124544,124551,124557],{},[31,124539,124540,124543],{},[152,124541,124542],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[31,124545,124546,124548,124549,48174],{},[152,124547,119639],{}," 长度等于 ",[152,124550,120721],{},[31,124552,100785,124553,124556],{},[152,124554,124555],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[31,124558,124559],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[20037,124561,119608],{"id":119607},[24,124563,124564],{},"关节决定 body 如何运动:",[146,124566,124568],{"className":71630,"code":124567,"language":71632,"meta":39,"style":39},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[152,124569,124570],{"__ignoreMap":39},[155,124571,124572,124574,124576,124578,124580,124583,124585,124587,124589,124592,124594,124597],{"class":157,"line":158},[155,124573,20959],{"class":171},[155,124575,121519],{"class":69863},[155,124577,34745],{"class":226},[155,124579,317],{"class":171},[155,124581,124582],{"class":732},"\"hinge\"",[155,124584,72387],{"class":226},[155,124586,317],{"class":171},[155,124588,124582],{"class":732},[155,124590,124591],{"class":226}," axis",[155,124593,317],{"class":171},[155,124595,124596],{"class":732},"\"0 1 0\"",[155,124598,119707],{"class":171},[24,124600,121615],{},[28,124602,124603,124608,124611],{},[31,124604,124605,124606],{},"名字是 ",[152,124607,124403],{},[31,124609,124610],{},"类型是旋转关节",[31,124612,124613],{},"绕 y 轴旋转",[24,124615,124616],{},"actuator 决定如何施加控制:",[146,124618,124620],{"className":71630,"code":124619,"language":71632,"meta":39,"style":39},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[152,124621,124622,124631,124677],{"__ignoreMap":39},[155,124623,124624,124626,124629],{"class":157,"line":158},[155,124625,20959],{"class":171},[155,124627,124628],{"class":69863},"actuator",[155,124630,69870],{"class":171},[155,124632,124633,124635,124638,124640,124642,124645,124648,124650,124652,124655,124657,124659,124662,124664,124667,124670,124672,124675],{"class":157,"line":46},[155,124634,70707],{"class":171},[155,124636,124637],{"class":69863},"motor",[155,124639,34745],{"class":226},[155,124641,317],{"class":171},[155,124643,124644],{"class":732},"\"hinge_motor\"",[155,124646,124647],{"class":226}," joint",[155,124649,317],{"class":171},[155,124651,124582],{"class":732},[155,124653,124654],{"class":226}," gear",[155,124656,317],{"class":171},[155,124658,23548],{"class":732},[155,124660,124661],{"class":226}," ctrlrange",[155,124663,317],{"class":171},[155,124665,124666],{"class":732},"\"-2 2\"",[155,124668,124669],{"class":226}," ctrllimited",[155,124671,317],{"class":171},[155,124673,124674],{"class":732},"\"true\"",[155,124676,119707],{"class":171},[155,124678,124679,124681,124683],{"class":157,"line":121},[155,124680,70348],{"class":171},[155,124682,124628],{"class":69863},[155,124684,69870],{"class":171},[24,124686,124687,124690,124691,48174],{},[152,124688,124689],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[152,124692,124693],{},"[-2, 2]",[14,124695,124697],{"id":124696},"joint-和-actuator-的关系","joint 和 actuator 的关系",[24,124699,124700],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[20222,124702,124703,124713],{},[20225,124704,124705],{},[20228,124706,124707,124709,124711],{},[20231,124708,45543],{"align":43527},[20231,124710,121259],{"align":43527},[20231,124712,119297],{"align":43527},[20269,124714,124715,124725],{},[20228,124716,124717,124719,124722],{},[20274,124718,121519],{"align":43527},[20274,124720,124721],{"align":43527},"定义能怎么动",[20274,124723,124724],{"align":43527},"门轴允许门旋转",[20228,124726,124727,124729,124732],{},[20274,124728,124628],{"align":43527},[20274,124730,124731],{"align":43527},"定义怎么施力或控制",[20274,124733,124734],{"align":43527},"人推门、马达带动门",[24,124736,124737,124738,124740],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[152,124739,119639],{}," 主动控制它。",[24,124742,124743],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[14,124745,124747],{"id":124746},"hinge-joint","hinge joint",[146,124749,124751],{"className":71630,"code":124750,"language":71632,"meta":39,"style":39},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[152,124752,124753],{"__ignoreMap":39},[155,124754,124755,124757,124759,124761,124763,124765,124767,124769,124771,124773,124775,124777,124780,124782,124785],{"class":157,"line":158},[155,124756,20959],{"class":171},[155,124758,121519],{"class":69863},[155,124760,34745],{"class":226},[155,124762,317],{"class":171},[155,124764,124582],{"class":732},[155,124766,72387],{"class":226},[155,124768,317],{"class":171},[155,124770,124582],{"class":732},[155,124772,124591],{"class":226},[155,124774,317],{"class":171},[155,124776,124596],{"class":732},[155,124778,124779],{"class":226}," damping",[155,124781,317],{"class":171},[155,124783,124784],{"class":732},"\"0.1\"",[155,124786,119707],{"class":171},[24,124788,124789],{},"含义：",[28,124791,124792,124798,124804],{},[31,124793,124794,124797],{},[152,124795,124796],{},"type=\"hinge\"","：只能绕一个轴旋转。",[31,124799,124800,124803],{},[152,124801,124802],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[31,124805,124806,124809],{},[152,124807,124808],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[14,124811,124813],{"id":124812},"motor-actuator","motor actuator",[146,124815,124817],{"className":71630,"code":124816,"language":71632,"meta":39,"style":39},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[152,124818,124819],{"__ignoreMap":39},[155,124820,124821,124823,124825,124827,124829,124831,124833,124835,124837,124839,124841,124843,124845,124847,124849,124851,124853,124855],{"class":157,"line":158},[155,124822,20959],{"class":171},[155,124824,124637],{"class":69863},[155,124826,34745],{"class":226},[155,124828,317],{"class":171},[155,124830,124644],{"class":732},[155,124832,124647],{"class":226},[155,124834,317],{"class":171},[155,124836,124582],{"class":732},[155,124838,124654],{"class":226},[155,124840,317],{"class":171},[155,124842,23548],{"class":732},[155,124844,124661],{"class":226},[155,124846,317],{"class":171},[155,124848,124666],{"class":732},[155,124850,124669],{"class":226},[155,124852,317],{"class":171},[155,124854,124674],{"class":732},[155,124856,119707],{"class":171},[24,124858,124789],{},[28,124860,124861,124870,124876,124882],{},[31,124862,124863,124866,124867,124869],{},[152,124864,124865],{},"joint=\"hinge\"","：这个电机作用在名为 ",[152,124868,124403],{}," 的关节上。",[31,124871,124872,124875],{},[152,124873,124874],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[31,124877,124878,124881],{},[152,124879,124880],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[31,124883,124884,124887],{},[152,124885,124886],{},"ctrllimited=\"true\"","：启用控制范围限制。",[24,124889,124890],{},"简单理解：",[146,124892,124895],{"className":124893,"code":124894,"language":25051,"meta":39},[25049],"实际施加效果 ≈ data.ctrl[0] * gear\n",[152,124896,124894],{"__ignoreMap":39},[24,124898,124899],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[20037,124901,119816],{"id":119815},[146,124903,124905],{"className":148,"code":124904,"language":150,"meta":39,"style":39},"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",[152,124906,124907,124914,124918,124924,124934,124938,124942,124950,124955,124960,124964,124968,124973,124978,124982,124987,124992,124997,125002,125006,125010,125014,125019,125024,125029,125033,125037,125041,125045,125057,125069,125077,125081,125091,125101,125111,125115,125128,125141,125145,125162,125176,125211,125215,125219,125230,125245,125260,125272,125276,125280,125292],{"__ignoreMap":39},[155,124908,124909,124911],{"class":157,"line":158},[155,124910,168],{"class":167},[155,124912,124913],{"class":171}," math\n",[155,124915,124916],{"class":157,"line":46},[155,124917,217],{"emptyLinePlaceholder":216},[155,124919,124920,124922],{"class":157,"line":121},[155,124921,168],{"class":167},[155,124923,119864],{"class":171},[155,124925,124926,124928,124930,124932],{"class":157,"line":180},[155,124927,168],{"class":167},[155,124929,904],{"class":171},[155,124931,907],{"class":167},[155,124933,910],{"class":171},[155,124935,124936],{"class":157,"line":194},[155,124937,217],{"emptyLinePlaceholder":216},[155,124939,124940],{"class":157,"line":200},[155,124941,217],{"emptyLinePlaceholder":216},[155,124943,124944,124946,124948],{"class":157,"line":213},[155,124945,119877],{"class":263},[155,124947,33391],{"class":167},[155,124949,119882],{"class":732},[155,124951,124952],{"class":157,"line":220},[155,124953,124954],{"class":732},"\u003Cmujoco model=\"one_link_motor\">\n",[155,124956,124957],{"class":157,"line":245},[155,124958,124959],{"class":732},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[155,124961,124962],{"class":157,"line":251},[155,124963,217],{"emptyLinePlaceholder":216},[155,124965,124966],{"class":157,"line":257},[155,124967,119901],{"class":732},[155,124969,124970],{"class":157,"line":270},[155,124971,124972],{"class":732},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[155,124974,124975],{"class":157,"line":276},[155,124976,124977],{"class":732},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[155,124979,124980],{"class":157,"line":297},[155,124981,217],{"emptyLinePlaceholder":216},[155,124983,124984],{"class":157,"line":302},[155,124985,124986],{"class":732},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[155,124988,124989],{"class":157,"line":308},[155,124990,124991],{"class":732},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[155,124993,124994],{"class":157,"line":366},[155,124995,124996],{"class":732},"        \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",[155,124998,124999],{"class":157,"line":379},[155,125000,125001],{"class":732},"      \u003C\u002Fbody>\n",[155,125003,125004],{"class":157,"line":385},[155,125005,119930],{"class":732},[155,125007,125008],{"class":157,"line":415},[155,125009,119935],{"class":732},[155,125011,125012],{"class":157,"line":452},[155,125013,217],{"emptyLinePlaceholder":216},[155,125015,125016],{"class":157,"line":480},[155,125017,125018],{"class":732},"  \u003Cactuator>\n",[155,125020,125021],{"class":157,"line":486},[155,125022,125023],{"class":732},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[155,125025,125026],{"class":157,"line":499},[155,125027,125028],{"class":732},"  \u003C\u002Factuator>\n",[155,125030,125031],{"class":157,"line":505},[155,125032,119940],{"class":732},[155,125034,125035],{"class":157,"line":528},[155,125036,114261],{"class":732},[155,125038,125039],{"class":157,"line":549},[155,125040,217],{"emptyLinePlaceholder":216},[155,125042,125043],{"class":157,"line":570},[155,125044,217],{"emptyLinePlaceholder":216},[155,125046,125047,125049,125051,125053,125055],{"class":157,"line":575},[155,125048,1484],{"class":167},[155,125050,21861],{"class":226},[155,125052,119961],{"class":171},[155,125054,114249],{"class":263},[155,125056,736],{"class":171},[155,125058,125059,125061,125063,125065,125067],{"class":157,"line":581},[155,125060,119970],{"class":171},[155,125062,317],{"class":167},[155,125064,119975],{"class":171},[155,125066,119877],{"class":263},[155,125068,363],{"class":171},[155,125070,125071,125073,125075],{"class":157,"line":592},[155,125072,119984],{"class":171},[155,125074,317],{"class":167},[155,125076,119989],{"class":171},[155,125078,125079],{"class":157,"line":610},[155,125080,217],{"emptyLinePlaceholder":216},[155,125082,125083,125085,125087,125089],{"class":157,"line":622},[155,125084,822],{"class":263},[155,125086,230],{"class":171},[155,125088,120002],{"class":732},[155,125090,120005],{"class":171},[155,125092,125093,125095,125097,125099],{"class":157,"line":638},[155,125094,822],{"class":263},[155,125096,230],{"class":171},[155,125098,120014],{"class":732},[155,125100,120017],{"class":171},[155,125102,125103,125105,125107,125109],{"class":157,"line":650},[155,125104,822],{"class":263},[155,125106,230],{"class":171},[155,125108,120026],{"class":732},[155,125110,120029],{"class":171},[155,125112,125113],{"class":157,"line":662},[155,125114,217],{"emptyLinePlaceholder":216},[155,125116,125117,125119,125122,125124,125126],{"class":157,"line":678},[155,125118,1142],{"class":167},[155,125120,125121],{"class":171}," model.nu ",[155,125123,40741],{"class":167},[155,125125,1277],{"class":263},[155,125127,736],{"class":171},[155,125129,125130,125132,125134,125136,125139],{"class":157,"line":694},[155,125131,121995],{"class":167},[155,125133,121998],{"class":263},[155,125135,230],{"class":171},[155,125137,125138],{"class":732},"\"expected exactly one actuator\"",[155,125140,363],{"class":171},[155,125142,125143],{"class":157,"line":706},[155,125144,217],{"emptyLinePlaceholder":216},[155,125146,125147,125149,125151,125153,125155,125157,125160],{"class":157,"line":715},[155,125148,2000],{"class":167},[155,125150,1145],{"class":171},[155,125152,1131],{"class":167},[155,125154,2008],{"class":263},[155,125156,230],{"class":171},[155,125158,125159],{"class":263},"2000",[155,125161,242],{"class":171},[155,125163,125164,125167,125169,125171,125173],{"class":157,"line":720},[155,125165,125166],{"class":171},"        t ",[155,125168,317],{"class":167},[155,125170,1145],{"class":171},[155,125172,1563],{"class":167},[155,125174,125175],{"class":171}," model.opt.timestep\n",[155,125177,125178,125181,125183,125185,125187,125190,125192,125195,125197,125199,125202,125204,125206,125208],{"class":157,"line":739},[155,125179,125180],{"class":171},"        data.ctrl[",[155,125182,1109],{"class":263},[155,125184,24309],{"class":171},[155,125186,317],{"class":167},[155,125188,125189],{"class":263}," 1.5",[155,125191,26381],{"class":167},[155,125193,125194],{"class":171}," math.sin(",[155,125196,123823],{"class":263},[155,125198,26381],{"class":167},[155,125200,125201],{"class":171}," math.pi ",[155,125203,1563],{"class":167},[155,125205,80430],{"class":263},[155,125207,26381],{"class":167},[155,125209,125210],{"class":171}," t)\n",[155,125212,125213],{"class":157,"line":745},[155,125214,120079],{"class":171},[155,125216,125217],{"class":157,"line":773},[155,125218,217],{"emptyLinePlaceholder":216},[155,125220,125221,125223,125225,125228],{"class":157,"line":779},[155,125222,822],{"class":263},[155,125224,230],{"class":171},[155,125226,125227],{"class":732},"\"time:\"",[155,125229,120041],{"class":171},[155,125231,125232,125234,125236,125239,125241,125243],{"class":157,"line":785},[155,125233,822],{"class":263},[155,125235,230],{"class":171},[155,125237,125238],{"class":732},"\"joint qpos:\"",[155,125240,123493],{"class":171},[155,125242,1264],{"class":263},[155,125244,1238],{"class":171},[155,125246,125247,125249,125251,125254,125256,125258],{"class":157,"line":791},[155,125248,822],{"class":263},[155,125250,230],{"class":171},[155,125252,125253],{"class":732},"\"joint qvel:\"",[155,125255,123509],{"class":171},[155,125257,1264],{"class":263},[155,125259,1238],{"class":171},[155,125261,125262,125264,125266,125269],{"class":157,"line":796},[155,125263,822],{"class":263},[155,125265,230],{"class":171},[155,125267,125268],{"class":732},"\"last ctrl:\"",[155,125270,125271],{"class":171},", data.ctrl.copy())\n",[155,125273,125274],{"class":157,"line":802},[155,125275,217],{"emptyLinePlaceholder":216},[155,125277,125278],{"class":157,"line":808},[155,125279,217],{"emptyLinePlaceholder":216},[155,125281,125282,125284,125286,125288,125290],{"class":157,"line":819},[155,125283,723],{"class":167},[155,125285,726],{"class":263},[155,125287,120122],{"class":167},[155,125289,120125],{"class":732},[155,125291,736],{"class":171},[155,125293,125294],{"class":157,"line":1832},[155,125295,120132],{"class":171},[24,125297,122133],{},[146,125299,125301],{"className":43613,"code":125300,"language":43615,"meta":39,"style":39},"touch ch4_joint_motor.py\n",[152,125302,125303],{"__ignoreMap":39},[155,125304,125305,125307],{"class":157,"line":158},[155,125306,119846],{"class":226},[155,125308,125309],{"class":732}," ch4_joint_motor.py\n",[24,125311,120864],{},[146,125313,125315],{"className":43613,"code":125314,"language":43615,"meta":39,"style":39},"python ch4_joint_motor.py\n",[152,125316,125317],{"__ignoreMap":39},[155,125318,125319,125321],{"class":157,"line":158},[155,125320,150],{"class":226},[155,125322,125309],{"class":732},[14,125324,120135],{"id":120135},[24,125326,125327],{},"检查 actuator 数量：",[146,125329,125331],{"className":148,"code":125330,"language":150,"meta":39,"style":39},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[152,125332,125333,125345],{"__ignoreMap":39},[155,125334,125335,125337,125339,125341,125343],{"class":157,"line":158},[155,125336,723],{"class":167},[155,125338,125121],{"class":171},[155,125340,40741],{"class":167},[155,125342,1277],{"class":263},[155,125344,736],{"class":171},[155,125346,125347,125349,125351,125353,125355],{"class":157,"line":46},[155,125348,122458],{"class":167},[155,125350,121998],{"class":263},[155,125352,230],{"class":171},[155,125354,125138],{"class":732},[155,125356,363],{"class":171},[24,125358,125359,125361,125362,125364],{},[152,125360,120721],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[152,125363,119639],{}," 长度应该是 1。",[24,125366,125367],{},"产生正弦控制信号：",[146,125369,125371],{"className":148,"code":125370,"language":150,"meta":39,"style":39},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[152,125372,125373],{"__ignoreMap":39},[155,125374,125375,125377,125379,125381,125383,125385,125387,125389,125391,125393,125395,125397,125399,125401],{"class":157,"line":158},[155,125376,124434],{"class":171},[155,125378,1109],{"class":263},[155,125380,24309],{"class":171},[155,125382,317],{"class":167},[155,125384,125189],{"class":263},[155,125386,26381],{"class":167},[155,125388,125194],{"class":171},[155,125390,123823],{"class":263},[155,125392,26381],{"class":167},[155,125394,125201],{"class":171},[155,125396,1563],{"class":167},[155,125398,80430],{"class":263},[155,125400,26381],{"class":167},[155,125402,125210],{"class":171},[24,125404,125405],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[24,125407,120236],{},[146,125409,125410],{"className":148,"code":123068,"language":150,"meta":39,"style":39},[152,125411,125412],{"__ignoreMap":39},[155,125413,125414],{"class":157,"line":158},[155,125415,123068],{"class":171},[24,125417,125418],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[14,125420,120271],{"id":120271},[146,125422,125424],{"className":148,"code":125423,"language":150,"meta":39,"style":39},"import math\n",[152,125425,125426],{"__ignoreMap":39},[155,125427,125428,125430],{"class":157,"line":158},[155,125429,168],{"class":167},[155,125431,124913],{"class":171},[24,125433,125434,125435,119581,125438,125441],{},"导入 Python 标准库里的数学模块。后面要用 ",[152,125436,125437],{},"math.sin",[152,125439,125440],{},"math.pi"," 生成周期变化的控制信号。",[146,125443,125444],{"className":148,"code":122249,"language":150,"meta":39,"style":39},[152,125445,125446,125452],{"__ignoreMap":39},[155,125447,125448,125450],{"class":157,"line":158},[155,125449,168],{"class":167},[155,125451,119864],{"class":171},[155,125453,125454,125456,125458,125460],{"class":157,"line":46},[155,125455,168],{"class":167},[155,125457,904],{"class":171},[155,125459,907],{"class":167},[155,125461,910],{"class":171},[24,125463,125464],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[146,125466,125467],{"className":71630,"code":124750,"language":71632,"meta":39,"style":39},[152,125468,125469],{"__ignoreMap":39},[155,125470,125471,125473,125475,125477,125479,125481,125483,125485,125487,125489,125491,125493,125495,125497,125499],{"class":157,"line":158},[155,125472,20959],{"class":171},[155,125474,121519],{"class":69863},[155,125476,34745],{"class":226},[155,125478,317],{"class":171},[155,125480,124582],{"class":732},[155,125482,72387],{"class":226},[155,125484,317],{"class":171},[155,125486,124582],{"class":732},[155,125488,124591],{"class":226},[155,125490,317],{"class":171},[155,125492,124596],{"class":732},[155,125494,124779],{"class":226},[155,125496,317],{"class":171},[155,125498,124784],{"class":732},[155,125500,119707],{"class":171},[24,125502,125503,125504,125506,125507,125509,125510,125512],{},"这行定义关节。",[152,125505,124403],{}," 表示旋转关节。",[152,125508,124802],{}," 表示绕 y 轴旋转。",[152,125511,124808],{}," 表示有一点阻尼，运动不会完全无损耗。",[146,125514,125516],{"className":71630,"code":125515,"language":71632,"meta":39,"style":39},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[152,125517,125518],{"__ignoreMap":39},[155,125519,125520,125522,125524,125526,125528,125531,125533,125535,125538,125541,125543,125546,125548,125550,125552,125554,125556,125559],{"class":157,"line":158},[155,125521,20959],{"class":171},[155,125523,119683],{"class":69863},[155,125525,34745],{"class":226},[155,125527,317],{"class":171},[155,125529,125530],{"class":732},"\"link_geom\"",[155,125532,72387],{"class":226},[155,125534,317],{"class":171},[155,125536,125537],{"class":732},"\"capsule\"",[155,125539,125540],{"class":226}," fromto",[155,125542,317],{"class":171},[155,125544,125545],{"class":732},"\"0 0 0 0 0 0.5\"",[155,125547,119699],{"class":226},[155,125549,317],{"class":171},[155,125551,122341],{"class":732},[155,125553,120564],{"class":226},[155,125555,317],{"class":171},[155,125557,125558],{"class":732},"\"0.5\"",[155,125560,119707],{"class":171},[24,125562,125563,125564,125566,125567,125569,125570,125573,125574,48174,125577,125579],{},"这行定义摆杆的形状。",[152,125565,121728],{}," 是胶囊体，适合表示杆子。",[152,125568,121739],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[152,125571,125572],{},"(0,0,0)"," 延伸到 ",[152,125575,125576],{},"(0,0,0.5)",[152,125578,121733],{}," 是半径。",[146,125581,125582],{"className":71630,"code":124816,"language":71632,"meta":39,"style":39},[152,125583,125584],{"__ignoreMap":39},[155,125585,125586,125588,125590,125592,125594,125596,125598,125600,125602,125604,125606,125608,125610,125612,125614,125616,125618,125620],{"class":157,"line":158},[155,125587,20959],{"class":171},[155,125589,124637],{"class":69863},[155,125591,34745],{"class":226},[155,125593,317],{"class":171},[155,125595,124644],{"class":732},[155,125597,124647],{"class":226},[155,125599,317],{"class":171},[155,125601,124582],{"class":732},[155,125603,124654],{"class":226},[155,125605,317],{"class":171},[155,125607,23548],{"class":732},[155,125609,124661],{"class":226},[155,125611,317],{"class":171},[155,125613,124666],{"class":732},[155,125615,124669],{"class":226},[155,125617,317],{"class":171},[155,125619,124674],{"class":732},[155,125621,119707],{"class":171},[24,125623,125624,125625,125627,125628,125631,125632,125634],{},"这行定义电机。它作用在 ",[152,125626,124403],{}," 关节上。",[152,125629,125630],{},"gear"," 可以理解成放大倍数。",[152,125633,124418],{}," 限制控制输入范围。",[146,125636,125637],{"className":148,"code":125330,"language":150,"meta":39,"style":39},[152,125638,125639,125651],{"__ignoreMap":39},[155,125640,125641,125643,125645,125647,125649],{"class":157,"line":158},[155,125642,723],{"class":167},[155,125644,125121],{"class":171},[155,125646,40741],{"class":167},[155,125648,1277],{"class":263},[155,125650,736],{"class":171},[155,125652,125653,125655,125657,125659,125661],{"class":157,"line":46},[155,125654,122458],{"class":167},[155,125656,121998],{"class":263},[155,125658,230],{"class":171},[155,125660,125138],{"class":732},[155,125662,363],{"class":171},[24,125664,125665,125667],{},[152,125666,120721],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[146,125669,125671],{"className":148,"code":125670,"language":150,"meta":39,"style":39},"for step in range(2000):\n",[152,125672,125673],{"__ignoreMap":39},[155,125674,125675,125677,125679,125681,125683,125685,125687],{"class":157,"line":158},[155,125676,1125],{"class":167},[155,125678,1145],{"class":171},[155,125680,1131],{"class":167},[155,125682,2008],{"class":263},[155,125684,230],{"class":171},[155,125686,125159],{"class":263},[155,125688,242],{"class":171},[24,125690,125691,125692,125694,125695,125698],{},"循环 2000 步。这里没有用 ",[152,125693,21037],{},"，而是用 ",[152,125696,125697],{},"step","，因为后面要用当前步数计算时间。",[146,125700,125702],{"className":148,"code":125701,"language":150,"meta":39,"style":39},"t = step * model.opt.timestep\n",[152,125703,125704],{"__ignoreMap":39},[155,125705,125706,125709,125711,125713,125715],{"class":157,"line":158},[155,125707,125708],{"class":171},"t ",[155,125710,317],{"class":167},[155,125712,1145],{"class":171},[155,125714,1563],{"class":167},[155,125716,125175],{"class":171},[24,125718,125719],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[146,125721,125722],{"className":148,"code":125370,"language":150,"meta":39,"style":39},[152,125723,125724],{"__ignoreMap":39},[155,125725,125726,125728,125730,125732,125734,125736,125738,125740,125742,125744,125746,125748,125750,125752],{"class":157,"line":158},[155,125727,124434],{"class":171},[155,125729,1109],{"class":263},[155,125731,24309],{"class":171},[155,125733,317],{"class":167},[155,125735,125189],{"class":263},[155,125737,26381],{"class":167},[155,125739,125194],{"class":171},[155,125741,123823],{"class":263},[155,125743,26381],{"class":167},[155,125745,125201],{"class":171},[155,125747,1563],{"class":167},[155,125749,80430],{"class":263},[155,125751,26381],{"class":167},[155,125753,125210],{"class":171},[24,125755,125756],{},"这行给电机输入一个正弦波。拆开看：",[28,125758,125759,125765,125771],{},[31,125760,125761,125764],{},[152,125762,125763],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[31,125766,125767,125770],{},[152,125768,125769],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[31,125772,125773,125776],{},[152,125774,125775],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[24,125778,125779],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[146,125781,125783],{"className":148,"code":125782,"language":150,"meta":39,"style":39},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[152,125784,125785],{"__ignoreMap":39},[155,125786,125787,125789,125791,125793,125795,125797],{"class":157,"line":158},[155,125788,15451],{"class":263},[155,125790,230],{"class":171},[155,125792,125238],{"class":732},[155,125794,123493],{"class":171},[155,125796,1264],{"class":263},[155,125798,1238],{"class":171},[24,125800,125801,125802,125804],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[152,125803,119633],{}," 只有一个数。",[20037,125806,120879],{"id":120878},[24,125808,125809],{},"输出类似:",[146,125811,125814],{"className":125812,"code":125813,"language":25051,"meta":39},[25049],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[152,125815,125813],{"__ignoreMap":39},[24,125817,125818,125819,125821],{},"这里 ",[152,125820,124689],{}," 是电机输入。",[24,125823,125824,125827,125828,125831],{},[152,125825,125826],{},"joint qpos"," 是关节角度，单位通常是弧度。",[152,125829,125830],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[24,125833,125834],{},"角度单位提示：",[146,125836,125839],{"className":125837,"code":125838,"language":25051,"meta":39},[25049],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[152,125840,125838],{"__ignoreMap":39},[24,125842,125843,125844,125846,125847,125849],{},"如果你看到 ",[152,125845,122593],{}," 是 ",[152,125848,4938],{},"，大约就是 28.6 度。",[20037,125851,120911],{"id":120910},[28,125853,125854,125861,125864,125871,125874,125882,125890],{},[31,125855,120974,125856,120977,125858,48174],{},[152,125857,124874],{},[152,125859,125860],{},"gear=\"5\"",[31,125862,125863],{},"重新运行，观察关节运动是否更剧烈。",[31,125865,120974,125866,120977,125868,48174],{},[152,125867,124418],{},[152,125869,125870],{},"-0.2 0.2",[31,125872,125873],{},"重新运行，观察控制能力是否变弱。",[31,125875,125876,125877,125879,125880,48174],{},"去掉 actuator，确认 ",[152,125878,120721],{}," 变成 ",[152,125881,1109],{},[31,125883,120974,125884,120977,125886,125889],{},[152,125885,124808],{},[152,125887,125888],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[31,125891,120974,125892,120977,125894,125897],{},[152,125893,124802],{},[152,125895,125896],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[20037,125899,121016],{"id":121015},[14,125901,125903],{"id":125902},"indexerror-index-0-is-out-of-bounds",[152,125904,125905],{},"IndexError: index 0 is out of bounds",[24,125907,125908,125909,125911],{},"原因是 ",[152,125910,124555],{},"，没有 actuator。",[14,125913,125914],{"id":125914},"关节几乎不动",[24,125916,125917],{},"可能原因:",[28,125919,125920,125925,125929,125935],{},[31,125921,125922,125924],{},[152,125923,125630],{}," 太小",[31,125926,125927,125924],{},[152,125928,124418],{},[31,125930,125931,125934],{},[152,125932,125933],{},"damping"," 太大",[31,125936,125937],{},"重力方向导致运动不明显",[14,125939,125940],{"id":125940},"模型编译失败",[24,125942,125943,125944,125946],{},"检查 actuator 引用的 ",[152,125945,124865],{}," 是否存在，joint 名称是否拼写一致。",[14,125948,125950,125952],{"id":125949},"datactrl0-写了但没有效果",[152,125951,124689],{}," 写了但没有效果",[24,125954,121138],{},[28,125956,125957,125962,125965,125970,125975],{},[31,125958,125959,125961],{},[152,125960,120721],{}," 是否大于 0。",[31,125963,125964],{},"motor 是否引用了正确 joint。",[31,125966,125967,125969],{},[152,125968,125630],{}," 是否太小。",[31,125971,125972,125974],{},[152,125973,124418],{}," 是否把输入限制得太小。",[31,125976,125977],{},"body 是否真的有可动 joint。",[14,125979,125980],{"id":125980},"控制输入超过范围会怎样",[24,125982,125983],{},"如果设置了：",[146,125985,125987],{"className":71630,"code":125986,"language":71632,"meta":39,"style":39},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[152,125988,125989],{"__ignoreMap":39},[155,125990,125991],{"class":157,"line":158},[155,125992,125986],{"class":171},[24,125994,125995],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[146,125997,125999],{"className":148,"code":125998,"language":150,"meta":39,"style":39},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[152,126000,126001,126021],{"__ignoreMap":39},[155,126002,126003,126006,126008,126011,126013,126015,126017,126019],{"class":157,"line":158},[155,126004,126005],{"class":171},"action ",[155,126007,317],{"class":167},[155,126009,126010],{"class":171}," np.clip(action, ",[155,126012,2039],{"class":167},[155,126014,123823],{"class":263},[155,126016,7589],{"class":171},[155,126018,123823],{"class":263},[155,126020,363],{"class":171},[155,126022,126023,126025,126027,126029,126031],{"class":157,"line":46},[155,126024,124434],{"class":171},[155,126026,1109],{"class":263},[155,126028,24309],{"class":171},[155,126030,317],{"class":167},[155,126032,126033],{"class":171}," action\n",[20037,126035,121170],{"id":121169},[24,126037,126038],{},"这一章建立了控制任务的基本形式：",[146,126040,126043],{"className":126041,"code":126042,"language":25051,"meta":39},[25049],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[152,126044,126042],{"__ignoreMap":39},[24,126046,126047],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[20011,126049,126050],{},"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":39,"searchDepth":46,"depth":46,"links":126052},[126053,126054,126055,126060,126064,126065,126066,126074],{"id":119209,"depth":46,"text":119210},{"id":119332,"depth":46,"text":119333},{"id":119607,"depth":46,"text":119608,"children":126056},[126057,126058,126059],{"id":124696,"depth":121,"text":124697},{"id":124746,"depth":121,"text":124747},{"id":124812,"depth":121,"text":124813},{"id":119815,"depth":46,"text":119816,"children":126061},[126062,126063],{"id":120135,"depth":121,"text":120135},{"id":120271,"depth":121,"text":120271},{"id":120878,"depth":46,"text":120879},{"id":120910,"depth":46,"text":120911},{"id":121015,"depth":46,"text":121016,"children":126067},[126068,126069,126070,126071,126073],{"id":125902,"depth":121,"text":125905},{"id":125914,"depth":121,"text":125914},{"id":125940,"depth":121,"text":125940},{"id":125949,"depth":121,"text":126072},"data.ctrl[0] 写了但没有效果",{"id":125980,"depth":121,"text":125980},{"id":121169,"depth":46,"text":121170},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":124384,"description":39},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":126081,"title":126082,"body":126083,"description":39,"extension":20021,"meta":127992,"navigation":216,"path":127993,"seo":127994,"stem":127995,"__hash__":127996},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":126084,"toc":127968},[126085,126088,126090,126093,126101,126104,126121,126124,126149,126152,126198,126200,126202,126257,126259,126278,126280,126323,126326,126343,126346,126362,126372,126379,126381,126384,126387,126421,126424,126472,126476,126479,126493,126502,126506,126509,126534,126537,126541,126554,126557,126563,126566,126581,126583,126586,126846,126848,126860,126863,127175,127177,127189,127191,127194,127209,127214,127217,127239,127242,127245,127279,127282,127286,127297,127300,127317,127320,127334,127341,127361,127368,127382,127385,127397,127412,127432,127435,127457,127460,127464,127479,127490,127505,127508,127538,127554,127583,127591,127615,127618,127636,127646,127658,127665,127674,127680,127689,127692,127694,127703,127706,127721,127723,127726,127737,127740,127751,127754,127772,127774,127791,127794,127822,127824,127828,127831,127861,127867,127870,127874,127882,127885,127887,127908,127911,127914,127930,127933,127949,127951,127954,127965],[10,126086,126082],{"id":126087},"_5viewer-可视化与-renderer-离屏渲染",[20037,126089,119210],{"id":119209},[24,126091,126092],{},"本章掌握两类可视化方式:",[28,126094,126095,126098],{},[31,126096,126097],{},"交互式 viewer: 适合人工观察仿真",[31,126099,126100],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[24,126102,126103],{},"使用官方接口:",[146,126105,126107],{"className":148,"code":126106,"language":150,"meta":39,"style":39},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[152,126108,126109,126116],{"__ignoreMap":39},[155,126110,126111,126113],{"class":157,"line":158},[155,126112,168],{"class":167},[155,126114,126115],{"class":171}," mujoco.viewer\n",[155,126117,126118],{"class":157,"line":46},[155,126119,126120],{"class":171},"mujoco.viewer.launch_passive(model, data)\n",[24,126122,126123],{},"以及:",[146,126125,126127],{"className":148,"code":126126,"language":150,"meta":39,"style":39},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[152,126128,126129,126139],{"__ignoreMap":39},[155,126130,126131,126134,126136],{"class":157,"line":158},[155,126132,126133],{"class":171},"renderer ",[155,126135,317],{"class":167},[155,126137,126138],{"class":171}," mujoco.Renderer(model)\n",[155,126140,126141,126144,126146],{"class":157,"line":46},[155,126142,126143],{"class":171},"image ",[155,126145,317],{"class":167},[155,126147,126148],{"class":171}," renderer.render()\n",[24,126150,126151],{},"新手建议先理解二者区别：",[20222,126153,126154,126170],{},[20225,126155,126156],{},[20228,126157,126158,126161,126164,126167],{},[20231,126159,126160],{"align":43527},"工具",[20231,126162,126163],{"align":43527},"用途",[20231,126165,126166],{"align":43527},"是否打开窗口",[20231,126168,126169],{"align":43527},"常见场景",[20269,126171,126172,126185],{},[20228,126173,126174,126177,126180,126182],{},[20274,126175,126176],{"align":43527},"Viewer",[20274,126178,126179],{"align":43527},"人眼实时观察仿真",[20274,126181,123228],{"align":43527},[20274,126183,126184],{"align":43527},"调试模型、看控制效果",[20228,126186,126187,126190,126193,126195],{},[20274,126188,126189],{"align":43527},"Renderer",[20274,126191,126192],{"align":43527},"生成图像数组",[20274,126194,123241],{"align":43527},[20274,126196,126197],{"align":43527},"保存图片、训练视觉策略、服务器批量采集",[20037,126199,119333],{"id":119332},[24,126201,119336],{},[146,126203,126205],{"className":43613,"code":126204,"language":43615,"meta":39,"style":39},"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",[152,126206,126207,126219,126229,126237,126245],{"__ignoreMap":39},[155,126208,126209,126211,126213,126215,126217],{"class":157,"line":158},[155,126210,44368],{"class":226},[155,126212,46104],{"class":732},[155,126214,43625],{"class":732},[155,126216,46189],{"class":263},[155,126218,44470],{"class":263},[155,126220,126221,126223,126225,126227],{"class":157,"line":46},[155,126222,119371],{"class":732},[155,126224,119374],{"class":732},[155,126226,119377],{"class":732},[155,126228,44470],{"class":263},[155,126230,126231,126233,126235],{"class":157,"line":121},[155,126232,119384],{"class":732},[155,126234,119387],{"class":732},[155,126236,44470],{"class":263},[155,126238,126239,126241,126243],{"class":157,"line":180},[155,126240,119394],{"class":732},[155,126242,119397],{"class":732},[155,126244,44470],{"class":263},[155,126246,126247,126249,126251,126253,126255],{"class":157,"line":194},[155,126248,119404],{"class":732},[155,126250,119407],{"class":732},[155,126252,119410],{"class":732},[155,126254,119413],{"class":732},[155,126256,121079],{"class":732},[24,126258,121382],{},[146,126260,126262],{"className":43613,"code":126261,"language":43615,"meta":39,"style":39},"pip install \"mujoco>=2.3\" numpy pillow\n",[152,126263,126264],{"__ignoreMap":39},[155,126265,126266,126268,126270,126272,126275],{"class":157,"line":158},[155,126267,43622],{"class":226},[155,126269,43625],{"class":732},[155,126271,119493],{"class":732},[155,126273,126274],{"class":732}," numpy",[155,126276,126277],{"class":732}," pillow\n",[24,126279,121399],{},[146,126281,126283],{"className":43613,"code":126282,"language":43615,"meta":39,"style":39},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[152,126284,126285,126302,126311],{"__ignoreMap":39},[155,126286,126287,126289,126291,126293,126296,126298,126300],{"class":157,"line":158},[155,126288,50119],{"class":226},[155,126290,48965],{"class":732},[155,126292,44907],{"class":263},[155,126294,126295],{"class":732}," mujoco-render",[155,126297,119538],{"class":732},[155,126299,119541],{"class":263},[155,126301,119544],{"class":263},[155,126303,126304,126306,126308],{"class":157,"line":46},[155,126305,50119],{"class":226},[155,126307,119551],{"class":732},[155,126309,126310],{"class":732}," mujoco-render\n",[155,126312,126313,126315,126317,126319,126321],{"class":157,"line":121},[155,126314,43622],{"class":226},[155,126316,43625],{"class":732},[155,126318,119493],{"class":732},[155,126320,126274],{"class":732},[155,126322,126277],{"class":732},[24,126324,126325],{},"离屏渲染后端:",[146,126327,126329],{"className":43613,"code":126328,"language":43615,"meta":39,"style":39},"export MUJOCO_GL=egl\n",[152,126330,126331],{"__ignoreMap":39},[155,126332,126333,126335,126338,126340],{"class":157,"line":158},[155,126334,44834],{"class":167},[155,126336,126337],{"class":171}," MUJOCO_GL",[155,126339,317],{"class":167},[155,126341,126342],{"class":171},"egl\n",[24,126344,126345],{},"或:",[146,126347,126349],{"className":43613,"code":126348,"language":43615,"meta":39,"style":39},"export MUJOCO_GL=osmesa\n",[152,126350,126351],{"__ignoreMap":39},[155,126352,126353,126355,126357,126359],{"class":157,"line":158},[155,126354,44834],{"class":167},[155,126356,126337],{"class":171},[155,126358,317],{"class":167},[155,126360,126361],{"class":171},"osmesa\n",[24,126363,126364,126365,126368,126369,48174],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[152,126366,126367],{},"egl"," 失败，再尝试 ",[152,126370,126371],{},"osmesa",[24,126373,126374,126375,126378],{},"如果你在本机桌面环境运行，通常先不要设置 ",[152,126376,126377],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[20037,126380,119608],{"id":119607},[24,126382,126383],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[24,126385,126386],{},"典型 viewer 流程:",[146,126388,126390],{"className":148,"code":126389,"language":150,"meta":39,"style":39},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[152,126391,126392,126405,126412,126416],{"__ignoreMap":39},[155,126393,126394,126397,126400,126402],{"class":157,"line":158},[155,126395,126396],{"class":167},"with",[155,126398,126399],{"class":171}," mujoco.viewer.launch_passive(model, data) ",[155,126401,907],{"class":167},[155,126403,126404],{"class":171}," viewer:\n",[155,126406,126407,126409],{"class":157,"line":46},[155,126408,22138],{"class":167},[155,126410,126411],{"class":171}," viewer.is_running():\n",[155,126413,126414],{"class":157,"line":121},[155,126415,120079],{"class":171},[155,126417,126418],{"class":157,"line":180},[155,126419,126420],{"class":171},"        viewer.sync()\n",[24,126422,126423],{},"典型 renderer 流程:",[146,126425,126427],{"className":148,"code":126426,"language":150,"meta":39,"style":39},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[152,126428,126429,126455,126459,126464],{"__ignoreMap":39},[155,126430,126431,126433,126435,126438,126440,126442,126444,126446,126448,126450,126453],{"class":157,"line":158},[155,126432,126133],{"class":171},[155,126434,317],{"class":167},[155,126436,126437],{"class":171}," mujoco.Renderer(model, ",[155,126439,44773],{"class":323},[155,126441,317],{"class":167},[155,126443,11957],{"class":263},[155,126445,7589],{"class":171},[155,126447,44769],{"class":323},[155,126449,317],{"class":167},[155,126451,126452],{"class":263},"640",[155,126454,363],{"class":171},[155,126456,126457],{"class":157,"line":46},[155,126458,123068],{"class":171},[155,126460,126461],{"class":157,"line":121},[155,126462,126463],{"class":171},"renderer.update_scene(data)\n",[155,126465,126466,126468,126470],{"class":157,"line":180},[155,126467,126143],{"class":171},[155,126469,317],{"class":167},[155,126471,126148],{"class":171},[14,126473,126475],{"id":126474},"viewer-的同步逻辑","viewer 的同步逻辑",[24,126477,126478],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[146,126480,126482],{"className":148,"code":126481,"language":150,"meta":39,"style":39},"mujoco.mj_step(model, data)\nviewer.sync()\n",[152,126483,126484,126488],{"__ignoreMap":39},[155,126485,126486],{"class":157,"line":158},[155,126487,123068],{"class":171},[155,126489,126490],{"class":157,"line":46},[155,126491,126492],{"class":171},"viewer.sync()\n",[24,126494,126495,126497,126498,126501],{},[152,126496,119778],{}," 负责算物理，",[152,126499,126500],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[14,126503,126505],{"id":126504},"为什么要-sleep","为什么要 sleep",[24,126507,126508],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[146,126510,126512],{"className":148,"code":126511,"language":150,"meta":39,"style":39},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[152,126513,126514],{"__ignoreMap":39},[155,126515,126516,126519,126521,126524,126526,126529,126531],{"class":157,"line":158},[155,126517,126518],{"class":171},"sleep_time ",[155,126520,317],{"class":167},[155,126522,126523],{"class":171}," model.opt.timestep ",[155,126525,2039],{"class":167},[155,126527,126528],{"class":171}," (time.time() ",[155,126530,2039],{"class":167},[155,126532,126533],{"class":171}," step_start)\n",[24,126535,126536],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[14,126538,126540],{"id":126539},"renderer-输出是什么","renderer 输出是什么",[146,126542,126544],{"className":148,"code":126543,"language":150,"meta":39,"style":39},"image = renderer.render()\n",[152,126545,126546],{"__ignoreMap":39},[155,126547,126548,126550,126552],{"class":157,"line":158},[155,126549,126143],{"class":171},[155,126551,317],{"class":167},[155,126553,126148],{"class":171},[24,126555,126556],{},"得到的是 NumPy 数组，形状通常是：",[146,126558,126561],{"className":126559,"code":126560,"language":25051,"meta":39},[25049],"(height, width, 3)\n",[152,126562,126560],{"__ignoreMap":39},[24,126564,126565],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[146,126567,126569],{"className":148,"code":126568,"language":150,"meta":39,"style":39},"Image.fromarray(image).save(\"render_output.png\")\n",[152,126570,126571],{"__ignoreMap":39},[155,126572,126573,126576,126579],{"class":157,"line":158},[155,126574,126575],{"class":171},"Image.fromarray(image).save(",[155,126577,126578],{"class":732},"\"render_output.png\"",[155,126580,363],{"class":171},[20037,126582,119816],{"id":119815},[24,126584,126585],{},"交互式 Viewer:",[146,126587,126589],{"className":148,"code":126588,"language":150,"meta":39,"style":39},"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",[152,126590,126591,126597,126601,126607,126613,126617,126621,126629,126634,126638,126642,126646,126651,126656,126660,126664,126668,126673,126677,126681,126685,126689,126693,126697,126709,126721,126729,126733,126743,126763,126773,126778,126783,126787,126804,126817,126822,126826,126830,126842],{"__ignoreMap":39},[155,126592,126593,126595],{"class":157,"line":158},[155,126594,168],{"class":167},[155,126596,1366],{"class":171},[155,126598,126599],{"class":157,"line":46},[155,126600,217],{"emptyLinePlaceholder":216},[155,126602,126603,126605],{"class":157,"line":121},[155,126604,168],{"class":167},[155,126606,119864],{"class":171},[155,126608,126609,126611],{"class":157,"line":180},[155,126610,168],{"class":167},[155,126612,126115],{"class":171},[155,126614,126615],{"class":157,"line":194},[155,126616,217],{"emptyLinePlaceholder":216},[155,126618,126619],{"class":157,"line":200},[155,126620,217],{"emptyLinePlaceholder":216},[155,126622,126623,126625,126627],{"class":157,"line":213},[155,126624,119877],{"class":263},[155,126626,33391],{"class":167},[155,126628,119882],{"class":732},[155,126630,126631],{"class":157,"line":220},[155,126632,126633],{"class":732},"\u003Cmujoco model=\"viewer_demo\">\n",[155,126635,126636],{"class":157,"line":245},[155,126637,119892],{"class":732},[155,126639,126640],{"class":157,"line":251},[155,126641,217],{"emptyLinePlaceholder":216},[155,126643,126644],{"class":157,"line":257},[155,126645,119901],{"class":732},[155,126647,126648],{"class":157,"line":270},[155,126649,126650],{"class":732},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[155,126652,126653],{"class":157,"line":276},[155,126654,126655],{"class":732},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[155,126657,126658],{"class":157,"line":297},[155,126659,217],{"emptyLinePlaceholder":216},[155,126661,126662],{"class":157,"line":302},[155,126663,119915],{"class":732},[155,126665,126666],{"class":157,"line":308},[155,126667,119920],{"class":732},[155,126669,126670],{"class":157,"line":366},[155,126671,126672],{"class":732},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[155,126674,126675],{"class":157,"line":379},[155,126676,119930],{"class":732},[155,126678,126679],{"class":157,"line":385},[155,126680,119935],{"class":732},[155,126682,126683],{"class":157,"line":415},[155,126684,119940],{"class":732},[155,126686,126687],{"class":157,"line":452},[155,126688,114261],{"class":732},[155,126690,126691],{"class":157,"line":480},[155,126692,217],{"emptyLinePlaceholder":216},[155,126694,126695],{"class":157,"line":486},[155,126696,217],{"emptyLinePlaceholder":216},[155,126698,126699,126701,126703,126705,126707],{"class":157,"line":499},[155,126700,1484],{"class":167},[155,126702,21861],{"class":226},[155,126704,119961],{"class":171},[155,126706,114249],{"class":263},[155,126708,736],{"class":171},[155,126710,126711,126713,126715,126717,126719],{"class":157,"line":505},[155,126712,119970],{"class":171},[155,126714,317],{"class":167},[155,126716,119975],{"class":171},[155,126718,119877],{"class":263},[155,126720,363],{"class":171},[155,126722,126723,126725,126727],{"class":157,"line":528},[155,126724,119984],{"class":171},[155,126726,317],{"class":167},[155,126728,119989],{"class":171},[155,126730,126731],{"class":157,"line":549},[155,126732,217],{"emptyLinePlaceholder":216},[155,126734,126735,126737,126739,126741],{"class":157,"line":570},[155,126736,3783],{"class":167},[155,126738,126399],{"class":171},[155,126740,907],{"class":167},[155,126742,126404],{"class":171},[155,126744,126745,126748,126751,126753,126756,126758,126761],{"class":157,"line":575},[155,126746,126747],{"class":167},"        while",[155,126749,126750],{"class":171}," viewer.is_running() ",[155,126752,50245],{"class":167},[155,126754,126755],{"class":171}," data.time ",[155,126757,20959],{"class":167},[155,126759,126760],{"class":263}," 5.0",[155,126762,736],{"class":171},[155,126764,126765,126768,126770],{"class":157,"line":581},[155,126766,126767],{"class":171},"            step_start ",[155,126769,317],{"class":167},[155,126771,126772],{"class":171}," time.time()\n",[155,126774,126775],{"class":157,"line":592},[155,126776,126777],{"class":171},"            mujoco.mj_step(model, data)\n",[155,126779,126780],{"class":157,"line":610},[155,126781,126782],{"class":171},"            viewer.sync()\n",[155,126784,126785],{"class":157,"line":622},[155,126786,217],{"emptyLinePlaceholder":216},[155,126788,126789,126792,126794,126796,126798,126800,126802],{"class":157,"line":638},[155,126790,126791],{"class":171},"            sleep_time ",[155,126793,317],{"class":167},[155,126795,126523],{"class":171},[155,126797,2039],{"class":167},[155,126799,126528],{"class":171},[155,126801,2039],{"class":167},[155,126803,126533],{"class":171},[155,126805,126806,126808,126811,126813,126815],{"class":157,"line":650},[155,126807,8497],{"class":167},[155,126809,126810],{"class":171}," sleep_time ",[155,126812,1148],{"class":167},[155,126814,1151],{"class":263},[155,126816,736],{"class":171},[155,126818,126819],{"class":157,"line":662},[155,126820,126821],{"class":171},"                time.sleep(sleep_time)\n",[155,126823,126824],{"class":157,"line":678},[155,126825,217],{"emptyLinePlaceholder":216},[155,126827,126828],{"class":157,"line":694},[155,126829,217],{"emptyLinePlaceholder":216},[155,126831,126832,126834,126836,126838,126840],{"class":157,"line":706},[155,126833,723],{"class":167},[155,126835,726],{"class":263},[155,126837,120122],{"class":167},[155,126839,120125],{"class":732},[155,126841,736],{"class":171},[155,126843,126844],{"class":157,"line":715},[155,126845,120132],{"class":171},[24,126847,122133],{},[146,126849,126851],{"className":43613,"code":126850,"language":43615,"meta":39,"style":39},"touch ch5_viewer.py\n",[152,126852,126853],{"__ignoreMap":39},[155,126854,126855,126857],{"class":157,"line":158},[155,126856,119846],{"class":226},[155,126858,126859],{"class":732}," ch5_viewer.py\n",[24,126861,126862],{},"离屏 Renderer 保存图片:",[146,126864,126866],{"className":148,"code":126865,"language":150,"meta":39,"style":39},"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",[152,126867,126868,126880,126884,126890,126900,126904,126908,126916,126921,126925,126929,126933,126937,126942,126946,126950,126954,126958,126962,126966,126970,126974,126978,126982,126986,126998,127010,127018,127043,127047,127063,127067,127071,127086,127095,127099,127113,127118,127123,127127,127139,127151,127155,127159,127171],{"__ignoreMap":39},[155,126869,126870,126872,126875,126877],{"class":157,"line":158},[155,126871,183],{"class":167},[155,126873,126874],{"class":171}," pathlib ",[155,126876,168],{"class":167},[155,126878,126879],{"class":171}," Path\n",[155,126881,126882],{"class":157,"line":46},[155,126883,217],{"emptyLinePlaceholder":216},[155,126885,126886,126888],{"class":157,"line":121},[155,126887,168],{"class":167},[155,126889,119864],{"class":171},[155,126891,126892,126894,126896,126898],{"class":157,"line":180},[155,126893,183],{"class":167},[155,126895,16889],{"class":263},[155,126897,16892],{"class":167},[155,126899,16895],{"class":171},[155,126901,126902],{"class":157,"line":194},[155,126903,217],{"emptyLinePlaceholder":216},[155,126905,126906],{"class":157,"line":200},[155,126907,217],{"emptyLinePlaceholder":216},[155,126909,126910,126912,126914],{"class":157,"line":213},[155,126911,119877],{"class":263},[155,126913,33391],{"class":167},[155,126915,119882],{"class":732},[155,126917,126918],{"class":157,"line":220},[155,126919,126920],{"class":732},"\u003Cmujoco model=\"renderer_demo\">\n",[155,126922,126923],{"class":157,"line":245},[155,126924,119892],{"class":732},[155,126926,126927],{"class":157,"line":251},[155,126928,217],{"emptyLinePlaceholder":216},[155,126930,126931],{"class":157,"line":257},[155,126932,119901],{"class":732},[155,126934,126935],{"class":157,"line":270},[155,126936,126650],{"class":732},[155,126938,126939],{"class":157,"line":276},[155,126940,126941],{"class":732},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[155,126943,126944],{"class":157,"line":297},[155,126945,126655],{"class":732},[155,126947,126948],{"class":157,"line":302},[155,126949,217],{"emptyLinePlaceholder":216},[155,126951,126952],{"class":157,"line":308},[155,126953,119915],{"class":732},[155,126955,126956],{"class":157,"line":366},[155,126957,119920],{"class":732},[155,126959,126960],{"class":157,"line":379},[155,126961,126672],{"class":732},[155,126963,126964],{"class":157,"line":385},[155,126965,119930],{"class":732},[155,126967,126968],{"class":157,"line":415},[155,126969,119935],{"class":732},[155,126971,126972],{"class":157,"line":452},[155,126973,119940],{"class":732},[155,126975,126976],{"class":157,"line":480},[155,126977,114261],{"class":732},[155,126979,126980],{"class":157,"line":486},[155,126981,217],{"emptyLinePlaceholder":216},[155,126983,126984],{"class":157,"line":499},[155,126985,217],{"emptyLinePlaceholder":216},[155,126987,126988,126990,126992,126994,126996],{"class":157,"line":505},[155,126989,1484],{"class":167},[155,126991,21861],{"class":226},[155,126993,119961],{"class":171},[155,126995,114249],{"class":263},[155,126997,736],{"class":171},[155,126999,127000,127002,127004,127006,127008],{"class":157,"line":528},[155,127001,119970],{"class":171},[155,127003,317],{"class":167},[155,127005,119975],{"class":171},[155,127007,119877],{"class":263},[155,127009,363],{"class":171},[155,127011,127012,127014,127016],{"class":157,"line":549},[155,127013,119984],{"class":171},[155,127015,317],{"class":167},[155,127017,119989],{"class":171},[155,127019,127020,127023,127025,127027,127029,127031,127033,127035,127037,127039,127041],{"class":157,"line":570},[155,127021,127022],{"class":171},"    renderer ",[155,127024,317],{"class":167},[155,127026,126437],{"class":171},[155,127028,44773],{"class":323},[155,127030,317],{"class":167},[155,127032,11957],{"class":263},[155,127034,7589],{"class":171},[155,127036,44769],{"class":323},[155,127038,317],{"class":167},[155,127040,126452],{"class":263},[155,127042,363],{"class":171},[155,127044,127045],{"class":157,"line":575},[155,127046,217],{"emptyLinePlaceholder":216},[155,127048,127049,127051,127053,127055,127057,127059,127061],{"class":157,"line":581},[155,127050,2000],{"class":167},[155,127052,120064],{"class":171},[155,127054,1131],{"class":167},[155,127056,2008],{"class":263},[155,127058,230],{"class":171},[155,127060,20389],{"class":263},[155,127062,242],{"class":171},[155,127064,127065],{"class":157,"line":592},[155,127066,120079],{"class":171},[155,127068,127069],{"class":157,"line":610},[155,127070,217],{"emptyLinePlaceholder":216},[155,127072,127073,127076,127079,127081,127084],{"class":157,"line":622},[155,127074,127075],{"class":171},"    renderer.update_scene(data, ",[155,127077,127078],{"class":323},"camera",[155,127080,317],{"class":167},[155,127082,127083],{"class":732},"\"fixed_camera\"",[155,127085,363],{"class":171},[155,127087,127088,127091,127093],{"class":157,"line":638},[155,127089,127090],{"class":171},"    image ",[155,127092,317],{"class":167},[155,127094,126148],{"class":171},[155,127096,127097],{"class":157,"line":650},[155,127098,217],{"emptyLinePlaceholder":216},[155,127100,127101,127104,127106,127109,127111],{"class":157,"line":662},[155,127102,127103],{"class":171},"    output_path ",[155,127105,317],{"class":167},[155,127107,127108],{"class":171}," Path(",[155,127110,126578],{"class":732},[155,127112,363],{"class":171},[155,127114,127115],{"class":157,"line":678},[155,127116,127117],{"class":171},"    Image.fromarray(image).save(output_path)\n",[155,127119,127120],{"class":157,"line":694},[155,127121,127122],{"class":171},"    renderer.close()\n",[155,127124,127125],{"class":157,"line":706},[155,127126,217],{"emptyLinePlaceholder":216},[155,127128,127129,127131,127133,127136],{"class":157,"line":715},[155,127130,822],{"class":263},[155,127132,230],{"class":171},[155,127134,127135],{"class":732},"\"saved:\"",[155,127137,127138],{"class":171},", output_path.resolve())\n",[155,127140,127141,127143,127145,127148],{"class":157,"line":720},[155,127142,822],{"class":263},[155,127144,230],{"class":171},[155,127146,127147],{"class":732},"\"image shape:\"",[155,127149,127150],{"class":171},", image.shape)\n",[155,127152,127153],{"class":157,"line":739},[155,127154,217],{"emptyLinePlaceholder":216},[155,127156,127157],{"class":157,"line":745},[155,127158,217],{"emptyLinePlaceholder":216},[155,127160,127161,127163,127165,127167,127169],{"class":157,"line":773},[155,127162,723],{"class":167},[155,127164,726],{"class":263},[155,127166,120122],{"class":167},[155,127168,120125],{"class":732},[155,127170,736],{"class":171},[155,127172,127173],{"class":157,"line":779},[155,127174,120132],{"class":171},[24,127176,122133],{},[146,127178,127180],{"className":43613,"code":127179,"language":43615,"meta":39,"style":39},"touch ch5_renderer.py\n",[152,127181,127182],{"__ignoreMap":39},[155,127183,127184,127186],{"class":157,"line":158},[155,127185,119846],{"class":226},[155,127187,127188],{"class":732}," ch5_renderer.py\n",[14,127190,120135],{"id":120135},[24,127192,127193],{},"viewer 上下文：",[146,127195,127197],{"className":148,"code":127196,"language":150,"meta":39,"style":39},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[152,127198,127199],{"__ignoreMap":39},[155,127200,127201,127203,127205,127207],{"class":157,"line":158},[155,127202,126396],{"class":167},[155,127204,126399],{"class":171},[155,127206,907],{"class":167},[155,127208,126404],{"class":171},[24,127210,127211,127213],{},[152,127212,126396],{}," 语句会创建窗口，并在退出时自动清理资源。",[24,127215,127216],{},"窗口循环：",[146,127218,127220],{"className":148,"code":127219,"language":150,"meta":39,"style":39},"while viewer.is_running() and data.time \u003C 5.0:\n",[152,127221,127222],{"__ignoreMap":39},[155,127223,127224,127227,127229,127231,127233,127235,127237],{"class":157,"line":158},[155,127225,127226],{"class":167},"while",[155,127228,126750],{"class":171},[155,127230,50245],{"class":167},[155,127232,126755],{"class":171},[155,127234,20959],{"class":167},[155,127236,126760],{"class":263},[155,127238,736],{"class":171},[24,127240,127241],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[24,127243,127244],{},"固定相机：",[146,127246,127248],{"className":71630,"code":127247,"language":71632,"meta":39,"style":39},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[152,127249,127250],{"__ignoreMap":39},[155,127251,127252,127254,127256,127258,127260,127262,127264,127266,127269,127272,127274,127277],{"class":157,"line":158},[155,127253,20959],{"class":171},[155,127255,127078],{"class":69863},[155,127257,34745],{"class":226},[155,127259,317],{"class":171},[155,127261,127083],{"class":732},[155,127263,119669],{"class":226},[155,127265,317],{"class":171},[155,127267,127268],{"class":732},"\"1.5 -2.0 1.2\"",[155,127270,127271],{"class":226}," xyaxes",[155,127273,317],{"class":171},[155,127275,127276],{"class":732},"\"1 0.75 0 0 0 1\"",[155,127278,119707],{"class":171},[24,127280,127281],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[14,127283,127285],{"id":127284},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[146,127287,127289],{"className":148,"code":127288,"language":150,"meta":39,"style":39},"import time\n",[152,127290,127291],{"__ignoreMap":39},[155,127292,127293,127295],{"class":157,"line":158},[155,127294,168],{"class":167},[155,127296,1366],{"class":171},[24,127298,127299],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[146,127301,127303],{"className":148,"code":127302,"language":150,"meta":39,"style":39},"import mujoco\nimport mujoco.viewer\n",[152,127304,127305,127311],{"__ignoreMap":39},[155,127306,127307,127309],{"class":157,"line":158},[155,127308,168],{"class":167},[155,127310,119864],{"class":171},[155,127312,127313,127315],{"class":157,"line":46},[155,127314,168],{"class":167},[155,127316,126115],{"class":171},[24,127318,127319],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[146,127321,127322],{"className":148,"code":127196,"language":150,"meta":39,"style":39},[152,127323,127324],{"__ignoreMap":39},[155,127325,127326,127328,127330,127332],{"class":157,"line":158},[155,127327,126396],{"class":167},[155,127329,126399],{"class":171},[155,127331,907],{"class":167},[155,127333,126404],{"class":171},[24,127335,127336,127337,127340],{},"打开一个 viewer 窗口。",[152,127338,127339],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[146,127342,127343],{"className":148,"code":127219,"language":150,"meta":39,"style":39},[152,127344,127345],{"__ignoreMap":39},[155,127346,127347,127349,127351,127353,127355,127357,127359],{"class":157,"line":158},[155,127348,127226],{"class":167},[155,127350,126750],{"class":171},[155,127352,50245],{"class":167},[155,127354,126755],{"class":171},[155,127356,20959],{"class":167},[155,127358,126760],{"class":263},[155,127360,736],{"class":171},[24,127362,127363,127364,127367],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[152,127365,127366],{},"viewer.is_running()"," 会变成 false，循环结束。",[146,127369,127371],{"className":148,"code":127370,"language":150,"meta":39,"style":39},"step_start = time.time()\n",[152,127372,127373],{"__ignoreMap":39},[155,127374,127375,127378,127380],{"class":157,"line":158},[155,127376,127377],{"class":171},"step_start ",[155,127379,317],{"class":167},[155,127381,126772],{"class":171},[24,127383,127384],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[146,127386,127387],{"className":148,"code":126481,"language":150,"meta":39,"style":39},[152,127388,127389,127393],{"__ignoreMap":39},[155,127390,127391],{"class":157,"line":158},[155,127392,123068],{"class":171},[155,127394,127395],{"class":157,"line":46},[155,127396,126492],{"class":171},[24,127398,127399,127401,127402,127404,127405,127407,127408,127411],{},[152,127400,119778],{}," 推进物理仿真。",[152,127403,126500],{}," 把最新的 ",[152,127406,3003],{}," 同步到窗口里显示。没有 ",[152,127409,127410],{},"sync()","，窗口可能看不到最新状态。",[146,127413,127414],{"className":148,"code":126511,"language":150,"meta":39,"style":39},[152,127415,127416],{"__ignoreMap":39},[155,127417,127418,127420,127422,127424,127426,127428,127430],{"class":157,"line":158},[155,127419,126518],{"class":171},[155,127421,317],{"class":167},[155,127423,126523],{"class":171},[155,127425,2039],{"class":167},[155,127427,126528],{"class":171},[155,127429,2039],{"class":167},[155,127431,126533],{"class":171},[24,127433,127434],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[146,127436,127438],{"className":148,"code":127437,"language":150,"meta":39,"style":39},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[152,127439,127440,127452],{"__ignoreMap":39},[155,127441,127442,127444,127446,127448,127450],{"class":157,"line":158},[155,127443,723],{"class":167},[155,127445,126810],{"class":171},[155,127447,1148],{"class":167},[155,127449,1151],{"class":263},[155,127451,736],{"class":171},[155,127453,127454],{"class":157,"line":46},[155,127455,127456],{"class":171},"    time.sleep(sleep_time)\n",[24,127458,127459],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[14,127461,127463],{"id":127462},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[146,127465,127467],{"className":148,"code":127466,"language":150,"meta":39,"style":39},"from pathlib import Path\n",[152,127468,127469],{"__ignoreMap":39},[155,127470,127471,127473,127475,127477],{"class":157,"line":158},[155,127472,183],{"class":167},[155,127474,126874],{"class":171},[155,127476,168],{"class":167},[155,127478,126879],{"class":171},[24,127480,127481,127482,127485,127486,127489],{},"导入 ",[152,127483,127484],{},"Path","，用来处理文件路径。相比直接写字符串，",[152,127487,127488],{},"Path(\"render_output.png\")"," 更清晰。",[146,127491,127493],{"className":148,"code":127492,"language":150,"meta":39,"style":39},"from PIL import Image\n",[152,127494,127495],{"__ignoreMap":39},[155,127496,127497,127499,127501,127503],{"class":157,"line":158},[155,127498,183],{"class":167},[155,127500,16889],{"class":263},[155,127502,16892],{"class":167},[155,127504,16895],{"class":171},[24,127506,127507],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[146,127509,127510],{"className":71630,"code":127247,"language":71632,"meta":39,"style":39},[152,127511,127512],{"__ignoreMap":39},[155,127513,127514,127516,127518,127520,127522,127524,127526,127528,127530,127532,127534,127536],{"class":157,"line":158},[155,127515,20959],{"class":171},[155,127517,127078],{"class":69863},[155,127519,34745],{"class":226},[155,127521,317],{"class":171},[155,127523,127083],{"class":732},[155,127525,119669],{"class":226},[155,127527,317],{"class":171},[155,127529,127268],{"class":732},[155,127531,127271],{"class":226},[155,127533,317],{"class":171},[155,127535,127276],{"class":732},[155,127537,119707],{"class":171},[24,127539,127540,127541,127543,127544,127546,127547,127550,127551,127553],{},"定义一个相机。",[152,127542,98373],{}," 是相机名字。",[152,127545,122709],{}," 是相机在世界里的位置。",[152,127548,127549],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[152,127552,122709],{}," 来调视角。",[146,127555,127557],{"className":148,"code":127556,"language":150,"meta":39,"style":39},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[152,127558,127559],{"__ignoreMap":39},[155,127560,127561,127563,127565,127567,127569,127571,127573,127575,127577,127579,127581],{"class":157,"line":158},[155,127562,126133],{"class":171},[155,127564,317],{"class":167},[155,127566,126437],{"class":171},[155,127568,44773],{"class":323},[155,127570,317],{"class":167},[155,127572,11957],{"class":263},[155,127574,7589],{"class":171},[155,127576,44769],{"class":323},[155,127578,317],{"class":167},[155,127580,126452],{"class":263},[155,127582,363],{"class":171},[24,127584,127585,127586,119581,127588,127590],{},"创建离屏渲染器。",[152,127587,44773],{},[152,127589,44769],{}," 决定输出图片大小。",[146,127592,127593],{"className":148,"code":120239,"language":150,"meta":39,"style":39},[152,127594,127595,127611],{"__ignoreMap":39},[155,127596,127597,127599,127601,127603,127605,127607,127609],{"class":157,"line":158},[155,127598,1125],{"class":167},[155,127600,120064],{"class":171},[155,127602,1131],{"class":167},[155,127604,2008],{"class":263},[155,127606,230],{"class":171},[155,127608,20389],{"class":263},[155,127610,242],{"class":171},[155,127612,127613],{"class":157,"line":46},[155,127614,120262],{"class":171},[24,127616,127617],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[146,127619,127621],{"className":148,"code":127620,"language":150,"meta":39,"style":39},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[152,127622,127623],{"__ignoreMap":39},[155,127624,127625,127628,127630,127632,127634],{"class":157,"line":158},[155,127626,127627],{"class":171},"renderer.update_scene(data, ",[155,127629,127078],{"class":323},[155,127631,317],{"class":167},[155,127633,127083],{"class":732},[155,127635,363],{"class":171},[24,127637,127638,127639,127641,127642,127645],{},"告诉 renderer：用当前 ",[152,127640,3003],{}," 的状态更新画面，并使用名为 ",[152,127643,127644],{},"fixed_camera"," 的相机视角。",[146,127647,127648],{"className":148,"code":126543,"language":150,"meta":39,"style":39},[152,127649,127650],{"__ignoreMap":39},[155,127651,127652,127654,127656],{"class":157,"line":158},[155,127653,126143],{"class":171},[155,127655,317],{"class":167},[155,127657,126148],{"class":171},[24,127659,127660,127661,127664],{},"真正渲染出图像。",[152,127662,127663],{},"image"," 是一个 NumPy 数组，不是文件。",[146,127666,127668],{"className":148,"code":127667,"language":150,"meta":39,"style":39},"Image.fromarray(image).save(output_path)\n",[152,127669,127670],{"__ignoreMap":39},[155,127671,127672],{"class":157,"line":158},[155,127673,127667],{"class":171},[24,127675,127676,127677,48174],{},"把数组转换成图片，并保存到 ",[152,127678,127679],{},"render_output.png",[146,127681,127683],{"className":148,"code":127682,"language":150,"meta":39,"style":39},"renderer.close()\n",[152,127684,127685],{"__ignoreMap":39},[155,127686,127687],{"class":157,"line":158},[155,127688,127682],{"class":171},[24,127690,127691],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[20037,127693,120879],{"id":120878},[24,127695,127696,127697,127699,127700,48174],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[152,127698,127679],{},"，并输出图像数组形状，例如 ",[152,127701,127702],{},"(480, 640, 3)",[24,127704,127705],{},"如果图片里看不到方块，先检查：",[28,127707,127708,127711,127714],{},[31,127709,127710],{},"方块是否掉到相机视野外。",[31,127712,127713],{},"camera 位置是否合理。",[31,127715,127716,127717,127720],{},"是否在 ",[152,127718,127719],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[20037,127722,120911],{"id":120910},[24,127724,127725],{},"运行 viewer:",[146,127727,127729],{"className":43613,"code":127728,"language":43615,"meta":39,"style":39},"python ch5_viewer.py\n",[152,127730,127731],{"__ignoreMap":39},[155,127732,127733,127735],{"class":157,"line":158},[155,127734,150],{"class":226},[155,127736,126859],{"class":732},[24,127738,127739],{},"运行 renderer:",[146,127741,127743],{"className":43613,"code":127742,"language":43615,"meta":39,"style":39},"python ch5_renderer.py\n",[152,127744,127745],{"__ignoreMap":39},[155,127746,127747,127749],{"class":157,"line":158},[155,127748,150],{"class":226},[155,127750,127188],{"class":732},[24,127752,127753],{},"如果在服务器上运行:",[146,127755,127757],{"className":43613,"code":127756,"language":43615,"meta":39,"style":39},"MUJOCO_GL=egl python ch5_renderer.py\n",[152,127758,127759],{"__ignoreMap":39},[155,127760,127761,127763,127765,127767,127770],{"class":157,"line":158},[155,127762,126377],{"class":171},[155,127764,317],{"class":167},[155,127766,126367],{"class":732},[155,127768,127769],{"class":226}," python",[155,127771,127188],{"class":732},[24,127773,126345],{},[146,127775,127777],{"className":43613,"code":127776,"language":43615,"meta":39,"style":39},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[152,127778,127779],{"__ignoreMap":39},[155,127780,127781,127783,127785,127787,127789],{"class":157,"line":158},[155,127782,126377],{"class":171},[155,127784,317],{"class":167},[155,127786,126371],{"class":732},[155,127788,127769],{"class":226},[155,127790,127188],{"class":732},[24,127792,127793],{},"再做几个练习：",[28,127795,127796,127803,127806,127812],{},[31,127797,127798,127799,127802],{},"把 renderer 分辨率改成 ",[152,127800,127801],{},"height=240, width=320","，观察输出 shape。",[31,127804,127805],{},"把方块颜色改成蓝色，重新保存图片。",[31,127807,127808,127809,127811],{},"把相机 ",[152,127810,122709],{}," 改远一点，观察画面中物体是否变小。",[31,127813,127814,127815,120977,127818,127821],{},"把 viewer 示例中的 ",[152,127816,127817],{},"data.time \u003C 5.0",[152,127819,127820],{},"data.time \u003C 20.0","，观察更长时间。",[20037,127823,121016],{"id":121015},[14,127825,127827],{"id":127826},"viewer-窗口打不开","viewer 窗口打不开",[24,127829,127830],{},"安装:",[146,127832,127834],{"className":43613,"code":127833,"language":43615,"meta":39,"style":39},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[152,127835,127836],{"__ignoreMap":39},[155,127837,127838,127840,127842,127844,127846,127848,127850,127852,127854,127856,127858],{"class":157,"line":158},[155,127839,44368],{"class":226},[155,127841,46104],{"class":732},[155,127843,43625],{"class":732},[155,127845,46189],{"class":263},[155,127847,121069],{"class":732},[155,127849,119397],{"class":732},[155,127851,121074],{"class":732},[155,127853,119410],{"class":732},[155,127855,119416],{"class":732},[155,127857,119407],{"class":732},[155,127859,127860],{"class":732}," libXinerama\n",[14,127862,127864],{"id":127863},"glfwerror",[152,127865,127866],{},"GLFWError",[24,127868,127869],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[14,127871,127873],{"id":127872},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[24,127875,127876,127877,101102,127879,127881],{},"尝试 ",[152,127878,119600],{},[152,127880,119603],{},"。可能存在版本差异。",[14,127883,127884],{"id":127884},"保存图片是黑的",[24,127886,121138],{},[28,127888,127889,127892,127895,127905],{},[31,127890,127891],{},"XML 里是否有 light。",[31,127893,127894],{},"相机是否对着模型。",[31,127896,127897,127898,127901,127902,48174],{},"是否先 ",[152,127899,127900],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[152,127903,127904],{},"renderer.render()",[31,127906,127907],{},"物体是否已经掉出视野。",[14,127909,127910],{"id":127910},"远程服务器没有显示器",[24,127912,127913],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[146,127915,127916],{"className":43613,"code":127756,"language":43615,"meta":39,"style":39},[152,127917,127918],{"__ignoreMap":39},[155,127919,127920,127922,127924,127926,127928],{"class":157,"line":158},[155,127921,126377],{"class":171},[155,127923,317],{"class":167},[155,127925,126367],{"class":732},[155,127927,127769],{"class":226},[155,127929,127188],{"class":732},[24,127931,127932],{},"如果 EGL 不可用，再尝试：",[146,127934,127935],{"className":43613,"code":127776,"language":43615,"meta":39,"style":39},[152,127936,127937],{"__ignoreMap":39},[155,127938,127939,127941,127943,127945,127947],{"class":157,"line":158},[155,127940,126377],{"class":171},[155,127942,317],{"class":167},[155,127944,126371],{"class":732},[155,127946,127769],{"class":226},[155,127948,127188],{"class":732},[20037,127950,121170],{"id":121169},[24,127952,127953],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[28,127955,127956,127959,127962],{},[31,127957,127958],{},"先用 viewer 看模型和控制是否正常。",[31,127960,127961],{},"再用 renderer 保存图片或构造视觉观测。",[31,127963,127964],{},"最后把状态、动作、图像、奖励组织成训练数据。",[20011,127966,127967],{},"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":39,"searchDepth":46,"depth":46,"links":127969},[127970,127971,127972,127977,127982,127983,127984,127991],{"id":119209,"depth":46,"text":119210},{"id":119332,"depth":46,"text":119333},{"id":119607,"depth":46,"text":119608,"children":127973},[127974,127975,127976],{"id":126474,"depth":121,"text":126475},{"id":126504,"depth":121,"text":126505},{"id":126539,"depth":121,"text":126540},{"id":119815,"depth":46,"text":119816,"children":127978},[127979,127980,127981],{"id":120135,"depth":121,"text":120135},{"id":127284,"depth":121,"text":127285},{"id":127462,"depth":121,"text":127463},{"id":120878,"depth":46,"text":120879},{"id":120910,"depth":46,"text":120911},{"id":121015,"depth":46,"text":121016,"children":127985},[127986,127987,127988,127989,127990],{"id":127826,"depth":121,"text":127827},{"id":127863,"depth":121,"text":127866},{"id":127872,"depth":121,"text":127873},{"id":127884,"depth":121,"text":127884},{"id":127910,"depth":121,"text":127910},{"id":121169,"depth":46,"text":121170},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":126082,"description":39},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":127998,"title":127999,"body":128000,"description":39,"extension":20021,"meta":129911,"navigation":216,"path":129912,"seo":129913,"stem":129914,"__hash__":129915},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":128001,"toc":129887},[128002,128005,128007,128010,128012,128031,128034,128040,128043,128045,128047,128071,128073,128087,128089,128130,128132,128143,128145,128148,128154,128157,128191,128194,128226,128229,128261,128265,128268,128308,128311,128317,128320,128326,128330,128333,128339,128342,128346,128349,128389,128391,128404,128407,128409,128991,128993,129005,129008,129019,129021,129024,129043,129055,129058,129079,129082,129085,129128,129131,129134,129154,129161,129163,129181,129196,129199,129205,129208,129214,129231,129238,129269,129280,129314,129325,129342,129351,129359,129364,129378,129381,129402,129408,129422,129427,129457,129467,129492,129500,129523,129526,129542,129545,129553,129559,129581,129594,129615,129624,129663,129674,129676,129679,129685,129688,129691,129697,129700,129720,129723,129725,129764,129766,129769,129777,129780,129783,129810,129813,129823,129829,129832,129838,129840,129846,129850,129853,129855,129858,129882,129885],[10,128003,127999],{"id":128004},"_6控制任务cartpole",[20037,128006,119210],{"id":119209},[24,128008,128009],{},"本章搭建一个最小 Cartpole 控制任务。",[24,128011,122894],{},[28,128013,128014,128017,128019,128022,128025,128028],{},[31,128015,128016],{},"slide joint",[31,128018,124747],{},[31,128020,128021],{},"cart force actuator",[31,128023,128024],{},"状态观测",[31,128026,128027],{},"简单控制循环",[31,128029,128030],{},"reward 设计雏形",[24,128032,128033],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[146,128035,128038],{"className":128036,"code":128037,"language":25051,"meta":39},[25049],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[152,128039,128037],{"__ignoreMap":39},[24,128041,128042],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[20037,128044,119333],{"id":119332},[24,128046,119336],{},[146,128048,128049],{"className":43613,"code":122951,"language":43615,"meta":39,"style":39},[152,128050,128051],{"__ignoreMap":39},[155,128052,128053,128055,128057,128059,128061,128063,128065,128067,128069],{"class":157,"line":158},[155,128054,44368],{"class":226},[155,128056,46104],{"class":732},[155,128058,43625],{"class":732},[155,128060,46189],{"class":263},[155,128062,122966],{"class":732},[155,128064,119361],{"class":732},[155,128066,121064],{"class":732},[155,128068,119377],{"class":732},[155,128070,122975],{"class":732},[24,128072,121382],{},[146,128074,128075],{"className":43613,"code":119482,"language":43615,"meta":39,"style":39},[152,128076,128077],{"__ignoreMap":39},[155,128078,128079,128081,128083,128085],{"class":157,"line":158},[155,128080,43622],{"class":226},[155,128082,43625],{"class":732},[155,128084,119493],{"class":732},[155,128086,119496],{"class":732},[24,128088,121399],{},[146,128090,128092],{"className":43613,"code":128091,"language":43615,"meta":39,"style":39},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[152,128093,128094,128111,128120],{"__ignoreMap":39},[155,128095,128096,128098,128100,128102,128105,128107,128109],{"class":157,"line":158},[155,128097,50119],{"class":226},[155,128099,48965],{"class":732},[155,128101,44907],{"class":263},[155,128103,128104],{"class":732}," mujoco-cartpole",[155,128106,119538],{"class":732},[155,128108,119541],{"class":263},[155,128110,119544],{"class":263},[155,128112,128113,128115,128117],{"class":157,"line":46},[155,128114,50119],{"class":226},[155,128116,119551],{"class":732},[155,128118,128119],{"class":732}," mujoco-cartpole\n",[155,128121,128122,128124,128126,128128],{"class":157,"line":121},[155,128123,43622],{"class":226},[155,128125,43625],{"class":732},[155,128127,119493],{"class":732},[155,128129,119496],{"class":732},[24,128131,119567],{},[28,128133,128134,128137,128140],{},[31,128135,128136],{},"本章不依赖 Gymnasium。",[31,128138,128139],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[31,128141,128142],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[20037,128144,119608],{"id":119607},[24,128146,128147],{},"Cartpole 的模型结构:",[146,128149,128152],{"className":128150,"code":128151,"language":25051,"meta":39},[25049],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[152,128153,128151],{"__ignoreMap":39},[24,128155,128156],{},"小车通过 slide joint 左右移动:",[146,128158,128160],{"className":71630,"code":128159,"language":71632,"meta":39,"style":39},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[152,128161,128162],{"__ignoreMap":39},[155,128163,128164,128166,128168,128170,128172,128175,128177,128179,128182,128184,128186,128189],{"class":157,"line":158},[155,128165,20959],{"class":171},[155,128167,121519],{"class":69863},[155,128169,34745],{"class":226},[155,128171,317],{"class":171},[155,128173,128174],{"class":732},"\"cart_x\"",[155,128176,72387],{"class":226},[155,128178,317],{"class":171},[155,128180,128181],{"class":732},"\"slide\"",[155,128183,124591],{"class":226},[155,128185,317],{"class":171},[155,128187,128188],{"class":732},"\"1 0 0\"",[155,128190,119707],{"class":171},[24,128192,128193],{},"杆子通过 hinge joint 旋转:",[146,128195,128197],{"className":71630,"code":128196,"language":71632,"meta":39,"style":39},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[152,128198,128199],{"__ignoreMap":39},[155,128200,128201,128203,128205,128207,128209,128212,128214,128216,128218,128220,128222,128224],{"class":157,"line":158},[155,128202,20959],{"class":171},[155,128204,121519],{"class":69863},[155,128206,34745],{"class":226},[155,128208,317],{"class":171},[155,128210,128211],{"class":732},"\"pole_hinge\"",[155,128213,72387],{"class":226},[155,128215,317],{"class":171},[155,128217,124582],{"class":732},[155,128219,124591],{"class":226},[155,128221,317],{"class":171},[155,128223,124596],{"class":732},[155,128225,119707],{"class":171},[24,128227,128228],{},"控制力作用在小车 slide joint 上:",[146,128230,128232],{"className":71630,"code":128231,"language":71632,"meta":39,"style":39},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[152,128233,128234],{"__ignoreMap":39},[155,128235,128236,128238,128240,128242,128244,128247,128249,128251,128253,128255,128257,128259],{"class":157,"line":158},[155,128237,20959],{"class":171},[155,128239,124637],{"class":69863},[155,128241,34745],{"class":226},[155,128243,317],{"class":171},[155,128245,128246],{"class":732},"\"cart_motor\"",[155,128248,124647],{"class":226},[155,128250,317],{"class":171},[155,128252,128174],{"class":732},[155,128254,124654],{"class":226},[155,128256,317],{"class":171},[155,128258,72879],{"class":732},[155,128260,119707],{"class":171},[14,128262,128264],{"id":128263},"cartpole-的状态是什么","Cartpole 的状态是什么",[24,128266,128267],{},"这个简化模型有两个关节：",[20222,128269,128270,128281],{},[20225,128271,128272],{},[20228,128273,128274,128276,128278],{},[20231,128275,121322],{"align":43527},[20231,128277,43528],{"align":43527},[20231,128279,128280],{"align":43527},"对应状态",[20269,128282,128283,128296],{},[20228,128284,128285,128290,128293],{},[20274,128286,128287],{"align":43527},[152,128288,128289],{},"cart_x",[20274,128291,128292],{"align":43527},"slide",[20274,128294,128295],{"align":43527},"小车 x 位置",[20228,128297,128298,128303,128305],{},[20274,128299,128300],{"align":43527},[152,128301,128302],{},"pole_hinge",[20274,128304,124403],{"align":43527},[20274,128306,128307],{"align":43527},"杆子角度",[24,128309,128310],{},"所以：",[146,128312,128315],{"className":128313,"code":128314,"language":25051,"meta":39},[25049],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[152,128316,128314],{"__ignoreMap":39},[24,128318,128319],{},"把它们拼起来就是观测：",[146,128321,128324],{"className":128322,"code":128323,"language":25051,"meta":39},[25049],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[152,128325,128323],{"__ignoreMap":39},[14,128327,128329],{"id":128328},"action-是什么","action 是什么",[24,128331,128332],{},"本章只有一个 actuator：",[146,128334,128337],{"className":128335,"code":128336,"language":25051,"meta":39},[25049],"data.ctrl[0] = action\n",[152,128338,128336],{"__ignoreMap":39},[24,128340,128341],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[14,128343,128345],{"id":128344},"reward-是什么","reward 是什么",[24,128347,128348],{},"奖励函数：",[146,128350,128352],{"className":148,"code":128351,"language":150,"meta":39,"style":39},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[152,128353,128354],{"__ignoreMap":39},[155,128355,128356,128358,128361,128363,128365,128367,128370,128372,128375,128377,128379,128381,128384,128386],{"class":157,"line":158},[155,128357,36839],{"class":167},[155,128359,128360],{"class":263}," float",[155,128362,230],{"class":171},[155,128364,120966],{"class":263},[155,128366,70834],{"class":167},[155,128368,128369],{"class":263}," 0.1",[155,128371,26381],{"class":167},[155,128373,128374],{"class":171}," cart_x ",[155,128376,1563],{"class":167},[155,128378,128374],{"class":171},[155,128380,2039],{"class":167},[155,128382,128383],{"class":171}," pole_angle ",[155,128385,1563],{"class":167},[155,128387,128388],{"class":171}," pole_angle)\n",[24,128390,124789],{},[28,128392,128393,128398,128401],{},[31,128394,128395,128396,48174],{},"基础奖励是 ",[152,128397,120966],{},[31,128399,128400],{},"小车离中心越远，扣分越多。",[31,128402,128403],{},"杆子角度越大，扣分越多。",[24,128405,128406],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[20037,128408,119816],{"id":119815},[146,128410,128412],{"className":148,"code":128411,"language":150,"meta":39,"style":39},"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",[152,128413,128414,128420,128430,128434,128438,128446,128451,128455,128459,128463,128468,128472,128477,128482,128487,128491,128496,128501,128506,128510,128514,128518,128522,128526,128531,128535,128539,128543,128547,128551,128561,128568,128572,128576,128590,128604,128617,128647,128651,128655,128667,128679,128687,128691,128704,128708,128712,128721,128725,128741,128751,128764,128777,128781,128804,128822,128826,128838,128842,128846,128856,128866,128870,128886,128927,128931,128951,128967,128971,128975,128987],{"__ignoreMap":39},[155,128415,128416,128418],{"class":157,"line":158},[155,128417,168],{"class":167},[155,128419,119864],{"class":171},[155,128421,128422,128424,128426,128428],{"class":157,"line":46},[155,128423,168],{"class":167},[155,128425,904],{"class":171},[155,128427,907],{"class":167},[155,128429,910],{"class":171},[155,128431,128432],{"class":157,"line":121},[155,128433,217],{"emptyLinePlaceholder":216},[155,128435,128436],{"class":157,"line":180},[155,128437,217],{"emptyLinePlaceholder":216},[155,128439,128440,128442,128444],{"class":157,"line":194},[155,128441,119877],{"class":263},[155,128443,33391],{"class":167},[155,128445,119882],{"class":732},[155,128447,128448],{"class":157,"line":200},[155,128449,128450],{"class":732},"\u003Cmujoco model=\"cartpole\">\n",[155,128452,128453],{"class":157,"line":213},[155,128454,119892],{"class":732},[155,128456,128457],{"class":157,"line":220},[155,128458,217],{"emptyLinePlaceholder":216},[155,128460,128461],{"class":157,"line":245},[155,128462,119901],{"class":732},[155,128464,128465],{"class":157,"line":251},[155,128466,128467],{"class":732},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[155,128469,128470],{"class":157,"line":257},[155,128471,217],{"emptyLinePlaceholder":216},[155,128473,128474],{"class":157,"line":270},[155,128475,128476],{"class":732},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[155,128478,128479],{"class":157,"line":276},[155,128480,128481],{"class":732},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[155,128483,128484],{"class":157,"line":297},[155,128485,128486],{"class":732},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[155,128488,128489],{"class":157,"line":302},[155,128490,217],{"emptyLinePlaceholder":216},[155,128492,128493],{"class":157,"line":308},[155,128494,128495],{"class":732},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[155,128497,128498],{"class":157,"line":366},[155,128499,128500],{"class":732},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[155,128502,128503],{"class":157,"line":379},[155,128504,128505],{"class":732},"        \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",[155,128507,128508],{"class":157,"line":385},[155,128509,125001],{"class":732},[155,128511,128512],{"class":157,"line":415},[155,128513,119930],{"class":732},[155,128515,128516],{"class":157,"line":452},[155,128517,119935],{"class":732},[155,128519,128520],{"class":157,"line":480},[155,128521,217],{"emptyLinePlaceholder":216},[155,128523,128524],{"class":157,"line":486},[155,128525,125018],{"class":732},[155,128527,128528],{"class":157,"line":499},[155,128529,128530],{"class":732},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[155,128532,128533],{"class":157,"line":505},[155,128534,125028],{"class":732},[155,128536,128537],{"class":157,"line":528},[155,128538,119940],{"class":732},[155,128540,128541],{"class":157,"line":549},[155,128542,114261],{"class":732},[155,128544,128545],{"class":157,"line":570},[155,128546,217],{"emptyLinePlaceholder":216},[155,128548,128549],{"class":157,"line":575},[155,128550,217],{"emptyLinePlaceholder":216},[155,128552,128553,128555,128558],{"class":157,"line":581},[155,128554,1484],{"class":167},[155,128556,128557],{"class":226}," get_observation",[155,128559,128560],{"class":171},"(data: mujoco.MjData) -> np.ndarray:\n",[155,128562,128563,128565],{"class":157,"line":592},[155,128564,1692],{"class":167},[155,128566,128567],{"class":171}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[155,128569,128570],{"class":157,"line":610},[155,128571,217],{"emptyLinePlaceholder":216},[155,128573,128574],{"class":157,"line":622},[155,128575,217],{"emptyLinePlaceholder":216},[155,128577,128578,128580,128583,128586,128588],{"class":157,"line":638},[155,128579,1484],{"class":167},[155,128581,128582],{"class":226}," compute_reward",[155,128584,128585],{"class":171},"(obs: np.ndarray) -> ",[155,128587,2833],{"class":263},[155,128589,736],{"class":171},[155,128591,128592,128595,128597,128600,128602],{"class":157,"line":650},[155,128593,128594],{"class":171},"    cart_x ",[155,128596,317],{"class":167},[155,128598,128599],{"class":171}," obs[",[155,128601,1109],{"class":263},[155,128603,2845],{"class":171},[155,128605,128606,128609,128611,128613,128615],{"class":157,"line":662},[155,128607,128608],{"class":171},"    pole_angle ",[155,128610,317],{"class":167},[155,128612,128599],{"class":171},[155,128614,329],{"class":263},[155,128616,2845],{"class":171},[155,128618,128619,128621,128623,128625,128627,128629,128631,128633,128635,128637,128639,128641,128643,128645],{"class":157,"line":678},[155,128620,1692],{"class":167},[155,128622,128360],{"class":263},[155,128624,230],{"class":171},[155,128626,120966],{"class":263},[155,128628,70834],{"class":167},[155,128630,128369],{"class":263},[155,128632,26381],{"class":167},[155,128634,128374],{"class":171},[155,128636,1563],{"class":167},[155,128638,128374],{"class":171},[155,128640,2039],{"class":167},[155,128642,128383],{"class":171},[155,128644,1563],{"class":167},[155,128646,128388],{"class":171},[155,128648,128649],{"class":157,"line":694},[155,128650,217],{"emptyLinePlaceholder":216},[155,128652,128653],{"class":157,"line":706},[155,128654,217],{"emptyLinePlaceholder":216},[155,128656,128657,128659,128661,128663,128665],{"class":157,"line":715},[155,128658,1484],{"class":167},[155,128660,21861],{"class":226},[155,128662,119961],{"class":171},[155,128664,114249],{"class":263},[155,128666,736],{"class":171},[155,128668,128669,128671,128673,128675,128677],{"class":157,"line":720},[155,128670,119970],{"class":171},[155,128672,317],{"class":167},[155,128674,119975],{"class":171},[155,128676,119877],{"class":263},[155,128678,363],{"class":171},[155,128680,128681,128683,128685],{"class":157,"line":739},[155,128682,119984],{"class":171},[155,128684,317],{"class":167},[155,128686,119989],{"class":171},[155,128688,128689],{"class":157,"line":745},[155,128690,217],{"emptyLinePlaceholder":216},[155,128692,128693,128695,128697,128699,128701],{"class":157,"line":773},[155,128694,123632],{"class":171},[155,128696,329],{"class":263},[155,128698,24309],{"class":171},[155,128700,317],{"class":167},[155,128702,128703],{"class":263}," 0.1\n",[155,128705,128706],{"class":157,"line":779},[155,128707,123645],{"class":171},[155,128709,128710],{"class":157,"line":785},[155,128711,217],{"emptyLinePlaceholder":216},[155,128713,128714,128717,128719],{"class":157,"line":791},[155,128715,128716],{"class":171},"    total_reward ",[155,128718,317],{"class":167},[155,128720,123324],{"class":263},[155,128722,128723],{"class":157,"line":796},[155,128724,217],{"emptyLinePlaceholder":216},[155,128726,128727,128729,128731,128733,128735,128737,128739],{"class":157,"line":802},[155,128728,2000],{"class":167},[155,128730,1145],{"class":171},[155,128732,1131],{"class":167},[155,128734,2008],{"class":263},[155,128736,230],{"class":171},[155,128738,26273],{"class":263},[155,128740,242],{"class":171},[155,128742,128743,128746,128748],{"class":157,"line":808},[155,128744,128745],{"class":171},"        obs ",[155,128747,317],{"class":167},[155,128749,128750],{"class":171}," get_observation(data)\n",[155,128752,128753,128756,128758,128760,128762],{"class":157,"line":819},[155,128754,128755],{"class":171},"        pole_angle ",[155,128757,317],{"class":167},[155,128759,128599],{"class":171},[155,128761,329],{"class":263},[155,128763,2845],{"class":171},[155,128765,128766,128769,128771,128773,128775],{"class":157,"line":1832},[155,128767,128768],{"class":171},"        pole_angular_velocity ",[155,128770,317],{"class":167},[155,128772,128599],{"class":171},[155,128774,4444],{"class":263},[155,128776,2845],{"class":171},[155,128778,128779],{"class":157,"line":1838},[155,128780,217],{"emptyLinePlaceholder":216},[155,128782,128783,128786,128788,128791,128793,128795,128797,128799,128801],{"class":157,"line":1844},[155,128784,128785],{"class":171},"        action ",[155,128787,317],{"class":167},[155,128789,128790],{"class":263}," 2.0",[155,128792,26381],{"class":167},[155,128794,128383],{"class":171},[155,128796,1274],{"class":167},[155,128798,80430],{"class":263},[155,128800,26381],{"class":167},[155,128802,128803],{"class":171}," pole_angular_velocity\n",[155,128805,128806,128808,128810,128812,128814,128816,128818,128820],{"class":157,"line":1850},[155,128807,128785],{"class":171},[155,128809,317],{"class":167},[155,128811,126010],{"class":171},[155,128813,2039],{"class":167},[155,128815,120966],{"class":263},[155,128817,7589],{"class":171},[155,128819,120966],{"class":263},[155,128821,363],{"class":171},[155,128823,128824],{"class":157,"line":1861},[155,128825,217],{"emptyLinePlaceholder":216},[155,128827,128828,128830,128832,128834,128836],{"class":157,"line":1866},[155,128829,125180],{"class":171},[155,128831,1109],{"class":263},[155,128833,24309],{"class":171},[155,128835,317],{"class":167},[155,128837,126033],{"class":171},[155,128839,128840],{"class":157,"line":1871},[155,128841,120079],{"class":171},[155,128843,128844],{"class":157,"line":1877},[155,128845,217],{"emptyLinePlaceholder":216},[155,128847,128848,128851,128853],{"class":157,"line":1883},[155,128849,128850],{"class":171},"        reward ",[155,128852,317],{"class":167},[155,128854,128855],{"class":171}," compute_reward(get_observation(data))\n",[155,128857,128858,128861,128863],{"class":157,"line":1894},[155,128859,128860],{"class":171},"        total_reward ",[155,128862,2351],{"class":167},[155,128864,128865],{"class":171}," reward\n",[155,128867,128868],{"class":157,"line":1900},[155,128869,217],{"emptyLinePlaceholder":216},[155,128871,128872,128874,128876,128878,128880,128882,128884],{"class":157,"line":1911},[155,128873,2803],{"class":167},[155,128875,1145],{"class":171},[155,128877,2938],{"class":167},[155,128879,25617],{"class":263},[155,128881,120122],{"class":167},[155,128883,1151],{"class":263},[155,128885,736],{"class":171},[155,128887,128888,128890,128892,128895,128898,128901,128904,128906,128909,128912,128914,128916,128918,128920,128923,128925],{"class":157,"line":1917},[155,128889,4256],{"class":263},[155,128891,230],{"class":171},[155,128893,128894],{"class":732},"\"step:\"",[155,128896,128897],{"class":171},", step, ",[155,128899,128900],{"class":732},"\"obs:\"",[155,128902,128903],{"class":171},", np.round(obs, ",[155,128905,4444],{"class":263},[155,128907,128908],{"class":171},"), ",[155,128910,128911],{"class":732},"\"action:\"",[155,128913,7589],{"class":171},[155,128915,1555],{"class":263},[155,128917,230],{"class":171},[155,128919,2833],{"class":263},[155,128921,128922],{"class":171},"(action), ",[155,128924,4444],{"class":263},[155,128926,1238],{"class":171},[155,128928,128929],{"class":157,"line":1927},[155,128930,217],{"emptyLinePlaceholder":216},[155,128932,128933,128935,128937,128940,128942,128944,128947,128949],{"class":157,"line":1933},[155,128934,822],{"class":263},[155,128936,230],{"class":171},[155,128938,128939],{"class":732},"\"total_reward:\"",[155,128941,7589],{"class":171},[155,128943,1555],{"class":263},[155,128945,128946],{"class":171},"(total_reward, ",[155,128948,4444],{"class":263},[155,128950,1238],{"class":171},[155,128952,128953,128955,128957,128960,128963,128965],{"class":157,"line":1943},[155,128954,822],{"class":263},[155,128956,230],{"class":171},[155,128958,128959],{"class":732},"\"final obs:\"",[155,128961,128962],{"class":171},", np.round(get_observation(data), ",[155,128964,4444],{"class":263},[155,128966,1238],{"class":171},[155,128968,128969],{"class":157,"line":1949},[155,128970,217],{"emptyLinePlaceholder":216},[155,128972,128973],{"class":157,"line":1959},[155,128974,217],{"emptyLinePlaceholder":216},[155,128976,128977,128979,128981,128983,128985],{"class":157,"line":1964},[155,128978,723],{"class":167},[155,128980,726],{"class":263},[155,128982,120122],{"class":167},[155,128984,120125],{"class":732},[155,128986,736],{"class":171},[155,128988,128989],{"class":157,"line":1970},[155,128990,120132],{"class":171},[24,128992,122133],{},[146,128994,128996],{"className":43613,"code":128995,"language":43615,"meta":39,"style":39},"touch ch6_cartpole.py\n",[152,128997,128998],{"__ignoreMap":39},[155,128999,129000,129002],{"class":157,"line":158},[155,129001,119846],{"class":226},[155,129003,129004],{"class":732}," ch6_cartpole.py\n",[24,129006,129007],{},"运行：",[146,129009,129011],{"className":43613,"code":129010,"language":43615,"meta":39,"style":39},"python ch6_cartpole.py\n",[152,129012,129013],{"__ignoreMap":39},[155,129014,129015,129017],{"class":157,"line":158},[155,129016,150],{"class":226},[155,129018,129004],{"class":732},[14,129020,120135],{"id":120135},[24,129022,129023],{},"构造观测：",[146,129025,129027],{"className":148,"code":129026,"language":150,"meta":39,"style":39},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[152,129028,129029,129037],{"__ignoreMap":39},[155,129030,129031,129033,129035],{"class":157,"line":158},[155,129032,1484],{"class":167},[155,129034,128557],{"class":226},[155,129036,128560],{"class":171},[155,129038,129039,129041],{"class":157,"line":46},[155,129040,1692],{"class":167},[155,129042,128567],{"class":171},[24,129044,129045,129048,129049,129051,129052,129054],{},[152,129046,129047],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[152,129050,122593],{}," 2 维，",[152,129053,122923],{}," 2 维，所以 obs 是 4 维。",[24,129056,129057],{},"设置初始角度：",[146,129059,129061],{"className":148,"code":129060,"language":150,"meta":39,"style":39},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[152,129062,129063,129075],{"__ignoreMap":39},[155,129064,129065,129067,129069,129071,129073],{"class":157,"line":158},[155,129066,123262],{"class":171},[155,129068,329],{"class":263},[155,129070,24309],{"class":171},[155,129072,317],{"class":167},[155,129074,128703],{"class":263},[155,129076,129077],{"class":157,"line":46},[155,129078,123106],{"class":171},[24,129080,129081],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[24,129083,129084],{},"简单反馈控制：",[146,129086,129088],{"className":148,"code":129087,"language":150,"meta":39,"style":39},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[152,129089,129090,129110],{"__ignoreMap":39},[155,129091,129092,129094,129096,129098,129100,129102,129104,129106,129108],{"class":157,"line":158},[155,129093,126005],{"class":171},[155,129095,317],{"class":167},[155,129097,128790],{"class":263},[155,129099,26381],{"class":167},[155,129101,128383],{"class":171},[155,129103,1274],{"class":167},[155,129105,80430],{"class":263},[155,129107,26381],{"class":167},[155,129109,128803],{"class":171},[155,129111,129112,129114,129116,129118,129120,129122,129124,129126],{"class":157,"line":46},[155,129113,126005],{"class":171},[155,129115,317],{"class":167},[155,129117,126010],{"class":171},[155,129119,2039],{"class":167},[155,129121,120966],{"class":263},[155,129123,7589],{"class":171},[155,129125,120966],{"class":263},[155,129127,363],{"class":171},[24,129129,129130],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[24,129132,129133],{},"限制动作：",[146,129135,129137],{"className":148,"code":129136,"language":150,"meta":39,"style":39},"np.clip(action, -1.0, 1.0)\n",[152,129138,129139],{"__ignoreMap":39},[155,129140,129141,129144,129146,129148,129150,129152],{"class":157,"line":158},[155,129142,129143],{"class":171},"np.clip(action, ",[155,129145,2039],{"class":167},[155,129147,120966],{"class":263},[155,129149,7589],{"class":171},[155,129151,120966],{"class":263},[155,129153,363],{"class":171},[24,129155,129156,129157,129160],{},"因为 XML 里 ",[152,129158,129159],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[14,129162,120271],{"id":120271},[146,129164,129165],{"className":148,"code":129026,"language":150,"meta":39,"style":39},[152,129166,129167,129175],{"__ignoreMap":39},[155,129168,129169,129171,129173],{"class":157,"line":158},[155,129170,1484],{"class":167},[155,129172,128557],{"class":226},[155,129174,128560],{"class":171},[155,129176,129177,129179],{"class":157,"line":46},[155,129178,1692],{"class":167},[155,129180,128567],{"class":171},[24,129182,129183,129184,129187,129188,129191,129192,129195],{},"这段定义了一个函数，用来获取当前观测。",[152,129185,129186],{},"data.qpos.copy()"," 是位置数组副本，",[152,129189,129190],{},"data.qvel.copy()"," 是速度数组副本。",[152,129193,129194],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[24,129197,129198],{},"在本章模型里：",[146,129200,129203],{"className":129201,"code":129202,"language":25051,"meta":39},[25049],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[152,129204,129202],{"__ignoreMap":39},[24,129206,129207],{},"所以返回的 obs 是：",[146,129209,129212],{"className":129210,"code":129211,"language":25051,"meta":39},[25049],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[152,129213,129211],{"__ignoreMap":39},[146,129215,129217],{"className":148,"code":129216,"language":150,"meta":39,"style":39},"def compute_reward(obs: np.ndarray) -> float:\n",[152,129218,129219],{"__ignoreMap":39},[155,129220,129221,129223,129225,129227,129229],{"class":157,"line":158},[155,129222,1484],{"class":167},[155,129224,128582],{"class":226},[155,129226,128585],{"class":171},[155,129228,2833],{"class":263},[155,129230,736],{"class":171},[24,129232,129233,129234,129237],{},"这行定义奖励函数。输入是观测 ",[152,129235,129236],{},"obs","，输出是一个浮点数奖励。",[146,129239,129241],{"className":148,"code":129240,"language":150,"meta":39,"style":39},"cart_x = obs[0]\npole_angle = obs[1]\n",[152,129242,129243,129256],{"__ignoreMap":39},[155,129244,129245,129248,129250,129252,129254],{"class":157,"line":158},[155,129246,129247],{"class":171},"cart_x ",[155,129249,317],{"class":167},[155,129251,128599],{"class":171},[155,129253,1109],{"class":263},[155,129255,2845],{"class":171},[155,129257,129258,129261,129263,129265,129267],{"class":157,"line":46},[155,129259,129260],{"class":171},"pole_angle ",[155,129262,317],{"class":167},[155,129264,128599],{"class":171},[155,129266,329],{"class":263},[155,129268,2845],{"class":171},[24,129270,129271,129272,129275,129276,129279],{},"数组索引从 0 开始。",[152,129273,129274],{},"obs[0]"," 是第一个元素，也就是小车位置。",[152,129277,129278],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[146,129281,129282],{"className":148,"code":128351,"language":150,"meta":39,"style":39},[152,129283,129284],{"__ignoreMap":39},[155,129285,129286,129288,129290,129292,129294,129296,129298,129300,129302,129304,129306,129308,129310,129312],{"class":157,"line":158},[155,129287,36839],{"class":167},[155,129289,128360],{"class":263},[155,129291,230],{"class":171},[155,129293,120966],{"class":263},[155,129295,70834],{"class":167},[155,129297,128369],{"class":263},[155,129299,26381],{"class":167},[155,129301,128374],{"class":171},[155,129303,1563],{"class":167},[155,129305,128374],{"class":171},[155,129307,2039],{"class":167},[155,129309,128383],{"class":171},[155,129311,1563],{"class":167},[155,129313,128388],{"class":171},[24,129315,129316,129317,129320,129321,129324],{},"这行计算奖励。",[152,129318,129319],{},"cart_x * cart_x"," 是小车位置的平方，",[152,129322,129323],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[146,129326,129328],{"className":148,"code":129327,"language":150,"meta":39,"style":39},"data.qpos[1] = 0.1\n",[152,129329,129330],{"__ignoreMap":39},[155,129331,129332,129334,129336,129338,129340],{"class":157,"line":158},[155,129333,123262],{"class":171},[155,129335,329],{"class":263},[155,129337,24309],{"class":171},[155,129339,317],{"class":167},[155,129341,128703],{"class":263},[24,129343,129344,129345,129347,129348,129350],{},"手动设置杆子的初始角度。因为 ",[152,129346,124019],{}," 是小车位置，",[152,129349,124022],{}," 是杆子角度，所以这里改的是杆子。",[146,129352,129353],{"className":148,"code":123106,"language":150,"meta":39,"style":39},[152,129354,129355],{"__ignoreMap":39},[155,129356,129357],{"class":157,"line":158},[155,129358,123106],{"class":171},[24,129360,124065,129361,129363],{},[152,129362,122593],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[146,129365,129367],{"className":148,"code":129366,"language":150,"meta":39,"style":39},"total_reward = 0.0\n",[152,129368,129369],{"__ignoreMap":39},[155,129370,129371,129374,129376],{"class":157,"line":158},[155,129372,129373],{"class":171},"total_reward ",[155,129375,317],{"class":167},[155,129377,123324],{"class":263},[24,129379,129380],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[146,129382,129384],{"className":148,"code":129383,"language":150,"meta":39,"style":39},"for step in range(1000):\n",[152,129385,129386],{"__ignoreMap":39},[155,129387,129388,129390,129392,129394,129396,129398,129400],{"class":157,"line":158},[155,129389,1125],{"class":167},[155,129391,1145],{"class":171},[155,129393,1131],{"class":167},[155,129395,2008],{"class":263},[155,129397,230],{"class":171},[155,129399,26273],{"class":263},[155,129401,242],{"class":171},[24,129403,129404,129405,129407],{},"循环 1000 步。",[152,129406,125697],{}," 是当前步数，从 0 到 999。",[146,129409,129411],{"className":148,"code":129410,"language":150,"meta":39,"style":39},"obs = get_observation(data)\n",[152,129412,129413],{"__ignoreMap":39},[155,129414,129415,129418,129420],{"class":157,"line":158},[155,129416,129417],{"class":171},"obs ",[155,129419,317],{"class":167},[155,129421,128750],{"class":171},[24,129423,129424,129425,48174],{},"读取当前状态，保存到 ",[152,129426,129236],{},[146,129428,129430],{"className":148,"code":129429,"language":150,"meta":39,"style":39},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[152,129431,129432,129444],{"__ignoreMap":39},[155,129433,129434,129436,129438,129440,129442],{"class":157,"line":158},[155,129435,129260],{"class":171},[155,129437,317],{"class":167},[155,129439,128599],{"class":171},[155,129441,329],{"class":263},[155,129443,2845],{"class":171},[155,129445,129446,129449,129451,129453,129455],{"class":157,"line":46},[155,129447,129448],{"class":171},"pole_angular_velocity ",[155,129450,317],{"class":167},[155,129452,128599],{"class":171},[155,129454,4444],{"class":263},[155,129456,2845],{"class":171},[24,129458,129459,129460,129463,129464,48174],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[152,129461,129462],{},"obs[3]","？因为 obs 的顺序是 ",[152,129465,129466],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[146,129468,129470],{"className":148,"code":129469,"language":150,"meta":39,"style":39},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[152,129471,129472],{"__ignoreMap":39},[155,129473,129474,129476,129478,129480,129482,129484,129486,129488,129490],{"class":157,"line":158},[155,129475,126005],{"class":171},[155,129477,317],{"class":167},[155,129479,128790],{"class":263},[155,129481,26381],{"class":167},[155,129483,128383],{"class":171},[155,129485,1274],{"class":167},[155,129487,80430],{"class":263},[155,129489,26381],{"class":167},[155,129491,128803],{"class":171},[24,129493,129494,129495,119581,129497,129499],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[152,129496,123823],{},[152,129498,4938],{}," 是人为设置的系数，不是固定公式。",[146,129501,129503],{"className":148,"code":129502,"language":150,"meta":39,"style":39},"action = np.clip(action, -1.0, 1.0)\n",[152,129504,129505],{"__ignoreMap":39},[155,129506,129507,129509,129511,129513,129515,129517,129519,129521],{"class":157,"line":158},[155,129508,126005],{"class":171},[155,129510,317],{"class":167},[155,129512,126010],{"class":171},[155,129514,2039],{"class":167},[155,129516,120966],{"class":263},[155,129518,7589],{"class":171},[155,129520,120966],{"class":263},[155,129522,363],{"class":171},[24,129524,129525],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[146,129527,129528],{"className":148,"code":128336,"language":150,"meta":39,"style":39},[152,129529,129530],{"__ignoreMap":39},[155,129531,129532,129534,129536,129538,129540],{"class":157,"line":158},[155,129533,124434],{"class":171},[155,129535,1109],{"class":263},[155,129537,24309],{"class":171},[155,129539,317],{"class":167},[155,129541,126033],{"class":171},[24,129543,129544],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[146,129546,129547],{"className":148,"code":123068,"language":150,"meta":39,"style":39},[152,129548,129549],{"__ignoreMap":39},[155,129550,129551],{"class":157,"line":158},[155,129552,123068],{"class":171},[24,129554,129555,129556,129558],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[152,129557,124689],{}," 计算小车和杆子的下一刻状态。",[146,129560,129562],{"className":148,"code":129561,"language":150,"meta":39,"style":39},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[152,129563,129564,129573],{"__ignoreMap":39},[155,129565,129566,129569,129571],{"class":157,"line":158},[155,129567,129568],{"class":171},"reward ",[155,129570,317],{"class":167},[155,129572,128855],{"class":171},[155,129574,129575,129577,129579],{"class":157,"line":46},[155,129576,129373],{"class":171},[155,129578,2351],{"class":167},[155,129580,128865],{"class":171},[24,129582,129583,129584,129586,129587,129590,129591,48174],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[152,129585,2351],{}," 是简写，",[152,129588,129589],{},"total_reward += reward"," 等价于 ",[152,129592,129593],{},"total_reward = total_reward + reward",[146,129595,129597],{"className":148,"code":129596,"language":150,"meta":39,"style":39},"if step % 100 == 0:\n",[152,129598,129599],{"__ignoreMap":39},[155,129600,129601,129603,129605,129607,129609,129611,129613],{"class":157,"line":158},[155,129602,723],{"class":167},[155,129604,1145],{"class":171},[155,129606,2938],{"class":167},[155,129608,25617],{"class":263},[155,129610,120122],{"class":167},[155,129612,1151],{"class":263},[155,129614,736],{"class":171},[24,129616,129617,129619,129620,129623],{},[152,129618,2938],{}," 是取余数。",[152,129621,129622],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[146,129625,129627],{"className":148,"code":129626,"language":150,"meta":39,"style":39},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[152,129628,129629],{"__ignoreMap":39},[155,129630,129631,129633,129635,129637,129639,129641,129643,129645,129647,129649,129651,129653,129655,129657,129659,129661],{"class":157,"line":158},[155,129632,15451],{"class":263},[155,129634,230],{"class":171},[155,129636,128894],{"class":732},[155,129638,128897],{"class":171},[155,129640,128900],{"class":732},[155,129642,128903],{"class":171},[155,129644,4444],{"class":263},[155,129646,128908],{"class":171},[155,129648,128911],{"class":732},[155,129650,7589],{"class":171},[155,129652,1555],{"class":263},[155,129654,230],{"class":171},[155,129656,2833],{"class":263},[155,129658,128922],{"class":171},[155,129660,4444],{"class":263},[155,129662,1238],{"class":171},[24,129664,129665,129666,129669,129670,129673],{},"打印当前步数、观测和动作。",[152,129667,129668],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[152,129671,129672],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[20037,129675,120879],{"id":120878},[24,129677,129678],{},"观测向量:",[146,129680,129683],{"className":129681,"code":129682,"language":25051,"meta":39},[25049],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[152,129684,129682],{"__ignoreMap":39},[24,129686,129687],{},"控制器是教学用的简单线性反馈，不保证最优。",[24,129689,129690],{},"每隔 100 步会打印一次：",[146,129692,129695],{"className":129693,"code":129694,"language":25051,"meta":39},[25049],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[152,129696,129694],{"__ignoreMap":39},[24,129698,129699],{},"重点观察：",[28,129701,129702,129708,129713],{},[31,129703,129704,129707],{},[152,129705,129706],{},"pole_angle"," 是否越来越大。",[31,129709,129710,129712],{},[152,129711,128289],{}," 是否跑得太远。",[31,129714,129715,129716,101102,129718,48174],{},"action 是否经常被 clip 到 ",[152,129717,122478],{},[152,129719,329],{},[24,129721,129722],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[20037,129724,120911],{"id":120910},[28,129726,129727,129733,129736,129742,129752,129758,129761],{},[31,129728,129729,129730,48174],{},"把初始角度改为 ",[152,129731,129732],{},"data.qpos[1] = 0.3",[31,129734,129735],{},"重新运行，观察控制是否变差。",[31,129737,129738,129739,129741],{},"把 actuator ",[152,129740,125630],{}," 改小。",[31,129743,129744,129745,129748,129749,48174],{},"打印 ",[152,129746,129747],{},"model.nq, model.nv, model.nu","，应为 ",[152,129750,129751],{},"2 2 1",[31,129753,129754,129755,129757],{},"把 reward 里的 ",[152,129756,129323],{}," 系数改大，观察总奖励变化。",[31,129759,129760],{},"把控制器改成反号，观察杆子是否更容易倒。",[31,129762,129763],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[20037,129765,121016],{"id":121015},[14,129767,129768],{"id":129768},"杆子方向和预期不一致",[24,129770,120959,129771,129773,129774,129776],{},[152,129772,124802],{}," 和 capsule 的 ",[152,129775,121739],{},"，必要时用 viewer 可视化确认。",[14,129778,129779],{"id":129779},"控制器越控越倒",[24,129781,129782],{},"说明反馈符号可能反了，尝试:",[146,129784,129786],{"className":148,"code":129785,"language":150,"meta":39,"style":39},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[152,129787,129788],{"__ignoreMap":39},[155,129789,129790,129792,129794,129796,129798,129800,129802,129804,129806,129808],{"class":157,"line":158},[155,129791,126005],{"class":171},[155,129793,317],{"class":167},[155,129795,70834],{"class":167},[155,129797,123823],{"class":263},[155,129799,26381],{"class":167},[155,129801,128383],{"class":171},[155,129803,2039],{"class":167},[155,129805,80430],{"class":263},[155,129807,26381],{"class":167},[155,129809,128803],{"class":171},[14,129811,129812],{"id":129812},"小车飞走",[24,129814,129815,129816,129818,129819,129822],{},"降低 ",[152,129817,125630],{}," 或缩小 ",[152,129820,129821],{},"action"," 的 clip 范围。",[14,129824,129826,129828],{"id":129825},"obs3-为什么是杆子角速度",[152,129827,129462],{}," 为什么是杆子角速度",[24,129830,129831],{},"因为这个模型里：",[146,129833,129836],{"className":129834,"code":129835,"language":25051,"meta":39},[25049],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[152,129837,129835],{"__ignoreMap":39},[24,129839,128310],{},[146,129841,129844],{"className":129842,"code":129843,"language":25051,"meta":39},[25049],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[152,129845,129843],{"__ignoreMap":39},[14,129847,129849],{"id":129848},"reward-变成负数是否错误","reward 变成负数是否错误",[24,129851,129852],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[20037,129854,121170],{"id":121169},[24,129856,129857],{},"一个控制任务通常包含：",[28,129859,129860,129863,129871,129876,129879],{},[31,129861,129862],{},"模型：Cartpole 的 body、joint、actuator。",[31,129864,129865,129866,20293,129868,129870],{},"观测：从 ",[152,129867,122593],{},[152,129869,122923],{}," 里取状态。",[31,129872,129873,129874,48174],{},"动作：写入 ",[152,129875,119639],{},[31,129877,129878],{},"奖励：根据任务目标打分。",[31,129880,129881],{},"循环：obs -> action -> step -> reward。",[24,129883,129884],{},"这就是后面 Gymnasium 环境的基本骨架。",[20011,129886,122849],{},{"title":39,"searchDepth":46,"depth":46,"links":129888},[129889,129890,129891,129896,129900,129901,129902,129910],{"id":119209,"depth":46,"text":119210},{"id":119332,"depth":46,"text":119333},{"id":119607,"depth":46,"text":119608,"children":129892},[129893,129894,129895],{"id":128263,"depth":121,"text":128264},{"id":128328,"depth":121,"text":128329},{"id":128344,"depth":121,"text":128345},{"id":119815,"depth":46,"text":119816,"children":129897},[129898,129899],{"id":120135,"depth":121,"text":120135},{"id":120271,"depth":121,"text":120271},{"id":120878,"depth":46,"text":120879},{"id":120910,"depth":46,"text":120911},{"id":121015,"depth":46,"text":121016,"children":129903},[129904,129905,129906,129907,129909],{"id":129768,"depth":121,"text":129768},{"id":129779,"depth":121,"text":129779},{"id":129812,"depth":121,"text":129812},{"id":129825,"depth":121,"text":129908},"obs[3] 为什么是杆子角速度",{"id":129848,"depth":121,"text":129849},{"id":121169,"depth":46,"text":121170},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":127999,"description":39},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":129917,"title":129918,"body":129919,"description":39,"extension":20021,"meta":131933,"navigation":216,"path":131934,"seo":131935,"stem":131936,"__hash__":131937},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":129920,"toc":131909},[129921,129924,129926,129929,129931,129948,129951,129954,129960,129963,129965,129967,129991,129993,130007,130009,130050,130052,130070,130072,130075,130081,130084,130112,130116,130122,130147,130150,130181,130188,130191,130194,130200,130203,130209,130212,130218,130222,130225,130250,130253,130255,131015,131017,131029,131031,131042,131044,131047,131064,131067,131069,131080,131083,131085,131131,131134,131147,131150,131232,131235,131237,131253,131263,131276,131279,131318,131328,131339,131349,131362,131365,131394,131397,131407,131410,131416,131433,131444,131446,131452,131469,131480,131501,131504,131516,131519,131540,131543,131551,131559,131576,131579,131648,131655,131663,131666,131679,131686,131688,131691,131697,131700,131703,131709,131715,131717,131757,131759,131765,131774,131777,131779,131799,131802,131805,131811,131815,131817,131844,131847,131850,131877,131883,131886,131889,131891,131894,131897,131903,131906],[10,129922,129918],{"id":129923},"_7控制任务reacher-机械臂到达目标",[20037,129925,119210],{"id":119209},[24,129927,129928],{},"本章搭建一个二维两关节 reacher 任务。",[24,129930,122894],{},[28,129932,129933,129936,129939,129942,129945],{},[31,129934,129935],{},"两个 hinge joint",[31,129937,129938],{},"两个 motor actuator",[31,129940,129941],{},"site 作为末端点和目标点",[31,129943,129944],{},"根据末端和目标距离设计 reward",[31,129946,129947],{},"构造机械臂任务的基本形式",[24,129949,129950],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[24,129952,129953],{},"Reacher 任务可以理解为：",[146,129955,129958],{"className":129956,"code":129957,"language":25051,"meta":39},[25049],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[152,129959,129957],{"__ignoreMap":39},[24,129961,129962],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[20037,129964,119333],{"id":119332},[24,129966,119336],{},[146,129968,129969],{"className":43613,"code":122951,"language":43615,"meta":39,"style":39},[152,129970,129971],{"__ignoreMap":39},[155,129972,129973,129975,129977,129979,129981,129983,129985,129987,129989],{"class":157,"line":158},[155,129974,44368],{"class":226},[155,129976,46104],{"class":732},[155,129978,43625],{"class":732},[155,129980,46189],{"class":263},[155,129982,122966],{"class":732},[155,129984,119361],{"class":732},[155,129986,121064],{"class":732},[155,129988,119377],{"class":732},[155,129990,122975],{"class":732},[24,129992,121382],{},[146,129994,129995],{"className":43613,"code":119482,"language":43615,"meta":39,"style":39},[152,129996,129997],{"__ignoreMap":39},[155,129998,129999,130001,130003,130005],{"class":157,"line":158},[155,130000,43622],{"class":226},[155,130002,43625],{"class":732},[155,130004,119493],{"class":732},[155,130006,119496],{"class":732},[24,130008,121399],{},[146,130010,130012],{"className":43613,"code":130011,"language":43615,"meta":39,"style":39},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[152,130013,130014,130031,130040],{"__ignoreMap":39},[155,130015,130016,130018,130020,130022,130025,130027,130029],{"class":157,"line":158},[155,130017,50119],{"class":226},[155,130019,48965],{"class":732},[155,130021,44907],{"class":263},[155,130023,130024],{"class":732}," mujoco-reacher",[155,130026,119538],{"class":732},[155,130028,119541],{"class":263},[155,130030,119544],{"class":263},[155,130032,130033,130035,130037],{"class":157,"line":46},[155,130034,50119],{"class":226},[155,130036,119551],{"class":732},[155,130038,130039],{"class":732}," mujoco-reacher\n",[155,130041,130042,130044,130046,130048],{"class":157,"line":121},[155,130043,43622],{"class":226},[155,130045,43625],{"class":732},[155,130047,119493],{"class":732},[155,130049,119496],{"class":732},[24,130051,119567],{},[28,130053,130054,130057,130060],{},[31,130055,130056],{},"本章使用低维状态，不使用图像输入。",[31,130058,130059],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[31,130061,130062,130063,20293,130065,20293,130067,130069],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[152,130064,122593],{},[152,130066,122923],{},[152,130068,122243],{}," 的方法一致。",[20037,130071,119608],{"id":119607},[24,130073,130074],{},"Reacher 任务核心:",[146,130076,130079],{"className":130077,"code":130078,"language":25051,"meta":39},[25049],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[152,130080,130078],{"__ignoreMap":39},[24,130082,130083],{},"读取 site 世界坐标:",[146,130085,130087],{"className":148,"code":130086,"language":150,"meta":39,"style":39},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[152,130088,130089,130102],{"__ignoreMap":39},[155,130090,130091,130093,130095,130097,130100],{"class":157,"line":158},[155,130092,122197],{"class":171},[155,130094,317],{"class":167},[155,130096,121968],{"class":171},[155,130098,130099],{"class":732},"\"tip\"",[155,130101,363],{"class":171},[155,130103,130104,130107,130109],{"class":157,"line":46},[155,130105,130106],{"class":171},"tip_pos ",[155,130108,317],{"class":167},[155,130110,130111],{"class":171}," data.site_xpos[site_id]\n",[14,130113,130115],{"id":130114},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[24,130117,130118,130119,130121],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[152,130120,122593],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[146,130123,130125],{"className":148,"code":130124,"language":150,"meta":39,"style":39},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[152,130126,130127,130137],{"__ignoreMap":39},[155,130128,130129,130132,130134],{"class":157,"line":158},[155,130130,130131],{"class":171},"tip ",[155,130133,317],{"class":167},[155,130135,130136],{"class":171}," data.site_xpos[tip_site_id]\n",[155,130138,130139,130142,130144],{"class":157,"line":46},[155,130140,130141],{"class":171},"target ",[155,130143,317],{"class":167},[155,130145,130146],{"class":171}," data.site_xpos[target_site_id]\n",[24,130148,130149],{},"这样 reward 就很容易写：",[146,130151,130153],{"className":148,"code":130152,"language":150,"meta":39,"style":39},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[152,130154,130155,130170],{"__ignoreMap":39},[155,130156,130157,130160,130162,130165,130167],{"class":157,"line":158},[155,130158,130159],{"class":171},"dist ",[155,130161,317],{"class":167},[155,130163,130164],{"class":171}," np.linalg.norm(tip ",[155,130166,2039],{"class":167},[155,130168,130169],{"class":171}," target)\n",[155,130171,130172,130174,130176,130178],{"class":157,"line":46},[155,130173,129568],{"class":171},[155,130175,317],{"class":167},[155,130177,70834],{"class":167},[155,130179,130180],{"class":171},"dist\n",[24,130182,130183,130184,130187],{},"距离越小，",[152,130185,130186],{},"-dist"," 越接近 0，奖励越高。",[14,130189,130190],{"id":130190},"两关节机械臂的状态",[24,130192,130193],{},"这个模型有两个 hinge joint：",[146,130195,130198],{"className":130196,"code":130197,"language":25051,"meta":39},[25049],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[152,130199,130197],{"__ignoreMap":39},[24,130201,130202],{},"再加上末端和目标位置：",[146,130204,130207],{"className":130205,"code":130206,"language":25051,"meta":39},[25049],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[152,130208,130206],{"__ignoreMap":39},[24,130210,130211],{},"总维度：",[146,130213,130216],{"className":130214,"code":130215,"language":25051,"meta":39},[25049],"2 + 2 + 3 + 3 = 10\n",[152,130217,130215],{"__ignoreMap":39},[14,130219,130221],{"id":130220},"为什么-gravity-是-0","为什么 gravity 是 0",[24,130223,130224],{},"本章把重力设为：",[146,130226,130228],{"className":71630,"code":130227,"language":71632,"meta":39,"style":39},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[152,130229,130230],{"__ignoreMap":39},[155,130231,130232,130234,130236,130238,130240,130242,130244,130246,130248],{"class":157,"line":158},[155,130233,20959],{"class":171},[155,130235,87729],{"class":69863},[155,130237,119757],{"class":226},[155,130239,317],{"class":171},[155,130241,119762],{"class":732},[155,130243,119765],{"class":226},[155,130245,317],{"class":171},[155,130247,122334],{"class":732},[155,130249,119707],{"class":171},[24,130251,130252],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[20037,130254,119816],{"id":119815},[146,130256,130258],{"className":148,"code":130257,"language":150,"meta":39,"style":39},"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",[152,130259,130260,130266,130276,130280,130284,130292,130297,130302,130306,130310,130315,130320,130324,130329,130334,130339,130343,130348,130353,130358,130363,130367,130371,130375,130379,130383,130388,130393,130397,130401,130405,130409,130413,130428,130437,130449,130472,130479,130483,130487,130497,130511,130525,130532,130536,130540,130554,130566,130578,130591,130606,130623,130627,130631,130643,130655,130663,130671,130675,130691,130696,130709,130722,130737,130741,130776,130808,130812,130816,130825,130829,130845,130855,130866,130882,130898,130914,130930,130934,130952,130972,130991,130995,130999,131011],{"__ignoreMap":39},[155,130261,130262,130264],{"class":157,"line":158},[155,130263,168],{"class":167},[155,130265,119864],{"class":171},[155,130267,130268,130270,130272,130274],{"class":157,"line":46},[155,130269,168],{"class":167},[155,130271,904],{"class":171},[155,130273,907],{"class":167},[155,130275,910],{"class":171},[155,130277,130278],{"class":157,"line":121},[155,130279,217],{"emptyLinePlaceholder":216},[155,130281,130282],{"class":157,"line":180},[155,130283,217],{"emptyLinePlaceholder":216},[155,130285,130286,130288,130290],{"class":157,"line":194},[155,130287,119877],{"class":263},[155,130289,33391],{"class":167},[155,130291,119882],{"class":732},[155,130293,130294],{"class":157,"line":200},[155,130295,130296],{"class":732},"\u003Cmujoco model=\"two_link_reacher\">\n",[155,130298,130299],{"class":157,"line":213},[155,130300,130301],{"class":732},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[155,130303,130304],{"class":157,"line":220},[155,130305,217],{"emptyLinePlaceholder":216},[155,130307,130308],{"class":157,"line":245},[155,130309,119901],{"class":732},[155,130311,130312],{"class":157,"line":251},[155,130313,130314],{"class":732},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[155,130316,130317],{"class":157,"line":257},[155,130318,130319],{"class":732},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[155,130321,130322],{"class":157,"line":270},[155,130323,217],{"emptyLinePlaceholder":216},[155,130325,130326],{"class":157,"line":276},[155,130327,130328],{"class":732},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[155,130330,130331],{"class":157,"line":297},[155,130332,130333],{"class":732},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[155,130335,130336],{"class":157,"line":302},[155,130337,130338],{"class":732},"      \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",[155,130340,130341],{"class":157,"line":308},[155,130342,217],{"emptyLinePlaceholder":216},[155,130344,130345],{"class":157,"line":366},[155,130346,130347],{"class":732},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[155,130349,130350],{"class":157,"line":379},[155,130351,130352],{"class":732},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[155,130354,130355],{"class":157,"line":385},[155,130356,130357],{"class":732},"        \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",[155,130359,130360],{"class":157,"line":415},[155,130361,130362],{"class":732},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[155,130364,130365],{"class":157,"line":452},[155,130366,125001],{"class":732},[155,130368,130369],{"class":157,"line":480},[155,130370,119930],{"class":732},[155,130372,130373],{"class":157,"line":486},[155,130374,119935],{"class":732},[155,130376,130377],{"class":157,"line":499},[155,130378,217],{"emptyLinePlaceholder":216},[155,130380,130381],{"class":157,"line":505},[155,130382,125018],{"class":732},[155,130384,130385],{"class":157,"line":528},[155,130386,130387],{"class":732},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[155,130389,130390],{"class":157,"line":549},[155,130391,130392],{"class":732},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[155,130394,130395],{"class":157,"line":570},[155,130396,125028],{"class":732},[155,130398,130399],{"class":157,"line":575},[155,130400,119940],{"class":732},[155,130402,130403],{"class":157,"line":581},[155,130404,114261],{"class":732},[155,130406,130407],{"class":157,"line":592},[155,130408,217],{"emptyLinePlaceholder":216},[155,130410,130411],{"class":157,"line":610},[155,130412,217],{"emptyLinePlaceholder":216},[155,130414,130415,130417,130420,130423,130425],{"class":157,"line":622},[155,130416,1484],{"class":167},[155,130418,130419],{"class":226}," site_position",[155,130421,130422],{"class":171},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[155,130424,21215],{"class":263},[155,130426,130427],{"class":171},") -> np.ndarray:\n",[155,130429,130430,130432,130434],{"class":157,"line":638},[155,130431,121963],{"class":171},[155,130433,317],{"class":167},[155,130435,130436],{"class":171}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[155,130438,130439,130441,130443,130445,130447],{"class":157,"line":650},[155,130440,1142],{"class":167},[155,130442,122012],{"class":171},[155,130444,20959],{"class":167},[155,130446,1151],{"class":263},[155,130448,736],{"class":171},[155,130450,130451,130453,130455,130457,130459,130462,130464,130466,130468,130470],{"class":157,"line":662},[155,130452,121995],{"class":167},[155,130454,121998],{"class":263},[155,130456,230],{"class":171},[155,130458,17391],{"class":167},[155,130460,130461],{"class":732},"\"site not found: ",[155,130463,2705],{"class":263},[155,130465,98373],{"class":171},[155,130467,2711],{"class":263},[155,130469,2033],{"class":732},[155,130471,363],{"class":171},[155,130473,130474,130476],{"class":157,"line":678},[155,130475,1692],{"class":167},[155,130477,130478],{"class":171}," data.site_xpos[site_id].copy()\n",[155,130480,130481],{"class":157,"line":694},[155,130482,217],{"emptyLinePlaceholder":216},[155,130484,130485],{"class":157,"line":706},[155,130486,217],{"emptyLinePlaceholder":216},[155,130488,130489,130491,130494],{"class":157,"line":715},[155,130490,1484],{"class":167},[155,130492,130493],{"class":226}," get_obs",[155,130495,130496],{"class":171},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[155,130498,130499,130502,130504,130507,130509],{"class":157,"line":720},[155,130500,130501],{"class":171},"    tip ",[155,130503,317],{"class":167},[155,130505,130506],{"class":171}," site_position(model, data, ",[155,130508,130099],{"class":732},[155,130510,363],{"class":171},[155,130512,130513,130516,130518,130520,130523],{"class":157,"line":739},[155,130514,130515],{"class":171},"    target ",[155,130517,317],{"class":167},[155,130519,130506],{"class":171},[155,130521,130522],{"class":732},"\"target\"",[155,130524,363],{"class":171},[155,130526,130527,130529],{"class":157,"line":745},[155,130528,1692],{"class":167},[155,130530,130531],{"class":171}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[155,130533,130534],{"class":157,"line":773},[155,130535,217],{"emptyLinePlaceholder":216},[155,130537,130538],{"class":157,"line":779},[155,130539,217],{"emptyLinePlaceholder":216},[155,130541,130542,130544,130547,130550,130552],{"class":157,"line":785},[155,130543,1484],{"class":167},[155,130545,130546],{"class":226}," reward",[155,130548,130549],{"class":171},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[155,130551,2833],{"class":263},[155,130553,736],{"class":171},[155,130555,130556,130558,130560,130562,130564],{"class":157,"line":791},[155,130557,130501],{"class":171},[155,130559,317],{"class":167},[155,130561,130506],{"class":171},[155,130563,130099],{"class":732},[155,130565,363],{"class":171},[155,130567,130568,130570,130572,130574,130576],{"class":157,"line":796},[155,130569,130515],{"class":171},[155,130571,317],{"class":167},[155,130573,130506],{"class":171},[155,130575,130522],{"class":732},[155,130577,363],{"class":171},[155,130579,130580,130583,130585,130587,130589],{"class":157,"line":802},[155,130581,130582],{"class":171},"    dist ",[155,130584,317],{"class":167},[155,130586,130164],{"class":171},[155,130588,2039],{"class":167},[155,130590,130169],{"class":171},[155,130592,130593,130596,130598,130601,130603],{"class":157,"line":808},[155,130594,130595],{"class":171},"    control_cost ",[155,130597,317],{"class":167},[155,130599,130600],{"class":263}," 0.01",[155,130602,26381],{"class":167},[155,130604,130605],{"class":171}," np.sum(np.square(data.ctrl))\n",[155,130607,130608,130610,130612,130614,130616,130618,130620],{"class":157,"line":819},[155,130609,1692],{"class":167},[155,130611,128360],{"class":263},[155,130613,230],{"class":171},[155,130615,2039],{"class":167},[155,130617,130159],{"class":171},[155,130619,2039],{"class":167},[155,130621,130622],{"class":171}," control_cost)\n",[155,130624,130625],{"class":157,"line":1832},[155,130626,217],{"emptyLinePlaceholder":216},[155,130628,130629],{"class":157,"line":1838},[155,130630,217],{"emptyLinePlaceholder":216},[155,130632,130633,130635,130637,130639,130641],{"class":157,"line":1844},[155,130634,1484],{"class":167},[155,130636,21861],{"class":226},[155,130638,119961],{"class":171},[155,130640,114249],{"class":263},[155,130642,736],{"class":171},[155,130644,130645,130647,130649,130651,130653],{"class":157,"line":1850},[155,130646,119970],{"class":171},[155,130648,317],{"class":167},[155,130650,119975],{"class":171},[155,130652,119877],{"class":263},[155,130654,363],{"class":171},[155,130656,130657,130659,130661],{"class":157,"line":1861},[155,130658,119984],{"class":171},[155,130660,317],{"class":167},[155,130662,119989],{"class":171},[155,130664,130665,130667,130669],{"class":157,"line":1866},[155,130666,128716],{"class":171},[155,130668,317],{"class":167},[155,130670,123324],{"class":263},[155,130672,130673],{"class":157,"line":1871},[155,130674,217],{"emptyLinePlaceholder":216},[155,130676,130677,130679,130681,130683,130685,130687,130689],{"class":157,"line":1877},[155,130678,2000],{"class":167},[155,130680,1145],{"class":171},[155,130682,1131],{"class":167},[155,130684,2008],{"class":263},[155,130686,230],{"class":171},[155,130688,83637],{"class":263},[155,130690,242],{"class":171},[155,130692,130693],{"class":157,"line":1883},[155,130694,130695],{"class":171},"        mujoco.mj_forward(model, data)\n",[155,130697,130698,130701,130703,130705,130707],{"class":157,"line":1894},[155,130699,130700],{"class":171},"        tip ",[155,130702,317],{"class":167},[155,130704,130506],{"class":171},[155,130706,130099],{"class":732},[155,130708,363],{"class":171},[155,130710,130711,130714,130716,130718,130720],{"class":157,"line":1900},[155,130712,130713],{"class":171},"        target ",[155,130715,317],{"class":167},[155,130717,130506],{"class":171},[155,130719,130522],{"class":732},[155,130721,363],{"class":171},[155,130723,130724,130727,130729,130732,130734],{"class":157,"line":1911},[155,130725,130726],{"class":171},"        error ",[155,130728,317],{"class":167},[155,130730,130731],{"class":171}," target ",[155,130733,2039],{"class":167},[155,130735,130736],{"class":171}," tip\n",[155,130738,130739],{"class":157,"line":1917},[155,130740,217],{"emptyLinePlaceholder":216},[155,130742,130743,130745,130747,130749,130751,130754,130756,130758,130761,130763,130766,130768,130770,130772,130774],{"class":157,"line":1927},[155,130744,125180],{"class":171},[155,130746,1109],{"class":263},[155,130748,24309],{"class":171},[155,130750,317],{"class":167},[155,130752,130753],{"class":171}," np.clip(",[155,130755,123823],{"class":263},[155,130757,26381],{"class":167},[155,130759,130760],{"class":171}," error[",[155,130762,360],{"class":263},[155,130764,130765],{"class":171},"], ",[155,130767,2039],{"class":167},[155,130769,120966],{"class":263},[155,130771,7589],{"class":171},[155,130773,120966],{"class":263},[155,130775,363],{"class":171},[155,130777,130778,130780,130782,130784,130786,130788,130790,130792,130794,130796,130798,130800,130802,130804,130806],{"class":157,"line":1933},[155,130779,125180],{"class":171},[155,130781,329],{"class":263},[155,130783,24309],{"class":171},[155,130785,317],{"class":167},[155,130787,130753],{"class":171},[155,130789,123823],{"class":263},[155,130791,26381],{"class":167},[155,130793,130760],{"class":171},[155,130795,1109],{"class":263},[155,130797,130765],{"class":171},[155,130799,2039],{"class":167},[155,130801,120966],{"class":263},[155,130803,7589],{"class":171},[155,130805,120966],{"class":263},[155,130807,363],{"class":171},[155,130809,130810],{"class":157,"line":1943},[155,130811,217],{"emptyLinePlaceholder":216},[155,130813,130814],{"class":157,"line":1949},[155,130815,120079],{"class":171},[155,130817,130818,130820,130822],{"class":157,"line":1959},[155,130819,128860],{"class":171},[155,130821,2351],{"class":167},[155,130823,130824],{"class":171}," reward(model, data)\n",[155,130826,130827],{"class":157,"line":1964},[155,130828,217],{"emptyLinePlaceholder":216},[155,130830,130831,130833,130835,130837,130839,130841,130843],{"class":157,"line":1970},[155,130832,2803],{"class":167},[155,130834,1145],{"class":171},[155,130836,2938],{"class":167},[155,130838,25617],{"class":263},[155,130840,120122],{"class":167},[155,130842,1151],{"class":263},[155,130844,736],{"class":171},[155,130846,130847,130850,130852],{"class":157,"line":1981},[155,130848,130849],{"class":171},"            obs ",[155,130851,317],{"class":167},[155,130853,130854],{"class":171}," get_obs(model, data)\n",[155,130856,130857,130859,130861,130863],{"class":157,"line":1986},[155,130858,4256],{"class":263},[155,130860,230],{"class":171},[155,130862,128894],{"class":732},[155,130864,130865],{"class":171},", step)\n",[155,130867,130868,130870,130872,130875,130878,130880],{"class":157,"line":1991},[155,130869,4256],{"class":263},[155,130871,230],{"class":171},[155,130873,130874],{"class":732},"\"  tip:\"",[155,130876,130877],{"class":171},", np.round(tip, ",[155,130879,4444],{"class":263},[155,130881,1238],{"class":171},[155,130883,130884,130886,130888,130891,130894,130896],{"class":157,"line":1997},[155,130885,4256],{"class":263},[155,130887,230],{"class":171},[155,130889,130890],{"class":732},"\"  target:\"",[155,130892,130893],{"class":171},", np.round(target, ",[155,130895,4444],{"class":263},[155,130897,1238],{"class":171},[155,130899,130900,130902,130904,130907,130910,130912],{"class":157,"line":2014},[155,130901,4256],{"class":263},[155,130903,230],{"class":171},[155,130905,130906],{"class":732},"\"  ctrl:\"",[155,130908,130909],{"class":171},", np.round(data.ctrl.copy(), ",[155,130911,4444],{"class":263},[155,130913,1238],{"class":171},[155,130915,130916,130918,130920,130923,130926,130928],{"class":157,"line":2046},[155,130917,4256],{"class":263},[155,130919,230],{"class":171},[155,130921,130922],{"class":732},"\"  obs_dim:\"",[155,130924,130925],{"class":171},", obs.shape[",[155,130927,1109],{"class":263},[155,130929,17676],{"class":171},[155,130931,130932],{"class":157,"line":2062},[155,130933,217],{"emptyLinePlaceholder":216},[155,130935,130936,130938,130940,130942,130944,130946,130948,130950],{"class":157,"line":2067},[155,130937,822],{"class":263},[155,130939,230],{"class":171},[155,130941,128939],{"class":732},[155,130943,7589],{"class":171},[155,130945,1555],{"class":263},[155,130947,128946],{"class":171},[155,130949,4444],{"class":263},[155,130951,1238],{"class":171},[155,130953,130954,130956,130958,130961,130964,130966,130968,130970],{"class":157,"line":2073},[155,130955,822],{"class":263},[155,130957,230],{"class":171},[155,130959,130960],{"class":732},"\"final tip:\"",[155,130962,130963],{"class":171},", np.round(site_position(model, data, ",[155,130965,130099],{"class":732},[155,130967,128908],{"class":171},[155,130969,4444],{"class":263},[155,130971,1238],{"class":171},[155,130973,130974,130976,130978,130981,130983,130985,130987,130989],{"class":157,"line":2079},[155,130975,822],{"class":263},[155,130977,230],{"class":171},[155,130979,130980],{"class":732},"\"target:\"",[155,130982,130963],{"class":171},[155,130984,130522],{"class":732},[155,130986,128908],{"class":171},[155,130988,4444],{"class":263},[155,130990,1238],{"class":171},[155,130992,130993],{"class":157,"line":2089},[155,130994,217],{"emptyLinePlaceholder":216},[155,130996,130997],{"class":157,"line":2095},[155,130998,217],{"emptyLinePlaceholder":216},[155,131000,131001,131003,131005,131007,131009],{"class":157,"line":2106},[155,131002,723],{"class":167},[155,131004,726],{"class":263},[155,131006,120122],{"class":167},[155,131008,120125],{"class":732},[155,131010,736],{"class":171},[155,131012,131013],{"class":157,"line":2112},[155,131014,120132],{"class":171},[24,131016,122133],{},[146,131018,131020],{"className":43613,"code":131019,"language":43615,"meta":39,"style":39},"touch ch7_reacher.py\n",[152,131021,131022],{"__ignoreMap":39},[155,131023,131024,131026],{"class":157,"line":158},[155,131025,119846],{"class":226},[155,131027,131028],{"class":732}," ch7_reacher.py\n",[24,131030,129007],{},[146,131032,131034],{"className":43613,"code":131033,"language":43615,"meta":39,"style":39},"python ch7_reacher.py\n",[152,131035,131036],{"__ignoreMap":39},[155,131037,131038,131040],{"class":157,"line":158},[155,131039,150],{"class":226},[155,131041,131028],{"class":732},[14,131043,120135],{"id":120135},[24,131045,131046],{},"读取 site 坐标：",[146,131048,131050],{"className":148,"code":131049,"language":150,"meta":39,"style":39},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[152,131051,131052],{"__ignoreMap":39},[155,131053,131054,131056,131058,131060,131062],{"class":157,"line":158},[155,131055,1484],{"class":167},[155,131057,130419],{"class":226},[155,131059,130422],{"class":171},[155,131061,21215],{"class":263},[155,131063,130427],{"class":171},[24,131065,131066],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[24,131068,129023],{},[146,131070,131072],{"className":148,"code":131071,"language":150,"meta":39,"style":39},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[152,131073,131074],{"__ignoreMap":39},[155,131075,131076,131078],{"class":157,"line":158},[155,131077,36839],{"class":167},[155,131079,130531],{"class":171},[24,131081,131082],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[24,131084,128348],{},[146,131086,131088],{"className":148,"code":131087,"language":150,"meta":39,"style":39},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[152,131089,131090,131102,131115],{"__ignoreMap":39},[155,131091,131092,131094,131096,131098,131100],{"class":157,"line":158},[155,131093,130159],{"class":171},[155,131095,317],{"class":167},[155,131097,130164],{"class":171},[155,131099,2039],{"class":167},[155,131101,130169],{"class":171},[155,131103,131104,131107,131109,131111,131113],{"class":157,"line":46},[155,131105,131106],{"class":171},"control_cost ",[155,131108,317],{"class":167},[155,131110,130600],{"class":263},[155,131112,26381],{"class":167},[155,131114,130605],{"class":171},[155,131116,131117,131119,131121,131123,131125,131127,131129],{"class":157,"line":121},[155,131118,36839],{"class":167},[155,131120,128360],{"class":263},[155,131122,230],{"class":171},[155,131124,2039],{"class":167},[155,131126,130159],{"class":171},[155,131128,2039],{"class":167},[155,131130,130622],{"class":171},[24,131132,131133],{},"奖励由两部分组成：",[28,131135,131136,131141],{},[31,131137,131138,131140],{},[152,131139,130186],{},"：末端离目标越远，奖励越低。",[31,131142,131143,131146],{},[152,131144,131145],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[24,131148,131149],{},"简单控制器：",[146,131151,131153],{"className":148,"code":131152,"language":150,"meta":39,"style":39},"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",[152,131154,131155,131168,131200],{"__ignoreMap":39},[155,131156,131157,131160,131162,131164,131166],{"class":157,"line":158},[155,131158,131159],{"class":171},"error ",[155,131161,317],{"class":167},[155,131163,130731],{"class":171},[155,131165,2039],{"class":167},[155,131167,130736],{"class":171},[155,131169,131170,131172,131174,131176,131178,131180,131182,131184,131186,131188,131190,131192,131194,131196,131198],{"class":157,"line":46},[155,131171,124434],{"class":171},[155,131173,1109],{"class":263},[155,131175,24309],{"class":171},[155,131177,317],{"class":167},[155,131179,130753],{"class":171},[155,131181,123823],{"class":263},[155,131183,26381],{"class":167},[155,131185,130760],{"class":171},[155,131187,360],{"class":263},[155,131189,130765],{"class":171},[155,131191,2039],{"class":167},[155,131193,120966],{"class":263},[155,131195,7589],{"class":171},[155,131197,120966],{"class":263},[155,131199,363],{"class":171},[155,131201,131202,131204,131206,131208,131210,131212,131214,131216,131218,131220,131222,131224,131226,131228,131230],{"class":157,"line":121},[155,131203,124434],{"class":171},[155,131205,329],{"class":263},[155,131207,24309],{"class":171},[155,131209,317],{"class":167},[155,131211,130753],{"class":171},[155,131213,123823],{"class":263},[155,131215,26381],{"class":167},[155,131217,130760],{"class":171},[155,131219,1109],{"class":263},[155,131221,130765],{"class":171},[155,131223,2039],{"class":167},[155,131225,120966],{"class":263},[155,131227,7589],{"class":171},[155,131229,120966],{"class":263},[155,131231,363],{"class":171},[24,131233,131234],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[14,131236,120271],{"id":120271},[146,131238,131239],{"className":148,"code":131049,"language":150,"meta":39,"style":39},[152,131240,131241],{"__ignoreMap":39},[155,131242,131243,131245,131247,131249,131251],{"class":157,"line":158},[155,131244,1484],{"class":167},[155,131246,130419],{"class":226},[155,131248,130422],{"class":171},[155,131250,21215],{"class":263},[155,131252,130427],{"class":171},[24,131254,131255,131256,131258,131259,101102,131261,48174],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[152,131257,98373],{}," 是 site 的名字，比如 ",[152,131260,130099],{},[152,131262,130522],{},[146,131264,131266],{"className":148,"code":131265,"language":150,"meta":39,"style":39},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[152,131267,131268],{"__ignoreMap":39},[155,131269,131270,131272,131274],{"class":157,"line":158},[155,131271,122197],{"class":171},[155,131273,317],{"class":167},[155,131275,130436],{"class":171},[24,131277,131278],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[146,131280,131282],{"className":148,"code":131281,"language":150,"meta":39,"style":39},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[152,131283,131284,131296],{"__ignoreMap":39},[155,131285,131286,131288,131290,131292,131294],{"class":157,"line":158},[155,131287,723],{"class":167},[155,131289,122012],{"class":171},[155,131291,20959],{"class":167},[155,131293,1151],{"class":263},[155,131295,736],{"class":171},[155,131297,131298,131300,131302,131304,131306,131308,131310,131312,131314,131316],{"class":157,"line":46},[155,131299,122458],{"class":167},[155,131301,121998],{"class":263},[155,131303,230],{"class":171},[155,131305,17391],{"class":167},[155,131307,130461],{"class":732},[155,131309,2705],{"class":263},[155,131311,98373],{"class":171},[155,131313,2711],{"class":263},[155,131315,2033],{"class":732},[155,131317,363],{"class":171},[24,131319,131320,131321,131324,131325,131327],{},"如果 site 没找到，就主动报错。",[152,131322,131323],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[152,131326,98373],{}," 的值放进字符串里。",[146,131329,131331],{"className":148,"code":131330,"language":150,"meta":39,"style":39},"return data.site_xpos[site_id].copy()\n",[152,131332,131333],{"__ignoreMap":39},[155,131334,131335,131337],{"class":157,"line":158},[155,131336,36839],{"class":167},[155,131338,130478],{"class":171},[24,131340,131341,131342,131344,131345,131348],{},"返回这个 site 的世界坐标。",[152,131343,122243],{}," 里的每一行都是一个 site 的 ",[152,131346,131347],{},"(x, y, z)"," 坐标。",[146,131350,131352],{"className":148,"code":131351,"language":150,"meta":39,"style":39},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[152,131353,131354],{"__ignoreMap":39},[155,131355,131356,131358,131360],{"class":157,"line":158},[155,131357,1484],{"class":167},[155,131359,130493],{"class":226},[155,131361,130496],{"class":171},[24,131363,131364],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[146,131366,131368],{"className":148,"code":131367,"language":150,"meta":39,"style":39},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[152,131369,131370,131382],{"__ignoreMap":39},[155,131371,131372,131374,131376,131378,131380],{"class":157,"line":158},[155,131373,130131],{"class":171},[155,131375,317],{"class":167},[155,131377,130506],{"class":171},[155,131379,130099],{"class":732},[155,131381,363],{"class":171},[155,131383,131384,131386,131388,131390,131392],{"class":157,"line":46},[155,131385,130141],{"class":171},[155,131387,317],{"class":167},[155,131389,130506],{"class":171},[155,131391,130522],{"class":732},[155,131393,363],{"class":171},[24,131395,131396],{},"分别读取末端点和目标点的世界坐标。",[146,131398,131399],{"className":148,"code":131071,"language":150,"meta":39,"style":39},[152,131400,131401],{"__ignoreMap":39},[155,131402,131403,131405],{"class":157,"line":158},[155,131404,36839],{"class":167},[155,131406,130531],{"class":171},[24,131408,131409],{},"把四部分拼成一个观测数组：",[146,131411,131414],{"className":131412,"code":131413,"language":25051,"meta":39},[25049],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[152,131415,131413],{"__ignoreMap":39},[146,131417,131419],{"className":148,"code":131418,"language":150,"meta":39,"style":39},"dist = np.linalg.norm(tip - target)\n",[152,131420,131421],{"__ignoreMap":39},[155,131422,131423,131425,131427,131429,131431],{"class":157,"line":158},[155,131424,130159],{"class":171},[155,131426,317],{"class":167},[155,131428,130164],{"class":171},[155,131430,2039],{"class":167},[155,131432,130169],{"class":171},[24,131434,131435,131436,131439,131440,131443],{},"计算 tip 到 target 的距离。",[152,131437,131438],{},"tip - target"," 得到一个三维向量，",[152,131441,131442],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[24,131445,34460],{},[146,131447,131450],{"className":131448,"code":131449,"language":25051,"meta":39},[25049],"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",[152,131451,131449],{"__ignoreMap":39},[146,131453,131455],{"className":148,"code":131454,"language":150,"meta":39,"style":39},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[152,131456,131457],{"__ignoreMap":39},[155,131458,131459,131461,131463,131465,131467],{"class":157,"line":158},[155,131460,131106],{"class":171},[155,131462,317],{"class":167},[155,131464,130600],{"class":263},[155,131466,26381],{"class":167},[155,131468,130605],{"class":171},[24,131470,131471,131472,131475,131476,131479],{},"计算动作惩罚。",[152,131473,131474],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[152,131477,131478],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[146,131481,131483],{"className":148,"code":131482,"language":150,"meta":39,"style":39},"return float(-dist - control_cost)\n",[152,131484,131485],{"__ignoreMap":39},[155,131486,131487,131489,131491,131493,131495,131497,131499],{"class":157,"line":158},[155,131488,36839],{"class":167},[155,131490,128360],{"class":263},[155,131492,230],{"class":171},[155,131494,2039],{"class":167},[155,131496,130159],{"class":171},[155,131498,2039],{"class":167},[155,131500,130622],{"class":171},[24,131502,131503],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[146,131505,131506],{"className":148,"code":129366,"language":150,"meta":39,"style":39},[152,131507,131508],{"__ignoreMap":39},[155,131509,131510,131512,131514],{"class":157,"line":158},[155,131511,129373],{"class":171},[155,131513,317],{"class":167},[155,131515,123324],{"class":263},[24,131517,131518],{},"累计奖励变量，记录整个运行过程的总分。",[146,131520,131522],{"className":148,"code":131521,"language":150,"meta":39,"style":39},"for step in range(500):\n",[152,131523,131524],{"__ignoreMap":39},[155,131525,131526,131528,131530,131532,131534,131536,131538],{"class":157,"line":158},[155,131527,1125],{"class":167},[155,131529,1145],{"class":171},[155,131531,1131],{"class":167},[155,131533,2008],{"class":263},[155,131535,230],{"class":171},[155,131537,83637],{"class":263},[155,131539,242],{"class":171},[24,131541,131542],{},"运行 500 个控制步。",[146,131544,131545],{"className":148,"code":123106,"language":150,"meta":39,"style":39},[152,131546,131547],{"__ignoreMap":39},[155,131548,131549],{"class":157,"line":158},[155,131550,123106],{"class":171},[24,131552,131553,131554,119581,131556,131558],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[152,131555,121794],{},[152,131557,121797],{}," 是当前状态下的坐标。",[146,131560,131562],{"className":148,"code":131561,"language":150,"meta":39,"style":39},"error = target - tip\n",[152,131563,131564],{"__ignoreMap":39},[155,131565,131566,131568,131570,131572,131574],{"class":157,"line":158},[155,131567,131159],{"class":171},[155,131569,317],{"class":167},[155,131571,130731],{"class":171},[155,131573,2039],{"class":167},[155,131575,130736],{"class":171},[24,131577,131578],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[146,131580,131582],{"className":148,"code":131581,"language":150,"meta":39,"style":39},"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",[152,131583,131584,131616],{"__ignoreMap":39},[155,131585,131586,131588,131590,131592,131594,131596,131598,131600,131602,131604,131606,131608,131610,131612,131614],{"class":157,"line":158},[155,131587,124434],{"class":171},[155,131589,1109],{"class":263},[155,131591,24309],{"class":171},[155,131593,317],{"class":167},[155,131595,130753],{"class":171},[155,131597,123823],{"class":263},[155,131599,26381],{"class":167},[155,131601,130760],{"class":171},[155,131603,360],{"class":263},[155,131605,130765],{"class":171},[155,131607,2039],{"class":167},[155,131609,120966],{"class":263},[155,131611,7589],{"class":171},[155,131613,120966],{"class":263},[155,131615,363],{"class":171},[155,131617,131618,131620,131622,131624,131626,131628,131630,131632,131634,131636,131638,131640,131642,131644,131646],{"class":157,"line":46},[155,131619,124434],{"class":171},[155,131621,329],{"class":263},[155,131623,24309],{"class":171},[155,131625,317],{"class":167},[155,131627,130753],{"class":171},[155,131629,123823],{"class":263},[155,131631,26381],{"class":167},[155,131633,130760],{"class":171},[155,131635,1109],{"class":263},[155,131637,130765],{"class":171},[155,131639,2039],{"class":167},[155,131641,120966],{"class":263},[155,131643,7589],{"class":171},[155,131645,120966],{"class":263},[155,131647,363],{"class":171},[24,131649,131650,131651,131654],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[152,131652,131653],{},"error -> ctrl -> step"," 的流程。",[146,131656,131657],{"className":148,"code":123068,"language":150,"meta":39,"style":39},[152,131658,131659],{"__ignoreMap":39},[155,131660,131661],{"class":157,"line":158},[155,131662,123068],{"class":171},[24,131664,131665],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[146,131667,131669],{"className":148,"code":131668,"language":150,"meta":39,"style":39},"obs = get_obs(model, data)\n",[152,131670,131671],{"__ignoreMap":39},[155,131672,131673,131675,131677],{"class":157,"line":158},[155,131674,129417],{"class":171},[155,131676,317],{"class":167},[155,131678,130854],{"class":171},[24,131680,131681,131682,131685],{},"读取最新观测。后面打印 ",[152,131683,131684],{},"obs.shape[0]","，用来确认观测维度是 10。",[20037,131687,120879],{"id":120878},[24,131689,131690],{},"观测维度为:",[146,131692,131695],{"className":131693,"code":131694,"language":25051,"meta":39},[25049],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[152,131696,131694],{"__ignoreMap":39},[24,131698,131699],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[24,131701,131702],{},"程序每 100 步打印：",[146,131704,131707],{"className":131705,"code":131706,"language":25051,"meta":39},[25049],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[152,131708,131706],{"__ignoreMap":39},[24,131710,131711,131712,131714],{},"如果控制有效，你应该看到最终 ",[152,131713,121794],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[20037,131716,120911],{"id":120910},[28,131718,131719,131722,131725,131731,131737,131744,131754],{},[31,131720,131721],{},"修改目标点位置。",[31,131723,131724],{},"重新运行，观察最终 tip 是否变化。",[31,131726,131727,131728,131730],{},"把 gravity 改成 ",[152,131729,121152],{},"，观察控制是否变差。",[31,131732,129744,131733,129748,131735,48174],{},[152,131734,120721],{},[152,131736,360],{},[31,131738,120974,131739,120977,131741,131743],{},[152,131740,129159],{},[152,131742,125870],{},"，观察机械臂是否更难移动。",[31,131745,120974,131746,101093,131748,120977,131750,131753],{},[152,131747,121797],{},[152,131749,122709],{},[152,131751,131752],{},"0.2 0 0.6","，观察 reward 和 final tip。",[31,131755,131756],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[20037,131758,121016],{"id":121015},[14,131760,131762],{"id":131761},"site-not-found",[152,131763,131764],{},"site not found",[24,131766,131767,131768,119581,131771,48174],{},"检查 XML 中是否有 ",[152,131769,131770],{},"site name=\"tip\"",[152,131772,131773],{},"site name=\"target\"",[14,131775,131776],{"id":131776},"机械臂完全不动",[24,131778,121086],{},[28,131780,131781,131786,131789,131794],{},[31,131782,131783,131785],{},[152,131784,120721],{}," 是否为 2",[31,131787,131788],{},"actuator 是否引用正确 joint",[31,131790,131791,131793],{},[152,131792,119639],{}," 是否被赋值",[31,131795,131796,131797],{},"是否执行了 ",[152,131798,119248],{},[14,131800,131801],{"id":131801},"控制效果不好",[24,131803,131804],{},"正常。本章重点不是控制器最优，而是任务结构:",[146,131806,131809],{"className":131807,"code":131808,"language":25051,"meta":39},[25049],"obs → action → mj_step → reward → next_obs\n",[152,131810,131808],{"__ignoreMap":39},[14,131812,131814],{"id":131813},"tip-坐标不变化","tip 坐标不变化",[24,131816,121138],{},[28,131818,131819,131824,131832,131841],{},[31,131820,131821,131822,48174],{},"是否每步调用了 ",[152,131823,119248],{},[31,131825,131826,131827,119581,131829,48174],{},"是否写入了 ",[152,131828,124689],{},[152,131830,131831],{},"data.ctrl[1]",[31,131833,131834,131835,20293,131838,48174],{},"actuator 是否正确引用 ",[152,131836,131837],{},"joint1",[152,131839,131840],{},"joint2",[31,131842,131843],{},"控制输入是否太小。",[14,131845,131846],{"id":131846},"目标点不会动",[24,131848,131849],{},"本章的 target 是固定 site：",[146,131851,131853],{"className":71630,"code":131852,"language":71632,"meta":39,"style":39},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[152,131854,131855],{"__ignoreMap":39},[155,131856,131857,131859,131861,131863,131865,131867,131869,131871,131874],{"class":157,"line":158},[155,131858,20959],{"class":171},[155,131860,121773],{"class":69863},[155,131862,34745],{"class":226},[155,131864,317],{"class":171},[155,131866,130522],{"class":732},[155,131868,119669],{"class":226},[155,131870,317],{"class":171},[155,131872,131873],{"class":732},"\"0.5 0 0.4\"",[155,131875,131876],{"class":171}," ...\u002F>\n",[24,131878,131879,131880,131882],{},"它直接挂在 ",[152,131881,120404],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[14,131884,131885],{"id":131885},"机械臂不像真实机械臂",[24,131887,131888],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[20037,131890,121170],{"id":121169},[24,131892,131893],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[24,131895,131896],{},"核心公式：",[146,131898,131901],{"className":131899,"code":131900,"language":25051,"meta":39},[25049],"distance = ||tip - target||\nreward = -distance - action_cost\n",[152,131902,131900],{"__ignoreMap":39},[24,131904,131905],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[20011,131907,131908],{},"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":39,"searchDepth":46,"depth":46,"links":131910},[131911,131912,131913,131918,131922,131923,131924,131932],{"id":119209,"depth":46,"text":119210},{"id":119332,"depth":46,"text":119333},{"id":119607,"depth":46,"text":119608,"children":131914},[131915,131916,131917],{"id":130114,"depth":121,"text":130115},{"id":130190,"depth":121,"text":130190},{"id":130220,"depth":121,"text":130221},{"id":119815,"depth":46,"text":119816,"children":131919},[131920,131921],{"id":120135,"depth":121,"text":120135},{"id":120271,"depth":121,"text":120271},{"id":120878,"depth":46,"text":120879},{"id":120910,"depth":46,"text":120911},{"id":121015,"depth":46,"text":121016,"children":131925},[131926,131927,131928,131929,131930,131931],{"id":131761,"depth":121,"text":131764},{"id":131776,"depth":121,"text":131776},{"id":131801,"depth":121,"text":131801},{"id":131813,"depth":121,"text":131814},{"id":131846,"depth":121,"text":131846},{"id":131885,"depth":121,"text":131885},{"id":121169,"depth":46,"text":121170},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":129918,"description":39},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":131939,"title":131940,"body":131941,"description":39,"extension":20021,"meta":135403,"navigation":216,"path":135404,"seo":135405,"stem":135406,"__hash__":135407},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":131942,"toc":135374},[131943,131946,131948,131951,131954,131979,131982,131988,131991,131997,131999,132001,132025,132027,132045,132047,132090,132092,132119,132121,132124,132176,132179,132185,132194,132197,132235,132238,132277,132280,132288,132295,132298,132304,132306,132360,132367,132412,132415,132419,132435,132445,132447,133708,133710,133722,133724,133735,133737,133740,133761,133764,133767,133800,133806,133809,133842,133845,133848,133889,133894,133908,133911,133924,133929,133952,133954,133969,133979,133994,134001,134021,134036,134054,134057,134074,134082,134098,134104,134136,134149,134181,134191,134226,134240,134286,134300,134342,134353,134366,134372,134405,134408,134435,134445,134485,134495,134512,134519,134537,134540,134581,134594,134609,134612,134635,134638,134650,134653,134672,134677,134698,134701,134716,134719,134753,134765,134780,134783,134808,134811,134830,134833,134865,134868,134892,134898,134928,134935,134948,134951,134953,134955,134961,134964,134967,134979,134982,134984,135038,135040,135044,135050,135059,135062,135069,135071,135094,135097,135101,135103,135121,135127,135129,135162,135165,135171,135175,135178,135198,135203,135207,135214,135234,135239,135243,135246,135266,135269,135355,135359,135362,135368,135371],[10,131944,131940],{"id":131945},"_8gymnasium-风格强化学习接口基础",[20037,131947,119210],{"id":119209},[24,131949,131950],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[24,131952,131953],{},"你将实现:",[146,131955,131957],{"className":148,"code":131956,"language":150,"meta":39,"style":39},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[152,131958,131959,131969],{"__ignoreMap":39},[155,131960,131961,131964,131966],{"class":157,"line":158},[155,131962,131963],{"class":171},"obs, info ",[155,131965,317],{"class":167},[155,131967,131968],{"class":171}," env.reset()\n",[155,131970,131971,131974,131976],{"class":157,"line":46},[155,131972,131973],{"class":171},"obs, reward, terminated, truncated, info ",[155,131975,317],{"class":167},[155,131977,131978],{"class":171}," env.step(action)\n",[24,131980,131981],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[24,131983,131984,131985,131987],{},"前面章节的代码都是“脚本式”的：在 ",[152,131986,120858],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[24,131989,131990],{},"可以先记住 Gymnasium 环境的核心交互：",[146,131992,131995],{"className":131993,"code":131994,"language":25051,"meta":39},[25049],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[152,131996,131994],{"__ignoreMap":39},[20037,131998,119333],{"id":119332},[24,132000,119336],{},[146,132002,132003],{"className":43613,"code":122951,"language":43615,"meta":39,"style":39},[152,132004,132005],{"__ignoreMap":39},[155,132006,132007,132009,132011,132013,132015,132017,132019,132021,132023],{"class":157,"line":158},[155,132008,44368],{"class":226},[155,132010,46104],{"class":732},[155,132012,43625],{"class":732},[155,132014,46189],{"class":263},[155,132016,122966],{"class":732},[155,132018,119361],{"class":732},[155,132020,121064],{"class":732},[155,132022,119377],{"class":732},[155,132024,122975],{"class":732},[24,132026,121382],{},[146,132028,132030],{"className":43613,"code":132029,"language":43615,"meta":39,"style":39},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[152,132031,132032],{"__ignoreMap":39},[155,132033,132034,132036,132038,132040,132042],{"class":157,"line":158},[155,132035,43622],{"class":226},[155,132037,43625],{"class":732},[155,132039,119493],{"class":732},[155,132041,126274],{"class":732},[155,132043,132044],{"class":732}," gymnasium\n",[24,132046,121399],{},[146,132048,132050],{"className":43613,"code":132049,"language":43615,"meta":39,"style":39},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[152,132051,132052,132069,132078],{"__ignoreMap":39},[155,132053,132054,132056,132058,132060,132063,132065,132067],{"class":157,"line":158},[155,132055,50119],{"class":226},[155,132057,48965],{"class":732},[155,132059,44907],{"class":263},[155,132061,132062],{"class":732}," mujoco-gym-api",[155,132064,119538],{"class":732},[155,132066,119541],{"class":263},[155,132068,119544],{"class":263},[155,132070,132071,132073,132075],{"class":157,"line":46},[155,132072,50119],{"class":226},[155,132074,119551],{"class":732},[155,132076,132077],{"class":732}," mujoco-gym-api\n",[155,132079,132080,132082,132084,132086,132088],{"class":157,"line":121},[155,132081,43622],{"class":226},[155,132083,43625],{"class":732},[155,132085,119493],{"class":732},[155,132087,126274],{"class":732},[155,132089,132044],{"class":732},[24,132091,119567],{},[28,132093,132094,132104,132107,132113],{},[31,132095,132096,132097,132100,132101,48174],{},"本章使用 ",[152,132098,132099],{},"gymnasium","，不是旧版 ",[152,132102,132103],{},"gym",[31,132105,132106],{},"Gymnasium API 与旧 Gym API 有差异。",[31,132108,132109,132110,48174],{},"旧 Gym 常见返回值是 4 个: ",[152,132111,132112],{},"obs, reward, done, info",[31,132114,132115,132116,48174],{},"Gymnasium 返回值是 5 个: ",[152,132117,132118],{},"obs, reward, terminated, truncated, info",[20037,132120,119608],{"id":119607},[24,132122,132123],{},"强化学习环境接口包含:",[20222,132125,132126,132135],{},[20225,132127,132128],{},[20228,132129,132130,132133],{},[20231,132131,132132],{"align":43527},"方法",[20231,132134,121259],{"align":43527},[20269,132136,132137,132147,132157,132167],{},[20228,132138,132139,132144],{},[20274,132140,132141],{"align":43527},[152,132142,132143],{},"reset()",[20274,132145,132146],{"align":43527},"重置环境",[20228,132148,132149,132154],{},[20274,132150,132151],{"align":43527},[152,132152,132153],{},"step(action)",[20274,132155,132156],{"align":43527},"执行动作",[20228,132158,132159,132164],{},[20274,132160,132161],{"align":43527},[152,132162,132163],{},"observation_space",[20274,132165,132166],{"align":43527},"观测空间",[20228,132168,132169,132174],{},[20274,132170,132171],{"align":43527},[152,132172,132173],{},"action_space",[20274,132175,43445],{"align":43527},[24,132177,132178],{},"一个最小环境需要完成:",[146,132180,132183],{"className":132181,"code":132182,"language":25051,"meta":39},[25049],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[152,132184,132182],{"__ignoreMap":39},[14,132186,132188,119581,132191,123201],{"id":132187},"terminated-和-truncated-的区别",[152,132189,132190],{},"terminated",[152,132192,132193],{},"truncated",[24,132195,132196],{},"Gymnasium 把“结束”拆成两个概念：",[20222,132198,132199,132209],{},[20225,132200,132201],{},[20228,132202,132203,132205,132207],{},[20231,132204,123137],{"align":43527},[20231,132206,119263],{"align":43527},[20231,132208,40979],{"align":43527},[20269,132210,132211,132223],{},[20228,132212,132213,132217,132220],{},[20274,132214,132215],{"align":43527},[152,132216,132190],{},[20274,132218,132219],{"align":43527},"任务自然结束",[20274,132221,132222],{"align":43527},"机械臂到达目标、机器人摔倒",[20228,132224,132225,132229,132232],{},[20274,132226,132227],{"align":43527},[152,132228,132193],{},[20274,132230,132231],{"align":43527},"因外部限制截断",[20274,132233,132234],{"align":43527},"达到最大步数、时间限制",[24,132236,132237],{},"本章中：",[146,132239,132241],{"className":148,"code":132240,"language":150,"meta":39,"style":39},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[152,132242,132243,132258],{"__ignoreMap":39},[155,132244,132245,132248,132250,132253,132255],{"class":157,"line":158},[155,132246,132247],{"class":171},"terminated ",[155,132249,317],{"class":167},[155,132251,132252],{"class":171}," dist ",[155,132254,20959],{"class":167},[155,132256,132257],{"class":263}," 0.05\n",[155,132259,132260,132263,132265,132267,132270,132272,132274],{"class":157,"line":46},[155,132261,132262],{"class":171},"truncated ",[155,132264,317],{"class":167},[155,132266,8484],{"class":263},[155,132268,132269],{"class":171},".steps ",[155,132271,21607],{"class":167},[155,132273,8484],{"class":263},[155,132275,132276],{"class":171},".max_steps\n",[24,132278,132279],{},"也就是：",[28,132281,132282,132285],{},[31,132283,132284],{},"末端距离目标小于 0.05，任务成功结束。",[31,132286,132287],{},"步数超过上限，episode 被截断。",[14,132289,132291,119581,132293],{"id":132290},"observation_space-和-action_space",[152,132292,132163],{},[152,132294,132173],{},[24,132296,132297],{},"这两个对象告诉算法：",[146,132299,132302],{"className":132300,"code":132301,"language":25051,"meta":39},[25049],"观测长什么样\n动作允许多大\n",[152,132303,132301],{"__ignoreMap":39},[24,132305,34460],{},[146,132307,132309],{"className":148,"code":132308,"language":150,"meta":39,"style":39},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[152,132310,132311],{"__ignoreMap":39},[155,132312,132313,132315,132318,132320,132323,132326,132329,132331,132333,132336,132338,132340,132342,132344,132346,132348,132350,132353,132355,132357],{"class":157,"line":158},[155,132314,285],{"class":263},[155,132316,132317],{"class":171},".action_space ",[155,132319,317],{"class":167},[155,132321,132322],{"class":171}," spaces.Box(",[155,132324,132325],{"class":323},"low",[155,132327,132328],{"class":167},"=-",[155,132330,120966],{"class":263},[155,132332,7589],{"class":171},[155,132334,132335],{"class":323},"high",[155,132337,317],{"class":167},[155,132339,120966],{"class":263},[155,132341,7589],{"class":171},[155,132343,114526],{"class":323},[155,132345,317],{"class":167},[155,132347,230],{"class":171},[155,132349,360],{"class":263},[155,132351,132352],{"class":171},",), ",[155,132354,112063],{"class":323},[155,132356,317],{"class":167},[155,132358,132359],{"class":171},"np.float32)\n",[24,132361,132362,132363,132366],{},"表示动作是 2 维数组，每个值都在 ",[152,132364,132365],{},"[-1, 1]"," 范围内。",[146,132368,132370],{"className":148,"code":132369,"language":150,"meta":39,"style":39},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[152,132371,132372],{"__ignoreMap":39},[155,132373,132374,132376,132379,132381,132383,132385,132387,132390,132392,132394,132396,132398,132400,132402,132404,132406,132408,132410],{"class":157,"line":158},[155,132375,285],{"class":263},[155,132377,132378],{"class":171},".observation_space ",[155,132380,317],{"class":167},[155,132382,132322],{"class":171},[155,132384,132325],{"class":323},[155,132386,132328],{"class":167},[155,132388,132389],{"class":171},"np.inf, ",[155,132391,132335],{"class":323},[155,132393,317],{"class":167},[155,132395,132389],{"class":171},[155,132397,114526],{"class":323},[155,132399,317],{"class":167},[155,132401,230],{"class":171},[155,132403,565],{"class":263},[155,132405,132352],{"class":171},[155,132407,112063],{"class":323},[155,132409,317],{"class":167},[155,132411,132359],{"class":171},[24,132413,132414],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[14,132416,132418],{"id":132417},"frame_skip-是什么","frame_skip 是什么",[146,132420,132422],{"className":148,"code":132421,"language":150,"meta":39,"style":39},"self.frame_skip = 5\n",[152,132423,132424],{"__ignoreMap":39},[155,132425,132426,132428,132431,132433],{"class":157,"line":158},[155,132427,285],{"class":263},[155,132429,132430],{"class":171},".frame_skip ",[155,132432,317],{"class":167},[155,132434,72990],{"class":263},[24,132436,132437,132438,132441,132442,132444],{},"表示外部调用一次 ",[152,132439,132440],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[152,132443,119778],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[20037,132446,119816],{"id":119815},[146,132448,132450],{"className":148,"code":132449,"language":150,"meta":39,"style":39},"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",[152,132451,132452,132464,132470,132480,132491,132495,132499,132507,132512,132516,132520,132524,132528,132532,132536,132540,132545,132549,132553,132557,132562,132566,132570,132574,132578,132582,132586,132590,132594,132598,132602,132606,132610,132614,132632,132647,132651,132664,132674,132689,132706,132710,132731,132750,132775,132789,132793,132803,132815,132825,132829,132871,132909,132913,132923,132939,132954,132973,132980,132984,132997,133012,133027,133040,133059,133075,133079,133120,133135,133150,133154,133193,133204,133217,133221,133231,133240,133244,133254,133269,133287,133291,133302,133319,133332,133336,133346,133350,133361,133372,133376,133390,133404,133420,133424,133437,133454,133469,133476,133480,133484,133496,133506,133524,133536,133548,133552,133560,133576,133585,133594,133602,133644,133657,133662,133666,133684,133688,133692,133704],{"__ignoreMap":39},[155,132453,132454,132456,132459,132461],{"class":157,"line":158},[155,132455,168],{"class":167},[155,132457,132458],{"class":171}," gymnasium ",[155,132460,907],{"class":167},[155,132462,132463],{"class":171}," gym\n",[155,132465,132466,132468],{"class":157,"line":46},[155,132467,168],{"class":167},[155,132469,119864],{"class":171},[155,132471,132472,132474,132476,132478],{"class":157,"line":121},[155,132473,168],{"class":167},[155,132475,904],{"class":171},[155,132477,907],{"class":167},[155,132479,910],{"class":171},[155,132481,132482,132484,132486,132488],{"class":157,"line":180},[155,132483,183],{"class":167},[155,132485,132458],{"class":171},[155,132487,168],{"class":167},[155,132489,132490],{"class":171}," spaces\n",[155,132492,132493],{"class":157,"line":194},[155,132494,217],{"emptyLinePlaceholder":216},[155,132496,132497],{"class":157,"line":200},[155,132498,217],{"emptyLinePlaceholder":216},[155,132500,132501,132503,132505],{"class":157,"line":213},[155,132502,119877],{"class":263},[155,132504,33391],{"class":167},[155,132506,119882],{"class":732},[155,132508,132509],{"class":157,"line":220},[155,132510,132511],{"class":732},"\u003Cmujoco model=\"gym_reacher\">\n",[155,132513,132514],{"class":157,"line":245},[155,132515,130301],{"class":732},[155,132517,132518],{"class":157,"line":251},[155,132519,217],{"emptyLinePlaceholder":216},[155,132521,132522],{"class":157,"line":257},[155,132523,119901],{"class":732},[155,132525,132526],{"class":157,"line":270},[155,132527,130319],{"class":732},[155,132529,132530],{"class":157,"line":276},[155,132531,217],{"emptyLinePlaceholder":216},[155,132533,132534],{"class":157,"line":297},[155,132535,130328],{"class":732},[155,132537,132538],{"class":157,"line":302},[155,132539,130333],{"class":732},[155,132541,132542],{"class":157,"line":308},[155,132543,132544],{"class":732},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[155,132546,132547],{"class":157,"line":366},[155,132548,217],{"emptyLinePlaceholder":216},[155,132550,132551],{"class":157,"line":379},[155,132552,130347],{"class":732},[155,132554,132555],{"class":157,"line":385},[155,132556,130352],{"class":732},[155,132558,132559],{"class":157,"line":415},[155,132560,132561],{"class":732},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[155,132563,132564],{"class":157,"line":452},[155,132565,130362],{"class":732},[155,132567,132568],{"class":157,"line":480},[155,132569,125001],{"class":732},[155,132571,132572],{"class":157,"line":486},[155,132573,119930],{"class":732},[155,132575,132576],{"class":157,"line":499},[155,132577,119935],{"class":732},[155,132579,132580],{"class":157,"line":505},[155,132581,217],{"emptyLinePlaceholder":216},[155,132583,132584],{"class":157,"line":528},[155,132585,125018],{"class":732},[155,132587,132588],{"class":157,"line":549},[155,132589,130387],{"class":732},[155,132591,132592],{"class":157,"line":570},[155,132593,130392],{"class":732},[155,132595,132596],{"class":157,"line":575},[155,132597,125028],{"class":732},[155,132599,132600],{"class":157,"line":581},[155,132601,119940],{"class":732},[155,132603,132604],{"class":157,"line":592},[155,132605,114261],{"class":732},[155,132607,132608],{"class":157,"line":610},[155,132609,217],{"emptyLinePlaceholder":216},[155,132611,132612],{"class":157,"line":622},[155,132613,217],{"emptyLinePlaceholder":216},[155,132615,132616,132618,132621,132623,132625,132627,132630],{"class":157,"line":638},[155,132617,223],{"class":167},[155,132619,132620],{"class":226}," ReacherEnv",[155,132622,230],{"class":171},[155,132624,132103],{"class":226},[155,132626,236],{"class":171},[155,132628,132629],{"class":226},"Env",[155,132631,242],{"class":171},[155,132633,132634,132637,132639,132641,132644],{"class":157,"line":650},[155,132635,132636],{"class":171},"    metadata ",[155,132638,317],{"class":167},[155,132640,24314],{"class":171},[155,132642,132643],{"class":732},"\"render_modes\"",[155,132645,132646],{"class":171},": []}\n",[155,132648,132649],{"class":157,"line":662},[155,132650,217],{"emptyLinePlaceholder":216},[155,132652,132653,132655,132657,132660,132662],{"class":157,"line":678},[155,132654,260],{"class":167},[155,132656,264],{"class":263},[155,132658,132659],{"class":171},"(self) -> ",[155,132661,114249],{"class":263},[155,132663,736],{"class":171},[155,132665,132666,132668,132670,132672],{"class":157,"line":694},[155,132667,279],{"class":263},[155,132669,37054],{"class":171},[155,132671,291],{"class":263},[155,132673,294],{"class":171},[155,132675,132676,132678,132681,132683,132685,132687],{"class":157,"line":706},[155,132677,311],{"class":263},[155,132679,132680],{"class":171},".model ",[155,132682,317],{"class":167},[155,132684,119975],{"class":171},[155,132686,119877],{"class":263},[155,132688,363],{"class":171},[155,132690,132691,132693,132696,132698,132701,132703],{"class":157,"line":715},[155,132692,311],{"class":263},[155,132694,132695],{"class":171},".data ",[155,132697,317],{"class":167},[155,132699,132700],{"class":171}," mujoco.MjData(",[155,132702,285],{"class":263},[155,132704,132705],{"class":171},".model)\n",[155,132707,132708],{"class":157,"line":720},[155,132709,217],{"emptyLinePlaceholder":216},[155,132711,132712,132714,132717,132719,132722,132724,132727,132729],{"class":157,"line":739},[155,132713,311],{"class":263},[155,132715,132716],{"class":171},".tip_site_id ",[155,132718,317],{"class":167},[155,132720,132721],{"class":171}," mujoco.mj_name2id(",[155,132723,285],{"class":263},[155,132725,132726],{"class":171},".model, mujoco.mjtObj.mjOBJ_SITE, ",[155,132728,130099],{"class":732},[155,132730,363],{"class":171},[155,132732,132733,132735,132738,132740,132742,132744,132746,132748],{"class":157,"line":745},[155,132734,311],{"class":263},[155,132736,132737],{"class":171},".target_site_id ",[155,132739,317],{"class":167},[155,132741,132721],{"class":171},[155,132743,285],{"class":263},[155,132745,132726],{"class":171},[155,132747,130522],{"class":732},[155,132749,363],{"class":171},[155,132751,132752,132754,132756,132758,132760,132762,132765,132767,132769,132771,132773],{"class":157,"line":773},[155,132753,2803],{"class":167},[155,132755,8484],{"class":263},[155,132757,132716],{"class":171},[155,132759,20959],{"class":167},[155,132761,1151],{"class":263},[155,132763,132764],{"class":167}," or",[155,132766,8484],{"class":263},[155,132768,132737],{"class":171},[155,132770,20959],{"class":167},[155,132772,1151],{"class":263},[155,132774,736],{"class":171},[155,132776,132777,132780,132782,132784,132787],{"class":157,"line":779},[155,132778,132779],{"class":167},"            raise",[155,132781,121998],{"class":263},[155,132783,230],{"class":171},[155,132785,132786],{"class":732},"\"required sites not found\"",[155,132788,363],{"class":171},[155,132790,132791],{"class":157,"line":785},[155,132792,217],{"emptyLinePlaceholder":216},[155,132794,132795,132797,132799,132801],{"class":157,"line":791},[155,132796,311],{"class":263},[155,132798,132430],{"class":171},[155,132800,317],{"class":167},[155,132802,72990],{"class":263},[155,132804,132805,132807,132810,132812],{"class":157,"line":796},[155,132806,311],{"class":263},[155,132808,132809],{"class":171},".max_steps ",[155,132811,317],{"class":167},[155,132813,132814],{"class":263}," 200\n",[155,132816,132817,132819,132821,132823],{"class":157,"line":802},[155,132818,311],{"class":263},[155,132820,132269],{"class":171},[155,132822,317],{"class":167},[155,132824,16959],{"class":263},[155,132826,132827],{"class":157,"line":808},[155,132828,217],{"emptyLinePlaceholder":216},[155,132830,132831,132833,132835,132837,132839,132841,132843,132845,132847,132849,132851,132853,132855,132857,132859,132861,132863,132865,132867,132869],{"class":157,"line":819},[155,132832,311],{"class":263},[155,132834,132317],{"class":171},[155,132836,317],{"class":167},[155,132838,132322],{"class":171},[155,132840,132325],{"class":323},[155,132842,132328],{"class":167},[155,132844,120966],{"class":263},[155,132846,7589],{"class":171},[155,132848,132335],{"class":323},[155,132850,317],{"class":167},[155,132852,120966],{"class":263},[155,132854,7589],{"class":171},[155,132856,114526],{"class":323},[155,132858,317],{"class":167},[155,132860,230],{"class":171},[155,132862,360],{"class":263},[155,132864,132352],{"class":171},[155,132866,112063],{"class":323},[155,132868,317],{"class":167},[155,132870,132359],{"class":171},[155,132872,132873,132875,132877,132879,132881,132883,132885,132887,132889,132891,132893,132895,132897,132899,132901,132903,132905,132907],{"class":157,"line":1832},[155,132874,311],{"class":263},[155,132876,132378],{"class":171},[155,132878,317],{"class":167},[155,132880,132322],{"class":171},[155,132882,132325],{"class":323},[155,132884,132328],{"class":167},[155,132886,132389],{"class":171},[155,132888,132335],{"class":323},[155,132890,317],{"class":167},[155,132892,132389],{"class":171},[155,132894,114526],{"class":323},[155,132896,317],{"class":167},[155,132898,230],{"class":171},[155,132900,565],{"class":263},[155,132902,132352],{"class":171},[155,132904,112063],{"class":323},[155,132906,317],{"class":167},[155,132908,132359],{"class":171},[155,132910,132911],{"class":157,"line":1838},[155,132912,217],{"emptyLinePlaceholder":216},[155,132914,132915,132917,132920],{"class":157,"line":1844},[155,132916,260],{"class":167},[155,132918,132919],{"class":226}," _get_obs",[155,132921,132922],{"class":171},"(self) -> np.ndarray:\n",[155,132924,132925,132927,132929,132931,132934,132936],{"class":157,"line":1850},[155,132926,130700],{"class":171},[155,132928,317],{"class":167},[155,132930,8484],{"class":263},[155,132932,132933],{"class":171},".data.site_xpos[",[155,132935,285],{"class":263},[155,132937,132938],{"class":171},".tip_site_id].copy()\n",[155,132940,132941,132943,132945,132947,132949,132951],{"class":157,"line":1861},[155,132942,130713],{"class":171},[155,132944,317],{"class":167},[155,132946,8484],{"class":263},[155,132948,132933],{"class":171},[155,132950,285],{"class":263},[155,132952,132953],{"class":171},".target_site_id].copy()\n",[155,132955,132956,132958,132960,132963,132965,132968,132970],{"class":157,"line":1866},[155,132957,128745],{"class":171},[155,132959,317],{"class":167},[155,132961,132962],{"class":171}," np.concatenate([",[155,132964,285],{"class":263},[155,132966,132967],{"class":171},".data.qpos.copy(), ",[155,132969,285],{"class":263},[155,132971,132972],{"class":171},".data.qvel.copy(), tip, target])\n",[155,132974,132975,132977],{"class":157,"line":1871},[155,132976,709],{"class":167},[155,132978,132979],{"class":171}," obs.astype(np.float32)\n",[155,132981,132982],{"class":157,"line":1877},[155,132983,217],{"emptyLinePlaceholder":216},[155,132985,132986,132988,132991,132993,132995],{"class":157,"line":1883},[155,132987,260],{"class":167},[155,132989,132990],{"class":226}," _get_reward",[155,132992,132659],{"class":171},[155,132994,2833],{"class":263},[155,132996,736],{"class":171},[155,132998,132999,133001,133003,133005,133007,133009],{"class":157,"line":1894},[155,133000,130700],{"class":171},[155,133002,317],{"class":167},[155,133004,8484],{"class":263},[155,133006,132933],{"class":171},[155,133008,285],{"class":263},[155,133010,133011],{"class":171},".tip_site_id]\n",[155,133013,133014,133016,133018,133020,133022,133024],{"class":157,"line":1900},[155,133015,130713],{"class":171},[155,133017,317],{"class":167},[155,133019,8484],{"class":263},[155,133021,132933],{"class":171},[155,133023,285],{"class":263},[155,133025,133026],{"class":171},".target_site_id]\n",[155,133028,133029,133032,133034,133036,133038],{"class":157,"line":1911},[155,133030,133031],{"class":171},"        dist ",[155,133033,317],{"class":167},[155,133035,130164],{"class":171},[155,133037,2039],{"class":167},[155,133039,130169],{"class":171},[155,133041,133042,133045,133047,133049,133051,133054,133056],{"class":157,"line":1917},[155,133043,133044],{"class":171},"        control_cost ",[155,133046,317],{"class":167},[155,133048,130600],{"class":263},[155,133050,26381],{"class":167},[155,133052,133053],{"class":171}," np.sum(np.square(",[155,133055,285],{"class":263},[155,133057,133058],{"class":171},".data.ctrl))\n",[155,133060,133061,133063,133065,133067,133069,133071,133073],{"class":157,"line":1927},[155,133062,709],{"class":167},[155,133064,128360],{"class":263},[155,133066,230],{"class":171},[155,133068,2039],{"class":167},[155,133070,130159],{"class":171},[155,133072,2039],{"class":167},[155,133074,130622],{"class":171},[155,133076,133077],{"class":157,"line":1933},[155,133078,217],{"emptyLinePlaceholder":216},[155,133080,133081,133083,133086,133089,133091,133094,133096,133098,133100,133102,133104,133107,133110,133112,133114,133116,133118],{"class":157,"line":1943},[155,133082,260],{"class":167},[155,133084,133085],{"class":226}," reset",[155,133087,133088],{"class":171},"(self, ",[155,133090,1563],{"class":167},[155,133092,133093],{"class":171},", seed: ",[155,133095,15239],{"class":263},[155,133097,44901],{"class":167},[155,133099,8545],{"class":263},[155,133101,33391],{"class":167},[155,133103,8545],{"class":263},[155,133105,133106],{"class":171},", options: ",[155,133108,133109],{"class":263},"dict",[155,133111,44901],{"class":167},[155,133113,8545],{"class":263},[155,133115,33391],{"class":167},[155,133117,8545],{"class":263},[155,133119,242],{"class":171},[155,133121,133122,133124,133127,133130,133132],{"class":157,"line":1949},[155,133123,279],{"class":263},[155,133125,133126],{"class":171},"().reset(",[155,133128,133129],{"class":323},"seed",[155,133131,317],{"class":167},[155,133133,133134],{"class":171},"seed)\n",[155,133136,133137,133140,133142,133145,133147],{"class":157,"line":1959},[155,133138,133139],{"class":171},"        mujoco.mj_resetData(",[155,133141,285],{"class":263},[155,133143,133144],{"class":171},".model, ",[155,133146,285],{"class":263},[155,133148,133149],{"class":171},".data)\n",[155,133151,133152],{"class":157,"line":1964},[155,133153,217],{"emptyLinePlaceholder":216},[155,133155,133156,133158,133161,133163,133165,133168,133170,133172,133174,133176,133178,133180,133182,133184,133186,133188,133190],{"class":157,"line":1970},[155,133157,311],{"class":263},[155,133159,133160],{"class":171},".data.qpos[:] ",[155,133162,317],{"class":167},[155,133164,8484],{"class":263},[155,133166,133167],{"class":171},".np_random.uniform(",[155,133169,132325],{"class":323},[155,133171,132328],{"class":167},[155,133173,104773],{"class":263},[155,133175,7589],{"class":171},[155,133177,132335],{"class":323},[155,133179,317],{"class":167},[155,133181,104773],{"class":263},[155,133183,7589],{"class":171},[155,133185,1020],{"class":323},[155,133187,317],{"class":167},[155,133189,285],{"class":263},[155,133191,133192],{"class":171},".model.nq)\n",[155,133194,133195,133197,133200,133202],{"class":157,"line":1981},[155,133196,311],{"class":263},[155,133198,133199],{"class":171},".data.qvel[:] ",[155,133201,317],{"class":167},[155,133203,123324],{"class":263},[155,133205,133206,133209,133211,133213,133215],{"class":157,"line":1986},[155,133207,133208],{"class":171},"        mujoco.mj_forward(",[155,133210,285],{"class":263},[155,133212,133144],{"class":171},[155,133214,285],{"class":263},[155,133216,133149],{"class":171},[155,133218,133219],{"class":157,"line":1991},[155,133220,217],{"emptyLinePlaceholder":216},[155,133222,133223,133225,133227,133229],{"class":157,"line":1997},[155,133224,311],{"class":263},[155,133226,132269],{"class":171},[155,133228,317],{"class":167},[155,133230,16959],{"class":263},[155,133232,133233,133235,133237],{"class":157,"line":2014},[155,133234,709],{"class":167},[155,133236,8484],{"class":263},[155,133238,133239],{"class":171},"._get_obs(), {}\n",[155,133241,133242],{"class":157,"line":2046},[155,133243,217],{"emptyLinePlaceholder":216},[155,133245,133246,133248,133251],{"class":157,"line":2062},[155,133247,260],{"class":167},[155,133249,133250],{"class":226}," step",[155,133252,133253],{"class":171},"(self, action):\n",[155,133255,133256,133258,133260,133263,133265,133267],{"class":157,"line":2067},[155,133257,128785],{"class":171},[155,133259,317],{"class":167},[155,133261,133262],{"class":171}," np.asarray(action, ",[155,133264,112063],{"class":323},[155,133266,317],{"class":167},[155,133268,132359],{"class":171},[155,133270,133271,133273,133275,133277,133279,133282,133284],{"class":157,"line":2073},[155,133272,128785],{"class":171},[155,133274,317],{"class":167},[155,133276,126010],{"class":171},[155,133278,285],{"class":263},[155,133280,133281],{"class":171},".action_space.low, ",[155,133283,285],{"class":263},[155,133285,133286],{"class":171},".action_space.high)\n",[155,133288,133289],{"class":157,"line":2079},[155,133290,217],{"emptyLinePlaceholder":216},[155,133292,133293,133295,133298,133300],{"class":157,"line":2089},[155,133294,311],{"class":263},[155,133296,133297],{"class":171},".data.ctrl[:] ",[155,133299,317],{"class":167},[155,133301,126033],{"class":171},[155,133303,133304,133306,133308,133310,133312,133314,133316],{"class":157,"line":2095},[155,133305,2179],{"class":167},[155,133307,120064],{"class":171},[155,133309,1131],{"class":167},[155,133311,2008],{"class":263},[155,133313,230],{"class":171},[155,133315,285],{"class":263},[155,133317,133318],{"class":171},".frame_skip):\n",[155,133320,133321,133324,133326,133328,133330],{"class":157,"line":2106},[155,133322,133323],{"class":171},"            mujoco.mj_step(",[155,133325,285],{"class":263},[155,133327,133144],{"class":171},[155,133329,285],{"class":263},[155,133331,133149],{"class":171},[155,133333,133334],{"class":157,"line":2112},[155,133335,217],{"emptyLinePlaceholder":216},[155,133337,133338,133340,133342,133344],{"class":157,"line":2122},[155,133339,311],{"class":263},[155,133341,132269],{"class":171},[155,133343,2351],{"class":167},[155,133345,74262],{"class":263},[155,133347,133348],{"class":157,"line":2128},[155,133349,217],{"emptyLinePlaceholder":216},[155,133351,133352,133354,133356,133358],{"class":157,"line":2138},[155,133353,128745],{"class":171},[155,133355,317],{"class":167},[155,133357,8484],{"class":263},[155,133359,133360],{"class":171},"._get_obs()\n",[155,133362,133363,133365,133367,133369],{"class":157,"line":2144},[155,133364,128850],{"class":171},[155,133366,317],{"class":167},[155,133368,8484],{"class":263},[155,133370,133371],{"class":171},"._get_reward()\n",[155,133373,133374],{"class":157,"line":2154},[155,133375,217],{"emptyLinePlaceholder":216},[155,133377,133378,133380,133382,133384,133386,133388],{"class":157,"line":2160},[155,133379,130700],{"class":171},[155,133381,317],{"class":167},[155,133383,8484],{"class":263},[155,133385,132933],{"class":171},[155,133387,285],{"class":263},[155,133389,133011],{"class":171},[155,133391,133392,133394,133396,133398,133400,133402],{"class":157,"line":2170},[155,133393,130713],{"class":171},[155,133395,317],{"class":167},[155,133397,8484],{"class":263},[155,133399,132933],{"class":171},[155,133401,285],{"class":263},[155,133403,133026],{"class":171},[155,133405,133406,133408,133410,133412,133415,133417],{"class":157,"line":2176},[155,133407,133031],{"class":171},[155,133409,317],{"class":167},[155,133411,128360],{"class":263},[155,133413,133414],{"class":171},"(np.linalg.norm(tip ",[155,133416,2039],{"class":167},[155,133418,133419],{"class":171}," target))\n",[155,133421,133422],{"class":157,"line":2191},[155,133423,217],{"emptyLinePlaceholder":216},[155,133425,133426,133429,133431,133433,133435],{"class":157,"line":2197},[155,133427,133428],{"class":171},"        terminated ",[155,133430,317],{"class":167},[155,133432,132252],{"class":171},[155,133434,20959],{"class":167},[155,133436,132257],{"class":263},[155,133438,133439,133442,133444,133446,133448,133450,133452],{"class":157,"line":2208},[155,133440,133441],{"class":171},"        truncated ",[155,133443,317],{"class":167},[155,133445,8484],{"class":263},[155,133447,132269],{"class":171},[155,133449,21607],{"class":167},[155,133451,8484],{"class":263},[155,133453,132276],{"class":171},[155,133455,133456,133459,133461,133463,133466],{"class":157,"line":2214},[155,133457,133458],{"class":171},"        info ",[155,133460,317],{"class":167},[155,133462,24314],{"class":171},[155,133464,133465],{"class":732},"\"distance\"",[155,133467,133468],{"class":171},": dist}\n",[155,133470,133471,133473],{"class":157,"line":2225},[155,133472,709],{"class":167},[155,133474,133475],{"class":171}," obs, reward, terminated, truncated, info\n",[155,133477,133478],{"class":157,"line":2231},[155,133479,217],{"emptyLinePlaceholder":216},[155,133481,133482],{"class":157,"line":2237},[155,133483,217],{"emptyLinePlaceholder":216},[155,133485,133486,133488,133490,133492,133494],{"class":157,"line":2243},[155,133487,1484],{"class":167},[155,133489,21861],{"class":226},[155,133491,119961],{"class":171},[155,133493,114249],{"class":263},[155,133495,736],{"class":171},[155,133497,133498,133501,133503],{"class":157,"line":2249},[155,133499,133500],{"class":171},"    env ",[155,133502,317],{"class":167},[155,133504,133505],{"class":171}," ReacherEnv()\n",[155,133507,133508,133511,133513,133516,133518,133520,133522],{"class":157,"line":2260},[155,133509,133510],{"class":171},"    obs, info ",[155,133512,317],{"class":167},[155,133514,133515],{"class":171}," env.reset(",[155,133517,133129],{"class":323},[155,133519,317],{"class":167},[155,133521,1109],{"class":263},[155,133523,363],{"class":171},[155,133525,133526,133528,133530,133533],{"class":157,"line":2266},[155,133527,822],{"class":263},[155,133529,230],{"class":171},[155,133531,133532],{"class":732},"\"initial obs shape:\"",[155,133534,133535],{"class":171},", obs.shape)\n",[155,133537,133538,133540,133542,133545],{"class":157,"line":2286},[155,133539,822],{"class":263},[155,133541,230],{"class":171},[155,133543,133544],{"class":732},"\"initial info:\"",[155,133546,133547],{"class":171},", info)\n",[155,133549,133550],{"class":157,"line":2292},[155,133551,217],{"emptyLinePlaceholder":216},[155,133553,133554,133556,133558],{"class":157,"line":2303},[155,133555,128716],{"class":171},[155,133557,317],{"class":167},[155,133559,123324],{"class":263},[155,133561,133562,133564,133566,133568,133570,133572,133574],{"class":157,"line":2309},[155,133563,2000],{"class":167},[155,133565,1145],{"class":171},[155,133567,1131],{"class":167},[155,133569,2008],{"class":263},[155,133571,230],{"class":171},[155,133573,3458],{"class":263},[155,133575,242],{"class":171},[155,133577,133578,133580,133582],{"class":157,"line":2315},[155,133579,128785],{"class":171},[155,133581,317],{"class":167},[155,133583,133584],{"class":171}," env.action_space.sample()\n",[155,133586,133587,133590,133592],{"class":157,"line":2321},[155,133588,133589],{"class":171},"        obs, reward, terminated, truncated, info ",[155,133591,317],{"class":167},[155,133593,131978],{"class":171},[155,133595,133596,133598,133600],{"class":157,"line":2327},[155,133597,128860],{"class":171},[155,133599,2351],{"class":167},[155,133601,128865],{"class":171},[155,133603,133604,133606,133608,133610,133612,133615,133617,133619,133622,133624,133626,133629,133631,133633,133636,133638,133640,133642],{"class":157,"line":2333},[155,133605,2017],{"class":263},[155,133607,230],{"class":171},[155,133609,128894],{"class":732},[155,133611,128897],{"class":171},[155,133613,133614],{"class":732},"\"reward:\"",[155,133616,7589],{"class":171},[155,133618,1555],{"class":263},[155,133620,133621],{"class":171},"(reward, ",[155,133623,4444],{"class":263},[155,133625,128908],{"class":171},[155,133627,133628],{"class":732},"\"distance:\"",[155,133630,7589],{"class":171},[155,133632,1555],{"class":263},[155,133634,133635],{"class":171},"(info[",[155,133637,133465],{"class":732},[155,133639,130765],{"class":171},[155,133641,4444],{"class":263},[155,133643,1238],{"class":171},[155,133645,133646,133648,133651,133654],{"class":157,"line":2339},[155,133647,2803],{"class":167},[155,133649,133650],{"class":171}," terminated ",[155,133652,133653],{"class":167},"or",[155,133655,133656],{"class":171}," truncated:\n",[155,133658,133659],{"class":157,"line":2345},[155,133660,133661],{"class":167},"            break\n",[155,133663,133664],{"class":157,"line":2366},[155,133665,217],{"emptyLinePlaceholder":216},[155,133667,133668,133670,133672,133674,133676,133678,133680,133682],{"class":157,"line":2372},[155,133669,822],{"class":263},[155,133671,230],{"class":171},[155,133673,128939],{"class":732},[155,133675,7589],{"class":171},[155,133677,1555],{"class":263},[155,133679,128946],{"class":171},[155,133681,4444],{"class":263},[155,133683,1238],{"class":171},[155,133685,133686],{"class":157,"line":2388},[155,133687,217],{"emptyLinePlaceholder":216},[155,133689,133690],{"class":157,"line":2394},[155,133691,217],{"emptyLinePlaceholder":216},[155,133693,133694,133696,133698,133700,133702],{"class":157,"line":2408},[155,133695,723],{"class":167},[155,133697,726],{"class":263},[155,133699,120122],{"class":167},[155,133701,120125],{"class":732},[155,133703,736],{"class":171},[155,133705,133706],{"class":157,"line":2414},[155,133707,120132],{"class":171},[24,133709,122133],{},[146,133711,133713],{"className":43613,"code":133712,"language":43615,"meta":39,"style":39},"touch ch8_gym_env.py\n",[152,133714,133715],{"__ignoreMap":39},[155,133716,133717,133719],{"class":157,"line":158},[155,133718,119846],{"class":226},[155,133720,133721],{"class":732}," ch8_gym_env.py\n",[24,133723,129007],{},[146,133725,133727],{"className":43613,"code":133726,"language":43615,"meta":39,"style":39},"python ch8_gym_env.py\n",[152,133728,133729],{"__ignoreMap":39},[155,133730,133731,133733],{"class":157,"line":158},[155,133732,150],{"class":226},[155,133734,133721],{"class":732},[14,133736,120135],{"id":120135},[24,133738,133739],{},"继承 Gymnasium 环境：",[146,133741,133743],{"className":148,"code":133742,"language":150,"meta":39,"style":39},"class ReacherEnv(gym.Env):\n",[152,133744,133745],{"__ignoreMap":39},[155,133746,133747,133749,133751,133753,133755,133757,133759],{"class":157,"line":158},[155,133748,223],{"class":167},[155,133750,132620],{"class":226},[155,133752,230],{"class":171},[155,133754,132103],{"class":226},[155,133756,236],{"class":171},[155,133758,132629],{"class":226},[155,133760,242],{"class":171},[24,133762,133763],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[24,133765,133766],{},"初始化模型：",[146,133768,133770],{"className":148,"code":133769,"language":150,"meta":39,"style":39},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[152,133771,133772,133786],{"__ignoreMap":39},[155,133773,133774,133776,133778,133780,133782,133784],{"class":157,"line":158},[155,133775,285],{"class":263},[155,133777,132680],{"class":171},[155,133779,317],{"class":167},[155,133781,119975],{"class":171},[155,133783,119877],{"class":263},[155,133785,363],{"class":171},[155,133787,133788,133790,133792,133794,133796,133798],{"class":157,"line":46},[155,133789,285],{"class":263},[155,133791,132695],{"class":171},[155,133793,317],{"class":167},[155,133795,132700],{"class":171},[155,133797,285],{"class":263},[155,133799,132705],{"class":171},[24,133801,133802,133803,133805],{},"这和前面章节一样，只是现在放到了类的 ",[152,133804,291],{}," 里。",[24,133807,133808],{},"缓存 site ID：",[146,133810,133812],{"className":148,"code":133811,"language":150,"meta":39,"style":39},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[152,133813,133814,133828],{"__ignoreMap":39},[155,133815,133816,133818,133820,133822,133824,133826],{"class":157,"line":158},[155,133817,285],{"class":263},[155,133819,132716],{"class":171},[155,133821,317],{"class":167},[155,133823,132721],{"class":171},[155,133825,108117],{"class":263},[155,133827,363],{"class":171},[155,133829,133830,133832,133834,133836,133838,133840],{"class":157,"line":46},[155,133831,285],{"class":263},[155,133833,132737],{"class":171},[155,133835,317],{"class":167},[155,133837,132721],{"class":171},[155,133839,108117],{"class":263},[155,133841,363],{"class":171},[24,133843,133844],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[24,133846,133847],{},"reset：",[146,133849,133851],{"className":148,"code":133850,"language":150,"meta":39,"style":39},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[152,133852,133853],{"__ignoreMap":39},[155,133854,133855,133857,133859,133861,133863,133865,133867,133869,133871,133873,133875,133877,133879,133881,133883,133885,133887],{"class":157,"line":158},[155,133856,1484],{"class":167},[155,133858,133085],{"class":226},[155,133860,133088],{"class":171},[155,133862,1563],{"class":167},[155,133864,133093],{"class":171},[155,133866,15239],{"class":263},[155,133868,44901],{"class":167},[155,133870,8545],{"class":263},[155,133872,33391],{"class":167},[155,133874,8545],{"class":263},[155,133876,133106],{"class":171},[155,133878,133109],{"class":263},[155,133880,44901],{"class":167},[155,133882,8545],{"class":263},[155,133884,33391],{"class":167},[155,133886,8545],{"class":263},[155,133888,242],{"class":171},[24,133890,133891,133893],{},[152,133892,88619],{}," 做四件事：",[28,133895,133896,133899,133902,133905],{},[31,133897,133898],{},"设置随机种子。",[31,133900,133901],{},"重置 MuJoCo data。",[31,133903,133904],{},"随机初始化关节角。",[31,133906,133907],{},"返回初始观测和 info。",[24,133909,133910],{},"step：",[146,133912,133914],{"className":148,"code":133913,"language":150,"meta":39,"style":39},"def step(self, action):\n",[152,133915,133916],{"__ignoreMap":39},[155,133917,133918,133920,133922],{"class":157,"line":158},[155,133919,1484],{"class":167},[155,133921,133250],{"class":226},[155,133923,133253],{"class":171},[24,133925,133926,133928],{},[152,133927,125697],{}," 做六件事：",[28,133930,133931,133934,133940,133943,133946,133949],{},[31,133932,133933],{},"检查并裁剪 action。",[31,133935,133936,133937,48174],{},"写入 ",[152,133938,133939],{},"self.data.ctrl",[31,133941,133942],{},"连续推进若干个 MuJoCo 物理步。",[31,133944,133945],{},"计算新观测。",[31,133947,133948],{},"计算奖励和结束条件。",[31,133950,133951],{},"返回 Gymnasium 标准五元组。",[14,133953,120271],{"id":120271},[146,133955,133957],{"className":148,"code":133956,"language":150,"meta":39,"style":39},"import gymnasium as gym\n",[152,133958,133959],{"__ignoreMap":39},[155,133960,133961,133963,133965,133967],{"class":157,"line":158},[155,133962,168],{"class":167},[155,133964,132458],{"class":171},[155,133966,907],{"class":167},[155,133968,132463],{"class":171},[24,133970,133971,133972,133974,133975,133978],{},"导入 Gymnasium，并起别名 ",[152,133973,132103],{},"。后面写 ",[152,133976,133977],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[146,133980,133982],{"className":148,"code":133981,"language":150,"meta":39,"style":39},"from gymnasium import spaces\n",[152,133983,133984],{"__ignoreMap":39},[155,133985,133986,133988,133990,133992],{"class":157,"line":158},[155,133987,183],{"class":167},[155,133989,132458],{"class":171},[155,133991,168],{"class":167},[155,133993,132490],{"class":171},[24,133995,133996,133997,134000],{},"导入空间定义工具。",[152,133998,133999],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[146,134002,134003],{"className":148,"code":133742,"language":150,"meta":39,"style":39},[152,134004,134005],{"__ignoreMap":39},[155,134006,134007,134009,134011,134013,134015,134017,134019],{"class":157,"line":158},[155,134008,223],{"class":167},[155,134010,132620],{"class":226},[155,134012,230],{"class":171},[155,134014,132103],{"class":226},[155,134016,236],{"class":171},[155,134018,132629],{"class":226},[155,134020,242],{"class":171},[24,134022,134023,134024,134027,134028,134030,134031,119581,134033,134035],{},"定义一个类，名字叫 ",[152,134025,134026],{},"ReacherEnv","。括号里的 ",[152,134029,133977],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[152,134032,88619],{},[152,134034,125697],{}," 这两个核心方法。",[146,134037,134039],{"className":148,"code":134038,"language":150,"meta":39,"style":39},"metadata = {\"render_modes\": []}\n",[152,134040,134041],{"__ignoreMap":39},[155,134042,134043,134046,134048,134050,134052],{"class":157,"line":158},[155,134044,134045],{"class":171},"metadata ",[155,134047,317],{"class":167},[155,134049,24314],{"class":171},[155,134051,132643],{"class":732},[155,134053,132646],{"class":171},[24,134055,134056],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[146,134058,134060],{"className":148,"code":134059,"language":150,"meta":39,"style":39},"def __init__(self) -> None:\n",[152,134061,134062],{"__ignoreMap":39},[155,134063,134064,134066,134068,134070,134072],{"class":157,"line":158},[155,134065,1484],{"class":167},[155,134067,264],{"class":263},[155,134069,132659],{"class":171},[155,134071,114249],{"class":263},[155,134073,736],{"class":171},[24,134075,134076,134078,134079,48174],{},[152,134077,291],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[152,134080,134081],{},"env = ReacherEnv()",[146,134083,134085],{"className":148,"code":134084,"language":150,"meta":39,"style":39},"super().__init__()\n",[152,134086,134087],{"__ignoreMap":39},[155,134088,134089,134092,134094,134096],{"class":157,"line":158},[155,134090,134091],{"class":263},"super",[155,134093,37054],{"class":171},[155,134095,291],{"class":263},[155,134097,294],{"class":171},[24,134099,134100,134101,134103],{},"调用父类 ",[152,134102,133977],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[146,134105,134106],{"className":148,"code":133769,"language":150,"meta":39,"style":39},[152,134107,134108,134122],{"__ignoreMap":39},[155,134109,134110,134112,134114,134116,134118,134120],{"class":157,"line":158},[155,134111,285],{"class":263},[155,134113,132680],{"class":171},[155,134115,317],{"class":167},[155,134117,119975],{"class":171},[155,134119,119877],{"class":263},[155,134121,363],{"class":171},[155,134123,134124,134126,134128,134130,134132,134134],{"class":157,"line":46},[155,134125,285],{"class":263},[155,134127,132695],{"class":171},[155,134129,317],{"class":167},[155,134131,132700],{"class":171},[155,134133,285],{"class":263},[155,134135,132705],{"class":171},[24,134137,134138,134139,134141,134142,119581,134145,134148],{},"把 MuJoCo 模型和状态保存到 ",[152,134140,285],{}," 上。",[152,134143,134144],{},"self.model",[152,134146,134147],{},"self.data"," 表示这个环境对象自己的模型和状态。",[146,134150,134151],{"className":148,"code":133811,"language":150,"meta":39,"style":39},[152,134152,134153,134167],{"__ignoreMap":39},[155,134154,134155,134157,134159,134161,134163,134165],{"class":157,"line":158},[155,134156,285],{"class":263},[155,134158,132716],{"class":171},[155,134160,317],{"class":167},[155,134162,132721],{"class":171},[155,134164,108117],{"class":263},[155,134166,363],{"class":171},[155,134168,134169,134171,134173,134175,134177,134179],{"class":157,"line":46},[155,134170,285],{"class":263},[155,134172,132737],{"class":171},[155,134174,317],{"class":167},[155,134176,132721],{"class":171},[155,134178,108117],{"class":263},[155,134180,363],{"class":171},[24,134182,134183,134184,119581,134187,134190],{},"提前查好 tip 和 target 的 site ID。这样 ",[152,134185,134186],{},"_get_obs",[152,134188,134189],{},"_get_reward"," 里就不用每次按名字查找。",[146,134192,134194],{"className":148,"code":134193,"language":150,"meta":39,"style":39},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[152,134195,134196,134206,134216],{"__ignoreMap":39},[155,134197,134198,134200,134202,134204],{"class":157,"line":158},[155,134199,285],{"class":263},[155,134201,132430],{"class":171},[155,134203,317],{"class":167},[155,134205,72990],{"class":263},[155,134207,134208,134210,134212,134214],{"class":157,"line":46},[155,134209,285],{"class":263},[155,134211,132809],{"class":171},[155,134213,317],{"class":167},[155,134215,132814],{"class":263},[155,134217,134218,134220,134222,134224],{"class":157,"line":121},[155,134219,285],{"class":263},[155,134221,132269],{"class":171},[155,134223,317],{"class":167},[155,134225,16959],{"class":263},[24,134227,134228,134231,134232,134235,134236,134239],{},[152,134229,134230],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[152,134233,134234],{},"max_steps"," 是一个 episode 最多运行多少步。",[152,134237,134238],{},"steps"," 记录当前 episode 已经走了多少步。",[146,134241,134242],{"className":148,"code":132308,"language":150,"meta":39,"style":39},[152,134243,134244],{"__ignoreMap":39},[155,134245,134246,134248,134250,134252,134254,134256,134258,134260,134262,134264,134266,134268,134270,134272,134274,134276,134278,134280,134282,134284],{"class":157,"line":158},[155,134247,285],{"class":263},[155,134249,132317],{"class":171},[155,134251,317],{"class":167},[155,134253,132322],{"class":171},[155,134255,132325],{"class":323},[155,134257,132328],{"class":167},[155,134259,120966],{"class":263},[155,134261,7589],{"class":171},[155,134263,132335],{"class":323},[155,134265,317],{"class":167},[155,134267,120966],{"class":263},[155,134269,7589],{"class":171},[155,134271,114526],{"class":323},[155,134273,317],{"class":167},[155,134275,230],{"class":171},[155,134277,360],{"class":263},[155,134279,132352],{"class":171},[155,134281,112063],{"class":323},[155,134283,317],{"class":167},[155,134285,132359],{"class":171},[24,134287,134288,134289,134292,134293,119581,134296,134299],{},"定义动作空间。",[152,134290,134291],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[152,134294,134295],{},"low=-1.0",[152,134297,134298],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[146,134301,134302],{"className":148,"code":132369,"language":150,"meta":39,"style":39},[152,134303,134304],{"__ignoreMap":39},[155,134305,134306,134308,134310,134312,134314,134316,134318,134320,134322,134324,134326,134328,134330,134332,134334,134336,134338,134340],{"class":157,"line":158},[155,134307,285],{"class":263},[155,134309,132378],{"class":171},[155,134311,317],{"class":167},[155,134313,132322],{"class":171},[155,134315,132325],{"class":323},[155,134317,132328],{"class":167},[155,134319,132389],{"class":171},[155,134321,132335],{"class":323},[155,134323,317],{"class":167},[155,134325,132389],{"class":171},[155,134327,114526],{"class":323},[155,134329,317],{"class":167},[155,134331,230],{"class":171},[155,134333,565],{"class":263},[155,134335,132352],{"class":171},[155,134337,112063],{"class":323},[155,134339,317],{"class":167},[155,134341,132359],{"class":171},[24,134343,134344,134345,134348,134349,134352],{},"定义观测空间。",[152,134346,134347],{},"shape=(10,)"," 表示观测是 10 个数。",[152,134350,134351],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[146,134354,134356],{"className":148,"code":134355,"language":150,"meta":39,"style":39},"def _get_obs(self) -> np.ndarray:\n",[152,134357,134358],{"__ignoreMap":39},[155,134359,134360,134362,134364],{"class":157,"line":158},[155,134361,1484],{"class":167},[155,134363,132919],{"class":226},[155,134365,132922],{"class":171},[24,134367,134368,134369,134371],{},"定义内部函数，用来生成观测。函数名前面的 ",[152,134370,21037],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[146,134373,134375],{"className":148,"code":134374,"language":150,"meta":39,"style":39},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[152,134376,134377,134391],{"__ignoreMap":39},[155,134378,134379,134381,134383,134385,134387,134389],{"class":157,"line":158},[155,134380,130131],{"class":171},[155,134382,317],{"class":167},[155,134384,8484],{"class":263},[155,134386,132933],{"class":171},[155,134388,285],{"class":263},[155,134390,132938],{"class":171},[155,134392,134393,134395,134397,134399,134401,134403],{"class":157,"line":46},[155,134394,130141],{"class":171},[155,134396,317],{"class":167},[155,134398,8484],{"class":263},[155,134400,132933],{"class":171},[155,134402,285],{"class":263},[155,134404,132953],{"class":171},[24,134406,134407],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[146,134409,134411],{"className":148,"code":134410,"language":150,"meta":39,"style":39},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[152,134412,134413,134429],{"__ignoreMap":39},[155,134414,134415,134417,134419,134421,134423,134425,134427],{"class":157,"line":158},[155,134416,129417],{"class":171},[155,134418,317],{"class":167},[155,134420,132962],{"class":171},[155,134422,285],{"class":263},[155,134424,132967],{"class":171},[155,134426,285],{"class":263},[155,134428,132972],{"class":171},[155,134430,134431,134433],{"class":157,"line":46},[155,134432,36839],{"class":167},[155,134434,132979],{"class":171},[24,134436,134437,134438,134441,134442,134444],{},"拼接观测，并转换成 ",[152,134439,134440],{},"float32","。很多强化学习库默认使用 ",[152,134443,134440],{},"，所以这里主动转换。",[146,134446,134447],{"className":148,"code":133850,"language":150,"meta":39,"style":39},[152,134448,134449],{"__ignoreMap":39},[155,134450,134451,134453,134455,134457,134459,134461,134463,134465,134467,134469,134471,134473,134475,134477,134479,134481,134483],{"class":157,"line":158},[155,134452,1484],{"class":167},[155,134454,133085],{"class":226},[155,134456,133088],{"class":171},[155,134458,1563],{"class":167},[155,134460,133093],{"class":171},[155,134462,15239],{"class":263},[155,134464,44901],{"class":167},[155,134466,8545],{"class":263},[155,134468,33391],{"class":167},[155,134470,8545],{"class":263},[155,134472,133106],{"class":171},[155,134474,133109],{"class":263},[155,134476,44901],{"class":167},[155,134478,8545],{"class":263},[155,134480,33391],{"class":167},[155,134482,8545],{"class":263},[155,134484,242],{"class":171},[24,134486,134487,134488,134490,134491,134494],{},"定义 reset。",[152,134489,133129],{}," 用来控制随机数，保证实验可以复现。",[152,134492,134493],{},"options"," 用来接收额外配置，本章暂时不用。",[146,134496,134498],{"className":148,"code":134497,"language":150,"meta":39,"style":39},"super().reset(seed=seed)\n",[152,134499,134500],{"__ignoreMap":39},[155,134501,134502,134504,134506,134508,134510],{"class":157,"line":158},[155,134503,134091],{"class":263},[155,134505,133126],{"class":171},[155,134507,133129],{"class":323},[155,134509,317],{"class":167},[155,134511,133134],{"class":171},[24,134513,134514,134515,134518],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[152,134516,134517],{},"self.np_random"," 生成可复现的随机数。",[146,134520,134522],{"className":148,"code":134521,"language":150,"meta":39,"style":39},"mujoco.mj_resetData(self.model, self.data)\n",[152,134523,134524],{"__ignoreMap":39},[155,134525,134526,134529,134531,134533,134535],{"class":157,"line":158},[155,134527,134528],{"class":171},"mujoco.mj_resetData(",[155,134530,285],{"class":263},[155,134532,133144],{"class":171},[155,134534,285],{"class":263},[155,134536,133149],{"class":171},[24,134538,134539],{},"把 MuJoCo 状态重置到默认状态。",[146,134541,134543],{"className":148,"code":134542,"language":150,"meta":39,"style":39},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[152,134544,134545],{"__ignoreMap":39},[155,134546,134547,134549,134551,134553,134555,134557,134559,134561,134563,134565,134567,134569,134571,134573,134575,134577,134579],{"class":157,"line":158},[155,134548,285],{"class":263},[155,134550,133160],{"class":171},[155,134552,317],{"class":167},[155,134554,8484],{"class":263},[155,134556,133167],{"class":171},[155,134558,132325],{"class":323},[155,134560,132328],{"class":167},[155,134562,104773],{"class":263},[155,134564,7589],{"class":171},[155,134566,132335],{"class":323},[155,134568,317],{"class":167},[155,134570,104773],{"class":263},[155,134572,7589],{"class":171},[155,134574,1020],{"class":323},[155,134576,317],{"class":167},[155,134578,285],{"class":263},[155,134580,133192],{"class":171},[24,134582,133904,134583,134586,134587,134590,134591,134593],{},[152,134584,134585],{},"[:]"," 表示修改整个数组。",[152,134588,134589],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[152,134592,120713],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[146,134595,134597],{"className":148,"code":134596,"language":150,"meta":39,"style":39},"self.data.qvel[:] = 0.0\n",[152,134598,134599],{"__ignoreMap":39},[155,134600,134601,134603,134605,134607],{"class":157,"line":158},[155,134602,285],{"class":263},[155,134604,133199],{"class":171},[155,134606,317],{"class":167},[155,134608,123324],{"class":263},[24,134610,134611],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[146,134613,134615],{"className":148,"code":134614,"language":150,"meta":39,"style":39},"self.steps = 0\nreturn self._get_obs(), {}\n",[152,134616,134617,134627],{"__ignoreMap":39},[155,134618,134619,134621,134623,134625],{"class":157,"line":158},[155,134620,285],{"class":263},[155,134622,132269],{"class":171},[155,134624,317],{"class":167},[155,134626,16959],{"class":263},[155,134628,134629,134631,134633],{"class":157,"line":46},[155,134630,36839],{"class":167},[155,134632,8484],{"class":263},[155,134634,133239],{"class":171},[24,134636,134637],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[146,134639,134640],{"className":148,"code":133913,"language":150,"meta":39,"style":39},[152,134641,134642],{"__ignoreMap":39},[155,134643,134644,134646,134648],{"class":157,"line":158},[155,134645,1484],{"class":167},[155,134647,133250],{"class":226},[155,134649,133253],{"class":171},[24,134651,134652],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[146,134654,134656],{"className":148,"code":134655,"language":150,"meta":39,"style":39},"action = np.asarray(action, dtype=np.float32)\n",[152,134657,134658],{"__ignoreMap":39},[155,134659,134660,134662,134664,134666,134668,134670],{"class":157,"line":158},[155,134661,126005],{"class":171},[155,134663,317],{"class":167},[155,134665,133262],{"class":171},[155,134667,112063],{"class":323},[155,134669,317],{"class":167},[155,134671,132359],{"class":171},[24,134673,134674,134675,48174],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[152,134676,134440],{},[146,134678,134680],{"className":148,"code":134679,"language":150,"meta":39,"style":39},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[152,134681,134682],{"__ignoreMap":39},[155,134683,134684,134686,134688,134690,134692,134694,134696],{"class":157,"line":158},[155,134685,126005],{"class":171},[155,134687,317],{"class":167},[155,134689,126010],{"class":171},[155,134691,285],{"class":263},[155,134693,133281],{"class":171},[155,134695,285],{"class":263},[155,134697,133286],{"class":171},[24,134699,134700],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[146,134702,134704],{"className":148,"code":134703,"language":150,"meta":39,"style":39},"self.data.ctrl[:] = action\n",[152,134705,134706],{"__ignoreMap":39},[155,134707,134708,134710,134712,134714],{"class":157,"line":158},[155,134709,285],{"class":263},[155,134711,133297],{"class":171},[155,134713,317],{"class":167},[155,134715,126033],{"class":171},[24,134717,134718],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[146,134720,134722],{"className":148,"code":134721,"language":150,"meta":39,"style":39},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[152,134723,134724,134740],{"__ignoreMap":39},[155,134725,134726,134728,134730,134732,134734,134736,134738],{"class":157,"line":158},[155,134727,1125],{"class":167},[155,134729,120064],{"class":171},[155,134731,1131],{"class":167},[155,134733,2008],{"class":263},[155,134735,230],{"class":171},[155,134737,285],{"class":263},[155,134739,133318],{"class":171},[155,134741,134742,134745,134747,134749,134751],{"class":157,"line":46},[155,134743,134744],{"class":171},"    mujoco.mj_step(",[155,134746,285],{"class":263},[155,134748,133144],{"class":171},[155,134750,285],{"class":263},[155,134752,133149],{"class":171},[24,134754,134755,134756,134759,134760,134762,134763,48174],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[152,134757,134758],{},"frame_skip=5","，所以外部调用一次 ",[152,134761,132440],{},"，内部实际执行 5 次 ",[152,134764,119778],{},[146,134766,134768],{"className":148,"code":134767,"language":150,"meta":39,"style":39},"self.steps += 1\n",[152,134769,134770],{"__ignoreMap":39},[155,134771,134772,134774,134776,134778],{"class":157,"line":158},[155,134773,285],{"class":263},[155,134775,132269],{"class":171},[155,134777,2351],{"class":167},[155,134779,74262],{"class":263},[24,134781,134782],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[146,134784,134786],{"className":148,"code":134785,"language":150,"meta":39,"style":39},"obs = self._get_obs()\nreward = self._get_reward()\n",[152,134787,134788,134798],{"__ignoreMap":39},[155,134789,134790,134792,134794,134796],{"class":157,"line":158},[155,134791,129417],{"class":171},[155,134793,317],{"class":167},[155,134795,8484],{"class":263},[155,134797,133360],{"class":171},[155,134799,134800,134802,134804,134806],{"class":157,"line":46},[155,134801,129568],{"class":171},[155,134803,317],{"class":167},[155,134805,8484],{"class":263},[155,134807,133371],{"class":171},[24,134809,134810],{},"计算新的观测和奖励。",[146,134812,134814],{"className":148,"code":134813,"language":150,"meta":39,"style":39},"dist = float(np.linalg.norm(tip - target))\n",[152,134815,134816],{"__ignoreMap":39},[155,134817,134818,134820,134822,134824,134826,134828],{"class":157,"line":158},[155,134819,130159],{"class":171},[155,134821,317],{"class":167},[155,134823,128360],{"class":263},[155,134825,133414],{"class":171},[155,134827,2039],{"class":167},[155,134829,133419],{"class":171},[24,134831,134832],{},"计算末端到目标的距离，并转换成 Python float。",[146,134834,134835],{"className":148,"code":132240,"language":150,"meta":39,"style":39},[152,134836,134837,134849],{"__ignoreMap":39},[155,134838,134839,134841,134843,134845,134847],{"class":157,"line":158},[155,134840,132247],{"class":171},[155,134842,317],{"class":167},[155,134844,132252],{"class":171},[155,134846,20959],{"class":167},[155,134848,132257],{"class":263},[155,134850,134851,134853,134855,134857,134859,134861,134863],{"class":157,"line":46},[155,134852,132262],{"class":171},[155,134854,317],{"class":167},[155,134856,8484],{"class":263},[155,134858,132269],{"class":171},[155,134860,21607],{"class":167},[155,134862,8484],{"class":263},[155,134864,132276],{"class":171},[24,134866,134867],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[146,134869,134871],{"className":148,"code":134870,"language":150,"meta":39,"style":39},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[152,134872,134873,134886],{"__ignoreMap":39},[155,134874,134875,134878,134880,134882,134884],{"class":157,"line":158},[155,134876,134877],{"class":171},"info ",[155,134879,317],{"class":167},[155,134881,24314],{"class":171},[155,134883,133465],{"class":732},[155,134885,133468],{"class":171},[155,134887,134888,134890],{"class":157,"line":46},[155,134889,36839],{"class":167},[155,134891,133475],{"class":171},[24,134893,134894,134897],{},[152,134895,134896],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[146,134899,134901],{"className":148,"code":134900,"language":150,"meta":39,"style":39},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[152,134902,134903,134912],{"__ignoreMap":39},[155,134904,134905,134908,134910],{"class":157,"line":158},[155,134906,134907],{"class":171},"env ",[155,134909,317],{"class":167},[155,134911,133505],{"class":171},[155,134913,134914,134916,134918,134920,134922,134924,134926],{"class":157,"line":46},[155,134915,131963],{"class":171},[155,134917,317],{"class":167},[155,134919,133515],{"class":171},[155,134921,133129],{"class":323},[155,134923,317],{"class":167},[155,134925,1109],{"class":263},[155,134927,363],{"class":171},[24,134929,134930,134931,134934],{},"创建环境并重置。",[152,134932,134933],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[146,134936,134938],{"className":148,"code":134937,"language":150,"meta":39,"style":39},"action = env.action_space.sample()\n",[152,134939,134940],{"__ignoreMap":39},[155,134941,134942,134944,134946],{"class":157,"line":158},[155,134943,126005],{"class":171},[155,134945,317],{"class":167},[155,134947,133584],{"class":171},[24,134949,134950],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[20037,134952,120879],{"id":120878},[24,134954,124047],{},[146,134956,134959],{"className":134957,"code":134958,"language":25051,"meta":39},[25049],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[152,134960,134958],{"__ignoreMap":39},[24,134962,134963],{},"这个环境已经具备强化学习环境的基本结构。",[24,134965,134966],{},"主函数里使用随机动作：",[146,134968,134969],{"className":148,"code":134937,"language":150,"meta":39,"style":39},[152,134970,134971],{"__ignoreMap":39},[155,134972,134973,134975,134977],{"class":157,"line":158},[155,134974,126005],{"class":171},[155,134976,317],{"class":167},[155,134978,133584],{"class":171},[24,134980,134981],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[20037,134983,120911],{"id":120910},[28,134985,134986,134989,134995,135004,135013,135022,135028],{},[31,134987,134988],{},"运行程序。",[31,134990,134991,134992,48174],{},"确认 ",[152,134993,134994],{},"obs.shape == (10,)",[31,134996,129744,134997,135000,135001,48174],{},[152,134998,134999],{},"env.action_space","，应类似 ",[152,135002,135003],{},"Box(-1.0, 1.0, (2,), float32)",[31,135005,124148,135006,135009,135010,48174],{},[152,135007,135008],{},"self.max_steps = 10","，确认环境会更快 ",[152,135011,135012],{},"truncated=True",[31,135014,120974,135015,120977,135018,135021],{},[152,135016,135017],{},"terminated = dist \u003C 0.05",[152,135019,135020],{},"dist \u003C 0.2","，观察是否更容易结束。",[31,135023,120974,135024,135027],{},[152,135025,135026],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[31,135029,135030,135031,135033,135034,135037],{},"在 ",[152,135032,134896],{}," 里加入 ",[152,135035,135036],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[20037,135039,121016],{"id":121015},[14,135041,135043],{"id":135042},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[24,135045,135046,135047,135049],{},"Gymnasium 的 ",[152,135048,125697],{}," 返回 5 个值:",[146,135051,135053],{"className":148,"code":135052,"language":150,"meta":39,"style":39},"obs, reward, terminated, truncated, info\n",[152,135054,135055],{"__ignoreMap":39},[155,135056,135057],{"class":157,"line":158},[155,135058,135052],{"class":171},[24,135060,135061],{},"不是旧 Gym 的 4 个值。",[14,135063,135065,135068],{"id":135064},"datactrl-action-维度错误",[152,135066,135067],{},"data.ctrl[:] = action"," 维度错误",[24,135070,121086],{},[146,135072,135074],{"className":148,"code":135073,"language":150,"meta":39,"style":39},"print(self.model.nu)\nprint(action.shape)\n",[152,135075,135076,135087],{"__ignoreMap":39},[155,135077,135078,135080,135082,135084],{"class":157,"line":158},[155,135079,15451],{"class":263},[155,135081,230],{"class":171},[155,135083,285],{"class":263},[155,135085,135086],{"class":171},".model.nu)\n",[155,135088,135089,135091],{"class":157,"line":46},[155,135090,15451],{"class":263},[155,135092,135093],{"class":171},"(action.shape)\n",[24,135095,135096],{},"两者必须匹配。",[14,135098,135100],{"id":135099},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[24,135102,121025],{},[146,135104,135106],{"className":148,"code":135105,"language":150,"meta":39,"style":39},"mujoco.mj_forward(self.model, self.data)\n",[152,135107,135108],{"__ignoreMap":39},[155,135109,135110,135113,135115,135117,135119],{"class":157,"line":158},[155,135111,135112],{"class":171},"mujoco.mj_forward(",[155,135114,285],{"class":263},[155,135116,133144],{"class":171},[155,135118,285],{"class":263},[155,135120,133149],{"class":171},[14,135122,135124,135126],{"id":135123},"observation_space-维度和-obs-不一致",[152,135125,132163],{}," 维度和 obs 不一致",[24,135128,121138],{},[146,135130,135132],{"className":148,"code":135131,"language":150,"meta":39,"style":39},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[152,135133,135134,135144,135151],{"__ignoreMap":39},[155,135135,135136,135138,135140,135142],{"class":157,"line":158},[155,135137,129417],{"class":171},[155,135139,317],{"class":167},[155,135141,8484],{"class":263},[155,135143,133360],{"class":171},[155,135145,135146,135148],{"class":157,"line":46},[155,135147,15451],{"class":263},[155,135149,135150],{"class":171},"(obs.shape)\n",[155,135152,135153,135155,135157,135159],{"class":157,"line":121},[155,135154,15451],{"class":263},[155,135156,230],{"class":171},[155,135158,285],{"class":263},[155,135160,135161],{"class":171},".observation_space.shape)\n",[24,135163,135164],{},"两者必须一致。本章观测是：",[146,135166,135169],{"className":135167,"code":135168,"language":25051,"meta":39},[25049],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[152,135170,135168],{"__ignoreMap":39},[14,135172,135174],{"id":135173},"action-超过范围","action 超过范围",[24,135176,135177],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[146,135179,135180],{"className":148,"code":134679,"language":150,"meta":39,"style":39},[152,135181,135182],{"__ignoreMap":39},[155,135183,135184,135186,135188,135190,135192,135194,135196],{"class":157,"line":158},[155,135185,126005],{"class":171},[155,135187,317],{"class":167},[155,135189,126010],{"class":171},[155,135191,285],{"class":263},[155,135193,133281],{"class":171},[155,135195,285],{"class":263},[155,135197,133286],{"class":171},[24,135199,135200,135201,48174],{},"这能避免无效动作直接写入 ",[152,135202,119639],{},[14,135204,135206],{"id":135205},"忘记返回-info","忘记返回 info",[24,135208,135046,135209,119581,135211,135213],{},[152,135210,88619],{},[152,135212,125697],{}," 都会返回 info：",[146,135215,135216],{"className":148,"code":131956,"language":150,"meta":39,"style":39},[152,135217,135218,135226],{"__ignoreMap":39},[155,135219,135220,135222,135224],{"class":157,"line":158},[155,135221,131963],{"class":171},[155,135223,317],{"class":167},[155,135225,131968],{"class":171},[155,135227,135228,135230,135232],{"class":157,"line":46},[155,135229,131973],{"class":171},[155,135231,317],{"class":167},[155,135233,131978],{"class":171},[24,135235,135236,135237,48174],{},"即使暂时没有额外信息，也返回 ",[152,135238,2025],{},[20037,135240,135242],{"id":135241},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[24,135244,135245],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[28,135247,135248,135251,135254,135257,135260,135263],{},[31,135249,135250],{},"更稳定的 reward。",[31,135252,135253],{},"合理的 episode 长度。",[31,135255,135256],{},"可重复的随机目标采样。",[31,135258,135259],{},"render 接口。",[31,135261,135262],{},"环境注册代码。",[31,135264,135265],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[24,135267,135268],{},"如果只是自己写训练循环，最小形式是：",[146,135270,135272],{"className":148,"code":135271,"language":150,"meta":39,"style":39},"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",[152,135273,135274,135282,135298,135302,135318,135327,135336,135346],{"__ignoreMap":39},[155,135275,135276,135278,135280],{"class":157,"line":158},[155,135277,134907],{"class":171},[155,135279,317],{"class":167},[155,135281,133505],{"class":171},[155,135283,135284,135286,135288,135290,135292,135294,135296],{"class":157,"line":46},[155,135285,131963],{"class":171},[155,135287,317],{"class":167},[155,135289,133515],{"class":171},[155,135291,133129],{"class":323},[155,135293,317],{"class":167},[155,135295,1109],{"class":263},[155,135297,363],{"class":171},[155,135299,135300],{"class":157,"line":121},[155,135301,217],{"emptyLinePlaceholder":216},[155,135303,135304,135306,135308,135310,135312,135314,135316],{"class":157,"line":180},[155,135305,1125],{"class":167},[155,135307,120064],{"class":171},[155,135309,1131],{"class":167},[155,135311,2008],{"class":263},[155,135313,230],{"class":171},[155,135315,26273],{"class":263},[155,135317,242],{"class":171},[155,135319,135320,135323,135325],{"class":157,"line":194},[155,135321,135322],{"class":171},"    action ",[155,135324,317],{"class":167},[155,135326,133584],{"class":171},[155,135328,135329,135332,135334],{"class":157,"line":200},[155,135330,135331],{"class":171},"    obs, reward, terminated, truncated, info ",[155,135333,317],{"class":167},[155,135335,131978],{"class":171},[155,135337,135338,135340,135342,135344],{"class":157,"line":213},[155,135339,1142],{"class":167},[155,135341,133650],{"class":171},[155,135343,133653],{"class":167},[155,135345,133656],{"class":171},[155,135347,135348,135351,135353],{"class":157,"line":220},[155,135349,135350],{"class":171},"        obs, info ",[155,135352,317],{"class":167},[155,135354,131968],{"class":171},[20037,135356,135358],{"id":135357},"_9本章小结","9.本章小结",[24,135360,135361],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[146,135363,135366],{"className":135364,"code":135365,"language":25051,"meta":39},[25049],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[152,135367,135365],{"__ignoreMap":39},[24,135369,135370],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[20011,135372,135373],{},"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":39,"searchDepth":46,"depth":46,"links":135375},[135376,135377,135378,135385,135389,135390,135391,135401,135402],{"id":119209,"depth":46,"text":119210},{"id":119332,"depth":46,"text":119333},{"id":119607,"depth":46,"text":119608,"children":135379},[135380,135382,135384],{"id":132187,"depth":121,"text":135381},"terminated 和 truncated 的区别",{"id":132290,"depth":121,"text":135383},"observation_space 和 action_space",{"id":132417,"depth":121,"text":132418},{"id":119815,"depth":46,"text":119816,"children":135386},[135387,135388],{"id":120135,"depth":121,"text":120135},{"id":120271,"depth":121,"text":120271},{"id":120878,"depth":46,"text":120879},{"id":120910,"depth":46,"text":120911},{"id":121015,"depth":46,"text":121016,"children":135392},[135393,135394,135396,135397,135399,135400],{"id":135042,"depth":121,"text":135043},{"id":135064,"depth":121,"text":135395},"data.ctrl[:] = action 维度错误",{"id":135099,"depth":121,"text":135100},{"id":135123,"depth":121,"text":135398},"observation_space 维度和 obs 不一致",{"id":135173,"depth":121,"text":135174},{"id":135205,"depth":121,"text":135206},{"id":135241,"depth":46,"text":135242},{"id":135357,"depth":46,"text":135358},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":131940,"description":39},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":135409,"title":135410,"body":135411,"description":135834,"extension":20021,"meta":135835,"navigation":216,"path":135836,"seo":135837,"stem":135838,"__hash__":135839},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":135412,"toc":135824},[135413,135417,135420,135423,135443,135449,135455,135465,135468,135471,135491,135494,135498,135501,135507,135510,135524,135527,135530,135604,135607,135613,135616,135639,135642,135692,135695,135701,135704,135707,135710,135729,135732,135738,135741,135744,135747,135767,135770,135773,135776,135821],[10,135414,135416],{"id":135415},"mujoco-学习","MuJoCo 学习",[24,135418,135419],{},"初版",[24,135421,135422],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[28,135424,135425,135428,135431,135440],{},[31,135426,135427],{},"MuJoCo 模型文件在描述什么。",[31,135429,135430],{},"Python 代码怎样读取和推进仿真。",[31,135432,135433,20293,135435,20293,135437,135439],{},[152,135434,122593],{},[152,135436,122923],{},[152,135438,122926],{}," 这些数组为什么重要。",[31,135441,135442],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[24,135444,135445,135446,135448],{},"默认环境为 Fedora 44、Python >= 3.10、",[152,135447,119590],{}," 官方 Python bindings。",[24,135450,135451,135452,135454],{},"注意：本文禁止使用 ",[152,135453,119575],{},"。所有示例均使用：",[146,135456,135457],{"className":148,"code":120141,"language":150,"meta":39,"style":39},[152,135458,135459],{"__ignoreMap":39},[155,135460,135461,135463],{"class":157,"line":158},[155,135462,168],{"class":167},[155,135464,119864],{"class":171},[20037,135466,135467],{"id":135467},"适合谁阅读",[24,135469,135470],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[28,135472,135473,135476,135479,135482],{},[31,135474,135475],{},"没学过 MuJoCo，只会一点 Python。",[31,135477,135478],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[31,135480,135481],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[31,135483,135484,135485,135487,135488,135490],{},"以前接触过 ",[152,135486,119575],{},"，现在想迁移到官方 ",[152,135489,119584],{}," Python bindings。",[24,135492,135493],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[20037,135495,135497],{"id":135496},"mujoco-到底是什么","MuJoCo 到底是什么",[24,135499,135500],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[146,135502,135505],{"className":135503,"code":135504,"language":25051,"meta":39},[25049],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[152,135506,135504],{"__ignoreMap":39},[24,135508,135509],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[28,135511,135512,135515,135518,135521],{},[31,135513,135514],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[31,135516,135517],{},"快速测试控制算法，不必一开始就上真实机器人。",[31,135519,135520],{},"生成强化学习环境。",[31,135522,135523],{},"采集状态、动作、图像、奖励等训练数据。",[20037,135525,135526],{"id":135526},"学习前的心智模型",[24,135528,135529],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[20222,135531,135532,135544],{},[20225,135533,135534],{},[20228,135535,135536,135539,135542],{},[20231,135537,135538],{"align":43527},"部分",[20231,135540,135541],{"align":43527},"负责什么",[20231,135543,40979],{"align":43527},[20269,135545,135546,135557,135569,135581,135593],{},[20228,135547,135548,135551,135554],{},[20274,135549,135550],{"align":43527},"MJCF XML",[20274,135552,135553],{"align":43527},"定义世界和机器人结构",[20274,135555,135556],{"align":43527},"地面、盒子、关节、电机、摄像头",[20228,135558,135559,135563,135566],{},[20274,135560,135561],{"align":43527},[152,135562,119272],{},[20274,135564,135565],{"align":43527},"编译后的静态模型",[20274,135567,135568],{"align":43527},"有几个关节、有几个电机、时间步长是多少",[20228,135570,135571,135575,135578],{},[20274,135572,135573],{"align":43527},[152,135574,119282],{},[20274,135576,135577],{"align":43527},"运行中的动态状态",[20274,135579,135580],{"align":43527},"当前时间、位置、速度、电机输入",[20228,135582,135583,135587,135590],{},[20274,135584,135585],{"align":43527},[152,135586,119778],{},[20274,135588,135589],{"align":43527},"推进一步物理仿真",[20274,135591,135592],{"align":43527},"根据重力、力、碰撞更新状态",[20228,135594,135595,135598,135601],{},[20274,135596,135597],{"align":43527},"Viewer \u002F Renderer",[20274,135599,135600],{"align":43527},"把仿真显示出来",[20274,135602,135603],{"align":43527},"打开窗口或保存图片",[24,135605,135606],{},"一句话总结：",[146,135608,135611],{"className":135609,"code":135610,"language":25051,"meta":39},[25049],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[152,135612,135610],{"__ignoreMap":39},[24,135614,135615],{},"参考来源：",[21052,135617,135618,135625,135632],{},[31,135619,135620,135621],{},"MuJoCo Python 官方文档：",[20318,135622,135623],{"href":135623,"rel":135624},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[43656],[31,135626,135627,135628],{},"MuJoCo XML Reference：",[20318,135629,135630],{"href":135630,"rel":135631},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[43656],[31,135633,135634,135635],{},"MuJoCo Overview：",[20318,135636,135637],{"href":135637,"rel":135638},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[43656],[20037,135640,135641],{"id":135641},"章节目录",[28,135643,135644,135650,135656,135662,135668,135674,135680,135686],{},[31,135645,135646],{},[20318,135647,135649],{"href":135648},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[31,135651,135652],{},[20318,135653,135655],{"href":135654},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[31,135657,135658],{},[20318,135659,135661],{"href":135660},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[31,135663,135664],{},[20318,135665,135667],{"href":135666},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[31,135669,135670],{},[20318,135671,135673],{"href":135672},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[31,135675,135676],{},[20318,135677,135679],{"href":135678},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[31,135681,135682],{},[20318,135683,135685],{"href":135684},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[31,135687,135688],{},[20318,135689,135691],{"href":135690},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[20037,135693,135694],{"id":135694},"推荐学习路线",[146,135696,135699],{"className":135697,"code":135698,"language":25051,"meta":39},[25049],"环境安装\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",[152,135700,135698],{"__ignoreMap":39},[24,135702,135703],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[20037,135705,135706],{"id":135706},"建议的目录结构",[24,135708,135709],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[146,135711,135713],{"className":43613,"code":135712,"language":43615,"meta":39,"style":39},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[152,135714,135715,135723],{"__ignoreMap":39},[155,135716,135717,135719,135721],{"class":157,"line":158},[155,135718,119829],{"class":226},[155,135720,49005],{"class":263},[155,135722,119834],{"class":732},[155,135724,135725,135727],{"class":157,"line":46},[155,135726,119839],{"class":263},[155,135728,119834],{"class":732},[24,135730,135731],{},"每一章的代码都单独保存：",[146,135733,135736],{"className":135734,"code":135735,"language":25051,"meta":39},[25049],"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",[152,135737,135735],{"__ignoreMap":39},[24,135739,135740],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[20037,135742,135743],{"id":135743},"学习方法",[24,135745,135746],{},"每章建议按这个顺序操作：",[28,135748,135749,135752,135755,135758,135761,135764],{},[31,135750,135751],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[31,135753,135754],{},"复制最小可运行代码，保存成指定文件。",[31,135756,135757],{},"运行代码，确认没有报错。",[31,135759,135760],{},"对照“运行结果说明”理解输出。",[31,135762,135763],{},"做“验证步骤”，主动改一两个参数。",[31,135765,135766],{},"遇到报错先看“常见错误与解决方案”。",[24,135768,135769],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[20037,135771,135772],{"id":135772},"全局排错顺序",[24,135774,135775],{},"遇到问题时，按下面顺序查：",[28,135777,135778,135784,135790,135795,135798,135801,135808,135818],{},[31,135779,135780,135781],{},"Python 环境是否激活：",[152,135782,135783],{},"which python",[31,135785,135786,135787],{},"MuJoCo 是否能导入：",[152,135788,135789],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[31,135791,135792,135793],{},"是否误装了 ",[152,135794,119575],{},[31,135796,135797],{},"XML 标签是否闭合、属性是否拼写正确",[31,135799,135800],{},"actuator 引用的 joint 名字是否存在",[31,135802,135803,135805,135806],{},[152,135804,119639],{}," 的长度是否等于 ",[152,135807,120721],{},[31,135809,124148,135810,101102,135812,135814,135815],{},[152,135811,122593],{},[152,135813,122923],{}," 后是否调用了 ",[152,135816,135817],{},"mujoco.mj_forward",[31,135819,135820],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[20011,135822,135823],{},"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":39,"searchDepth":46,"depth":46,"links":135825},[135826,135827,135828,135829,135830,135831,135832,135833],{"id":135467,"depth":46,"text":135467},{"id":135496,"depth":46,"text":135497},{"id":135526,"depth":46,"text":135526},{"id":135641,"depth":46,"text":135641},{"id":135694,"depth":46,"text":135694},{"id":135706,"depth":46,"text":135706},{"id":135743,"depth":46,"text":135743},{"id":135772,"depth":46,"text":135772},"仿真搭建。",{"category":43169},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":135410,"description":135834},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":135841,"title":135842,"body":135843,"description":20020,"extension":20021,"meta":136298,"navigation":216,"path":136299,"seo":136300,"stem":136301,"__hash__":136302},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":135844,"toc":136296},[135845,135848,135851,135857,136293],[10,135846,135842],{"id":135847},"_1-最常用的基本操作更新",[24,135849,135850],{},"装linux系统教程：",[24,135852,135853],{},[20318,135854,135855],{"href":135855,"rel":135856},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[43656],[146,135858,135862],{"className":135859,"code":135860,"language":135861,"meta":39,"style":39},"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",[152,135863,135864,135869,135874,135883,135888,135897,135902,135922,135927,135938,135943,135952,135957,135985,135990,136009,136014,136033,136037,136042,136058,136062,136067,136097,136101,136106,136122,136126,136131,136146,136150,136155,136171,136175,136180,136192,136204,136208,136213,136230,136234,136239,136257,136261,136266,136275,136279,136284],{"__ignoreMap":39},[155,135865,135866],{"class":157,"line":158},[155,135867,135868],{"class":161},"#更新相关的知识\n",[155,135870,135871],{"class":157,"line":46},[155,135872,135873],{"class":161},"# 更新软件包列表（从服务器获取最新软件信息）\n",[155,135875,135876,135878,135881],{"class":157,"line":121},[155,135877,44368],{"class":226},[155,135879,135880],{"class":732}," apt",[155,135882,46031],{"class":732},[155,135884,135885],{"class":157,"line":180},[155,135886,135887],{"class":161},"# 升级所有可更新的软件包（不删除旧包）\n",[155,135889,135890,135892,135894],{"class":157,"line":194},[155,135891,44368],{"class":226},[155,135893,135880],{"class":732},[155,135895,135896],{"class":732}," upgrade\n",[155,135898,135899],{"class":157,"line":200},[155,135900,135901],{"class":161},"#更新和升级软件包\n",[155,135903,135904,135906,135908,135911,135913,135915,135917,135920],{"class":157,"line":213},[155,135905,44368],{"class":226},[155,135907,135880],{"class":732},[155,135909,135910],{"class":732}," update",[155,135912,45979],{"class":171},[155,135914,44368],{"class":226},[155,135916,135880],{"class":732},[155,135918,135919],{"class":732}," upgrade",[155,135921,119544],{"class":263},[155,135923,135924],{"class":157,"line":220},[155,135925,135926],{"class":161},"#列出可更新的软件包及版本信息\n",[155,135928,135929,135932,135935],{"class":157,"line":245},[155,135930,135931],{"class":226},"apt",[155,135933,135934],{"class":732}," list",[155,135936,135937],{"class":263}," --upgradable\n",[155,135939,135940],{"class":157,"line":251},[155,135941,135942],{"class":161},"#彻底升级（处理依赖关系，可能删除旧包）\n",[155,135944,135945,135947,135949],{"class":157,"line":257},[155,135946,44368],{"class":226},[155,135948,135880],{"class":732},[155,135950,135951],{"class":732}," full-upgrade\n",[155,135953,135954],{"class":157,"line":270},[155,135955,135956],{"class":161},"#设置指定版本\n",[155,135958,135959,135961,135963,135965,135967,135970,135972,135974,135976,135978,135981,135983],{"class":157,"line":276},[155,135960,44368],{"class":226},[155,135962,135880],{"class":732},[155,135964,43625],{"class":732},[155,135966,48691],{"class":167},[155,135968,135969],{"class":732},"package_nam",[155,135971,20161],{"class":171},[155,135973,1148],{"class":167},[155,135975,317],{"class":732},[155,135977,20959],{"class":167},[155,135979,135980],{"class":732},"version_numbe",[155,135982,17599],{"class":171},[155,135984,69870],{"class":167},[155,135986,135987],{"class":157,"line":297},[155,135988,135989],{"class":161},"#只安装软件包不升级\n",[155,135991,135992,135994,135996,135998,136000,136002,136004,136006],{"class":157,"line":302},[155,135993,44368],{"class":226},[155,135995,135880],{"class":732},[155,135997,43625],{"class":732},[155,135999,48691],{"class":167},[155,136001,135969],{"class":732},[155,136003,20161],{"class":171},[155,136005,1148],{"class":167},[155,136007,136008],{"class":263}," --no-upgrade\n",[155,136010,136011],{"class":157,"line":308},[155,136012,136013],{"class":161},"#只升级，不存在就不安装\n",[155,136015,136016,136018,136020,136022,136024,136026,136028,136030],{"class":157,"line":366},[155,136017,44368],{"class":226},[155,136019,135880],{"class":732},[155,136021,43625],{"class":732},[155,136023,48691],{"class":167},[155,136025,135969],{"class":732},[155,136027,20161],{"class":171},[155,136029,1148],{"class":167},[155,136031,136032],{"class":263}," --only-upgrade\n",[155,136034,136035],{"class":157,"line":379},[155,136036,217],{"emptyLinePlaceholder":216},[155,136038,136039],{"class":157,"line":385},[155,136040,136041],{"class":161},"#安装指定的软件命令\n",[155,136043,136044,136046,136048,136050,136052,136054,136056],{"class":157,"line":415},[155,136045,44368],{"class":226},[155,136047,135880],{"class":732},[155,136049,43625],{"class":732},[155,136051,48691],{"class":167},[155,136053,135969],{"class":732},[155,136055,20161],{"class":171},[155,136057,69870],{"class":167},[155,136059,136060],{"class":157,"line":452},[155,136061,217],{"emptyLinePlaceholder":216},[155,136063,136064],{"class":157,"line":480},[155,136065,136066],{"class":161},"#安装多个软件包\n",[155,136068,136069,136071,136073,136075,136077,136080,136083,136085,136087,136090,136092,136094],{"class":157,"line":486},[155,136070,44368],{"class":226},[155,136072,135880],{"class":732},[155,136074,43625],{"class":732},[155,136076,48691],{"class":167},[155,136078,136079],{"class":732},"package_",[155,136081,136082],{"class":167},"1>",[155,136084,48691],{"class":167},[155,136086,136079],{"class":732},[155,136088,136089],{"class":167},"2>",[155,136091,48691],{"class":167},[155,136093,136079],{"class":732},[155,136095,136096],{"class":167},"3>\n",[155,136098,136099],{"class":157,"line":499},[155,136100,217],{"emptyLinePlaceholder":216},[155,136102,136103],{"class":157,"line":505},[155,136104,136105],{"class":161},"#更新指定的软件命令\n",[155,136107,136108,136110,136112,136114,136116,136118,136120],{"class":157,"line":528},[155,136109,44368],{"class":226},[155,136111,135880],{"class":732},[155,136113,135910],{"class":732},[155,136115,48691],{"class":167},[155,136117,135969],{"class":732},[155,136119,20161],{"class":171},[155,136121,69870],{"class":167},[155,136123,136124],{"class":157,"line":549},[155,136125,217],{"emptyLinePlaceholder":216},[155,136127,136128],{"class":157,"line":570},[155,136129,136130],{"class":161},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[155,136132,136133,136135,136138,136140,136142,136144],{"class":157,"line":575},[155,136134,135931],{"class":226},[155,136136,136137],{"class":732}," show",[155,136139,48691],{"class":167},[155,136141,135969],{"class":732},[155,136143,20161],{"class":171},[155,136145,69870],{"class":167},[155,136147,136148],{"class":157,"line":581},[155,136149,217],{"emptyLinePlaceholder":216},[155,136151,136152],{"class":157,"line":592},[155,136153,136154],{"class":161},"#删除软件包命令\n",[155,136156,136157,136159,136161,136163,136165,136167,136169],{"class":157,"line":610},[155,136158,44368],{"class":226},[155,136160,135880],{"class":732},[155,136162,45868],{"class":732},[155,136164,48691],{"class":167},[155,136166,135969],{"class":732},[155,136168,20161],{"class":171},[155,136170,69870],{"class":167},[155,136172,136173],{"class":157,"line":622},[155,136174,217],{"emptyLinePlaceholder":216},[155,136176,136177],{"class":157,"line":638},[155,136178,136179],{"class":161},"# 清理旧版本和缓存（释放磁盘空间）\n",[155,136181,136182,136184,136186,136189],{"class":157,"line":650},[155,136183,44368],{"class":226},[155,136185,135880],{"class":732},[155,136187,136188],{"class":732}," autoremove",[155,136190,136191],{"class":161},"  # 删除不再需要的依赖和库文件\n",[155,136193,136194,136196,136198,136201],{"class":157,"line":662},[155,136195,44368],{"class":226},[155,136197,135880],{"class":732},[155,136199,136200],{"class":732}," clean",[155,136202,136203],{"class":161},"       # 清理下载的缓存包\n",[155,136205,136206],{"class":157,"line":678},[155,136207,217],{"emptyLinePlaceholder":216},[155,136209,136210],{"class":157,"line":694},[155,136211,136212],{"class":161},"#移除软件包及配置文件\n",[155,136214,136215,136217,136219,136222,136224,136226,136228],{"class":157,"line":706},[155,136216,44368],{"class":226},[155,136218,135880],{"class":732},[155,136220,136221],{"class":732}," purge",[155,136223,48691],{"class":167},[155,136225,135969],{"class":732},[155,136227,20161],{"class":171},[155,136229,69870],{"class":167},[155,136231,136232],{"class":157,"line":715},[155,136233,217],{"emptyLinePlaceholder":216},[155,136235,136236],{"class":157,"line":720},[155,136237,136238],{"class":161},"#查找软件包命令\n",[155,136240,136241,136243,136245,136248,136250,136253,136255],{"class":157,"line":739},[155,136242,44368],{"class":226},[155,136244,135880],{"class":732},[155,136246,136247],{"class":732}," search",[155,136249,48691],{"class":167},[155,136251,136252],{"class":732},"keywor",[155,136254,20392],{"class":171},[155,136256,69870],{"class":167},[155,136258,136259],{"class":157,"line":745},[155,136260,217],{"emptyLinePlaceholder":216},[155,136262,136263],{"class":157,"line":773},[155,136264,136265],{"class":161},"#列出所有已安装的包\n",[155,136267,136268,136270,136272],{"class":157,"line":779},[155,136269,135931],{"class":226},[155,136271,135934],{"class":732},[155,136273,136274],{"class":263}," --installed\n",[155,136276,136277],{"class":157,"line":785},[155,136278,217],{"emptyLinePlaceholder":216},[155,136280,136281],{"class":157,"line":791},[155,136282,136283],{"class":161},"#列出所有已安装的包的版本信息\n",[155,136285,136286,136288,136290],{"class":157,"line":796},[155,136287,135931],{"class":226},[155,136289,135934],{"class":732},[155,136291,136292],{"class":263}," --all-versions\n",[20011,136294,136295],{},"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":39,"searchDepth":46,"depth":46,"links":136297},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":135842,"description":20020},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":136304,"title":136305,"body":136306,"description":20020,"extension":20021,"meta":137047,"navigation":216,"path":137048,"seo":137049,"stem":137050,"__hash__":137051},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":136307,"toc":137034},[136308,136311,136315,136318,136324,136328,136332,136338,136343,136348,136353,136358,136363,136366,136369,136372,136375,136379,136382,136387,136390,136395,136398,136403,136410,136413,136416,136419,136422,136425,136436,136440,136444,136449,136454,136458,136463,136467,136472,136476,136480,136485,136488,136533,136538,136542,136546,136551,136557,136562,136572,136577,136587,136592,136597,136624,136628,136631,136636,136639,136664,136668,136673,136676,136681,136686,136706,136711,136714,136729,136733,136786,136789,136794,136798,136801,136816,136819,136822,136827,136831,136835,136838,136842,136846,136849,136854,136859,136863,136870,136878,136881,136888,136893,136898,136901,136906,136913,136918,136925,136929,136931,136936,136940,136943,136946,136951,136954,136959,136962,136967,136972,136977,136981,136986,136990,137031],[10,136309,136305],{"id":136310},"_2-linux装机教程",[20037,136312,136314],{"id":136313},"_21-实体机","2.1 实体机",[24,136316,136317],{},"使用清华源：（Ubuntu24.04）",[24,136319,136320],{},[20318,136321,136322],{"href":136322,"rel":136323},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[43656],[20037,136325,136327],{"id":136326},"_22-普通虚拟机","2.2 普通虚拟机",[14,136329,136331],{"id":136330},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[24,136333,136334],{},[20318,136335,136336],{"href":136336,"rel":136337},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[43656],[24,136339,136340],{},[37,136341],{"alt":39,"src":136342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[24,136344,136345],{},[37,136346],{"alt":39,"src":136347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[24,136349,136350],{},[37,136351],{"alt":39,"src":136352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[24,136354,136355],{},[37,136356],{"alt":39,"src":136357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[24,136359,136360],{},[37,136361],{"alt":39,"src":136362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[24,136364,136365],{},"内存4G（4096MB）；",[24,136367,136368],{},"CPU给4个核；",[24,136370,136371],{},"硬盘动态分配60G；",[24,136373,136374],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[14,136376,136378],{"id":136377},"_222-安装ubuntu","2.2.2 安装Ubuntu",[24,136380,136381],{},"按照1.1的步骤下载Ubuntu",[24,136383,136384],{},[37,136385],{"alt":39,"src":136386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[24,136388,136389],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[24,136391,136392],{},[37,136393],{"alt":39,"src":136394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[24,136396,136397],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[24,136399,136400],{},[37,136401],{"alt":39,"src":136402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[24,136404,136405,136406,136409],{},"选择“正常安装”(找不到都用Alt+F7)， ",[20234,136407,136408],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[24,136411,136412],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[24,136414,136415],{},"将改动写入磁盘吗 继续",[24,136417,136418],{},"选择东八区（shanghai，大致在地图上点一下），继续",[24,136420,136421],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[24,136423,136424],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[24,136426,136427,136428,136431,136432,136435],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[20234,136429,136430],{},"除了"," 选不发送系统信息与不升级之外， ",[20234,136433,136434],{},"其它"," 都跳过或前进）",[14,136437,136439],{"id":136438},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[19,136441,136443],{"id":136442},"_2231-全屏","2.2.3.1 全屏",[24,136445,136446],{},[37,136447],{"alt":39,"src":136448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[24,136450,136451],{},[37,136452],{"alt":39,"src":136453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[19,136455,136457],{"id":136456},"_2232-文件交换","2.2.3.2 文件交换",[24,136459,136460],{},[37,136461],{"alt":39,"src":136462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[19,136464,136466],{"id":136465},"_2233-新建文本文档","2.2.3.3 新建文本文档",[24,136468,136469],{},[37,136470],{"alt":39,"src":136471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[20037,136473,136475],{"id":136474},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[14,136477,136479],{"id":136478},"_231-简介与优缺点","2.3.1 简介与优缺点",[28,136481,136482],{},[31,136483,136484],{},"什么情况下推荐？",[24,136486,136487],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[28,136489,136490],{"start":46},[31,136491,136492,136493],{},"优缺点：",[28,136494,136495,136525],{},[31,136496,136497,136498],{},"优点：",[28,136499,136500,136503,136510,136513,136516,136519,136522],{},[31,136501,136502],{},"WSL2是最好的Linux发行版;(bushi)",[31,136504,136505,136506,136509],{},"性能损耗极低。且比在Windows上跑深度性能 ",[20234,136507,136508],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[31,136511,136512],{},"非常方便调用USB设备，可以USB直通;",[31,136514,136515],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[31,136517,136518],{},"非常方便Win与WSL2互相传文件等协同操作;",[31,136520,136521],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[31,136523,136524],{},"非常方便使用Windows的VScode远程开发;",[31,136526,136527,136528],{},"缺点：",[28,136529,136530],{},[31,136531,136532],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[24,136534,136535],{},[37,136536],{"alt":39,"src":136537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[14,136539,136541],{"id":136540},"_232-安装教程","2.3.2 安装教程",[19,136543,136545],{"id":136544},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[28,136547,136548],{},[31,136549,136550],{},"方法一(图形界面)",[24,136552,136553,136554,44410],{},"用Win+R输入",[152,136555,136556],{},"appwiz.cpl",[24,136558,136559],{},[37,136560],{"alt":39,"src":136561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[24,136563,136564,136565,136568,136569,46262],{},"点击OK进入 ",[20234,136566,136567],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[20234,136570,136571],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[24,136573,136574],{},[37,136575],{"alt":39,"src":136576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[24,136578,136579,136580,119581,136583,136586],{},"选择 ",[20234,136581,136582],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[20234,136584,136585],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[24,136588,136589],{},[37,136590],{"alt":39,"src":136591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[28,136593,136594],{"start":46},[31,136595,136596],{},"方法二(命令行)",[146,136598,136602],{"className":136599,"code":136600,"language":136601,"meta":39,"style":39},"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",[152,136603,136604,136609,136614,136619],{"__ignoreMap":39},[155,136605,136606],{"class":157,"line":158},[155,136607,136608],{},"# 开启 Linux 子系统\n",[155,136610,136611],{"class":157,"line":46},[155,136612,136613],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[155,136615,136616],{"class":157,"line":121},[155,136617,136618],{},"# 开启虚拟机平台\n",[155,136620,136621],{"class":157,"line":180},[155,136622,136623],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[19,136625,136627],{"id":136626},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[24,136629,136630],{},"用管理员权限打开powershell",[24,136632,136633],{},[37,136634],{"alt":39,"src":136635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[24,136637,136638],{},"升级WSL并设置默认版本为WSL2",[146,136640,136642],{"className":136599,"code":136641,"language":136601,"meta":39,"style":39},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[152,136643,136644,136649,136654,136659],{"__ignoreMap":39},[155,136645,136646],{"class":157,"line":158},[155,136647,136648],{},"# 更新 wsl\n",[155,136650,136651],{"class":157,"line":46},[155,136652,136653],{},"wsl --update\n",[155,136655,136656],{"class":157,"line":121},[155,136657,136658],{},"# 将 wsl 版本设置为 wsl2\n",[155,136660,136661],{"class":157,"line":180},[155,136662,136663],{},"wsl --set-default-version 2\n",[19,136665,136667],{"id":136666},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[28,136669,136670],{},[31,136671,136672],{},"方式一(商店下载)",[24,136674,136675],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[24,136677,136678],{},[37,136679],{"alt":39,"src":136680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[28,136682,136683],{"start":46},[31,136684,136685],{},"方式二(命令行安装)",[146,136687,136689],{"className":136599,"code":136688,"language":136601,"meta":39,"style":39},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[152,136690,136691,136696,136701],{"__ignoreMap":39},[155,136692,136693],{"class":157,"line":158},[155,136694,136695],{},"# 列出可安装的 Linux 版本\n",[155,136697,136698],{"class":157,"line":46},[155,136699,136700],{},"#（需要科学手段）\n",[155,136702,136703],{"class":157,"line":121},[155,136704,136705],{},"wsl --list --online\n",[24,136707,136708],{},[37,136709],{"alt":39,"src":136710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[24,136712,136713],{},"选择对应发行版并安装",[146,136715,136717],{"className":136599,"code":136716,"language":136601,"meta":39,"style":39},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[152,136718,136719,136724],{"__ignoreMap":39},[155,136720,136721],{"class":157,"line":158},[155,136722,136723],{},"# Ubuntu安装完毕后需要重启系统\n",[155,136725,136726],{"class":157,"line":46},[155,136727,136728],{},"wsl --install -d Ubuntu-24.04\n",[19,136730,136732],{"id":136731},"_2324-查看系统状态","2.3.2.4 查看系统状态",[146,136734,136736],{"className":136599,"code":136735,"language":136601,"meta":39,"style":39},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[152,136737,136738,136743,136748,136753,136758,136762,136766,136771,136776,136781],{"__ignoreMap":39},[155,136739,136740],{"class":157,"line":158},[155,136741,136742],{},"# 查看 wsl\n",[155,136744,136745],{"class":157,"line":46},[155,136746,136747],{},"wsl -l\n",[155,136749,136750],{"class":157,"line":121},[155,136751,136752],{},"# 查看 wsl 运行版本或模式\n",[155,136754,136755],{"class":157,"line":180},[155,136756,136757],{},"wsl -l -v\n",[155,136759,136760],{"class":157,"line":194},[155,136761,217],{"emptyLinePlaceholder":216},[155,136763,136764],{"class":157,"line":200},[155,136765,217],{"emptyLinePlaceholder":216},[155,136767,136768],{"class":157,"line":213},[155,136769,136770],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[155,136772,136773],{"class":157,"line":220},[155,136774,136775],{},"wsl --set-version \u003Cdistro> 2\n",[155,136777,136778],{"class":157,"line":245},[155,136779,136780],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[155,136782,136783],{"class":157,"line":251},[155,136784,136785],{},"wsl --unregister \u003Cdistro>\n",[24,136787,136788],{},"输出Version为2即正常",[24,136790,136791],{},[37,136792],{"alt":39,"src":136793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[19,136795,136797],{"id":136796},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[24,136799,136800],{},"直接在Powershell里输入wsl命令进入子系统",[146,136802,136804],{"className":136599,"code":136803,"language":136601,"meta":39,"style":39},"# 进入子系统\nwsl\n",[152,136805,136806,136811],{"__ignoreMap":39},[155,136807,136808],{"class":157,"line":158},[155,136809,136810],{},"# 进入子系统\n",[155,136812,136813],{"class":157,"line":46},[155,136814,136815],{},"wsl\n",[24,136817,136818],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[24,136820,136821],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[24,136823,136824],{},[37,136825],{"alt":39,"src":136826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[14,136828,136830],{"id":136829},"_233-配置各种环境","2.3.3 配置各种环境",[19,136832,136834],{"id":136833},"_2331-换源","2.3.3.1 换源",[24,136836,136837],{},"(同实体机LINUX，往下找教程)",[19,136839,136841],{"id":136840},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[42701,136843,136845],{"id":136844},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[24,136847,136848],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[24,136850,136851],{},[37,136852],{"alt":39,"src":136853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[24,136855,136856],{},[37,136857],{"alt":39,"src":136858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[42701,136860,136862],{"id":136861},"_23322-cuda","2.3.3.2.2 CUDA",[24,136864,136865,136866],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[20318,136867,136868],{"href":136868,"rel":136869},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[43656],[24,136871,136872,136875],{},[37,136873],{"alt":39,"src":136874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[37,136876],{"alt":39,"src":136877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[24,136879,136880],{},"在下方的网站，选择合适的版本。",[24,136882,136883,136884],{},"WSL2 专属 CUDA 指南：",[20318,136885,136886],{"href":136886,"rel":136887},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[43656],[24,136889,136890],{},[20234,136891,136892],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[24,136894,136895],{},[37,136896],{"alt":39,"src":136897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[24,136899,136900],{},"挨行敲一遍",[24,136902,136903],{},[37,136904],{"alt":39,"src":136905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[24,136907,136908,136909,136912],{},"敲完后，输入",[152,136910,136911],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[24,136914,136915],{},[37,136916],{"alt":39,"src":136917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[24,136919,136920,136921,136924],{},"（请详看下方教程的",[20234,136922,136923],{},"安装CUDA的配置环境来看","如何配置环境）",[42701,136926,136928],{"id":136927},"_23323-cudnn","2.3.3.2.3 cuDNN",[24,136930,136837],{},[24,136932,136933],{},[37,136934],{"alt":39,"src":136935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[19,136937,136939],{"id":136938},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[24,136941,136942],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[24,136944,136945],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[24,136947,136948],{},[37,136949],{"alt":39,"src":136950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[24,136952,136953],{},"连接WSL2",[24,136955,136956],{},[37,136957],{"alt":39,"src":136958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[24,136960,136961],{},"远程开发成功。",[24,136963,136964],{},[37,136965],{"alt":39,"src":136966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[24,136968,136969],{},[37,136970],{"alt":39,"src":136971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[24,136973,136974],{},[37,136975],{"alt":39,"src":136976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[19,136978,136980],{"id":136979},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[24,136982,136983],{},[37,136984],{"alt":39,"src":136985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[19,136987,136989],{"id":136988},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[146,136991,136993],{"className":135859,"code":136992,"language":135861,"meta":39,"style":39},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[152,136994,136995,137003,137011,137022,137026],{"__ignoreMap":39},[155,136996,136997,136999,137001],{"class":157,"line":158},[155,136998,44368],{"class":226},[155,137000,135880],{"class":732},[155,137002,46031],{"class":732},[155,137004,137005,137007,137009],{"class":157,"line":46},[155,137006,44368],{"class":226},[155,137008,135880],{"class":732},[155,137010,135896],{"class":732},[155,137012,137013,137015,137017,137019],{"class":157,"line":121},[155,137014,44368],{"class":226},[155,137016,135880],{"class":732},[155,137018,43625],{"class":732},[155,137020,137021],{"class":732}," mesa-utils\n",[155,137023,137024],{"class":157,"line":180},[155,137025,217],{"emptyLinePlaceholder":216},[155,137027,137028],{"class":157,"line":194},[155,137029,137030],{"class":161},"#然后重启wsl2即可\n",[20011,137032,137033],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-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":39,"searchDepth":46,"depth":46,"links":137035},[137036,137037,137042],{"id":136313,"depth":46,"text":136314},{"id":136326,"depth":46,"text":136327,"children":137038},[137039,137040,137041],{"id":136330,"depth":121,"text":136331},{"id":136377,"depth":121,"text":136378},{"id":136438,"depth":121,"text":136439},{"id":136474,"depth":46,"text":136475,"children":137043},[137044,137045,137046],{"id":136478,"depth":121,"text":136479},{"id":136540,"depth":121,"text":136541},{"id":136829,"depth":121,"text":136830},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":136305,"description":20020},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":137053,"title":137054,"body":137055,"description":20020,"extension":20021,"meta":139991,"navigation":216,"path":139992,"seo":139993,"stem":139994,"__hash__":139995},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":137056,"toc":139963},[137057,137060,137064,137070,137074,137080,137084,137272,137275,137280,137284,137288,137291,137294,137300,137305,137308,137311,137316,137349,137354,137358,137435,137438,137443,137447,137450,137489,137492,137501,137519,137524,137531,137648,137653,137656,137683,137688,137692,137701,137751,137758,137762,137765,137779,137786,137820,137825,137829,137852,137855,137860,137864,137867,137870,137873,137915,137919,137922,137925,137966,137970,137974,137977,137982,137987,137990,138013,138016,138024,138029,138032,138037,138042,138045,138050,138054,138059,138082,138087,138149,138157,138162,138167,138170,138175,138178,138183,138188,138206,138211,138217,138222,138236,138240,138243,138246,138249,138292,138295,138300,138401,138404,138409,138413,138417,138454,138458,138462,138466,138512,138516,138561,138565,138572,138580,138635,138638,138715,138718,138741,138745,138748,138753,138758,138766,138769,138774,138779,138784,138787,138792,138801,138804,138809,138812,138883,138888,138891,138896,138899,138904,138907,138912,138915,138920,138925,138928,139003,139006,139019,139024,139027,139041,139044,139073,139078,139107,139110,139115,139119,139124,139133,139136,139141,139144,139149,139152,139155,139160,139163,139168,139173,139176,139181,139184,139309,139314,139344,139347,139352,139357,139374,139377,139420,139423,139450,139455,139468,139611,139615,139620,139634,139637,139688,139691,139721,139724,139740,139745,139759,139762,139829,139834,139843,139848,139851,139863,139868,139875,139899,139902,139907,139910,139929,139934,139941,139953,139960],[10,137058,137054],{"id":137059},"_3-安装必备配置",[20037,137061,137063],{"id":137062},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[146,137065,137068],{"className":137066,"code":137067,"language":25051},[25049],"  打开下方网站（注意，该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",[152,137069,137067],{"__ignoreMap":39},[14,137071,137073],{"id":137072},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[146,137075,137078],{"className":137076,"code":137077,"language":25051},[25049],"  输入以下命令\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",[152,137079,137077],{"__ignoreMap":39},[14,137081,137083],{"id":137082},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[146,137085,137089],{"className":137086,"code":137087,"language":137088,"meta":39,"style":39},"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",[152,137090,137091,137099,137110,137122,137136,137140,137150,137155,137159,137163,137168,137172,137184,137188,137193,137197,137208,137212,137228,137232,137243,137247,137252,137256,137264],{"__ignoreMap":39},[155,137092,137093,137095,137097],{"class":157,"line":158},[155,137094,44368],{"class":226},[155,137096,135880],{"class":732},[155,137098,46031],{"class":732},[155,137100,137101,137103,137105,137107],{"class":157,"line":46},[155,137102,44368],{"class":226},[155,137104,135880],{"class":732},[155,137106,43625],{"class":732},[155,137108,137109],{"class":732}," vim\n",[155,137111,137112,137114,137117,137119],{"class":157,"line":121},[155,137113,44368],{"class":226},[155,137115,137116],{"class":732}," rm",[155,137118,45115],{"class":263},[155,137120,137121],{"class":732}," \u002Fetc\u002Fapt\u002Fsources.list\n",[155,137123,137124,137126,137128,137130,137133],{"class":157,"line":180},[155,137125,44368],{"class":226},[155,137127,137116],{"class":732},[155,137129,45115],{"class":263},[155,137131,137132],{"class":732}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[155,137134,137135],{"class":263},"**\n",[155,137137,137138],{"class":157,"line":194},[155,137139,217],{"emptyLinePlaceholder":216},[155,137141,137142,137144,137147],{"class":157,"line":200},[155,137143,44368],{"class":226},[155,137145,137146],{"class":732}," vim",[155,137148,137149],{"class":732}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[155,137151,137152],{"class":157,"line":213},[155,137153,137154],{"class":732},"```\n",[155,137156,137157],{"class":157,"line":220},[155,137158,217],{"emptyLinePlaceholder":216},[155,137160,137161],{"class":157,"line":245},[155,137162,217],{"emptyLinePlaceholder":216},[155,137164,137165],{"class":157,"line":251},[155,137166,137167],{"class":226},"选择好Ubuntu版本后，复制下方的内容。\n",[155,137169,137170],{"class":157,"line":257},[155,137171,217],{"emptyLinePlaceholder":216},[155,137173,137174,137176,137179,137182],{"class":157,"line":270},[155,137175,20306],{"class":167},[155,137177,137178],{"class":732},"[](",[155,137180,137181],{"class":226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[155,137183,363],{"class":732},[155,137185,137186],{"class":157,"line":276},[155,137187,217],{"emptyLinePlaceholder":216},[155,137189,137190],{"class":157,"line":297},[155,137191,137192],{"class":226},"粘贴进去\n",[155,137194,137195],{"class":157,"line":302},[155,137196,217],{"emptyLinePlaceholder":216},[155,137198,137199,137201,137203,137206],{"class":157,"line":308},[155,137200,20306],{"class":167},[155,137202,137178],{"class":732},[155,137204,137205],{"class":226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[155,137207,363],{"class":732},[155,137209,137210],{"class":157,"line":366},[155,137211,217],{"emptyLinePlaceholder":216},[155,137213,137214,137217,137220,137223,137225],{"class":157,"line":379},[155,137215,137216],{"class":226},"按一下ESC，然后英文冒号，输入",[155,137218,137219],{"class":732}," `",[155,137221,137222],{"class":226},":wq!",[155,137224,21017],{"class":732},[155,137226,137227],{"class":226},"然后回车\n",[155,137229,137230],{"class":157,"line":385},[155,137231,217],{"emptyLinePlaceholder":216},[155,137233,137234,137236,137238,137241],{"class":157,"line":415},[155,137235,20306],{"class":167},[155,137237,137178],{"class":732},[155,137239,137240],{"class":226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[155,137242,363],{"class":732},[155,137244,137245],{"class":157,"line":452},[155,137246,217],{"emptyLinePlaceholder":216},[155,137248,137249],{"class":157,"line":480},[155,137250,137251],{"class":226},"输入以下命令\n",[155,137253,137254],{"class":157,"line":486},[155,137255,217],{"emptyLinePlaceholder":216},[155,137257,137258,137261],{"class":157,"line":499},[155,137259,137260],{"class":732},"```",[155,137262,137263],{"class":226},"Bash\n",[155,137265,137266,137268,137270],{"class":157,"line":505},[155,137267,44368],{"class":226},[155,137269,135880],{"class":732},[155,137271,46031],{"class":732},[24,137273,137274],{},"这里被替换成对应学校则成功",[24,137276,137277],{},[37,137278],{"alt":39,"src":137279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[20037,137281,137283],{"id":137282},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[14,137285,137287],{"id":137286},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[24,137289,137290],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[24,137292,137293],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[24,137295,137296],{},[20318,137297,137298],{"href":137298,"rel":137299},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[43656],[24,137301,137302],{},[37,137303],{"alt":39,"src":137304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[24,137306,137307],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[24,137309,137310],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[24,137312,137313],{},[37,137314],{"alt":39,"src":137315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[146,137317,137319],{"className":135859,"code":137318,"language":135861,"meta":39,"style":39},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[152,137320,137321,137326,137333,137338],{"__ignoreMap":39},[155,137322,137323],{"class":157,"line":158},[155,137324,137325],{"class":161},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[155,137327,137328,137330],{"class":157,"line":46},[155,137329,119839],{"class":263},[155,137331,137332],{"class":732}," ~\u002FDownloads\n",[155,137334,137335],{"class":157,"line":121},[155,137336,137337],{"class":161},"#下方chrome安装包名不一定是这个，根据名字来看\n",[155,137339,137340,137342,137344,137346],{"class":157,"line":180},[155,137341,44368],{"class":226},[155,137343,135880],{"class":732},[155,137345,43625],{"class":732},[155,137347,137348],{"class":732}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[24,137350,137351],{},[37,137352],{"alt":39,"src":137353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[14,137355,137357],{"id":137356},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[146,137359,137361],{"className":135859,"code":137360,"language":135861,"meta":39,"style":39},"# 老版\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",[152,137362,137363,137368,137376,137387,137392,137396,137401,137411,137419,137430],{"__ignoreMap":39},[155,137364,137365],{"class":157,"line":158},[155,137366,137367],{"class":161},"# 老版\n",[155,137369,137370,137372,137374],{"class":157,"line":46},[155,137371,44368],{"class":226},[155,137373,135880],{"class":732},[155,137375,46031],{"class":732},[155,137377,137378,137380,137382,137384],{"class":157,"line":121},[155,137379,44368],{"class":226},[155,137381,135880],{"class":732},[155,137383,43625],{"class":732},[155,137385,137386],{"class":732}," neofetch\n",[155,137388,137389],{"class":157,"line":180},[155,137390,137391],{"class":226},"neofetch\n",[155,137393,137394],{"class":157,"line":194},[155,137395,217],{"emptyLinePlaceholder":216},[155,137397,137398],{"class":157,"line":200},[155,137399,137400],{"class":161},"# 新版\n",[155,137402,137403,137405,137408],{"class":157,"line":213},[155,137404,44368],{"class":226},[155,137406,137407],{"class":732}," add-apt-repository",[155,137409,137410],{"class":732}," ppa:zhangsongcui3371\u002Ffastfetch\n",[155,137412,137413,137415,137417],{"class":157,"line":220},[155,137414,44368],{"class":226},[155,137416,135880],{"class":732},[155,137418,46031],{"class":732},[155,137420,137421,137423,137425,137427],{"class":157,"line":245},[155,137422,44368],{"class":226},[155,137424,135880],{"class":732},[155,137426,43625],{"class":732},[155,137428,137429],{"class":732}," fastfetch\n",[155,137431,137432],{"class":157,"line":251},[155,137433,137434],{"class":226},"fastfetch\n",[24,137436,137437],{},"这里显示，一共有3162个debian的程序，7个snap程序",[24,137439,137440],{},[37,137441],{"alt":39,"src":137442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[14,137444,137446],{"id":137445},"_323-移除snap应用","3.2.3 移除snap应用",[24,137448,137449],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[146,137451,137453],{"className":135859,"code":137452,"language":135861,"meta":39,"style":39},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[152,137454,137455,137467,137478],{"__ignoreMap":39},[155,137456,137457,137459,137461,137464],{"class":157,"line":158},[155,137458,44368],{"class":226},[155,137460,46302],{"class":732},[155,137462,137463],{"class":732}," disable",[155,137465,137466],{"class":732}," snapd.service\n",[155,137468,137469,137471,137473,137475],{"class":157,"line":46},[155,137470,44368],{"class":226},[155,137472,46302],{"class":732},[155,137474,137463],{"class":732},[155,137476,137477],{"class":732}," snapd.socket\n",[155,137479,137480,137482,137484,137486],{"class":157,"line":121},[155,137481,44368],{"class":226},[155,137483,46302],{"class":732},[155,137485,137463],{"class":732},[155,137487,137488],{"class":732}," snapd.seeded.service\n",[24,137490,137491],{},"然后查看snap应用列表",[24,137493,137494,137495,137500],{},"根据你安装的选择不同（最小安装或普通安装），有",[20318,137496,137499],{"href":137497,"rel":137498},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[43656],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[146,137502,137504],{"className":135859,"code":137503,"language":135861,"meta":39,"style":39},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[152,137505,137506,137511],{"__ignoreMap":39},[155,137507,137508],{"class":157,"line":158},[155,137509,137510],{"class":161},"# 查询当前系统上snap安装了哪些app\n",[155,137512,137513,137516],{"class":157,"line":46},[155,137514,137515],{"class":226},"snap",[155,137517,137518],{"class":732}," list\n",[24,137520,137521],{},[37,137522],{"alt":39,"src":137523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[24,137525,137526,137527,137530],{},"卸载掉图中所有应用，按照 ",[20234,137528,137529],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[146,137532,137534],{"className":135859,"code":137533,"language":135861,"meta":39,"style":39},"#移除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",[152,137535,137536,137541,137553,137558,137569,137574,137585,137590,137601,137606,137610,137615,137626,137637],{"__ignoreMap":39},[155,137537,137538],{"class":157,"line":158},[155,137539,137540],{"class":161},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[155,137542,137543,137545,137548,137550],{"class":157,"line":46},[155,137544,44368],{"class":226},[155,137546,137547],{"class":732}," snap",[155,137549,45868],{"class":732},[155,137551,137552],{"class":732}," snap-store\n",[155,137554,137555],{"class":157,"line":121},[155,137556,137557],{"class":161},"#移除firefox浏览器\n",[155,137559,137560,137562,137564,137566],{"class":157,"line":180},[155,137561,44368],{"class":226},[155,137563,137547],{"class":732},[155,137565,45868],{"class":732},[155,137567,137568],{"class":732}," firefox\n",[155,137570,137571],{"class":157,"line":194},[155,137572,137573],{"class":161},"#移除gnome-42-2204\n",[155,137575,137576,137578,137580,137582],{"class":157,"line":200},[155,137577,44368],{"class":226},[155,137579,137547],{"class":732},[155,137581,45868],{"class":732},[155,137583,137584],{"class":732}," gnome-42-2204\n",[155,137586,137587],{"class":157,"line":213},[155,137588,137589],{"class":161},"#移除gtk-common-themes\n",[155,137591,137592,137594,137596,137598],{"class":157,"line":220},[155,137593,44368],{"class":226},[155,137595,137547],{"class":732},[155,137597,45868],{"class":732},[155,137599,137600],{"class":732}," gtk-common-themes\n",[155,137602,137603],{"class":157,"line":245},[155,137604,137605],{"class":161},"#移除其它...\n",[155,137607,137608],{"class":157,"line":251},[155,137609,22551],{"class":171},[155,137611,137612],{"class":157,"line":257},[155,137613,137614],{"class":161},"#移除core22,bare以及snapd\n",[155,137616,137617,137619,137621,137623],{"class":157,"line":270},[155,137618,44368],{"class":226},[155,137620,137547],{"class":732},[155,137622,45868],{"class":732},[155,137624,137625],{"class":732}," core22\n",[155,137627,137628,137630,137632,137634],{"class":157,"line":276},[155,137629,44368],{"class":226},[155,137631,137547],{"class":732},[155,137633,45868],{"class":732},[155,137635,137636],{"class":732}," bare\n",[155,137638,137639,137641,137643,137645],{"class":157,"line":297},[155,137640,44368],{"class":226},[155,137642,137547],{"class":732},[155,137644,45868],{"class":732},[155,137646,137647],{"class":732}," snapd\n",[24,137649,137650],{},[37,137651],{"alt":39,"src":137652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[24,137654,137655],{},"输入以下命令查看是否还有snap包",[146,137657,137659],{"className":135859,"code":137658,"language":135861,"meta":39,"style":39},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[152,137660,137661,137667,137671,137675,137679],{"__ignoreMap":39},[155,137662,137663,137665],{"class":157,"line":158},[155,137664,137515],{"class":226},[155,137666,137518],{"class":732},[155,137668,137669],{"class":157,"line":46},[155,137670,137367],{"class":161},[155,137672,137673],{"class":157,"line":121},[155,137674,137391],{"class":226},[155,137676,137677],{"class":157,"line":180},[155,137678,137400],{"class":161},[155,137680,137681],{"class":157,"line":194},[155,137682,137434],{"class":226},[24,137684,137685],{},[37,137686],{"alt":39,"src":137687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[14,137689,137691],{"id":137690},"_324-移除snap","3.2.4 移除snap",[24,137693,137694,137695,137700],{},"在删除掉",[20318,137696,137699],{"href":137697,"rel":137698},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[43656],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[146,137702,137704],{"className":135859,"code":137703,"language":135861,"meta":39,"style":39}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[152,137705,137706,137711,137724,137729,137740],{"__ignoreMap":39},[155,137707,137708],{"class":157,"line":158},[155,137709,137710],{"class":161}," #使用apt移除掉snap\n",[155,137712,137713,137715,137717,137719,137722],{"class":157,"line":46},[155,137714,44368],{"class":226},[155,137716,135880],{"class":732},[155,137718,136188],{"class":732},[155,137720,137721],{"class":263}," --purge",[155,137723,137647],{"class":732},[155,137725,137726],{"class":157,"line":121},[155,137727,137728],{"class":161},"#移除snapd的一些目录\n",[155,137730,137731,137733,137735,137737],{"class":157,"line":180},[155,137732,44368],{"class":226},[155,137734,137116],{"class":732},[155,137736,45115],{"class":263},[155,137738,137739],{"class":732}," \u002Fvar\u002Fcache\u002Fsnapd\n",[155,137741,137742,137744,137746,137748],{"class":157,"line":194},[155,137743,44368],{"class":226},[155,137745,137116],{"class":732},[155,137747,45115],{"class":263},[155,137749,137750],{"class":732}," ~\u002Fsnap\n",[24,137752,137753,137754,137757],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[152,137755,137756],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[14,137759,137761],{"id":137760},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[24,137763,137764],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[146,137766,137768],{"className":135859,"code":137767,"language":135861,"meta":39,"style":39},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[152,137769,137770],{"__ignoreMap":39},[155,137771,137772,137774,137776],{"class":157,"line":158},[155,137773,44368],{"class":226},[155,137775,137146],{"class":732},[155,137777,137778],{"class":732}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[24,137780,137781,137782,137785],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[152,137783,137784],{},":wq"," 回车",[146,137787,137789],{"className":135859,"code":137788,"language":135861,"meta":39,"style":39},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[152,137790,137791,137798,137812],{"__ignoreMap":39},[155,137792,137793,137796],{"class":157,"line":158},[155,137794,137795],{"class":226},"Package:",[155,137797,137647],{"class":732},[155,137799,137800,137803,137806,137809],{"class":157,"line":46},[155,137801,137802],{"class":226},"Pin:",[155,137804,137805],{"class":732}," release",[155,137807,137808],{"class":732}," a=",[155,137810,137811],{"class":263},"*\n",[155,137813,137814,137817],{"class":157,"line":121},[155,137815,137816],{"class":226},"Pin-Priority:",[155,137818,137819],{"class":263}," -10\n",[24,137821,137822],{},[37,137823],{"alt":39,"src":137824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[14,137826,137828],{"id":137827},"_326-测试是否成功","3.2.6 测试是否成功",[146,137830,137832],{"className":135859,"code":137831,"language":135861,"meta":39,"style":39},"sudo apt update\nsudo apt install firefox\n",[152,137833,137834,137842],{"__ignoreMap":39},[155,137835,137836,137838,137840],{"class":157,"line":158},[155,137837,44368],{"class":226},[155,137839,135880],{"class":732},[155,137841,46031],{"class":732},[155,137843,137844,137846,137848,137850],{"class":157,"line":46},[155,137845,44368],{"class":226},[155,137847,135880],{"class":732},[155,137849,43625],{"class":732},[155,137851,137568],{"class":732},[24,137853,137854],{},"这里提示snapd无法被安装，就证明成功了",[24,137856,137857],{},[37,137858],{"alt":39,"src":137859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[14,137861,137863],{"id":137862},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[24,137865,137866],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[24,137868,137869],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[24,137871,137872],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[146,137874,137876],{"className":135859,"code":137875,"language":135861,"meta":39,"style":39},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[152,137877,137878,137883,137892,137897,137905],{"__ignoreMap":39},[155,137879,137880],{"class":157,"line":158},[155,137881,137882],{"class":161},"# 添加Mozilla提供的源\n",[155,137884,137885,137887,137889],{"class":157,"line":46},[155,137886,44368],{"class":226},[155,137888,137407],{"class":732},[155,137890,137891],{"class":732}," ppa:mozillateam\u002Fppa\n",[155,137893,137894],{"class":157,"line":121},[155,137895,137896],{"class":161},"# 安装Firefox\n",[155,137898,137899,137901,137903],{"class":157,"line":180},[155,137900,44368],{"class":226},[155,137902,135880],{"class":732},[155,137904,46031],{"class":732},[155,137906,137907,137909,137911,137913],{"class":157,"line":194},[155,137908,44368],{"class":226},[155,137910,135880],{"class":732},[155,137912,43625],{"class":732},[155,137914,137568],{"class":732},[14,137916,137918],{"id":137917},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[24,137920,137921],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[24,137923,137924],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[146,137926,137928],{"className":135859,"code":137927,"language":135861,"meta":39,"style":39},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[152,137929,137930,137935,137945,137953,137957],{"__ignoreMap":39},[155,137931,137932],{"class":157,"line":158},[155,137933,137934],{"class":161},"#删掉禁止安装snap的配置文件\n",[155,137936,137937,137939,137941,137943],{"class":157,"line":46},[155,137938,44368],{"class":226},[155,137940,137116],{"class":732},[155,137942,45115],{"class":263},[155,137944,137778],{"class":732},[155,137946,137947,137949,137951],{"class":157,"line":121},[155,137948,44368],{"class":226},[155,137950,135880],{"class":732},[155,137952,46031],{"class":732},[155,137954,137955],{"class":157,"line":180},[155,137956,217],{"emptyLinePlaceholder":216},[155,137958,137959,137961,137963],{"class":157,"line":194},[155,137960,44368],{"class":226},[155,137962,135880],{"class":732},[155,137964,137965],{"class":732}," dist-update\n",[20037,137967,137969],{"id":137968},"_33-中文输入法","3.3 中文输入法",[14,137971,137973],{"id":137972},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[24,137975,137976],{},"官网下载搜狗输入法",[24,137978,137979],{},[37,137980],{"alt":39,"src":137981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[24,137983,137984],{},[37,137985],{"alt":39,"src":137986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[24,137988,137989],{},"打开终端输入如下",[146,137991,137993],{"className":135859,"code":137992,"language":135861,"meta":39,"style":39},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[152,137994,137995,138002],{"__ignoreMap":39},[155,137996,137997,137999],{"class":157,"line":158},[155,137998,119839],{"class":263},[155,138000,138001],{"class":732}," ~\u002FDownloads\u002F\n",[155,138003,138004,138006,138008,138010],{"class":157,"line":46},[155,138005,44368],{"class":226},[155,138007,135880],{"class":732},[155,138009,43625],{"class":732},[155,138011,138012],{"class":732}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[24,138014,138015],{},"打开Fcitx",[24,138017,138018,138021],{},[37,138019],{"alt":39,"src":138020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[37,138022],{"alt":39,"src":138023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[24,138025,138026],{},[37,138027],{"alt":39,"src":138028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[24,138030,138031],{},"添加搜狗输入法",[24,138033,138034],{},[37,138035],{"alt":39,"src":138036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[24,138038,138039],{},[37,138040],{"alt":39,"src":138041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[24,138043,138044],{},"将搜狗输入法设置为唯一输入法",[24,138046,138047],{},[37,138048],{"alt":39,"src":138049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[14,138051,138053],{"id":138052},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[28,138055,138056],{},[31,138057,138058],{},"卸载旧输入法",[146,138060,138062],{"className":137086,"code":138061,"language":137088,"meta":39,"style":39},"sudo apt purge fcitx* ibus*\n",[152,138063,138064],{"__ignoreMap":39},[155,138065,138066,138068,138070,138072,138075,138077,138080],{"class":157,"line":158},[155,138067,44368],{"class":226},[155,138069,135880],{"class":732},[155,138071,136221],{"class":732},[155,138073,138074],{"class":732}," fcitx",[155,138076,1563],{"class":263},[155,138078,138079],{"class":732}," ibus",[155,138081,137811],{"class":263},[28,138083,138084],{"start":46},[31,138085,138086],{},"安装Fcitx5",[146,138088,138090],{"className":135859,"code":138089,"language":135861,"meta":39,"style":39},"# 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",[152,138091,138092,138097,138111,138115,138120,138129,138137],{"__ignoreMap":39},[155,138093,138094],{"class":157,"line":158},[155,138095,138096],{"class":161},"# Ubuntu22.04及以上、Debian12及以上\n",[155,138098,138099,138101,138103,138105,138108],{"class":157,"line":46},[155,138100,44368],{"class":226},[155,138102,135880],{"class":732},[155,138104,43625],{"class":732},[155,138106,138107],{"class":732}," fcitx5",[155,138109,138110],{"class":732}," fcitx5-chinese-addons\n",[155,138112,138113],{"class":157,"line":121},[155,138114,217],{"emptyLinePlaceholder":216},[155,138116,138117],{"class":157,"line":180},[155,138118,138119],{"class":161},"# Ubuntu20.04\n",[155,138121,138122,138124,138126],{"class":157,"line":194},[155,138123,44368],{"class":226},[155,138125,137407],{"class":732},[155,138127,138128],{"class":732}," ppa:zhsj\u002Ffcitx5\n",[155,138130,138131,138133,138135],{"class":157,"line":200},[155,138132,44368],{"class":226},[155,138134,135880],{"class":732},[155,138136,46031],{"class":732},[155,138138,138139,138141,138143,138145,138147],{"class":157,"line":213},[155,138140,44368],{"class":226},[155,138142,135880],{"class":732},[155,138144,43625],{"class":732},[155,138146,138107],{"class":732},[155,138148,138110],{"class":732},[28,138150,138151,138154],{"start":121},[31,138152,138153],{},"Reboot System",[31,138155,138156],{},"启动Fcitx5",[24,138158,138159],{},[37,138160],{"alt":39,"src":138161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[28,138163,138164],{"start":194},[31,138165,138166],{},"修改一些设置",[24,138168,138169],{},"将Pinyin和Keyboard - English US加入到左边。",[24,138171,138172],{},[37,138173],{"alt":39,"src":138174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[24,138176,138177],{},"添加快捷键以便于更好切换中英文",[24,138179,138180],{},[37,138181],{"alt":39,"src":138182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[28,138184,138185],{"start":200},[31,138186,138187],{},"重启",[146,138189,138191],{"className":137086,"code":138190,"language":137088,"meta":39,"style":39},"sudo shutdown -r now\n",[152,138192,138193],{"__ignoreMap":39},[155,138194,138195,138197,138200,138203],{"class":157,"line":158},[155,138196,44368],{"class":226},[155,138198,138199],{"class":732}," shutdown",[155,138201,138202],{"class":263}," -r",[155,138204,138205],{"class":732}," now\n",[28,138207,138208],{"start":213},[31,138209,138210],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[24,138212,138213],{},[20318,138214,138215],{"href":138215,"rel":138216},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[43656],[28,138218,138219],{"start":220},[31,138220,138221],{},"再重启",[146,138223,138224],{"className":137086,"code":138190,"language":137088,"meta":39,"style":39},[152,138225,138226],{"__ignoreMap":39},[155,138227,138228,138230,138232,138234],{"class":157,"line":158},[155,138229,44368],{"class":226},[155,138231,138199],{"class":732},[155,138233,138202],{"class":263},[155,138235,138205],{"class":732},[20037,138237,138239],{"id":138238},"_34-pip3源替换","3.4 pip3源替换",[24,138241,138242],{},"非Debian系发行版需要做。",[24,138244,138245],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[24,138247,138248],{},"使用dnf的系统也可能不用做。",[146,138250,138252],{"className":135859,"code":138251,"language":135861,"meta":39,"style":39},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[152,138253,138254,138259,138266,138271,138276],{"__ignoreMap":39},[155,138255,138256],{"class":157,"line":158},[155,138257,138258],{"class":161},"# 检查是否已安装 pip\n",[155,138260,138261,138264],{"class":157,"line":46},[155,138262,138263],{"class":226},"pip3",[155,138265,46082],{"class":263},[155,138267,138268],{"class":157,"line":121},[155,138269,138270],{"class":161},"# 如果未安装，先安装 pip3（见下方）\n",[155,138272,138273],{"class":157,"line":180},[155,138274,138275],{"class":161},"# 配置 pip 使用清华源\n",[155,138277,138278,138280,138283,138286,138289],{"class":157,"line":194},[155,138279,138263],{"class":226},[155,138281,138282],{"class":732}," config",[155,138284,138285],{"class":732}," set",[155,138287,138288],{"class":732}," global.index-url",[155,138290,138291],{"class":732}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[24,138293,138294],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[24,138296,138297],{},[37,138298],{"alt":39,"src":138299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[146,138301,138303],{"className":135859,"code":138302,"language":135861,"meta":39,"style":39},"#安装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",[152,138304,138305,138310,138318,138329,138333,138338,138357,138361,138366,138378,138382,138387],{"__ignoreMap":39},[155,138306,138307],{"class":157,"line":158},[155,138308,138309],{"class":161},"#安装pip3\n",[155,138311,138312,138314,138316],{"class":157,"line":46},[155,138313,44368],{"class":226},[155,138315,135880],{"class":732},[155,138317,46031],{"class":732},[155,138319,138320,138322,138324,138326],{"class":157,"line":121},[155,138321,44368],{"class":226},[155,138323,45865],{"class":732},[155,138325,43625],{"class":732},[155,138327,138328],{"class":732}," python3-pip\n",[155,138330,138331],{"class":157,"line":180},[155,138332,217],{"emptyLinePlaceholder":216},[155,138334,138335],{"class":157,"line":194},[155,138336,138337],{"class":161},"#更新pip3\n",[155,138339,138340,138342,138344,138346,138348,138350,138353,138355],{"class":157,"line":200},[155,138341,119442],{"class":226},[155,138343,119445],{"class":263},[155,138345,119468],{"class":732},[155,138347,43625],{"class":732},[155,138349,46219],{"class":263},[155,138351,138352],{"class":732}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[155,138354,119473],{"class":263},[155,138356,119476],{"class":732},[155,138358,138359],{"class":157,"line":213},[155,138360,217],{"emptyLinePlaceholder":216},[155,138362,138363],{"class":157,"line":220},[155,138364,138365],{"class":161},"#设置pip源为清华源\n",[155,138367,138368,138370,138372,138374,138376],{"class":157,"line":245},[155,138369,138263],{"class":226},[155,138371,138282],{"class":732},[155,138373,138285],{"class":732},[155,138375,138288],{"class":732},[155,138377,138291],{"class":732},[155,138379,138380],{"class":157,"line":251},[155,138381,217],{"emptyLinePlaceholder":216},[155,138383,138384],{"class":157,"line":257},[155,138385,138386],{"class":161},"#测试\n",[155,138388,138389,138391,138393,138395,138397,138399],{"class":157,"line":270},[155,138390,119442],{"class":226},[155,138392,119445],{"class":263},[155,138394,119468],{"class":732},[155,138396,43625],{"class":732},[155,138398,119473],{"class":263},[155,138400,119476],{"class":732},[24,138402,138403],{},"成功的话，会看到Looking后面是tsinghua字样。",[24,138405,138406],{},[37,138407],{"alt":39,"src":138408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[20037,138410,138412],{"id":138411},"_35-显卡驱动安装","3.5 显卡驱动安装",[14,138414,138416],{"id":138415},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[146,138418,138420],{"className":137086,"code":138419,"language":137088,"meta":39,"style":39},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[152,138421,138422,138427,138442,138447],{"__ignoreMap":39},[155,138423,138424],{"class":157,"line":158},[155,138425,138426],{"class":161},"# 如果是使用apt安装的驱动\n",[155,138428,138429,138431,138433,138435,138437,138440],{"class":157,"line":46},[155,138430,44368],{"class":226},[155,138432,45865],{"class":732},[155,138434,45868],{"class":732},[155,138436,137721],{"class":263},[155,138438,138439],{"class":732}," nvidia",[155,138441,137811],{"class":263},[155,138443,138444],{"class":157,"line":121},[155,138445,138446],{"class":161},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[155,138448,138449,138451],{"class":157,"line":180},[155,138450,44368],{"class":226},[155,138452,138453],{"class":732}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[14,138455,138457],{"id":138456},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[19,138459,138461],{"id":138460},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[42701,138463,138465],{"id":138464},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[146,138467,138469],{"className":137086,"code":138468,"language":137088,"meta":39,"style":39},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[152,138470,138471,138476,138487,138492,138502,138507],{"__ignoreMap":39},[155,138472,138473],{"class":157,"line":158},[155,138474,138475],{"class":161},"# 安装英伟达驱动\n",[155,138477,138478,138480,138482,138484],{"class":157,"line":46},[155,138479,44368],{"class":226},[155,138481,135880],{"class":732},[155,138483,43625],{"class":732},[155,138485,138486],{"class":732}," nvidia-driver-版本号\n",[155,138488,138489],{"class":157,"line":121},[155,138490,138491],{"class":161},"# 重启 \n",[155,138493,138494,138496,138498,138500],{"class":157,"line":180},[155,138495,44368],{"class":226},[155,138497,138199],{"class":732},[155,138499,138202],{"class":263},[155,138501,138205],{"class":732},[155,138503,138504],{"class":157,"line":194},[155,138505,138506],{"class":161},"# 检查驱动是否安装成功\n",[155,138508,138509],{"class":157,"line":200},[155,138510,138511],{"class":226},"nvidia-smi\n",[42701,138513,138515],{"id":138514},"_35212-debian","3.5.2.1.2 Debian",[146,138517,138519],{"className":137086,"code":138518,"language":137088,"meta":39,"style":39},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[152,138520,138521,138525,138539,138543,138553,138557],{"__ignoreMap":39},[155,138522,138523],{"class":157,"line":158},[155,138524,138475],{"class":161},[155,138526,138527,138529,138531,138533,138536],{"class":157,"line":46},[155,138528,44368],{"class":226},[155,138530,135880],{"class":732},[155,138532,43625],{"class":732},[155,138534,138535],{"class":732}," nvidia-driver",[155,138537,138538],{"class":732}," nvidia-settings\n",[155,138540,138541],{"class":157,"line":121},[155,138542,138491],{"class":161},[155,138544,138545,138547,138549,138551],{"class":157,"line":180},[155,138546,44368],{"class":226},[155,138548,138199],{"class":732},[155,138550,138202],{"class":263},[155,138552,138205],{"class":732},[155,138554,138555],{"class":157,"line":194},[155,138556,138506],{"class":161},[155,138558,138559],{"class":157,"line":200},[155,138560,138511],{"class":226},[19,138562,138564],{"id":138563},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[24,138566,138567,138568,138571],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[20234,138569,138570],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[24,138573,138574,138575],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[43344,138576,138577],{},[20234,138578,138579],{},"（也可以不禁用桌面环境，直接进行下一步。）",[146,138581,138583],{"className":137086,"code":138582,"language":137088,"meta":39,"style":39},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[152,138584,138585,138590,138600,138605,138618,138623],{"__ignoreMap":39},[155,138586,138587],{"class":157,"line":158},[155,138588,138589],{"class":161},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[155,138591,138592,138594,138597],{"class":157,"line":46},[155,138593,44368],{"class":226},[155,138595,138596],{"class":732}," telinit",[155,138598,138599],{"class":263}," 3\n",[155,138601,138602],{"class":157,"line":121},[155,138603,138604],{"class":161},"# ubuntu 使用下方命令\n",[155,138606,138607,138609,138612,138615],{"class":157,"line":180},[155,138608,44368],{"class":226},[155,138610,138611],{"class":732}," service",[155,138613,138614],{"class":732}," lightdm",[155,138616,138617],{"class":732}," stop\n",[155,138619,138620],{"class":157,"line":194},[155,138621,138622],{"class":161},"# Fedora 使用下方命令\n",[155,138624,138625,138627,138629,138632],{"class":157,"line":200},[155,138626,44368],{"class":226},[155,138628,46302],{"class":732},[155,138630,138631],{"class":732}," isolate",[155,138633,138634],{"class":732}," multi-user.target\n",[24,138636,138637],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[146,138639,138641],{"className":137086,"code":138640,"language":137088,"meta":39,"style":39},"# 编译环境+准备工作\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",[152,138642,138643,138648,138659,138664,138671,138676,138688,138693,138700,138705],{"__ignoreMap":39},[155,138644,138645],{"class":157,"line":158},[155,138646,138647],{"class":161},"# 编译环境+准备工作\n",[155,138649,138650,138652,138654,138656],{"class":157,"line":46},[155,138651,44368],{"class":226},[155,138653,135880],{"class":732},[155,138655,43625],{"class":732},[155,138657,138658],{"class":732}," build-essential\n",[155,138660,138661],{"class":157,"line":121},[155,138662,138663],{"class":161},"# 进入到.run目录中\n",[155,138665,138666,138668],{"class":157,"line":180},[155,138667,119839],{"class":263},[155,138669,138670],{"class":732}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[155,138672,138673],{"class":157,"line":194},[155,138674,138675],{"class":161},"# 给驱动文件增加可执行权限：\n",[155,138677,138678,138680,138682,138685],{"class":157,"line":200},[155,138679,44368],{"class":226},[155,138681,44371],{"class":732},[155,138683,138684],{"class":732}," a+x",[155,138686,138687],{"class":732}," NVIDIA-Linux-x86_64-550.107.02.run\n",[155,138689,138690],{"class":157,"line":213},[155,138691,138692],{"class":161},"# 然后执行安装：\n",[155,138694,138695,138697],{"class":157,"line":220},[155,138696,44368],{"class":226},[155,138698,138699],{"class":732}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[155,138701,138702],{"class":157,"line":245},[155,138703,138704],{"class":161},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[155,138706,138707,138709,138712],{"class":157,"line":251},[155,138708,44368],{"class":226},[155,138710,138711],{"class":732}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[155,138713,138714],{"class":263},"  --no-opengl-files\n",[24,138716,138717],{},"安装完毕重启即可",[146,138719,138721],{"className":137086,"code":138720,"language":137088,"meta":39,"style":39},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[152,138722,138723,138727,138733,138737],{"__ignoreMap":39},[155,138724,138725],{"class":157,"line":158},[155,138726,138491],{"class":161},[155,138728,138729,138731],{"class":157,"line":46},[155,138730,44368],{"class":226},[155,138732,46436],{"class":732},[155,138734,138735],{"class":157,"line":121},[155,138736,138506],{"class":161},[155,138738,138739],{"class":157,"line":180},[155,138740,138511],{"class":226},[14,138742,138744],{"id":138743},"_353-安装cuda","3.5.3 安装CUDA",[24,138746,138747],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[24,138749,138750],{},[37,138751],{"alt":39,"src":138752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[28,138754,138755],{},[31,138756,138757],{},"先查看显卡驱动所支持的最高CUDA版本",[146,138759,138760],{"className":137086,"code":138511,"language":137088,"meta":39,"style":39},[152,138761,138762],{"__ignoreMap":39},[155,138763,138764],{"class":157,"line":158},[155,138765,138511],{"class":226},[24,138767,138768],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[24,138770,138771],{},[37,138772],{"alt":39,"src":138773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[28,138775,138776],{"start":46},[31,138777,138778],{},"下载CUDA并安装CUDA",[24,138780,136865,138781],{},[20318,138782,136868],{"href":136868,"rel":138783},[43656],[24,138785,138786],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[24,138788,138789],{},[37,138790],{"alt":39,"src":138791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[24,138793,138794,138795,138800],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[20318,138796,138799],{"href":138797,"rel":138798},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[43656],"Vinci机器人队单片机教程","）",[24,138802,138803],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[24,138805,138806],{},[37,138807],{"alt":39,"src":138808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[24,138810,138811],{},"将最下方框框里的命令敲入终端",[146,138813,138815],{"className":137086,"code":138814,"language":137088,"meta":39,"style":39},"# 在当前文件夹下创建一个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",[152,138816,138817,138822,138831,138836,138843,138848,138856,138861,138872,138877],{"__ignoreMap":39},[155,138818,138819],{"class":157,"line":158},[155,138820,138821],{"class":161},"# 在当前文件夹下创建一个ttt的子文件夹\n",[155,138823,138824,138826,138828],{"class":157,"line":46},[155,138825,119829],{"class":226},[155,138827,49005],{"class":263},[155,138829,138830],{"class":732}," .\u002Fttt\n",[155,138832,138833],{"class":157,"line":121},[155,138834,138835],{"class":161},"# 进入ttt文件夹\n",[155,138837,138838,138840],{"class":157,"line":180},[155,138839,119839],{"class":263},[155,138841,138842],{"class":732}," ttt\n",[155,138844,138845],{"class":157,"line":194},[155,138846,138847],{"class":161},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[155,138849,138850,138853],{"class":157,"line":200},[155,138851,138852],{"class":226},"wget",[155,138854,138855],{"class":732}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[155,138857,138858],{"class":157,"line":213},[155,138859,138860],{"class":161},"# 给予权限\n",[155,138862,138863,138865,138867,138869],{"class":157,"line":220},[155,138864,44368],{"class":226},[155,138866,44371],{"class":732},[155,138868,138684],{"class":732},[155,138870,138871],{"class":732}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[155,138873,138874],{"class":157,"line":245},[155,138875,138876],{"class":161},"# 运行脚本\n",[155,138878,138879,138881],{"class":157,"line":251},[155,138880,44368],{"class":226},[155,138882,138871],{"class":732},[24,138884,138885],{},[37,138886],{"alt":39,"src":138887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[24,138889,138890],{},"正在安装中：",[24,138892,138893],{},[37,138894],{"alt":39,"src":138895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[24,138897,138898],{},"输入accept接受即可",[24,138900,138901],{},[37,138902],{"alt":39,"src":138903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[24,138905,138906],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[24,138908,138909],{},[37,138910],{"alt":39,"src":138911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[24,138913,138914],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[24,138916,138917],{},[37,138918],{"alt":39,"src":138919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[28,138921,138922],{"start":121},[31,138923,138924],{},"配置环境",[24,138926,138927],{},"根据上方确认一下路径，比如我上面红色框起来的为",[146,138929,138931],{"className":137086,"code":138930,"language":137088,"meta":39,"style":39},"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",[152,138932,138933,138949,138964],{"__ignoreMap":39},[155,138934,138935,138938,138941,138944,138947],{"class":157,"line":158},[155,138936,138937],{"class":226},"Please",[155,138939,138940],{"class":732}," make",[155,138942,138943],{"class":732}," sure",[155,138945,138946],{"class":732}," that",[155,138948,22551],{"class":171},[155,138950,138951,138953,138956,138959,138962],{"class":157,"line":46},[155,138952,70834],{"class":226},[155,138954,138955],{"class":732},"   PATH",[155,138957,138958],{"class":732}," includes",[155,138960,138961],{"class":732}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[155,138963,22551],{"class":171},[155,138965,138966,138968,138971,138973,138976,138979,138981,138984,138987,138990,138993,138995,138998,139000],{"class":157,"line":121},[155,138967,70834],{"class":226},[155,138969,138970],{"class":732},"   LD_LIBRARY_PATH",[155,138972,138958],{"class":732},[155,138974,138975],{"class":732}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[155,138977,138978],{"class":732}," or,",[155,138980,25073],{"class":732},[155,138982,138983],{"class":732}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[155,138985,138986],{"class":732}," to",[155,138988,138989],{"class":732}," \u002Fetc\u002Fld.so.conf",[155,138991,138992],{"class":732}," and",[155,138994,47019],{"class":732},[155,138996,138997],{"class":732}," ldconfig",[155,138999,83167],{"class":732},[155,139001,139002],{"class":732}," root\n",[24,139004,139005],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[146,139007,139009],{"className":137086,"code":139008,"language":137088,"meta":39,"style":39},"which nvcc\n",[152,139010,139011],{"__ignoreMap":39},[155,139012,139013,139016],{"class":157,"line":158},[155,139014,139015],{"class":263},"which",[155,139017,139018],{"class":732}," nvcc\n",[24,139020,139021],{},[37,139022],{"alt":39,"src":139023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[24,139025,139026],{},"所以我进行以下操作：",[146,139028,139030],{"className":137086,"code":139029,"language":137088,"meta":39,"style":39},"sudo vim ~\u002F.bashrc\n",[152,139031,139032],{"__ignoreMap":39},[155,139033,139034,139036,139038],{"class":157,"line":158},[155,139035,44368],{"class":226},[155,139037,137146],{"class":732},[155,139039,139040],{"class":732}," ~\u002F.bashrc\n",[24,139042,139043],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[146,139045,139047],{"className":137086,"code":139046,"language":137088,"meta":39,"style":39},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[152,139048,139049,139061],{"__ignoreMap":39},[155,139050,139051,139053,139056,139058],{"class":157,"line":158},[155,139052,44834],{"class":167},[155,139054,139055],{"class":171}," PATH",[155,139057,317],{"class":167},[155,139059,139060],{"class":171},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[155,139062,139063,139065,139068,139070],{"class":157,"line":46},[155,139064,44834],{"class":167},[155,139066,139067],{"class":171}," LD_LIBRARY_PATH",[155,139069,317],{"class":167},[155,139071,139072],{"class":171},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[24,139074,139075],{},[37,139076],{"alt":39,"src":139077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[146,139079,139081],{"className":137086,"code":139080,"language":137088,"meta":39,"style":39},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[152,139082,139083,139088,139094,139099],{"__ignoreMap":39},[155,139084,139085],{"class":157,"line":158},[155,139086,139087],{"class":161},"# 刷新当前终端的环境变量\n",[155,139089,139090,139092],{"class":157,"line":46},[155,139091,119456],{"class":263},[155,139093,139040],{"class":732},[155,139095,139096],{"class":157,"line":121},[155,139097,139098],{"class":161},"# 验证CUDA是否安装成功\n",[155,139100,139101,139104],{"class":157,"line":180},[155,139102,139103],{"class":226},"nvcc",[155,139105,139106],{"class":263}," -V\n",[24,139108,139109],{},"出现下图这种则安装成功。",[24,139111,139112],{},[37,139113],{"alt":39,"src":139114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[14,139116,139118],{"id":139117},"_354-安装cudnn","3.5.4 安装cuDNN",[28,139120,139121],{},[31,139122,139123],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[24,139125,139126,139127,139132],{},"前往 NVIDIA cuDNN 下载页面：",[20318,139128,139131],{"href":139129,"rel":139130},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[43656],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[24,139134,139135],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[24,139137,139138],{},[37,139139],{"alt":39,"src":139140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[24,139142,139143],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[24,139145,139146],{},[37,139147],{"alt":39,"src":139148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[24,139150,139151],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[24,139153,139154],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[24,139156,139157],{},[20234,139158,139159],{},"我这里选择所有Linux X86_64最通用的办法：",[24,139161,139162],{},"下载好的：",[24,139164,139165],{},[37,139166],{"alt":39,"src":139167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[28,139169,139170],{"start":46},[31,139171,139172],{},"安装cuDNN",[24,139174,139175],{},"找到该文件所在目录，并打开终端，cd到该目录。",[24,139177,139178],{},[37,139179],{"alt":39,"src":139180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[24,139182,139183],{},"解压文件，并复制到对应位置完成安装",[146,139185,139187],{"className":137086,"code":139186,"language":137088,"meta":39,"style":39},"# 解压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",[152,139188,139189,139194,139205,139210,139217,139222,139238,139252,139257,139268,139277,139281,139297],{"__ignoreMap":39},[155,139190,139191],{"class":157,"line":158},[155,139192,139193],{"class":161},"# 解压cuDNN文件\n",[155,139195,139196,139199,139202],{"class":157,"line":46},[155,139197,139198],{"class":226},"tar",[155,139200,139201],{"class":263}," -xvf",[155,139203,139204],{"class":732}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[155,139206,139207],{"class":157,"line":121},[155,139208,139209],{"class":161},"# cd进文件夹\n",[155,139211,139212,139214],{"class":157,"line":180},[155,139213,119839],{"class":263},[155,139215,139216],{"class":732}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[155,139218,139219],{"class":157,"line":194},[155,139220,139221],{"class":161},"# 复制cuDNN文件到CUDA目录\n",[155,139223,139224,139226,139228,139231,139233,139236],{"class":157,"line":200},[155,139225,44368],{"class":226},[155,139227,47650],{"class":732},[155,139229,139230],{"class":732}," include\u002Fcudnn",[155,139232,1563],{"class":263},[155,139234,139235],{"class":732},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[155,139237,22551],{"class":171},[155,139239,139240,139242,139244,139247,139249],{"class":157,"line":213},[155,139241,44368],{"class":226},[155,139243,47650],{"class":732},[155,139245,139246],{"class":732}," lib\u002Flibcudnn",[155,139248,1563],{"class":263},[155,139250,139251],{"class":732},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[155,139253,139254],{"class":157,"line":220},[155,139255,139256],{"class":161},"# 对比一下有没有缺文件\n",[155,139258,139259,139261,139264,139266],{"class":157,"line":245},[155,139260,46550],{"class":226},[155,139262,139263],{"class":732}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[155,139265,1563],{"class":263},[155,139267,22551],{"class":171},[155,139269,139270,139272,139275],{"class":157,"line":251},[155,139271,46550],{"class":226},[155,139273,139274],{"class":732}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[155,139276,137811],{"class":263},[155,139278,139279],{"class":157,"line":257},[155,139280,138860],{"class":161},[155,139282,139283,139285,139287,139290,139292,139294],{"class":157,"line":270},[155,139284,44368],{"class":226},[155,139286,44371],{"class":732},[155,139288,139289],{"class":732}," a+r",[155,139291,139263],{"class":732},[155,139293,1563],{"class":263},[155,139295,139296],{"class":171},"   \n",[155,139298,139299,139301,139303,139305,139307],{"class":157,"line":276},[155,139300,44368],{"class":226},[155,139302,44371],{"class":732},[155,139304,139289],{"class":732},[155,139306,139274],{"class":732},[155,139308,137811],{"class":263},[28,139310,139311],{"start":121},[31,139312,139313],{},"检查是否安装成功",[146,139315,139317],{"className":137086,"code":139316,"language":137088,"meta":39,"style":39},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[152,139318,139319,139324],{"__ignoreMap":39},[155,139320,139321],{"class":157,"line":158},[155,139322,139323],{"class":161},"# 检查cuDNN版本命令\n",[155,139325,139326,139329,139332,139334,139336,139339,139342],{"class":157,"line":46},[155,139327,139328],{"class":226},"cat",[155,139330,139331],{"class":732}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[155,139333,44901],{"class":167},[155,139335,50025],{"class":226},[155,139337,139338],{"class":732}," CUDNN_MAJOR",[155,139340,139341],{"class":263}," -A",[155,139343,17350],{"class":263},[24,139345,139346],{},"出现下图这样的就是安装成功了",[24,139348,139349],{},[37,139350],{"alt":39,"src":139351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[28,139353,139354],{"start":180},[31,139355,139356],{},"软链接(一般不需要)",[146,139358,139360],{"className":137086,"code":139359,"language":137088,"meta":39,"style":39},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[152,139361,139362,139367],{"__ignoreMap":39},[155,139363,139364],{"class":157,"line":158},[155,139365,139366],{"class":161},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[155,139368,139369,139371],{"class":157,"line":46},[155,139370,44368],{"class":226},[155,139372,139373],{"class":732}," ldconfig\n",[24,139375,139376],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[146,139378,139383],{"className":139379,"code":139380,"language":139381,"meta":139382,"style":39},"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",[152,139384,139385,139390,139395,139400,139405,139410,139415],{"__ignoreMap":39},[155,139386,139387],{"class":157,"line":158},[155,139388,139389],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[155,139391,139392],{"class":157,"line":46},[155,139393,139394],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[155,139396,139397],{"class":157,"line":121},[155,139398,139399],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[155,139401,139402],{"class":157,"line":180},[155,139403,139404],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[155,139406,139407],{"class":157,"line":194},[155,139408,139409],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[155,139411,139412],{"class":157,"line":200},[155,139413,139414],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[155,139416,139417],{"class":157,"line":213},[155,139418,139419],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[24,139421,139422],{},"运行下方的命令",[146,139424,139426],{"className":137086,"code":139425,"language":137088,"meta":39,"style":39},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[152,139427,139428,139433,139440,139445],{"__ignoreMap":39},[155,139429,139430],{"class":157,"line":158},[155,139431,139432],{"class":161},"# cd进入CUDA路径\n",[155,139434,139435,139437],{"class":157,"line":46},[155,139436,119839],{"class":263},[155,139438,139439],{"class":732}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[155,139441,139442],{"class":157,"line":121},[155,139443,139444],{"class":161}," # 查看本路径下的需要软链接的文件名\n",[155,139446,139447],{"class":157,"line":180},[155,139448,139449],{"class":226}," ls\n",[24,139451,139452],{},[37,139453],{"alt":39,"src":139454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[24,139456,139457,139458,38203,139461,38203,139464,139467],{},"如上图，我需要将",[152,139459,139460],{},"libcudnn_xxx_xxxxx.so.8.9.7",[152,139462,139463],{},"libcudnn_xxx_xxxxx.so.8",[152,139465,139466],{},"libcudnn_xxx_xxxxx.so","软链接",[146,139469,139471],{"className":137086,"code":139470,"language":137088,"meta":39,"style":39},"# 创建符号链接。对于每个 .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",[152,139472,139473,139478,139494,139508,139522,139536,139550,139564,139578,139583,139589,139594],{"__ignoreMap":39},[155,139474,139475],{"class":157,"line":158},[155,139476,139477],{"class":161},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[155,139479,139480,139482,139485,139488,139491],{"class":157,"line":46},[155,139481,44368],{"class":226},[155,139483,139484],{"class":732}," ln",[155,139486,139487],{"class":263}," -sf",[155,139489,139490],{"class":732}," libcudnn_cnn_train.so.8.9.7",[155,139492,139493],{"class":732}," libcudnn_cnn_train.so.8\n",[155,139495,139496,139498,139500,139502,139505],{"class":157,"line":121},[155,139497,44368],{"class":226},[155,139499,139484],{"class":732},[155,139501,139487],{"class":263},[155,139503,139504],{"class":732}," libcudnn_adv_infer.so.8.9.7",[155,139506,139507],{"class":732}," libcudnn_adv_infer.so.8\n",[155,139509,139510,139512,139514,139516,139519],{"class":157,"line":180},[155,139511,44368],{"class":226},[155,139513,139484],{"class":732},[155,139515,139487],{"class":263},[155,139517,139518],{"class":732}," libcudnn_adv_train.so.8.9.7",[155,139520,139521],{"class":732}," libcudnn_adv_train.so.8\n",[155,139523,139524,139526,139528,139530,139533],{"class":157,"line":194},[155,139525,44368],{"class":226},[155,139527,139484],{"class":732},[155,139529,139487],{"class":263},[155,139531,139532],{"class":732}," libcudnn_cnn_infer.so.8.9.7",[155,139534,139535],{"class":732}," libcudnn_cnn_infer.so.8\n",[155,139537,139538,139540,139542,139544,139547],{"class":157,"line":200},[155,139539,44368],{"class":226},[155,139541,139484],{"class":732},[155,139543,139487],{"class":263},[155,139545,139546],{"class":732}," libcudnn.so.8.9.7",[155,139548,139549],{"class":732}," libcudnn.so.8\n",[155,139551,139552,139554,139556,139558,139561],{"class":157,"line":213},[155,139553,44368],{"class":226},[155,139555,139484],{"class":732},[155,139557,139487],{"class":263},[155,139559,139560],{"class":732}," libcudnn_ops_infer.so.8.9.7",[155,139562,139563],{"class":732}," libcudnn_ops_infer.so.8\n",[155,139565,139566,139568,139570,139572,139575],{"class":157,"line":220},[155,139567,44368],{"class":226},[155,139569,139484],{"class":732},[155,139571,139487],{"class":263},[155,139573,139574],{"class":732}," libcudnn_ops_train.so.8.9.7",[155,139576,139577],{"class":732}," libcudnn_ops_train.so.8\n",[155,139579,139580],{"class":157,"line":245},[155,139581,139582],{"class":161},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[155,139584,139585,139587],{"class":157,"line":251},[155,139586,44368],{"class":226},[155,139588,139373],{"class":732},[155,139590,139591],{"class":157,"line":257},[155,139592,139593],{"class":161},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[155,139595,139596,139598,139601,139604,139606,139609],{"class":157,"line":270},[155,139597,46550],{"class":226},[155,139599,139600],{"class":263}," -l",[155,139602,139603],{"class":732}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[155,139605,1563],{"class":263},[155,139607,139608],{"class":732},".so",[155,139610,137811],{"class":263},[14,139612,139614],{"id":139613},"_355-常见问题","3.5.5 常见问题",[28,139616,139617],{},[31,139618,139619],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[146,139621,139623],{"className":137086,"code":139622,"language":137088,"meta":39,"style":39},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[152,139624,139625],{"__ignoreMap":39},[155,139626,139627,139629,139631],{"class":157,"line":158},[155,139628,44368],{"class":226},[155,139630,137146],{"class":732},[155,139632,139633],{"class":732}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[24,139635,139636],{},"blacklist-nouveau.conf文件内容如下：",[146,139638,139640],{"className":137086,"code":139639,"language":137088,"meta":39,"style":39},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[152,139641,139642,139650,139657,139669,139679],{"__ignoreMap":39},[155,139643,139644,139647],{"class":157,"line":158},[155,139645,139646],{"class":226},"blacklist",[155,139648,139649],{"class":732}," nouveau\n",[155,139651,139652,139654],{"class":157,"line":46},[155,139653,139646],{"class":226},[155,139655,139656],{"class":732}," lbm-nouveau\n",[155,139658,139659,139661,139664,139667],{"class":157,"line":121},[155,139660,134493],{"class":226},[155,139662,139663],{"class":732}," nouveau",[155,139665,139666],{"class":732}," modeset=",[155,139668,2103],{"class":263},[155,139670,139671,139674,139676],{"class":157,"line":180},[155,139672,139673],{"class":263},"alias",[155,139675,139663],{"class":732},[155,139677,139678],{"class":732}," off\n",[155,139680,139681,139683,139686],{"class":157,"line":194},[155,139682,139673],{"class":263},[155,139684,139685],{"class":732}," lbm-nouveau",[155,139687,139678],{"class":732},[24,139689,139690],{},"接着运行下方命令",[146,139692,139694],{"className":137086,"code":139693,"language":137088,"meta":39,"style":39},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[152,139695,139696,139706,139711],{"__ignoreMap":39},[155,139697,139698,139700,139703],{"class":157,"line":158},[155,139699,44368],{"class":226},[155,139701,139702],{"class":732}," update-initramfs",[155,139704,139705],{"class":263}," -u\n",[155,139707,139708],{"class":157,"line":46},[155,139709,139710],{"class":226},"或者\n",[155,139712,139713,139715,139718],{"class":157,"line":121},[155,139714,44368],{"class":226},[155,139716,139717],{"class":732}," dracut",[155,139719,139720],{"class":263}," --force\n",[24,139722,139723],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[146,139725,139727],{"className":137086,"code":139726,"language":137088,"meta":39,"style":39},"lsmod | grep nouveau\n",[152,139728,139729],{"__ignoreMap":39},[155,139730,139731,139734,139736,139738],{"class":157,"line":158},[155,139732,139733],{"class":226},"lsmod",[155,139735,44901],{"class":167},[155,139737,50025],{"class":226},[155,139739,139649],{"class":732},[28,139741,139742],{"start":46},[31,139743,139744],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[146,139746,139748],{"className":137086,"code":139747,"language":137088,"meta":39,"style":39},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[152,139749,139750],{"__ignoreMap":39},[155,139751,139752,139754,139756],{"class":157,"line":158},[155,139753,44368],{"class":226},[155,139755,137146],{"class":732},[155,139757,139758],{"class":732}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[24,139760,139761],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[146,139763,139765],{"className":137086,"code":139764,"language":137088,"meta":39,"style":39},"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",[152,139766,139767,139775,139783,139791,139798,139806,139816,139824],{"__ignoreMap":39},[155,139768,139769,139772],{"class":157,"line":158},[155,139770,139771],{"class":226},"Section",[155,139773,139774],{"class":732}," \"OutputClass\"\n",[155,139776,139777,139780],{"class":157,"line":46},[155,139778,139779],{"class":226},"   Identifier",[155,139781,139782],{"class":732}," \"nvidia\"\n",[155,139784,139785,139788],{"class":157,"line":121},[155,139786,139787],{"class":226},"   MatchDriver",[155,139789,139790],{"class":732}," \"nvidia-drm\"\n",[155,139792,139793,139796],{"class":157,"line":180},[155,139794,139795],{"class":226},"   Driver",[155,139797,139782],{"class":732},[155,139799,139800,139803],{"class":157,"line":194},[155,139801,139802],{"class":226},"   Option",[155,139804,139805],{"class":732}," \"AllowEmptyInitialConfiguration\"\n",[155,139807,139808,139810,139813],{"class":157,"line":200},[155,139809,139802],{"class":226},[155,139811,139812],{"class":732}," \"PrimaryGPU\"",[155,139814,139815],{"class":732}," \"yes\"\n",[155,139817,139818,139821],{"class":157,"line":213},[155,139819,139820],{"class":226},"   ModulePath",[155,139822,139823],{"class":732}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[155,139825,139826],{"class":157,"line":220},[155,139827,139828],{"class":226},"EndSection\n",[28,139830,139831],{"start":121},[31,139832,139833],{},"安装N卡驱动提示错误",[146,139835,139837],{"className":139379,"code":139836,"language":139381,"meta":139382,"style":39},"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",[152,139838,139839],{"__ignoreMap":39},[155,139840,139841],{"class":157,"line":158},[155,139842,139836],{},[28,139844,139845],{},[31,139846,139847],{},"检查当前运行的内核版本：",[24,139849,139850],{},"运行以下命令以查看你当前正在使用的内核版本：",[146,139852,139854],{"className":135859,"code":139853,"language":135861,"meta":39,"style":39},"uname -r\n",[152,139855,139856],{"__ignoreMap":39},[155,139857,139858,139860],{"class":157,"line":158},[155,139859,88767],{"class":226},[155,139861,139862],{"class":263}," -r\n",[28,139864,139865],{"start":46},[31,139866,139867],{},"安装内核开发文件：",[24,139869,139870,139871,139874],{},"确保你已经安装了与当前内核版本相匹配的 ",[152,139872,139873],{},"kernel-devel"," 包。运行以下命令来安装：",[146,139876,139878],{"className":135859,"code":139877,"language":135861,"meta":39,"style":39},"sudo dnf install kernel-devel-$(uname -r)\n",[152,139879,139880],{"__ignoreMap":39},[155,139881,139882,139884,139886,139888,139891,139893,139895,139897],{"class":157,"line":158},[155,139883,44368],{"class":226},[155,139885,46104],{"class":732},[155,139887,43625],{"class":732},[155,139889,139890],{"class":732}," kernel-devel-",[155,139892,44891],{"class":171},[155,139894,88767],{"class":226},[155,139896,138202],{"class":263},[155,139898,363],{"class":171},[24,139900,139901],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[28,139903,139904],{"start":121},[31,139905,139906],{},"安装内核源代码（如果需要）：",[24,139908,139909],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[146,139911,139913],{"className":135859,"code":139912,"language":135861,"meta":39,"style":39},"sudo dnf install kernel-headers kernel-source\n",[152,139914,139915],{"__ignoreMap":39},[155,139916,139917,139919,139921,139923,139926],{"class":157,"line":158},[155,139918,44368],{"class":226},[155,139920,46104],{"class":732},[155,139922,43625],{"class":732},[155,139924,139925],{"class":732}," kernel-headers",[155,139927,139928],{"class":732}," kernel-source\n",[28,139930,139931],{"start":180},[31,139932,139933],{},"检查安装：",[24,139935,139936,139937,139940],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[152,139938,139939],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[146,139942,139944],{"className":135859,"code":139943,"language":135861,"meta":39,"style":39},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[152,139945,139946],{"__ignoreMap":39},[155,139947,139948,139950],{"class":157,"line":158},[155,139949,46550],{"class":226},[155,139951,139952],{"class":732}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[24,139954,139955,139956,139959],{},"如果仍然遇到问题，可以通过 ",[152,139957,139958],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[20011,139961,139962],{},"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":39,"searchDepth":46,"depth":46,"links":139964},[139965,139969,139979,139983,139984],{"id":137062,"depth":46,"text":137063,"children":139966},[139967,139968],{"id":137072,"depth":121,"text":137073},{"id":137082,"depth":121,"text":137083},{"id":137282,"depth":46,"text":137283,"children":139970},[139971,139972,139973,139974,139975,139976,139977,139978],{"id":137286,"depth":121,"text":137287},{"id":137356,"depth":121,"text":137357},{"id":137445,"depth":121,"text":137446},{"id":137690,"depth":121,"text":137691},{"id":137760,"depth":121,"text":137761},{"id":137827,"depth":121,"text":137828},{"id":137862,"depth":121,"text":137863},{"id":137917,"depth":121,"text":137918},{"id":137968,"depth":46,"text":137969,"children":139980},[139981,139982],{"id":137972,"depth":121,"text":137973},{"id":138052,"depth":121,"text":138053},{"id":138238,"depth":46,"text":138239},{"id":138411,"depth":46,"text":138412,"children":139985},[139986,139987,139988,139989,139990],{"id":138415,"depth":121,"text":138416},{"id":138456,"depth":121,"text":138457},{"id":138743,"depth":121,"text":138744},{"id":139117,"depth":121,"text":139118},{"id":139613,"depth":121,"text":139614},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":137054,"description":20020},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":139997,"title":139998,"body":139999,"description":20020,"extension":20021,"meta":140339,"navigation":216,"path":140340,"seo":140341,"stem":140342,"__hash__":140343},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":140000,"toc":140337},[140001,140004,140009,140012,140258,140263,140266,140302,140305,140334],[10,140002,139998],{"id":140003},"_4-命令教程长期积累",[28,140005,140006],{},[31,140007,140008],{},"大多数命令",[24,140010,140011],{},"常用 Linux 命令速查：",[146,140013,140015],{"className":135859,"code":140014,"language":135861,"meta":39,"style":39},"# 文件与目录\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",[152,140016,140017,140022,140029,140036,140044,140051,140058,140066,140074,140081,140088,140096,140100,140105,140112,140120,140127,140131,140136,140143,140151,140159,140167,140175,140179,140184,140192,140199,140206,140214,140222,140226,140231,140240,140249],{"__ignoreMap":39},[155,140018,140019],{"class":157,"line":158},[155,140020,140021],{"class":161},"# 文件与目录\n",[155,140023,140024,140026],{"class":157,"line":46},[155,140025,46550],{"class":226},[155,140027,140028],{"class":161},"        # 列出目录内容\n",[155,140030,140031,140033],{"class":157,"line":121},[155,140032,119839],{"class":263},[155,140034,140035],{"class":161},"        # 切换目录\n",[155,140037,140038,140041],{"class":157,"line":180},[155,140039,140040],{"class":263},"pwd",[155,140042,140043],{"class":161},"       # 显示当前路径\n",[155,140045,140046,140048],{"class":157,"line":194},[155,140047,119829],{"class":226},[155,140049,140050],{"class":161},"     # 创建目录\n",[155,140052,140053,140055],{"class":157,"line":200},[155,140054,45112],{"class":226},[155,140056,140057],{"class":161},"        # 删除文件或目录\n",[155,140059,140060,140063],{"class":157,"line":213},[155,140061,140062],{"class":226},"cp",[155,140064,140065],{"class":161},"        # 复制文件或目录\n",[155,140067,140068,140071],{"class":157,"line":220},[155,140069,140070],{"class":226},"mv",[155,140072,140073],{"class":161},"        # 移动\u002F重命名文件或目录\n",[155,140075,140076,140078],{"class":157,"line":245},[155,140077,119846],{"class":226},[155,140079,140080],{"class":161},"     # 创建空文件\n",[155,140082,140083,140085],{"class":157,"line":251},[155,140084,139328],{"class":226},[155,140086,140087],{"class":161},"       # 查看文件内容\n",[155,140089,140090,140093],{"class":157,"line":257},[155,140091,140092],{"class":226},"head\u002Ftail",[155,140094,140095],{"class":161}," # 查看文件头部\u002F尾部\n",[155,140097,140098],{"class":157,"line":270},[155,140099,217],{"emptyLinePlaceholder":216},[155,140101,140102],{"class":157,"line":276},[155,140103,140104],{"class":161},"# 权限管理\n",[155,140106,140107,140109],{"class":157,"line":297},[155,140108,44403],{"class":226},[155,140110,140111],{"class":161},"     # 修改文件权限\n",[155,140113,140114,140117],{"class":157,"line":302},[155,140115,140116],{"class":226},"chown",[155,140118,140119],{"class":161},"     # 修改文件所有者\n",[155,140121,140122,140124],{"class":157,"line":308},[155,140123,44368],{"class":226},[155,140125,140126],{"class":161},"      # 以管理员身份执行\n",[155,140128,140129],{"class":157,"line":366},[155,140130,217],{"emptyLinePlaceholder":216},[155,140132,140133],{"class":157,"line":379},[155,140134,140135],{"class":161},"# 系统信息\n",[155,140137,140138,140140],{"class":157,"line":385},[155,140139,88767],{"class":226},[155,140141,140142],{"class":161},"     # 系统信息\n",[155,140144,140145,140148],{"class":157,"line":415},[155,140146,140147],{"class":226},"df",[155,140149,140150],{"class":161},"        # 磁盘使用情况\n",[155,140152,140153,140156],{"class":157,"line":452},[155,140154,140155],{"class":226},"free",[155,140157,140158],{"class":161},"      # 内存使用情况\n",[155,140160,140161,140164],{"class":157,"line":480},[155,140162,140163],{"class":226},"top\u002Fhtop",[155,140165,140166],{"class":161},"  # 进程监控\n",[155,140168,140169,140172],{"class":157,"line":486},[155,140170,140171],{"class":226},"ps",[155,140173,140174],{"class":161},"        # 查看进程\n",[155,140176,140177],{"class":157,"line":499},[155,140178,217],{"emptyLinePlaceholder":216},[155,140180,140181],{"class":157,"line":505},[155,140182,140183],{"class":161},"# 网络\n",[155,140185,140186,140189],{"class":157,"line":528},[155,140187,140188],{"class":226},"ping",[155,140190,140191],{"class":161},"      # 测试网络连通性\n",[155,140193,140194,140196],{"class":157,"line":549},[155,140195,46638],{"class":226},[155,140197,140198],{"class":161},"      # 发送 HTTP 请求\n",[155,140200,140201,140203],{"class":157,"line":570},[155,140202,138852],{"class":226},[155,140204,140205],{"class":161},"      # 下载文件\n",[155,140207,140208,140211],{"class":157,"line":575},[155,140209,140210],{"class":226},"ssh",[155,140212,140213],{"class":161},"       # 远程登录\n",[155,140215,140216,140219],{"class":157,"line":581},[155,140217,140218],{"class":226},"scp",[155,140220,140221],{"class":161},"       # 远程文件传输\n",[155,140223,140224],{"class":157,"line":592},[155,140225,217],{"emptyLinePlaceholder":216},[155,140227,140228],{"class":157,"line":610},[155,140229,140230],{"class":161},"# 包管理（Debian\u002FUbuntu）\n",[155,140232,140233,140235,140237],{"class":157,"line":622},[155,140234,135931],{"class":226},[155,140236,135910],{"class":732},[155,140238,140239],{"class":161},"   # 更新软件源\n",[155,140241,140242,140244,140246],{"class":157,"line":638},[155,140243,135931],{"class":226},[155,140245,43625],{"class":732},[155,140247,140248],{"class":161},"  # 安装软件包\n",[155,140250,140251,140253,140255],{"class":157,"line":650},[155,140252,135931],{"class":226},[155,140254,45868],{"class":732},[155,140256,140257],{"class":161},"   # 卸载软件包\n",[28,140259,140260],{"start":46},[31,140261,140262],{},"KDE Dolphin 以root打开",[24,140264,140265],{},"kde5",[146,140267,140269],{"className":135859,"code":140268,"language":135861,"meta":39,"style":39},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[152,140270,140271],{"__ignoreMap":39},[155,140272,140273,140276,140279,140282,140284,140286,140289,140292,140294,140297,140299],{"class":157,"line":158},[155,140274,140275],{"class":226},"pkexec",[155,140277,140278],{"class":732}," env",[155,140280,140281],{"class":732}," DISPLAY=",[155,140283,47932],{"class":171},[155,140285,47990],{"class":732},[155,140287,140288],{"class":171},"$XAUTHORITY ",[155,140290,140291],{"class":732},"KDE_SESSION_VERSION=",[155,140293,350],{"class":263},[155,140295,140296],{"class":732}," KDE_FULL_SESSION=",[155,140298,21275],{"class":263},[155,140300,140301],{"class":732}," dolphin\n",[24,140303,140304],{},"kde6",[146,140306,140308],{"className":135859,"code":140307,"language":135861,"meta":39,"style":39},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[152,140309,140310],{"__ignoreMap":39},[155,140311,140312,140314,140316,140318,140320,140322,140324,140326,140328,140330,140332],{"class":157,"line":158},[155,140313,140275],{"class":226},[155,140315,140278],{"class":732},[155,140317,140281],{"class":732},[155,140319,47932],{"class":171},[155,140321,47990],{"class":732},[155,140323,140288],{"class":171},[155,140325,140291],{"class":732},[155,140327,340],{"class":263},[155,140329,140296],{"class":732},[155,140331,21275],{"class":263},[155,140333,140301],{"class":732},[20011,140335,140336],{},"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":39,"searchDepth":46,"depth":46,"links":140338},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":139998,"description":20020},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":140345,"title":140346,"body":140347,"description":20020,"extension":20021,"meta":140361,"navigation":216,"path":140362,"seo":140363,"stem":140364,"__hash__":140365},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":140348,"toc":140359},[140349,140352],[10,140350,140346],{"id":140351},"_5-各种环境配置",[24,140353,140354],{},[20318,140355,140358],{"href":140356,"rel":140357},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[43656],"电控组环境搭建大全",{"title":39,"searchDepth":46,"depth":46,"links":140360},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":140346,"description":20020},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":140367,"title":140368,"body":140369,"description":20020,"extension":20021,"meta":140717,"navigation":216,"path":140718,"seo":140719,"stem":140720,"__hash__":140721},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":140370,"toc":140709},[140371,140374,140378,140382,140386,140391,140398,140402,140695,140699,140706],[10,140372,140368],{"id":140373},"_6-拓展功能",[20037,140375,140377],{"id":140376},"_61-wine","6.1 Wine",[20037,140379,140381],{"id":140380},"_62-android","6.2 Android",[14,140383,140385],{"id":140384},"_621-i卡a卡","6.2.1 I卡、A卡",[28,140387,140388],{},[31,140389,140390],{},"Wayland-Waydroid(体验超级好)",[24,140392,140393,140394],{},"Waydroid 官网与安装指南：",[20318,140395,140396],{"href":140396,"rel":140397},"https:\u002F\u002Fwaydro.id\u002F",[43656],[14,140399,140401],{"id":140400},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[28,140403,140404],{},[31,140405,140406,140407,140409,140410,140414,140416,140419,140424,140621],{},"QEMU-KVM虚拟机 + BlissOS-X86",[72279,140408],{},"BlissOS 官网下载：",[20318,140411,140412],{"href":140412,"rel":140413},"https:\u002F\u002Fblissos.org\u002F",[43656],[72279,140415],{},[37,140417],{"alt":39,"src":140418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[28,140420,140421],{"start":121},[31,140422,140423],{},"比较推荐的配置",[146,140425,140427],{"className":135859,"code":140426,"language":135861,"meta":39,"style":39},"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",[152,140428,140429,140436,140446,140456,140466,140478,140488,140495,140505,140514,140523,140533,140543,140552,140562,140572,140584,140594,140603,140613],{"__ignoreMap":39},[155,140430,140431,140434],{"class":157,"line":158},[155,140432,140433],{"class":226},"qemu-system-x86_64",[155,140435,44470],{"class":263},[155,140437,140438,140441,140444],{"class":157,"line":46},[155,140439,140440],{"class":263},"        -M",[155,140442,140443],{"class":732}," q35,vmport=off",[155,140445,44470],{"class":263},[155,140447,140448,140451,140454],{"class":157,"line":121},[155,140449,140450],{"class":263},"        -accel",[155,140452,140453],{"class":732}," kvm",[155,140455,44470],{"class":263},[155,140457,140458,140461,140464],{"class":157,"line":180},[155,140459,140460],{"class":263},"        -cpu",[155,140462,140463],{"class":732}," qemu64,+sse3,+sse4.2",[155,140465,44470],{"class":263},[155,140467,140468,140471,140474,140476],{"class":157,"line":194},[155,140469,140470],{"class":263},"        -smp",[155,140472,140473],{"class":732}," 8,cores=",[155,140475,1264],{"class":263},[155,140477,44470],{"class":263},[155,140479,140480,140483,140486],{"class":157,"line":200},[155,140481,140482],{"class":263},"        -m",[155,140484,140485],{"class":732}," 6G",[155,140487,44470],{"class":263},[155,140489,140490,140493],{"class":157,"line":213},[155,140491,140492],{"class":263},"        -usb",[155,140494,44470],{"class":263},[155,140496,140497,140500,140503],{"class":157,"line":220},[155,140498,140499],{"class":263},"        -device",[155,140501,140502],{"class":732}," virtio-tablet",[155,140504,44470],{"class":263},[155,140506,140507,140509,140512],{"class":157,"line":245},[155,140508,140499],{"class":263},[155,140510,140511],{"class":732}," virtio-keyboard",[155,140513,44470],{"class":263},[155,140515,140516,140518,140521],{"class":157,"line":251},[155,140517,140499],{"class":263},[155,140519,140520],{"class":732}," usb-tablet",[155,140522,44470],{"class":263},[155,140524,140525,140528,140531],{"class":157,"line":257},[155,140526,140527],{"class":263},"        -bios",[155,140529,140530],{"class":732}," OVMF-pure-efi64.fd",[155,140532,44470],{"class":263},[155,140534,140535,140538,140541],{"class":157,"line":270},[155,140536,140537],{"class":263},"        -net",[155,140539,140540],{"class":732}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[155,140542,44470],{"class":263},[155,140544,140545,140547,140550],{"class":157,"line":276},[155,140546,140537],{"class":263},[155,140548,140549],{"class":732}," nic,model=virtio",[155,140551,44470],{"class":263},[155,140553,140554,140557,140560],{"class":157,"line":297},[155,140555,140556],{"class":263},"        -audio",[155,140558,140559],{"class":732}," sdl,model=hda",[155,140561,44470],{"class":263},[155,140563,140564,140567,140570],{"class":157,"line":302},[155,140565,140566],{"class":263},"        -display",[155,140568,140569],{"class":732}," sdl,gl=on,show-cursor=on",[155,140571,44470],{"class":263},[155,140573,140574,140576,140579,140582],{"class":157,"line":308},[155,140575,140499],{"class":263},[155,140577,140578],{"class":732}," virtio-vga-gl,xres=1920,yres=",[155,140580,140581],{"class":263},"1080",[155,140583,44470],{"class":263},[155,140585,140586,140589,140592],{"class":157,"line":366},[155,140587,140588],{"class":263},"        -drive",[155,140590,140591],{"class":732}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[155,140593,44470],{"class":263},[155,140595,140596,140598,140601],{"class":157,"line":379},[155,140597,140588],{"class":263},[155,140599,140600],{"class":732}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[155,140602,44470],{"class":263},[155,140604,140605,140608,140611],{"class":157,"line":385},[155,140606,140607],{"class":263},"        -monitor",[155,140609,140610],{"class":732}," stdio",[155,140612,44470],{"class":263},[155,140614,140615,140618],{"class":157,"line":415},[155,140616,140617],{"class":263},"        -serial",[155,140619,140620],{"class":732}," none\n",[28,140622,140623],{"start":194},[31,140624,140625,140626],{},"常用操作：",[28,140627,140628,140631,140687],{},[31,140629,140630],{},"全屏：Ctrl+Alt+F",[31,140632,140633,140634,140639],{},"adb调试",[28,140635,140636],{},[31,140637,140638],{},"使Linux与Android用ADB连接。",[146,140640,140642],{"className":135859,"code":140641,"language":135861,"meta":39,"style":39},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[152,140643,140644,140649,140660,140665,140677,140682],{"__ignoreMap":39},[155,140645,140646],{"class":157,"line":158},[155,140647,140648],{"class":161},"# 连接安卓\n",[155,140650,140651,140654,140657],{"class":157,"line":46},[155,140652,140653],{"class":226},"adb",[155,140655,140656],{"class":732}," connect",[155,140658,140659],{"class":263}," 127.0.0.1\n",[155,140661,140662],{"class":157,"line":121},[155,140663,140664],{"class":161},"# 打开shell\n",[155,140666,140667,140669,140671,140674],{"class":157,"line":180},[155,140668,140653],{"class":226},[155,140670,46672],{"class":263},[155,140672,140673],{"class":732}," 127.0.0.1:5555",[155,140675,140676],{"class":732}," shell\n",[155,140678,140679],{"class":157,"line":194},[155,140680,140681],{"class":161},"# 使用root权限\n",[155,140683,140684],{"class":157,"line":200},[155,140685,140686],{"class":226},"su\n",[31,140688,140689,140690],{},"中文输入法",[28,140691,140692],{},[31,140693,140694],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[20037,140696,140698],{"id":140697},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[24,140700,140701,140702],{},"rEFInd 官网与文档：",[20318,140703,140704],{"href":140704,"rel":140705},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[43656],[20011,140707,140708],{},"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":39,"searchDepth":46,"depth":46,"links":140710},[140711,140712,140716],{"id":140376,"depth":46,"text":140377},{"id":140380,"depth":46,"text":140381,"children":140713},[140714,140715],{"id":140384,"depth":121,"text":140385},{"id":140400,"depth":121,"text":140401},{"id":140697,"depth":46,"text":140698},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":140368,"description":20020},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":140723,"title":140724,"body":140725,"description":20020,"extension":20021,"meta":144024,"navigation":216,"path":144025,"seo":144026,"stem":144027,"__hash__":144028},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":140726,"toc":143998},[140727,140730,140734,140737,140744,140994,140997,141069,141072,141076,141080,141085,141088,141091,141094,141099,141102,141105,141108,141113,141116,141121,141124,141127,141132,141135,141140,141143,141147,141151,141154,141159,141162,141176,141179,141182,141191,141194,141203,141206,141209,141218,141221,141230,141233,141236,141245,141248,141251,141266,141269,141272,141281,141286,141289,141292,141301,141304,141313,141316,141325,141328,141337,141342,141345,141353,141358,141361,141370,141373,141381,141386,141389,141398,141401,141404,141408,141411,141416,141419,141424,141438,141443,141448,141459,141464,141470,141475,141490,141495,141498,141503,141508,141513,141521,141526,141533,141538,141549,141554,141557,141561,141564,141567,141572,141575,141594,141599,141602,141611,141616,141619,141641,141644,141674,141677,141682,141685,141699,141704,141723,141726,141729,141734,141746,141751,141756,141759,141764,141767,141782,141785,141790,141795,141799,141804,141844,141847,141851,141857,141863,141868,141871,141878,141883,141890,141893,141896,141903,141917,141920,141980,141983,141997,142009,142012,142015,142018,142082,142085,142088,142091,142111,142114,142119,142126,142130,142133,142137,142142,142147,142151,142154,142157,142199,142204,142207,142229,142244,142246,142251,142263,142323,142325,142327,142381,142383,142385,142391,142396,142399,142404,142408,142411,142473,142478,142481,142483,142487,142499,142581,142583,142585,142639,142645,142647,142651,142656,142658,142663,142667,142687,142722,142726,142729,142732,142735,142742,142745,142757,142760,142775,142778,142797,142845,142848,142865,142868,142882,142887,142890,142899,142914,142926,142964,142969,142978,142983,142988,143014,143023,143027,143031,143036,143039,143043,143047,143052,143055,143060,143063,143068,143071,143076,143079,143083,143088,143091,143096,143099,143103,143108,143111,143116,143119,143124,143127,143131,143136,143139,143144,143147,143152,143155,143159,143164,143167,143172,143175,143180,143183,143188,143191,143196,143199,143204,143207,143211,143216,143219,143224,143231,143235,143240,143243,143248,143251,143255,143260,143263,143266,143269,143272,143275,143279,143282,143292,143297,143302,143324,143329,143334,143341,143345,143350,143353,143356,143361,143364,143367,143370,143373,143376,143379,143382,143385,143388,143391,143394,143397,143402,143407,143412,143417,143422,143427,143432,143435,143439,143442,143446,143451,143456,143461,143466,143470,143476,143484,143489,143492,143497,143512,143515,143520,143554,143569,143572,143627,143653,143665,143668,143677,143680,143695,143700,143703,143709,143714,143717,143722,143725,143730,143735,143742,143745,143760,143763,143798,143803,143811,143849,143852,143855,143860,143863,143868,143879,143913,143918,143921,143930,143935,143941,143944,143949,143958,143963,143966,143969,143974,143982,143985,143990,143995],[10,140728,140724],{"id":140729},"_7-其他操作",[20037,140731,140733],{"id":140732},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[24,140735,140736],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[24,140738,140739,140740,140743],{},"进入工控机的硬盘目录，进入",[152,140741,140742],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[146,140745,140749],{"className":140746,"code":140747,"language":140748,"meta":39,"style":39},"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",[152,140750,140751,140759,140770,140777,140784,140796,140803,140815,140826,140837,140844,140851,140858,140870,140882,140889,140901,140913,140920,140932,140944,140956,140967,140974,140985],{"__ignoreMap":39},[155,140752,140753,140756],{"class":157,"line":158},[155,140754,140755],{"class":69863},"network",[155,140757,140758],{"class":171},": \n",[155,140760,140761,140764,140766,140768],{"class":157,"line":46},[155,140762,140763],{"class":69863},"  version",[155,140765,70000],{"class":171},[155,140767,360],{"class":263},[155,140769,22551],{"class":171},[155,140771,140772,140775],{"class":157,"line":121},[155,140773,140774],{"class":69863},"  wifis",[155,140776,140758],{"class":171},[155,140778,140779,140782],{"class":157,"line":180},[155,140780,140781],{"class":69863},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[155,140783,140758],{"class":171},[155,140785,140786,140789,140791,140794],{"class":157,"line":194},[155,140787,140788],{"class":69863},"      renderer",[155,140790,70000],{"class":171},[155,140792,140793],{"class":732},"NetworkManager",[155,140795,22551],{"class":171},[155,140797,140798,140801],{"class":157,"line":200},[155,140799,140800],{"class":69863},"      match",[155,140802,140758],{"class":171},[155,140804,140805,140808,140810,140813],{"class":157,"line":213},[155,140806,140807],{"class":69863},"        name",[155,140809,70000],{"class":171},[155,140811,140812],{"class":732},"\"wlan0\"",[155,140814,22551],{"class":171},[155,140816,140817,140820,140822,140824],{"class":157,"line":220},[155,140818,140819],{"class":69863},"      dhcp4",[155,140821,70000],{"class":171},[155,140823,21275],{"class":263},[155,140825,22551],{"class":171},[155,140827,140828,140831,140833,140835],{"class":157,"line":245},[155,140829,140830],{"class":69863},"      dhcp6",[155,140832,70000],{"class":171},[155,140834,21275],{"class":263},[155,140836,22551],{"class":171},[155,140838,140839,140842],{"class":157,"line":251},[155,140840,140841],{"class":69863},"      access-points",[155,140843,140758],{"class":171},[155,140845,140846,140849],{"class":157,"line":257},[155,140847,140848],{"class":732},"        \"EMIS_Vinci_Robocon_5G\"",[155,140850,140758],{"class":171},[155,140852,140853,140856],{"class":157,"line":270},[155,140854,140855],{"class":69863},"          auth",[155,140857,140758],{"class":171},[155,140859,140860,140863,140865,140868],{"class":157,"line":276},[155,140861,140862],{"class":69863},"            key-management",[155,140864,70000],{"class":171},[155,140866,140867],{"class":732},"\"psk\"",[155,140869,22551],{"class":171},[155,140871,140872,140875,140877,140880],{"class":157,"line":297},[155,140873,140874],{"class":69863},"            password",[155,140876,70000],{"class":171},[155,140878,140879],{"class":732},"\"vinci666\"",[155,140881,22551],{"class":171},[155,140883,140884,140887],{"class":157,"line":302},[155,140885,140886],{"class":69863},"          networkmanager",[155,140888,140758],{"class":171},[155,140890,140891,140894,140896,140899],{"class":157,"line":308},[155,140892,140893],{"class":69863},"            uuid",[155,140895,70000],{"class":171},[155,140897,140898],{"class":732},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[155,140900,22551],{"class":171},[155,140902,140903,140906,140908,140911],{"class":157,"line":366},[155,140904,140905],{"class":69863},"            name",[155,140907,70000],{"class":171},[155,140909,140910],{"class":732},"\"EMIS_Vinci_Robocon_5G\"",[155,140912,22551],{"class":171},[155,140914,140915,140918],{"class":157,"line":379},[155,140916,140917],{"class":69863},"            passthrough",[155,140919,140758],{"class":171},[155,140921,140922,140925,140927,140930],{"class":157,"line":385},[155,140923,140924],{"class":69863},"              wifi-security.auth-alg",[155,140926,70000],{"class":171},[155,140928,140929],{"class":732},"\"open\"",[155,140931,22551],{"class":171},[155,140933,140934,140937,140939,140942],{"class":157,"line":415},[155,140935,140936],{"class":69863},"              ipv6.addr-gen-mode",[155,140938,70000],{"class":171},[155,140940,140941],{"class":732},"\"default\"",[155,140943,22551],{"class":171},[155,140945,140946,140949,140951,140954],{"class":157,"line":452},[155,140947,140948],{"class":69863},"              ipv6.ip6-privacy",[155,140950,70000],{"class":171},[155,140952,140953],{"class":732},"\"-1\"",[155,140955,22551],{"class":171},[155,140957,140958,140961,140963,140965],{"class":157,"line":480},[155,140959,140960],{"class":69863},"              proxy._",[155,140962,70000],{"class":171},[155,140964,15430],{"class":732},[155,140966,22551],{"class":171},[155,140968,140969,140972],{"class":157,"line":486},[155,140970,140971],{"class":69863},"      networkmanager",[155,140973,140758],{"class":171},[155,140975,140976,140979,140981,140983],{"class":157,"line":499},[155,140977,140978],{"class":69863},"        uuid",[155,140980,70000],{"class":171},[155,140982,140898],{"class":732},[155,140984,22551],{"class":171},[155,140986,140987,140989,140991],{"class":157,"line":505},[155,140988,140807],{"class":69863},[155,140990,70000],{"class":171},[155,140992,140993],{"class":732},"\"EMIS_Vinci_Robocon_5G\"\n",[24,140995,140996],{},"将其改为新wifi的名和密码：",[146,140998,141000],{"className":140746,"code":140999,"language":140748,"meta":39,"style":39},"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",[152,141001,141002,141008,141017,141023,141030,141039,141047,141053,141059],{"__ignoreMap":39},[155,141003,141004,141006],{"class":157,"line":158},[155,141005,140755],{"class":69863},[155,141007,736],{"class":171},[155,141009,141010,141012,141014],{"class":157,"line":46},[155,141011,140763],{"class":69863},[155,141013,70000],{"class":171},[155,141015,141016],{"class":263},"2\n",[155,141018,141019,141021],{"class":157,"line":121},[155,141020,140774],{"class":69863},[155,141022,736],{"class":171},[155,141024,141025,141028],{"class":157,"line":180},[155,141026,141027],{"class":69863},"    wlan0",[155,141029,736],{"class":171},[155,141031,141032,141034,141036],{"class":157,"line":194},[155,141033,140819],{"class":69863},[155,141035,70000],{"class":171},[155,141037,141038],{"class":263},"true\n",[155,141040,141041,141043,141045],{"class":157,"line":200},[155,141042,140830],{"class":69863},[155,141044,70000],{"class":171},[155,141046,141038],{"class":263},[155,141048,141049,141051],{"class":157,"line":213},[155,141050,140841],{"class":69863},[155,141052,736],{"class":171},[155,141054,141055,141057],{"class":157,"line":220},[155,141056,140848],{"class":732},[155,141058,736],{"class":171},[155,141060,141061,141064,141066],{"class":157,"line":245},[155,141062,141063],{"class":69863},"          password",[155,141065,70000],{"class":171},[155,141067,141068],{"class":732},"\"vinci666\"\n",[24,141070,141071],{},"工控机开机即可连上网。",[20037,141073,141075],{"id":141074},"_72-ssh远程开发","7.2 SSH远程开发",[14,141077,141079],{"id":141078},"_721-环境准备","7.2.1 环境准备",[24,141081,141082],{},[20234,141083,141084],{},"1.硬件准备",[24,141086,141087],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[24,141089,141090],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[24,141092,141093],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[24,141095,141096],{},[20234,141097,141098],{},"2.设置固定IP",[24,141100,141101],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[24,141103,141104],{},"1.进入设置界面",[24,141106,141107],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[24,141109,141110],{},[37,141111],{"alt":39,"src":141112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[24,141114,141115],{},"2.配置所连接的网络",[24,141117,141118],{},[37,141119],{"alt":39,"src":141120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[24,141122,141123],{},"3.设置固定IP",[24,141125,141126],{},"查看当前IP地址。",[24,141128,141129],{},[37,141130],{"alt":39,"src":141131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[24,141133,141134],{},"设置固定IP。",[24,141136,141137],{},[37,141138],{"alt":39,"src":141139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[24,141141,141142],{},"至此，IP配置完毕。",[14,141144,141146],{"id":141145},"_722-环境搭建","7.2.2 环境搭建",[24,141148,141149],{},[20234,141150,45543],{},[24,141152,141153],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[24,141155,141156],{},[20234,141157,141158],{},"实现",[24,141160,141161],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[28,141163,141164,141167,141170,141173],{},[31,141165,141166],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[31,141168,141169],{},"远程主机启动SSH服务；",[31,141171,141172],{},"本地主机登陆远程主机；",[31,141174,141175],{},"实现数据传输。",[24,141177,141178],{},"1.安装SSH客户端与服务端",[24,141180,141181],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[146,141183,141185],{"className":139379,"code":141184,"language":139381,"meta":139382,"style":39}," sudo apt install openssh-server\n",[152,141186,141187],{"__ignoreMap":39},[155,141188,141189],{"class":157,"line":158},[155,141190,141184],{},[24,141192,141193],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[146,141195,141197],{"className":139379,"code":141196,"language":139381,"meta":139382,"style":39},"sudo apt install openssh-client\n",[152,141198,141199],{"__ignoreMap":39},[155,141200,141201],{"class":157,"line":158},[155,141202,141196],{},[24,141204,141205],{},"2.远程主机启动SSH服务",[24,141207,141208],{},"远程主机启动 ssh 服务命令如下：",[146,141210,141212],{"className":139379,"code":141211,"language":139381,"meta":139382,"style":39},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[152,141213,141214],{"__ignoreMap":39},[155,141215,141216],{"class":157,"line":158},[155,141217,141211],{},[24,141219,141220],{},"启动后可使用如下命令查看服务是否正常运行：",[146,141222,141224],{"className":139379,"code":141223,"language":139381,"meta":139382,"style":39},"ps -e | grep ssh\n",[152,141225,141226],{"__ignoreMap":39},[155,141227,141228],{"class":157,"line":158},[155,141229,141223],{},[24,141231,141232],{},"如果启动成功，会包含 sshd 程序。",[24,141234,141235],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[146,141237,141239],{"className":139379,"code":141238,"language":139381,"meta":139382,"style":39},"sudo systemctl enable ssh\n",[152,141240,141241],{"__ignoreMap":39},[155,141242,141243],{"class":157,"line":158},[155,141244,141238],{},[24,141246,141247],{},"3.本地远程登录",[24,141249,141250],{},"登录远程主机可以调用如下命令:",[146,141252,141254],{"className":135859,"code":141253,"language":135861,"meta":39,"style":39},"ssh -X 用户名@ip地址\n",[152,141255,141256],{"__ignoreMap":39},[155,141257,141258,141260,141263],{"class":157,"line":158},[155,141259,140210],{"class":226},[155,141261,141262],{"class":263}," -X",[155,141264,141265],{"class":732}," 用户名@ip地址\n",[24,141267,141268],{},"然后根据提示，录入登陆密码，即可成功登录。",[24,141270,141271],{},"如果退出，可以调用exit命令：",[146,141273,141275],{"className":139379,"code":141274,"language":139381,"meta":139382,"style":39},"exit\n",[152,141276,141277],{"__ignoreMap":39},[155,141278,141279],{"class":157,"line":158},[155,141280,141274],{},[24,141282,141283],{},[20234,141284,141285],{},"4.实现数据传输",[24,141287,141288],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[24,141290,141291],{},"上传文件指令格式如下：",[146,141293,141295],{"className":139379,"code":141294,"language":139381,"meta":139382,"style":39},"scp 本地文件路径 账号@ip:路径\n",[152,141296,141297],{"__ignoreMap":39},[155,141298,141299],{"class":157,"line":158},[155,141300,141294],{},[24,141302,141303],{},"上传文件夹指令格式如下：",[146,141305,141307],{"className":139379,"code":141306,"language":139381,"meta":139382,"style":39},"scp -r 本地文件夹路径 账号@ip:路径\n",[152,141308,141309],{"__ignoreMap":39},[155,141310,141311],{"class":157,"line":158},[155,141312,141306],{},[24,141314,141315],{},"下载文件指令格式如下：",[146,141317,141319],{"className":139379,"code":141318,"language":139381,"meta":139382,"style":39},"scp 账号@ip:路径 本地文件夹路径\n",[152,141320,141321],{"__ignoreMap":39},[155,141322,141323],{"class":157,"line":158},[155,141324,141318],{},[24,141326,141327],{},"下载文件夹指令格式如下：",[146,141329,141331],{"className":139379,"code":141330,"language":139381,"meta":139382,"style":39},"scp -r 账号@ip:路径 本地文件夹路径\n",[152,141332,141333],{"__ignoreMap":39},[155,141334,141335],{"class":157,"line":158},[155,141336,141330],{},[24,141338,141339],{},[20234,141340,141341],{},"优化",[24,141343,141344],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[28,141346,141347,141350],{},[31,141348,141349],{},"本地生成密钥对；",[31,141351,141352],{},"将公钥上传至远程主机。",[24,141354,141355],{},[20234,141356,141357],{},"1.生成密钥对",[24,141359,141360],{},"本地客户端生成公私钥：（一路回车默认即可）",[146,141362,141364],{"className":139379,"code":141363,"language":139381,"meta":139382,"style":39},"ssh-keygen\n",[152,141365,141366],{"__ignoreMap":39},[155,141367,141368],{"class":157,"line":158},[155,141369,141363],{},[24,141371,141372],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[28,141374,141375,141378],{},[31,141376,141377],{},"id_rsa （私钥）；",[31,141379,141380],{},"id_rsa.pub (公钥)。",[24,141382,141383],{},[20234,141384,141385],{},"2.公钥上传",[24,141387,141388],{},"上传指令如下：",[146,141390,141392],{"className":139379,"code":141391,"language":139381,"meta":139382,"style":39},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[152,141393,141394],{"__ignoreMap":39},[155,141395,141396],{"class":157,"line":158},[155,141397,141391],{},[24,141399,141400],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[24,141402,141403],{},"以后再远程登录就无需录入密码了。",[14,141405,141407],{"id":141406},"_723-使用vscode优化","7.2.3 使用VScode优化",[24,141409,141410],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[24,141412,141413],{},[20234,141414,141415],{},"1.准备工作",[24,141417,141418],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[24,141420,141421],{},[20234,141422,141423],{},"2.为VScode安装远程开发插件",[24,141425,141426,141427,141430,141431,141434,141435,48174],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[152,141428,141429],{},"扩展：商店","的搜索栏输入",[152,141432,141433],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[152,141436,141437],{},"安装",[24,141439,141440],{},[37,141441],{"alt":39,"src":141442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[24,141444,141445],{},[20234,141446,141447],{},"3.配置远程连接",[24,141449,141450,141451,141454,141455,141458],{},"步骤1：使用快捷键",[152,141452,141453],{},"ctrl + shift + p","打开命令输入窗口，并输入",[152,141456,141457],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[24,141460,141461],{},[37,141462],{"alt":39,"src":141463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[24,141465,141466,141467,48174],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[152,141468,141469],{},"Add New SSH Host",[24,141471,141472],{},[37,141473],{"alt":39,"src":141474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[24,141476,141477,141478,141481,141482,141485,141486,141489],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[152,141479,141480],{},"ssh +X ubuntu@192.168.43.164","，其中，",[152,141483,141484],{},"ubuntu","需要替换为你的登录用户名，",[152,141487,141488],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[24,141491,141492],{},[37,141493],{"alt":39,"src":141494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[24,141496,141497],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[24,141499,141500],{},[37,141501],{"alt":39,"src":141502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[24,141504,141505],{},[37,141506],{"alt":39,"src":141507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[24,141509,141510],{},[20234,141511,141512],{},"4.使用",[24,141514,141515,141516,141454,141518,141520],{},"步骤1：继续使用快捷键",[152,141517,141453],{},[152,141519,141457],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[24,141522,141523],{},[37,141524],{"alt":39,"src":141525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[24,141527,141528,141529,141532],{},"或者，也可以点击侧边栏的",[152,141530,141531],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[24,141534,141535],{},[37,141536],{"alt":39,"src":141537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[24,141539,141540,141541,141544,141545,141548],{},"步骤2：选择菜单栏的",[152,141542,141543],{},"文件","下的",[152,141546,141547],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[24,141550,141551],{},[37,141552],{"alt":39,"src":141553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[24,141555,141556],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[20037,141558,141560],{"id":141559},"_73-远程桌面","7.3 远程桌面",[24,141562,141563],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[24,141565,141566],{},"我们选择使用VNC来看。",[28,141568,141569],{},[31,141570,141571],{},"安装VNC服务器：",[24,141573,141574],{},"这里以TigerVNC为例进行安装：",[146,141576,141578],{"className":135859,"code":141577,"language":135861,"meta":39,"style":39},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[152,141579,141580],{"__ignoreMap":39},[155,141581,141582,141584,141586,141588,141591],{"class":157,"line":158},[155,141583,44368],{"class":226},[155,141585,135880],{"class":732},[155,141587,43625],{"class":732},[155,141589,141590],{"class":732}," tigervnc-standalone-server",[155,141592,141593],{"class":732}," tigervnc-common\n",[28,141595,141596],{"start":46},[31,141597,141598],{},"设置VNC密码：",[24,141600,141601],{},"为VNC用户设置密码，运行以下命令：",[146,141603,141605],{"className":135859,"code":141604,"language":135861,"meta":39,"style":39},"vncpasswd\n",[152,141606,141607],{"__ignoreMap":39},[155,141608,141609],{"class":157,"line":158},[155,141610,141604],{"class":226},[28,141612,141613],{"start":121},[31,141614,141615],{},"配置VNC启动脚本:",[24,141617,141618],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[146,141620,141622],{"className":135859,"code":141621,"language":135861,"meta":39,"style":39},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[152,141623,141624,141633],{"__ignoreMap":39},[155,141625,141626,141628,141630],{"class":157,"line":158},[155,141627,119829],{"class":226},[155,141629,49005],{"class":263},[155,141631,141632],{"class":732}," ~\u002F.vnc\n",[155,141634,141635,141638],{"class":157,"line":46},[155,141636,141637],{"class":226},"nano",[155,141639,141640],{"class":732}," ~\u002F.vnc\u002Fxstartup\n",[24,141642,141643],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[146,141645,141647],{"className":135859,"code":141646,"language":135861,"meta":39,"style":39},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[152,141648,141649,141654,141662,141669],{"__ignoreMap":39},[155,141650,141651],{"class":157,"line":158},[155,141652,141653],{"class":161},"#!\u002Fbin\u002Fsh\n",[155,141655,141656,141659],{"class":157,"line":46},[155,141657,141658],{"class":263},"unset",[155,141660,141661],{"class":732}," SESSION_MANAGER\n",[155,141663,141664,141666],{"class":157,"line":121},[155,141665,141658],{"class":263},[155,141667,141668],{"class":732}," DBUS_SESSION_BUS_ADDRESS\n",[155,141670,141671],{"class":157,"line":180},[155,141672,141673],{"class":226},"gnome-session\n",[24,141675,141676],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[28,141678,141679],{"start":180},[31,141680,141681],{},"给予执行权限：",[24,141683,141684],{},"为xstartup文件设置执行权限：",[146,141686,141688],{"className":135859,"code":141687,"language":135861,"meta":39,"style":39},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[152,141689,141690],{"__ignoreMap":39},[155,141691,141692,141694,141697],{"class":157,"line":158},[155,141693,44403],{"class":226},[155,141695,141696],{"class":732}," +x",[155,141698,141640],{"class":732},[28,141700,141701],{"start":194},[31,141702,141703],{},"启动VNC服务器：",[146,141705,141707],{"className":135859,"code":141706,"language":135861,"meta":39,"style":39},"vncserver -geometry 1920x1080 -localhost=0\n",[152,141708,141709],{"__ignoreMap":39},[155,141710,141711,141714,141717,141720],{"class":157,"line":158},[155,141712,141713],{"class":226},"vncserver",[155,141715,141716],{"class":263}," -geometry",[155,141718,141719],{"class":732}," 1920x1080",[155,141721,141722],{"class":263}," -localhost=0\n",[24,141724,141725],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[24,141727,141728],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[28,141730,141731],{"start":200},[31,141732,141733],{},"查看已开启的VNC服务器：",[146,141735,141737],{"className":135859,"code":141736,"language":135861,"meta":39,"style":39},"vncserver -list\n",[152,141738,141739],{"__ignoreMap":39},[155,141740,141741,141743],{"class":157,"line":158},[155,141742,141713],{"class":226},[155,141744,141745],{"class":263}," -list\n",[24,141747,141748],{},[37,141749],{"alt":39,"src":141750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[28,141752,141753],{"start":213},[31,141754,141755],{},"连接到VNC服务器：",[24,141757,141758],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[28,141760,141761],{"start":220},[31,141762,141763],{},"停止VNC服务器：",[24,141765,141766],{},"如果需要停止VNC服务器，可以使用以下命令：",[146,141768,141770],{"className":135859,"code":141769,"language":135861,"meta":39,"style":39},"vncserver -kill :1\n",[152,141771,141772],{"__ignoreMap":39},[155,141773,141774,141776,141779],{"class":157,"line":158},[155,141775,141713],{"class":226},[155,141777,141778],{"class":263}," -kill",[155,141780,141781],{"class":732}," :1\n",[24,141783,141784],{},"将:1替换为你实际使用的显示编号。",[24,141786,141787],{},[37,141788],{"alt":39,"src":141789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[24,141791,141792],{},[37,141793],{"alt":39,"src":141794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[20037,141796,141798],{"id":141797},"_74-usb端口设置","7.4 USB端口设置",[24,141800,141801],{},[20234,141802,141803],{},"首先先配置好权限",[146,141805,141807],{"className":135859,"code":141806,"language":135861,"meta":39,"style":39},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[152,141808,141809,141814,141827,141834,141839],{"__ignoreMap":39},[155,141810,141811],{"class":157,"line":158},[155,141812,141813],{"class":161},"# 将用户权限提高\n",[155,141815,141816,141818,141820,141822,141825],{"class":157,"line":46},[155,141817,44368],{"class":226},[155,141819,46363],{"class":732},[155,141821,46366],{"class":263},[155,141823,141824],{"class":732}," dialout",[155,141826,46371],{"class":171},[155,141828,141829,141831],{"class":157,"line":121},[155,141830,46390],{"class":226},[155,141832,141833],{"class":732}," dialout\n",[155,141835,141836],{"class":157,"line":180},[155,141837,141838],{"class":161},"# 查看下面命令是否输出dialout（若输出才正常）\n",[155,141840,141841],{"class":157,"line":194},[155,141842,141843],{"class":226},"groups\n",[24,141845,141846],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[14,141848,141850],{"id":141849},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[24,141852,141853,141856],{},[20234,141854,141855],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[24,141858,141859,141862],{},[20234,141860,141861],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[24,141864,141865],{},[20234,141866,141867],{},"流程如下：",[24,141869,141870],{},"（1）.查找设备idVendor和idProduct",[24,141872,141873,141874,141877],{},"接入两个USB设备，在终端调用指令",[152,141875,141876],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[24,141879,141880],{},[37,141881],{"alt":39,"src":141882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[24,141884,141885,141886,141889],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[152,141887,141888],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[24,141891,141892],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[24,141894,141895],{},"（2）.编写映射规则",[24,141897,141898,141899,141902],{},"在",[152,141900,141901],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[146,141904,141906],{"className":135859,"code":141905,"language":135861,"meta":39,"style":39},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[152,141907,141908],{"__ignoreMap":39},[155,141909,141910,141912,141914],{"class":157,"line":158},[155,141911,44368],{"class":226},[155,141913,137146],{"class":732},[155,141915,141916],{"class":732}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[24,141918,141919],{},"输入如下内容：",[146,141921,141923],{"className":135859,"code":141922,"language":135861,"meta":39,"style":39},"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",[152,141924,141925,141955],{"__ignoreMap":39},[155,141926,141927,141930,141932,141935,141938,141941,141944,141946,141949,141952],{"class":157,"line":158},[155,141928,141929],{"class":171},"KERNEL",[155,141931,317],{"class":167},[155,141933,141934],{"class":732},"=\"ttyUSB*\",",[155,141936,141937],{"class":226}," ATTRS",[155,141939,141940],{"class":732},"{idVendor}==",[155,141942,141943],{"class":226},"\"10c4\"",[155,141945,332],{"class":226},[155,141947,141948],{"class":732}," ATTRS{idProduct}==\"ea60\",",[155,141950,141951],{"class":732}," MODE:=\"0777\",",[155,141953,141954],{"class":732}," SYMLINK+=\"mylidar\"\n",[155,141956,141957,141959,141961,141963,141965,141967,141970,141972,141975,141977],{"class":157,"line":46},[155,141958,141929],{"class":171},[155,141960,317],{"class":167},[155,141962,141934],{"class":732},[155,141964,141937],{"class":226},[155,141966,141940],{"class":732},[155,141968,141969],{"class":226},"\"1a86\"",[155,141971,332],{"class":226},[155,141973,141974],{"class":732}," ATTRS{idProduct}==\"7523\",",[155,141976,141951],{"class":732},[155,141978,141979],{"class":732}," SYMLINK+=\"mycar\"\n",[24,141981,141982],{},"代码解释：",[21052,141984,141985,141988,141991,141994],{},[31,141986,141987],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[31,141989,141990],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[31,141992,141993],{},"SYMLINK是符号连接，即绑定的别名；",[31,141995,141996],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[24,141998,141999,142000,142003,142006],{},"***小提示：***",[43344,142001,142002],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[152,142004,142005],{},"\u002Fetc\u002Fudev\u002Frule.d",[43344,142007,142008],{},"目录即可。",[24,142010,142011],{},"表格 还在加载中，请等待加载完成后再尝试复制",[24,142013,142014],{},"（3）.使规则生效",[24,142016,142017],{},"在终端下输入如下指令：",[146,142019,142021],{"className":135859,"code":142020,"language":135861,"meta":39,"style":39},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[152,142022,142023,142028,142040,142051,142055,142060,142073],{"__ignoreMap":39},[155,142024,142025],{"class":157,"line":158},[155,142026,142027],{"class":161},"# Ubuntu用下方命令\n",[155,142029,142030,142032,142034,142037],{"class":157,"line":46},[155,142031,44368],{"class":226},[155,142033,138611],{"class":732},[155,142035,142036],{"class":732}," udev",[155,142038,142039],{"class":732}," reload\n",[155,142041,142042,142044,142046,142048],{"class":157,"line":121},[155,142043,44368],{"class":226},[155,142045,138611],{"class":732},[155,142047,142036],{"class":732},[155,142049,142050],{"class":732}," restart\n",[155,142052,142053],{"class":157,"line":180},[155,142054,217],{"emptyLinePlaceholder":216},[155,142056,142057],{"class":157,"line":194},[155,142058,142059],{"class":161},"#Fedora用下方命令\n",[155,142061,142062,142064,142067,142070],{"class":157,"line":200},[155,142063,44368],{"class":226},[155,142065,142066],{"class":732}," udevadm",[155,142068,142069],{"class":732}," control",[155,142071,142072],{"class":263}," --reload\n",[155,142074,142075,142077,142079],{"class":157,"line":213},[155,142076,44368],{"class":226},[155,142078,142066],{"class":732},[155,142080,142081],{"class":732}," trigger\n",[24,142083,142084],{},"再重新插拔设备即可。",[24,142086,142087],{},"（4）.测试",[24,142089,142090],{},"终端下输入如下指令",[146,142092,142094],{"className":135859,"code":142093,"language":135861,"meta":39,"style":39},"ll \u002Fdev | grep ttyUSB\n",[152,142095,142096],{"__ignoreMap":39},[155,142097,142098,142101,142104,142106,142108],{"class":157,"line":158},[155,142099,142100],{"class":226},"ll",[155,142102,142103],{"class":732}," \u002Fdev",[155,142105,44901],{"class":167},[155,142107,50025],{"class":226},[155,142109,142110],{"class":732}," ttyUSB\n",[24,142112,142113],{},"运行结果如下：",[24,142115,142116],{},[37,142117],{"alt":39,"src":142118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[24,142120,142121,142122,142125],{},"也可以多次插拔USB设备，会发现设备端口",[152,142123,142124],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[24,142127,142128],{},[20234,142129,136527],{},[24,142131,142132],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[14,142134,142136],{"id":142135},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[24,142138,142139,142141],{},[20234,142140,141855],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[24,142143,142144,142146],{},[20234,142145,141861],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[24,142148,142149],{},[20234,142150,141867],{},[24,142152,142153],{},"（1）.查看所连接的主机USB接口的KERNELS",[24,142155,142156],{},"调用如下指令查看第一台雷达的USB信息：",[146,142158,142160],{"className":135859,"code":142159,"language":135861,"meta":39,"style":39},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[152,142161,142162,142182],{"__ignoreMap":39},[155,142163,142164,142167,142169,142172,142175,142177,142179],{"class":157,"line":158},[155,142165,142166],{"class":226},"udevadm",[155,142168,88384],{"class":732},[155,142170,142171],{"class":263}," --attribute-walk",[155,142173,142174],{"class":263}," --name=\u002Fdev\u002FttyUSB0",[155,142176,44901],{"class":167},[155,142178,50025],{"class":226},[155,142180,142181],{"class":732}," KERNELS\n",[155,142183,142184,142186,142188,142190,142193,142195,142197],{"class":157,"line":46},[155,142185,142166],{"class":226},[155,142187,88384],{"class":732},[155,142189,142171],{"class":263},[155,142191,142192],{"class":263}," --name=\u002Fdev\u002FttyACM0",[155,142194,44901],{"class":167},[155,142196,50025],{"class":226},[155,142198,142181],{"class":732},[24,142200,142201],{},[37,142202],{"alt":39,"src":142203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[24,142205,142206],{},"调用如下指令查看第二台雷达的USB信息：",[146,142208,142210],{"className":135859,"code":142209,"language":135861,"meta":39,"style":39},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[152,142211,142212],{"__ignoreMap":39},[155,142213,142214,142216,142218,142220,142223,142225,142227],{"class":157,"line":158},[155,142215,142166],{"class":226},[155,142217,88384],{"class":732},[155,142219,142171],{"class":263},[155,142221,142222],{"class":263}," --name=\u002Fdev\u002FttyUSB1",[155,142224,44901],{"class":167},[155,142226,50025],{"class":226},[155,142228,142181],{"class":732},[24,142230,142231,142232,142235,142236,142239,142240,142243],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[152,142233,142234],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[152,142237,142238],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[20234,142241,142242],{},"唯一性标识","”。",[24,142245,141895],{},[24,142247,141898,142248,142250],{},[152,142249,141901],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[146,142252,142253],{"className":135859,"code":141905,"language":135861,"meta":39,"style":39},[152,142254,142255],{"__ignoreMap":39},[155,142256,142257,142259,142261],{"class":157,"line":158},[155,142258,44368],{"class":226},[155,142260,137146],{"class":732},[155,142262,141916],{"class":732},[146,142264,142266],{"className":135859,"code":142265,"language":135861,"meta":39,"style":39},"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",[152,142267,142268,142297],{"__ignoreMap":39},[155,142269,142270,142272,142274,142276,142279,142281,142284,142287,142289,142292,142294],{"class":157,"line":158},[155,142271,141929],{"class":171},[155,142273,317],{"class":167},[155,142275,141934],{"class":732},[155,142277,142278],{"class":171}," KERNELS",[155,142280,317],{"class":167},[155,142282,142283],{"class":732},"=\"1-1.3:1.0\",",[155,142285,142286],{"class":226}," MODE:",[155,142288,317],{"class":732},[155,142290,142291],{"class":226},"\"0777\"",[155,142293,332],{"class":226},[155,142295,142296],{"class":732}," SYMLINK+=\"rplidar_front\"\n",[155,142298,142299,142301,142303,142305,142307,142309,142312,142314,142316,142318,142320],{"class":157,"line":46},[155,142300,141929],{"class":171},[155,142302,317],{"class":167},[155,142304,141934],{"class":732},[155,142306,142278],{"class":171},[155,142308,317],{"class":167},[155,142310,142311],{"class":732},"=\"1-1.4:1.0\",",[155,142313,142286],{"class":226},[155,142315,317],{"class":732},[155,142317,142291],{"class":226},[155,142319,332],{"class":226},[155,142321,142322],{"class":732}," SYMLINK+=\"rplidar_back\"\n",[24,142324,142014],{},[24,142326,142017],{},[146,142328,142329],{"className":135859,"code":142020,"language":135861,"meta":39,"style":39},[152,142330,142331,142335,142345,142355,142359,142363,142373],{"__ignoreMap":39},[155,142332,142333],{"class":157,"line":158},[155,142334,142027],{"class":161},[155,142336,142337,142339,142341,142343],{"class":157,"line":46},[155,142338,44368],{"class":226},[155,142340,138611],{"class":732},[155,142342,142036],{"class":732},[155,142344,142039],{"class":732},[155,142346,142347,142349,142351,142353],{"class":157,"line":121},[155,142348,44368],{"class":226},[155,142350,138611],{"class":732},[155,142352,142036],{"class":732},[155,142354,142050],{"class":732},[155,142356,142357],{"class":157,"line":180},[155,142358,217],{"emptyLinePlaceholder":216},[155,142360,142361],{"class":157,"line":194},[155,142362,142059],{"class":161},[155,142364,142365,142367,142369,142371],{"class":157,"line":200},[155,142366,44368],{"class":226},[155,142368,142066],{"class":732},[155,142370,142069],{"class":732},[155,142372,142072],{"class":263},[155,142374,142375,142377,142379],{"class":157,"line":213},[155,142376,44368],{"class":226},[155,142378,142066],{"class":732},[155,142380,142081],{"class":732},[24,142382,142084],{},[24,142384,142087],{},[24,142386,142090,142387,142390],{},[152,142388,142389],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[24,142392,142393],{},[37,142394],{"alt":39,"src":142395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[24,142397,142398],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[24,142400,142401,142403],{},[20234,142402,136527],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[14,142405,142407],{"id":142406},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[24,142409,142410],{},"（1）.查看所连接的主机USB接口的信息",[146,142412,142414],{"className":135859,"code":142413,"language":135861,"meta":39,"style":39},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[152,142415,142416,142446],{"__ignoreMap":39},[155,142417,142418,142420,142422,142425,142427,142429,142431,142433,142436,142439,142441,142444],{"class":157,"line":158},[155,142419,142166],{"class":226},[155,142421,88384],{"class":732},[155,142423,142424],{"class":263}," -a",[155,142426,49005],{"class":263},[155,142428,48211],{"class":171},[155,142430,142166],{"class":226},[155,142432,88384],{"class":732},[155,142434,142435],{"class":263}," -q",[155,142437,142438],{"class":732}," path",[155,142440,44907],{"class":263},[155,142442,142443],{"class":732}," \u002Fdev\u002FttyACM0",[155,142445,363],{"class":171},[155,142447,142448,142450,142452,142454,142456,142458,142460,142462,142464,142466,142468,142471],{"class":157,"line":46},[155,142449,142166],{"class":226},[155,142451,88384],{"class":732},[155,142453,142424],{"class":263},[155,142455,49005],{"class":263},[155,142457,48211],{"class":171},[155,142459,142166],{"class":226},[155,142461,88384],{"class":732},[155,142463,142435],{"class":263},[155,142465,142438],{"class":732},[155,142467,44907],{"class":263},[155,142469,142470],{"class":732}," \u002Fdev\u002FttyUSB0",[155,142472,363],{"class":171},[24,142474,142475],{},[37,142476],{"alt":39,"src":142477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[24,142479,142480],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[24,142482,141895],{},[24,142484,141898,142485,142250],{},[152,142486,141901],{},[146,142488,142489],{"className":135859,"code":141905,"language":135861,"meta":39,"style":39},[152,142490,142491],{"__ignoreMap":39},[155,142492,142493,142495,142497],{"class":157,"line":158},[155,142494,44368],{"class":226},[155,142496,137146],{"class":732},[155,142498,141916],{"class":732},[146,142500,142502],{"className":135859,"code":142501,"language":135861,"meta":39,"style":39},"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",[152,142503,142504,142532,142558],{"__ignoreMap":39},[155,142505,142506,142508,142510,142513,142515,142517,142519,142521,142524,142527,142529],{"class":157,"line":158},[155,142507,141929],{"class":171},[155,142509,317],{"class":167},[155,142511,142512],{"class":732},"=\"ttyACM*\",",[155,142514,141937],{"class":226},[155,142516,141940],{"class":732},[155,142518,141969],{"class":226},[155,142520,332],{"class":226},[155,142522,142523],{"class":732}," ATTRS{idProduct}==\"55d4\",",[155,142525,142526],{"class":732}," ATTRS{serial}==\"0001\",",[155,142528,141951],{"class":732},[155,142530,142531],{"class":732}," SYMLINK+=\"ttyACM_MCU\"\n",[155,142533,142534,142536,142538,142540,142542,142544,142546,142548,142550,142553,142555],{"class":157,"line":46},[155,142535,141929],{"class":171},[155,142537,317],{"class":167},[155,142539,142512],{"class":732},[155,142541,141937],{"class":226},[155,142543,141940],{"class":732},[155,142545,141969],{"class":226},[155,142547,332],{"class":226},[155,142549,142523],{"class":732},[155,142551,142552],{"class":732}," ATTRS{serial}==\"0002\",",[155,142554,141951],{"class":732},[155,142556,142557],{"class":732}," SYMLINK+=\"ttyACM_Lidar\"\n",[155,142559,142560,142562,142564,142566,142568,142570,142572,142574,142576,142578],{"class":157,"line":121},[155,142561,141929],{"class":171},[155,142563,317],{"class":167},[155,142565,141934],{"class":732},[155,142567,141937],{"class":226},[155,142569,141940],{"class":732},[155,142571,141969],{"class":226},[155,142573,332],{"class":226},[155,142575,141974],{"class":732},[155,142577,141951],{"class":732},[155,142579,142580],{"class":732}," SYMLINK+=\"ttyUSB_IMU\"\n",[24,142582,142014],{},[24,142584,142017],{},[146,142586,142587],{"className":135859,"code":142020,"language":135861,"meta":39,"style":39},[152,142588,142589,142593,142603,142613,142617,142621,142631],{"__ignoreMap":39},[155,142590,142591],{"class":157,"line":158},[155,142592,142027],{"class":161},[155,142594,142595,142597,142599,142601],{"class":157,"line":46},[155,142596,44368],{"class":226},[155,142598,138611],{"class":732},[155,142600,142036],{"class":732},[155,142602,142039],{"class":732},[155,142604,142605,142607,142609,142611],{"class":157,"line":121},[155,142606,44368],{"class":226},[155,142608,138611],{"class":732},[155,142610,142036],{"class":732},[155,142612,142050],{"class":732},[155,142614,142615],{"class":157,"line":180},[155,142616,217],{"emptyLinePlaceholder":216},[155,142618,142619],{"class":157,"line":194},[155,142620,142059],{"class":161},[155,142622,142623,142625,142627,142629],{"class":157,"line":200},[155,142624,44368],{"class":226},[155,142626,142066],{"class":732},[155,142628,142069],{"class":732},[155,142630,142072],{"class":263},[155,142632,142633,142635,142637],{"class":157,"line":213},[155,142634,44368],{"class":226},[155,142636,142066],{"class":732},[155,142638,142081],{"class":732},[24,142640,142641,142642],{},"再重新插拔设备即可，或者 ",[20234,142643,142644],{},"直接重启系统。",[24,142646,142087],{},[24,142648,142090,142649,142390],{},[152,142650,142389],{},[24,142652,142653],{},[37,142654],{"alt":39,"src":142655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[24,142657,142398],{},[24,142659,142660,142662],{},[20234,142661,136527],{}," 一些设备可能没有串口号等。",[14,142664,142666],{"id":142665},"_744-其他注意事项","7.4.4 其他注意事项",[24,142668,142669,142670,142672,142673,142676,142677,38203,142680,142683,142684,142686],{},"并非所有的USB设备端口号都是",[152,142671,142124],{},"的格式，比如Arduino的端口号可能是",[152,142674,142675],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[152,142678,142679],{},"videon",[152,142681,142682],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[152,142685,142679],{},"端口，绑定时需要关联的也是该接口。",[24,142688,142689,142690,142693,142694,142697,142698,142700,142701,142704,142705,142708,142709,142712,142713,142712,142716,142712,142719,48174],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[152,142691,142692],{},"KERNEL==\"ttyUSB*\"","修改为",[152,142695,142696],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[152,142699,142692],{},"修改为类似于",[152,142702,142703],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[152,142706,142707],{},"video[0,2,4,6]","表示可以绑定的端口为",[152,142710,142711],{},"video0","或",[152,142714,142715],{},"video2",[152,142717,142718],{},"video4",[152,142720,142721],{},"video6",[20037,142723,142725],{"id":142724},"_75-挂载内网网页","7.5 挂载内网网页",[24,142727,142728],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[24,142730,142731],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[24,142733,142734],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[24,142736,142737,142738],{},"Termux 下载地址（F-Droid）：",[20318,142739,142740],{"href":142740,"rel":142741},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[43656],[24,142743,142744],{},"首先打开app后，先更新软件缓存：",[146,142746,142748],{"className":135859,"code":142747,"language":135861,"meta":39,"style":39},"pkg update\n",[152,142749,142750],{"__ignoreMap":39},[155,142751,142752,142755],{"class":157,"line":158},[155,142753,142754],{"class":226},"pkg",[155,142756,46031],{"class":732},[24,142758,142759],{},"然后换源",[146,142761,142763],{"className":135859,"code":142762,"language":135861,"meta":39,"style":39},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[152,142764,142765],{"__ignoreMap":39},[155,142766,142767,142769,142772],{"class":157,"line":158},[155,142768,141637],{"class":226},[155,142770,142771],{"class":171}," $PREFIX",[155,142773,142774],{"class":732},"\u002Fetc\u002Fapt\u002Fsources.list\n",[24,142776,142777],{},"将该文件内容替换为下面：",[146,142779,142781],{"className":135859,"code":142780,"language":135861,"meta":39,"style":39},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[152,142782,142783],{"__ignoreMap":39},[155,142784,142785,142788,142791,142794],{"class":157,"line":158},[155,142786,142787],{"class":226},"deb",[155,142789,142790],{"class":732}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[155,142792,142793],{"class":732}," stable",[155,142795,142796],{"class":732}," main\n",[21052,142798,142799,142826],{},[31,142800,142801,142802,142804,142805],{},"如果你使用的是",[152,142803,141637],{},"编辑器：",[21052,142806,142807,142814,142820],{},[31,142808,142809,142810,142813],{},"按 ",[152,142811,142812],{},"Ctrl+O"," 保存文件。",[31,142815,142809,142816,142819],{},[152,142817,142818],{},"Enter"," 确认文件名。",[31,142821,142809,142822,142825],{},[152,142823,142824],{},"Ctrl+X"," 退出编辑器。",[31,142827,142801,142828,142804,142831],{},[152,142829,142830],{},"vim",[21052,142832,142833,142839],{},[31,142834,142809,142835,142838],{},[152,142836,142837],{},"Esc"," 退出编辑模式。",[31,142840,142841,142842,142844],{},"输入 ",[152,142843,137784],{}," 保存并退出。",[24,142846,142847],{},"接下来重新更新软件源：",[146,142849,142851],{"className":135859,"code":142850,"language":135861,"meta":39,"style":39},"pkg update && pkg upgrade\n",[152,142852,142853],{"__ignoreMap":39},[155,142854,142855,142857,142859,142861,142863],{"class":157,"line":158},[155,142856,142754],{"class":226},[155,142858,135910],{"class":732},[155,142860,45979],{"class":171},[155,142862,142754],{"class":226},[155,142864,135896],{"class":732},[24,142866,142867],{},"安装python：",[146,142869,142871],{"className":135859,"code":142870,"language":135861,"meta":39,"style":39},"pkg install python\n",[152,142872,142873],{"__ignoreMap":39},[155,142874,142875,142877,142879],{"class":157,"line":158},[155,142876,142754],{"class":226},[155,142878,43625],{"class":732},[155,142880,142881],{"class":732}," python\n",[24,142883,142884,46262],{},[20234,142885,142886],{},"通过Termux访问设备存储",[24,142888,142889],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[146,142891,142893],{"className":135859,"code":142892,"language":135861,"meta":39,"style":39},"termux-setup-storage\n",[152,142894,142895],{"__ignoreMap":39},[155,142896,142897],{"class":157,"line":158},[155,142898,142892],{"class":226},[28,142900,142901],{},[31,142902,142903,46262,142906],{},[20234,142904,142905],{},"进入HTML文件所在的目录",[28,142907,142908],{},[31,142909,142910,142911,142913],{},"使用",[152,142912,119839],{},"命令进入HTML文件所在的目录：",[146,142915,142917],{"className":135859,"code":142916,"language":135861,"meta":39,"style":39},"cd ~\u002Fyour_html_folder\n",[152,142918,142919],{"__ignoreMap":39},[155,142920,142921,142923],{"class":157,"line":158},[155,142922,119839],{"class":263},[155,142924,142925],{"class":732}," ~\u002Fyour_html_folder\n",[28,142927,142928],{"start":46},[31,142929,142930,46262,142933,142938,142955],{},[20234,142931,142932],{},"启动Python HTTP服务器",[28,142934,142935],{},[31,142936,142937],{},"运行以下命令启动一个简单的HTTP服务器：",[146,142939,142941],{"className":135859,"code":142940,"language":135861,"meta":39,"style":39},"python -m http.server 8000\n",[152,142942,142943],{"__ignoreMap":39},[155,142944,142945,142947,142949,142952],{"class":157,"line":158},[155,142946,150],{"class":226},[155,142948,119445],{"class":263},[155,142950,142951],{"class":732}," http.server",[155,142953,142954],{"class":263}," 8000\n",[28,142956,142957],{"start":121},[31,142958,142959,142960,142963],{},"这会在端口",[152,142961,142962],{},"8000","上启动一个Web服务器。",[21052,142965,142966],{},[31,142967,142968],{},"启动服务器后，Termux会显示日志信息，例如：",[146,142970,142972],{"className":139379,"code":142971,"language":139381,"meta":139382,"style":39},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[152,142973,142974],{"__ignoreMap":39},[155,142975,142976],{"class":157,"line":158},[155,142977,142971],{},[21052,142979,142980],{},[31,142981,142982],{},"这表示服务器已成功启动。",[24,142984,142985],{},[20234,142986,142987],{},"在浏览器中访问HTML文件",[28,142989,142990],{},[31,142991,142992,46262,142995,143000],{},[20234,142993,142994],{},"在同一设备上访问",[28,142996,142997],{},[31,142998,142999],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[146,143001,143004],{"className":143002,"code":143003,"language":90227,"meta":39,"style":39},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[152,143005,143006],{"__ignoreMap":39},[155,143007,143008,143011],{"class":157,"line":158},[155,143009,143010],{"class":171},"http:",[155,143012,143013],{"class":161},"\u002F\u002Flocalhost:8000\n",[21052,143015,143016],{},[31,143017,143018,143019,143022],{},"如果HTML文件中有",[152,143020,143021],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[20037,143024,143026],{"id":143025},"_76-linux重点知识","7.6 Linux重点知识",[14,143028,143030],{"id":143029},"_761-关于点的说明","7.6.1 关于点的说明",[24,143032,143033],{},[37,143034],{"alt":39,"src":143035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[24,143037,143038],{},"一点本目录，两点上目录",[14,143040,143042],{"id":143041},"_762-目录","7.6.2 目录",[19,143044,143046],{"id":143045},"_7621-系统启动必须","7.6.2.1 系统启动必须",[24,143048,143049],{},[20234,143050,143051],{},"\u002Fboot:",[24,143053,143054],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[24,143056,143057],{},[20234,143058,143059],{},"\u002Fetc:",[24,143061,143062],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[24,143064,143065],{},[20234,143066,143067],{},"\u002Flib：",[24,143069,143070],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[24,143072,143073],{},[20234,143074,143075],{},"\u002Fsys:",[24,143077,143078],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[19,143080,143082],{"id":143081},"_7622-指令集合","7.6.2.2 指令集合",[24,143084,143085],{},[20234,143086,143087],{},"\u002Fbin:",[24,143089,143090],{},"为二进制文件的缩写，存放最经常使用的命令",[24,143092,143093],{},[20234,143094,143095],{},"\u002Fsbin:",[24,143097,143098],{},"只有系统管理员才能使用的程序和指令",[19,143100,143102],{"id":143101},"_7623-外部文件管理","7.6.2.3 外部文件管理",[24,143104,143105],{},[20234,143106,143107],{},"\u002Fdev:",[24,143109,143110],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[24,143112,143113],{},[20234,143114,143115],{},"\u002Fmedia:",[24,143117,143118],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[24,143120,143121],{},[20234,143122,143123],{},"\u002Fmnt:",[24,143125,143126],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[19,143128,143130],{"id":143129},"_7624-临时文件","7.6.2.4 临时文件",[24,143132,143133],{},[20234,143134,143135],{},"\u002Frun:",[24,143137,143138],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[24,143140,143141],{},[20234,143142,143143],{},"\u002Flost+found:",[24,143145,143146],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[24,143148,143149],{},[20234,143150,143151],{},"\u002Ftmp:",[24,143153,143154],{},"这个目录是用来存放一些临时文件的",[19,143156,143158],{"id":143157},"_7625-账户","7.6.2.5 账户",[24,143160,143161],{},[20234,143162,143163],{},"\u002Froot：",[24,143165,143166],{},"系统管理员的用户主目录",[24,143168,143169,46262],{},[20234,143170,143171],{},"\u002Fhome",[24,143173,143174],{},"用户的主目录，以用户的账号命名的",[24,143176,143177,46262],{},[20234,143178,143179],{},"\u002Fusr",[24,143181,143182],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[24,143184,143185],{},[20234,143186,143187],{},"\u002Fusr\u002Fbin：",[24,143189,143190],{},"系统用户使用的应用程序与指令",[24,143192,143193],{},[20234,143194,143195],{},"\u002Fusr\u002Fsbin：",[24,143197,143198],{},"超级用户使用的比较高级的管理程序和系统守护程序",[24,143200,143201],{},[20234,143202,143203],{},"\u002Fusr\u002Fsrc：",[24,143205,143206],{},"内核源代码默认的放置目录",[19,143208,143210],{"id":143209},"_7626-运行过程要用","7.6.2.6 运行过程要用",[24,143212,143213],{},[20234,143214,143215],{},"\u002Fvar：",[24,143217,143218],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[24,143220,143221],{},[20234,143222,143223],{},"\u002Fproc:",[24,143225,143226,143227,143230],{},"管理 ",[20234,143228,143229],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[19,143232,143234],{"id":143233},"_7627-扩展用的","7.6.2.7 扩展用的",[24,143236,143237],{},[20234,143238,143239],{},"\u002Fopt:",[24,143241,143242],{},"默认是空的，我们安装额外软件可以放在这个里面",[24,143244,143245],{},[20234,143246,143247],{},"\u002Fsrv:",[24,143249,143250],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[14,143252,143254],{"id":143253},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[24,143256,143257],{},[37,143258],{"alt":39,"src":143259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[24,143261,143262],{},"windows-->linux:",[24,143264,143265],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[24,143267,143268],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[24,143270,143271],{},"linux传输文件到windows",[24,143273,143274],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[14,143276,143278],{"id":143277},"_764-易忘知识","7.6.4 易忘知识",[24,143280,143281],{},"操作系统内核查看",[146,143283,143284],{"className":135859,"code":139853,"language":135861,"meta":39,"style":39},[152,143285,143286],{"__ignoreMap":39},[155,143287,143288,143290],{"class":157,"line":158},[155,143289,88767],{"class":226},[155,143291,139862],{"class":263},[24,143293,143294],{},[37,143295],{"alt":39,"src":143296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[24,143298,143299],{},[37,143300],{"alt":39,"src":143301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[146,143303,143305],{"className":135859,"code":143304,"language":135861,"meta":39,"style":39},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[152,143306,143307,143319],{"__ignoreMap":39},[155,143308,143309,143311,143314,143317],{"class":157,"line":158},[155,143310,140070],{"class":226},[155,143312,143313],{"class":732}," mvtest",[155,143315,143316],{"class":732}," mvtest2",[155,143318,22551],{"class":171},[155,143320,143321],{"class":157,"line":46},[155,143322,143323],{"class":226},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[24,143325,143326],{},[37,143327],{"alt":39,"src":143328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[24,143330,143331],{},[37,143332],{"alt":39,"src":143333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[24,143335,143336,143337,143340],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[152,143338,143339],{},"du -a"," 可以快速查看磁盘使用细节。",[14,143342,143344],{"id":143343},"_765-vim","7.6.5 Vim",[24,143346,143347],{},[37,143348],{"alt":39,"src":143349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[24,143351,143352],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[24,143354,143355],{},"一开始进去为命令模式，此时点击输入的字母为命令",[24,143357,143358],{},[20234,143359,143360],{},"1.命令模式：",[24,143362,143363],{},"i 切换到输入模式，在光标当前位置开始输入文本",[24,143365,143366],{},"x 删除当前光标所在处的字符",[24,143368,143369],{},"：切换到底线命令模式，以在最底一行输入命令",[24,143371,143372],{},"a 进行插入模式，在光标下一个位置输入文本",[24,143374,143375],{},"o 在当前的下方插入一个新行，并进入插入模式",[24,143377,143378],{},"0 在当前行的上方插入一个新行，并进入插入模式",[24,143380,143381],{},"dd 剪切当前行",[24,143383,143384],{},"yy 复制当前行",[24,143386,143387],{},"p 粘贴剪贴板内容到光标下方",[24,143389,143390],{},"P 粘贴剪贴板内容到光标上方",[24,143392,143393],{},"u 撤销上一次操作",[24,143395,143396],{},"ctrl+r 重做上一次操作",[24,143398,143399,143401],{},[20851,143400],{}," 保存文件",[24,143403,143404,143406],{},[20704,143405],{}," 退出Vim编辑器",[24,143408,143409,143411],{},[20704,143410],{},"! 强制退出Vim编辑器，不保存修改",[24,143413,143414],{},[20234,143415,143416],{},"2.输入模式：",[24,143418,143419],{},[37,143420],{"alt":39,"src":143421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[24,143423,143424],{},[20234,143425,143426],{},"3.底线命令模式：",[24,143428,143429],{},[37,143430],{"alt":39,"src":143431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[24,143433,143434],{},"按下esc可以退出底线命令模式",[14,143436,143438],{"id":143437},"_766-apt","7.6.6 apt",[24,143440,143441],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[14,143443,143445],{"id":143444},"_767-home与root的区别","7.6.7 home与root的区别",[24,143447,143448],{},[37,143449],{"alt":39,"src":143450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[24,143452,143453],{},[37,143454],{"alt":39,"src":143455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[24,143457,143458],{},[37,143459],{"alt":39,"src":143460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[24,143462,143463],{},[37,143464],{"alt":39,"src":143465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[14,143467,143469],{"id":143468},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[24,143471,143472],{},[20318,143473,143474],{"href":143474,"rel":143475},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[43656],[28,143477,143478,143481],{},[31,143479,143480],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[31,143482,143483],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[24,143485,143486],{},[37,143487],{"alt":39,"src":143488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[24,143490,143491],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[24,143493,143494],{},[37,143495],{"alt":39,"src":143496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[146,143498,143500],{"className":139379,"code":143499,"language":139381,"meta":139382,"style":39},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[152,143501,143502,143507],{"__ignoreMap":39},[155,143503,143504],{"class":157,"line":158},[155,143505,143506],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[155,143508,143509],{"class":157,"line":46},[155,143510,143511],{},".\u002Fpycharm.sh\n",[24,143513,143514],{},"3️⃣创建.desktop文件",[24,143516,143517],{},[20234,143518,143519],{},"原理：",[21052,143521,143522,143532],{},[31,143523,143524,143525,143531],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[20234,143526,143527,143530],{},[152,143528,143529],{},".desktop"," 文件"," 来识别应用。",[31,143533,143534,143536,143537],{},[152,143535,143529],{}," 文件相当于一个“应用注册表”，告诉系统：",[21052,143538,143539,143542,143545,143548,143551],{},[31,143540,143541],{},"应用名字（Name）",[31,143543,143544],{},"图标（Icon）",[31,143546,143547],{},"执行命令（Exec）",[31,143549,143550],{},"分类（Categories）",[31,143552,143553],{},"是否需要终端（Terminal）",[146,143555,143557],{"className":139379,"code":143556,"language":139381,"meta":139382,"style":39},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[152,143558,143559,143564],{"__ignoreMap":39},[155,143560,143561],{"class":157,"line":158},[155,143562,143563],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[155,143565,143566],{"class":157,"line":46},[155,143567,143568],{},"nano pycharm.desktop\n",[24,143570,143571],{},"nano是一个命令行下的编辑器，也可以使用vim",[146,143573,143575],{"className":139379,"code":143574,"language":139381,"meta":139382,"style":39},"[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",[152,143576,143577,143582,143587,143592,143597,143602,143607,143612,143617,143622],{"__ignoreMap":39},[155,143578,143579],{"class":157,"line":158},[155,143580,143581],{},"[Desktop Entry]\n",[155,143583,143584],{"class":157,"line":46},[155,143585,143586],{},"Version=1.0\n",[155,143588,143589],{"class":157,"line":121},[155,143590,143591],{},"Type=Application\n",[155,143593,143594],{"class":157,"line":180},[155,143595,143596],{},"Name=PyCharm\n",[155,143598,143599],{"class":157,"line":194},[155,143600,143601],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[155,143603,143604],{"class":157,"line":200},[155,143605,143606],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[155,143608,143609],{"class":157,"line":213},[155,143610,143611],{},"Comment=JetBrains PyCharm IDE\n",[155,143613,143614],{"class":157,"line":220},[155,143615,143616],{},"Categories=Development;IDE;\n",[155,143618,143619],{"class":157,"line":245},[155,143620,143621],{},"Terminal=false\n",[155,143623,143624],{"class":157,"line":251},[155,143625,143626],{},"StartupWMClass=jetbrains-pycharm\n",[21052,143628,143629,143635,143641,143647],{},[31,143630,143631,143634],{},[152,143632,143633],{},"Exec"," → 点击图标时执行的命令",[31,143636,143637,143640],{},[152,143638,143639],{},"Icon"," → 显示在菜单和桌面上的图标",[31,143642,143643,143646],{},[152,143644,143645],{},"Terminal=false"," → 不打开终端",[31,143648,143649,143652],{},[152,143650,143651],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[143654,143655,143656],"blockquote",{},[24,143657,143658,143659,143661,143662],{},"可以理解成 ",[152,143660,143529],{}," 文件是 Linux 的 ",[20234,143663,143664],{},"快捷方式配置文件",[24,143666,143667],{},"4️⃣设置可执行权限",[146,143669,143671],{"className":139379,"code":143670,"language":139381,"meta":139382,"style":39},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[152,143672,143673],{"__ignoreMap":39},[155,143674,143675],{"class":157,"line":158},[155,143676,143670],{},[24,143678,143679],{},"5️⃣桌面图标启动的话如下：",[146,143681,143683],{"className":139379,"code":143682,"language":139381,"meta":139382,"style":39},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[152,143684,143685,143690],{"__ignoreMap":39},[155,143686,143687],{"class":157,"line":158},[155,143688,143689],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[155,143691,143692],{"class":157,"line":46},[155,143693,143694],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[28,143696,143697],{"start":121},[31,143698,143699],{},"下载Appimage文件实现软件的安装",[24,143701,143702],{},"1️⃣先下载appimage",[24,143704,143705],{},[20318,143706,143707],{"href":143707,"rel":143708},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[43656],[24,143710,143711],{},[37,143712],{"alt":39,"src":143713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[24,143715,143716],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[24,143718,143719],{},[37,143720],{"alt":39,"src":143721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[24,143723,143724],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[24,143726,143727],{},[37,143728],{"alt":39,"src":143729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[24,143731,143732],{},[37,143733],{"alt":39,"src":143734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[24,143736,143737,143738,143741],{},"3️⃣给他们放在",[152,143739,143740],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[24,143743,143744],{},"4️⃣给软件执行权限",[146,143746,143748],{"className":139379,"code":143747,"language":139381,"meta":139382,"style":39},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[152,143749,143750,143755],{"__ignoreMap":39},[155,143751,143752],{"class":157,"line":158},[155,143753,143754],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[155,143756,143757],{"class":157,"line":46},[155,143758,143759],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[24,143761,143762],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[146,143764,143766],{"className":135859,"code":143765,"language":135861,"meta":39,"style":39},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[152,143767,143768,143775,143782,143788],{"__ignoreMap":39},[155,143769,143770,143772],{"class":157,"line":158},[155,143771,119839],{"class":263},[155,143773,143774],{"class":732}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[155,143776,143777,143779],{"class":157,"line":46},[155,143778,119846],{"class":226},[155,143780,143781],{"class":732}," .\u002Fqqmusic.desktop\n",[155,143783,143784,143786],{"class":157,"line":121},[155,143785,142830],{"class":226},[155,143787,143781],{"class":732},[155,143789,143790,143792,143794,143796],{"class":157,"line":180},[155,143791,44368],{"class":226},[155,143793,44371],{"class":732},[155,143795,141696],{"class":732},[155,143797,143781],{"class":732},[24,143799,143800,143802],{},[152,143801,119846],{},"：一个 Linux 命令，主要功能是：",[21052,143804,143805,143808],{},[31,143806,143807],{},"如果文件不存在，就创建一个新的空文件",[31,143809,143810],{},"如果文件已存在，就更新该文件的最后修改时间",[146,143812,143814],{"className":139379,"code":143813,"language":139381,"meta":139382,"style":39},"[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",[152,143815,143816,143820,143825,143830,143835,143839,143844],{"__ignoreMap":39},[155,143817,143818],{"class":157,"line":158},[155,143819,143581],{},[155,143821,143822],{"class":157,"line":46},[155,143823,143824],{},"Name=QQ音乐\n",[155,143826,143827],{"class":157,"line":121},[155,143828,143829],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[155,143831,143832],{"class":157,"line":180},[155,143833,143834],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[155,143836,143837],{"class":157,"line":194},[155,143838,143591],{},[155,143840,143841],{"class":157,"line":200},[155,143842,143843],{},"Categories=Audio;Music;Player;\n",[155,143845,143846],{"class":157,"line":213},[155,143847,143848],{},"Comment=QQ Music Client for Linux\n",[24,143850,143851],{},"将文件复制进去",[24,143853,143854],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[24,143856,143857],{},[37,143858],{"alt":39,"src":143859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[24,143861,143862],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[24,143864,143865],{},[37,143866],{"alt":39,"src":143867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[24,143869,143870,143871,143874,143875,143878],{},"如果你用的不是KDE，那么也可以直接修改",[152,143872,143873],{},"qqmuic.desktop","：在exec的末尾加上",[152,143876,143877],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[146,143880,143882],{"className":139379,"code":143881,"language":139381,"meta":139382,"style":39},"[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",[152,143883,143884,143888,143892,143897,143901,143905,143909],{"__ignoreMap":39},[155,143885,143886],{"class":157,"line":158},[155,143887,143581],{},[155,143889,143890],{"class":157,"line":46},[155,143891,143824],{},[155,143893,143894],{"class":157,"line":121},[155,143895,143896],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[155,143898,143899],{"class":157,"line":180},[155,143900,143834],{},[155,143902,143903],{"class":157,"line":194},[155,143904,143591],{},[155,143906,143907],{"class":157,"line":200},[155,143908,143843],{},[155,143910,143911],{"class":157,"line":213},[155,143912,143848],{},[24,143914,143915],{},[37,143916],{"alt":39,"src":143917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[24,143919,143920],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[146,143922,143924],{"className":139379,"code":143923,"language":139381,"meta":139382,"style":39},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[152,143925,143926],{"__ignoreMap":39},[155,143927,143928],{"class":157,"line":158},[155,143929,143923],{},[28,143931,143932],{"start":180},[31,143933,143934],{},"去Flathub上安装软件",[24,143936,143937],{},[20318,143938,143939],{"href":143939,"rel":143940},"https:\u002F\u002Fflathub.org\u002F",[43656],[24,143942,143943],{},"1️⃣去上面的官网搜索软件+下载软件",[24,143945,143946],{},[37,143947],{"alt":39,"src":143948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[146,143950,143952],{"className":139379,"code":143951,"language":139381,"meta":139382,"style":39},"flatpak install flathub com.obsproject.Studio\n",[152,143953,143954],{"__ignoreMap":39},[155,143955,143956],{"class":157,"line":158},[155,143957,143951],{},[24,143959,143960],{},[37,143961],{"alt":39,"src":143962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[24,143964,143965],{},"2️⃣运行软件",[24,143967,143968],{},"a.官方方式：",[24,143970,143971],{},[37,143972],{"alt":39,"src":143973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[146,143975,143976],{"className":139379,"code":143951,"language":139381,"meta":139382,"style":39},[152,143977,143978],{"__ignoreMap":39},[155,143979,143980],{"class":157,"line":158},[155,143981,143951],{},[24,143983,143984],{},"b.当普通软件运行：",[24,143986,143987],{},[37,143988],{"alt":39,"src":143989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[24,143991,143992],{},[37,143993],{"alt":39,"src":143994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[20011,143996,143997],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-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":39,"searchDepth":46,"depth":46,"links":143999},[144000,144001,144006,144007,144013,144014],{"id":140732,"depth":46,"text":140733},{"id":141074,"depth":46,"text":141075,"children":144002},[144003,144004,144005],{"id":141078,"depth":121,"text":141079},{"id":141145,"depth":121,"text":141146},{"id":141406,"depth":121,"text":141407},{"id":141559,"depth":46,"text":141560},{"id":141797,"depth":46,"text":141798,"children":144008},[144009,144010,144011,144012],{"id":141849,"depth":121,"text":141850},{"id":142135,"depth":121,"text":142136},{"id":142406,"depth":121,"text":142407},{"id":142665,"depth":121,"text":142666},{"id":142724,"depth":46,"text":142725},{"id":143025,"depth":46,"text":143026,"children":144015},[144016,144017,144018,144019,144020,144021,144022,144023],{"id":143029,"depth":121,"text":143030},{"id":143041,"depth":121,"text":143042},{"id":143253,"depth":121,"text":143254},{"id":143277,"depth":121,"text":143278},{"id":143343,"depth":121,"text":143344},{"id":143437,"depth":121,"text":143438},{"id":143444,"depth":121,"text":143445},{"id":143468,"depth":121,"text":143469},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":140724,"description":20020},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":144030,"title":144031,"body":144032,"description":20020,"extension":20021,"meta":144036,"navigation":216,"path":144037,"seo":144038,"stem":144039,"__hash__":144040},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":144033,"toc":144034},[],{"title":39,"searchDepth":46,"depth":46,"links":144035},[],{"category":50052},"\u002Fwiki\u002F2025-01-27-linux",{"title":144031,"description":20020},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":144042,"title":144043,"body":144044,"description":144048,"extension":20021,"meta":144439,"navigation":216,"path":144440,"seo":144441,"stem":144442,"__hash__":144443},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":144045,"toc":144437},[144046,144049,144053,144070,144073,144126,144130,144132,144172,144181,144185,144188,144429,144434],[24,144047,144048],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,144050,144052],{"id":144051},"_1ubuntu环境配置","1.Ubuntu环境配置",[28,144054,144055,144058,144061,144064,144067],{},[31,144056,144057],{},"ubuntu环境换源",[31,144059,144060],{},"安装cuda",[31,144062,144063],{},"安装miniconda",[31,144065,144066],{},"安装pytorch",[31,144068,144069],{},"安装genesis",[24,144071,144072],{},"参考链接：",[146,144074,144076],{"className":43613,"code":144075,"language":43615,"meta":39,"style":39},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[152,144077,144078],{"__ignoreMap":39},[155,144079,144080,144083,144086,144089,144091,144094,144097,144099,144102,144105,144107,144110,144113,144115,144118,144121,144123],{"class":157,"line":158},[155,144081,144082],{"class":226},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[155,144084,144085],{"class":732},"=blogdetail",[155,144087,144088],{"class":171},"&sharetype",[155,144090,317],{"class":167},[155,144092,144093],{"class":732},"blogdetail",[155,144095,144096],{"class":171},"&sharerId",[155,144098,317],{"class":167},[155,144100,144101],{"class":732},"144728092",[155,144103,144104],{"class":171},"&sharerefer",[155,144106,317],{"class":167},[155,144108,144109],{"class":732},"PC",[155,144111,144112],{"class":171},"&sharesource",[155,144114,317],{"class":167},[155,144116,144117],{"class":732},"qq_69379513",[155,144119,144120],{"class":171},"&sharefrom",[155,144122,317],{"class":167},[155,144124,144125],{"class":732},"from_link\n",[10,144127,144129],{"id":144128},"_2genesis-报错issue","2.Genesis 报错issue",[24,144131,144072],{},[146,144133,144134],{"className":43613,"code":144075,"language":43615,"meta":39,"style":39},[152,144135,144136],{"__ignoreMap":39},[155,144137,144138,144140,144142,144144,144146,144148,144150,144152,144154,144156,144158,144160,144162,144164,144166,144168,144170],{"class":157,"line":158},[155,144139,144082],{"class":226},[155,144141,144085],{"class":732},[155,144143,144088],{"class":171},[155,144145,317],{"class":167},[155,144147,144093],{"class":732},[155,144149,144096],{"class":171},[155,144151,317],{"class":167},[155,144153,144101],{"class":732},[155,144155,144104],{"class":171},[155,144157,317],{"class":167},[155,144159,144109],{"class":732},[155,144161,144112],{"class":171},[155,144163,317],{"class":167},[155,144165,144117],{"class":732},[155,144167,144120],{"class":171},[155,144169,317],{"class":167},[155,144171,144125],{"class":732},[146,144173,144175],{"className":43613,"code":144174,"language":43615,"meta":39,"style":39},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[152,144176,144177],{"__ignoreMap":39},[155,144178,144179],{"class":157,"line":158},[155,144180,144174],{"class":226},[10,144182,144184],{"id":144183},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[24,144186,144187],{},"hello_robot.py",[146,144189,144191],{"className":148,"code":144190,"language":150,"meta":39,"style":39},"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",[152,144192,144193,144199,144214,144218,144230,144242,144246,144259,144263,144282,144292,144302,144316,144320,144324,144329,144333,144343,144350,144364,144371,144381,144386,144390,144408,144413,144417,144424],{"__ignoreMap":39},[155,144194,144195,144197],{"class":157,"line":158},[155,144196,168],{"class":167},[155,144198,14925],{"class":171},[155,144200,144201,144204,144207,144209,144211],{"class":157,"line":46},[155,144202,144203],{"class":171},"os.environ[",[155,144205,144206],{"class":732},"'PYOPENGL_PLATFORM'",[155,144208,24309],{"class":171},[155,144210,317],{"class":167},[155,144212,144213],{"class":732}," 'glx'\n",[155,144215,144216],{"class":157,"line":121},[155,144217,217],{"emptyLinePlaceholder":216},[155,144219,144220,144222,144225,144227],{"class":157,"line":180},[155,144221,168],{"class":167},[155,144223,144224],{"class":171}," genesis ",[155,144226,907],{"class":167},[155,144228,144229],{"class":171}," gs\n",[155,144231,144232,144234,144237,144239],{"class":157,"line":194},[155,144233,183],{"class":167},[155,144235,144236],{"class":171}," pynput ",[155,144238,168],{"class":167},[155,144240,144241],{"class":171}," keyboard\n",[155,144243,144244],{"class":157,"line":200},[155,144245,217],{"emptyLinePlaceholder":216},[155,144247,144248,144251,144254,144256],{"class":157,"line":213},[155,144249,144250],{"class":171},"gs.init(",[155,144252,144253],{"class":323},"backend",[155,144255,317],{"class":167},[155,144257,144258],{"class":171},"gs.gpu)\n",[155,144260,144261],{"class":157,"line":220},[155,144262,217],{"emptyLinePlaceholder":216},[155,144264,144265,144268,144270,144273,144276,144278,144280],{"class":157,"line":245},[155,144266,144267],{"class":171},"scene ",[155,144269,317],{"class":167},[155,144271,144272],{"class":171}," gs.Scene(",[155,144274,144275],{"class":323},"show_viewer",[155,144277,317],{"class":167},[155,144279,1000],{"class":263},[155,144281,363],{"class":171},[155,144283,144284,144287,144289],{"class":157,"line":251},[155,144285,144286],{"class":171},"plane ",[155,144288,317],{"class":167},[155,144290,144291],{"class":171}," scene.add_entity(gs.morphs.Plane())\n",[155,144293,144294,144297,144299],{"class":157,"line":257},[155,144295,144296],{"class":171},"franka ",[155,144298,317],{"class":167},[155,144300,144301],{"class":171}," scene.add_entity(\n",[155,144303,144304,144307,144309,144311,144314],{"class":157,"line":270},[155,144305,144306],{"class":171},"    gs.morphs.MJCF(",[155,144308,14974],{"class":323},[155,144310,317],{"class":167},[155,144312,144313],{"class":732},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[155,144315,7657],{"class":171},[155,144317,144318],{"class":157,"line":276},[155,144319,363],{"class":171},[155,144321,144322],{"class":157,"line":297},[155,144323,217],{"emptyLinePlaceholder":216},[155,144325,144326],{"class":157,"line":302},[155,144327,144328],{"class":171},"scene.build()\n",[155,144330,144331],{"class":157,"line":308},[155,144332,217],{"emptyLinePlaceholder":216},[155,144334,144335,144337,144340],{"class":157,"line":366},[155,144336,1484],{"class":167},[155,144338,144339],{"class":226}," on_press",[155,144341,144342],{"class":171},"(key):\n",[155,144344,144345,144348],{"class":157,"line":379},[155,144346,144347],{"class":167},"    try",[155,144349,736],{"class":171},[155,144351,144352,144354,144357,144359,144362],{"class":157,"line":385},[155,144353,2803],{"class":167},[155,144355,144356],{"class":171}," key.char ",[155,144358,729],{"class":167},[155,144360,144361],{"class":732}," 'q'",[155,144363,736],{"class":171},[155,144365,144366,144368],{"class":157,"line":415},[155,144367,35557],{"class":167},[155,144369,144370],{"class":263}," False\n",[155,144372,144373,144376,144379],{"class":157,"line":452},[155,144374,144375],{"class":167},"    except",[155,144377,144378],{"class":263}," AttributeError",[155,144380,736],{"class":171},[155,144382,144383],{"class":157,"line":480},[155,144384,144385],{"class":167},"        pass\n",[155,144387,144388],{"class":157,"line":486},[155,144389,217],{"emptyLinePlaceholder":216},[155,144391,144392,144395,144397,144400,144403,144405],{"class":157,"line":499},[155,144393,144394],{"class":171},"listener ",[155,144396,317],{"class":167},[155,144398,144399],{"class":171}," keyboard.Listener(",[155,144401,144402],{"class":323},"on_press",[155,144404,317],{"class":167},[155,144406,144407],{"class":171},"on_press)\n",[155,144409,144410],{"class":157,"line":505},[155,144411,144412],{"class":171},"listener.start()\n",[155,144414,144415],{"class":157,"line":528},[155,144416,217],{"emptyLinePlaceholder":216},[155,144418,144419,144421],{"class":157,"line":549},[155,144420,127226],{"class":167},[155,144422,144423],{"class":171}," listener.running:\n",[155,144425,144426],{"class":157,"line":570},[155,144427,144428],{"class":171},"    scene.step()\n",[24,144430,144431],{},[37,144432],{"alt":39,"src":144433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[20011,144435,144436],{},"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":39,"searchDepth":46,"depth":46,"links":144438},[],{"category":43169},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":144043,"description":144048},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":144445,"title":144446,"body":144447,"description":20020,"extension":20021,"meta":144462,"navigation":216,"path":144463,"seo":144464,"stem":144465,"__hash__":144466},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":144448,"toc":144459},[144449,144452,144456],[10,144450,144446],{"id":144451},"_1-基础知识",[20037,144453,144455],{"id":144454},"_11-js的组成","1.1 js的组成",[24,144457,144458],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":39,"searchDepth":46,"depth":46,"links":144460},[144461],{"id":144454,"depth":46,"text":144455},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":144446,"description":20020},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":144468,"title":144469,"body":144470,"description":20020,"extension":20021,"meta":144609,"navigation":216,"path":144610,"seo":144611,"stem":144612,"__hash__":144613},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":144471,"toc":144597},[144472,144475,144479,144482,144486,144496,144500,144503,144506,144509,144513,144520,144526,144530,144536,144547,144551,144554,144558,144561,144565,144568,144572,144575,144579,144582,144585,144588,144591,144594],[10,144473,144469],{"id":144474},"_2-vscode必备内容",[20037,144476,144478],{"id":144477},"_21-标签分类","2.1 标签分类",[24,144480,144481],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[20037,144483,144485],{"id":144484},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[24,144487,144488,144489,144491,144492,144495],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[152,144490,20306],{}," 然后按 ",[152,144493,144494],{},"Tab","，快速自动生成基本结构。",[20037,144497,144499],{"id":144498},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[24,144501,144502],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[24,144504,144505],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[24,144507,144508],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[20037,144510,144512],{"id":144511},"_24-视图缩放","2.4 视图缩放",[24,144514,144515,144516,144519],{},"缩放视图 ",[152,144517,144518],{},"ctrl+"," 可实现代码增大。",[24,144521,144522,144525],{},[152,144523,144524],{},"ctrl-"," 可实现代码减小。",[20037,144527,144529],{"id":144528},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[24,144531,144532,144533,48174],{},"VSCode 新建文件快捷键为 ",[152,144534,144535],{},"ctrl+N",[24,144537,144538,144539,144542,144543,144546],{},"保存快捷键为 ",[152,144540,144541],{},"ctrl+S","，将文本保存为 ",[152,144544,144545],{},".html"," 文件。",[20037,144548,144550],{"id":144549},"_26-auto-rename-tag","2.6 Auto Rename Tag",[24,144552,144553],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[20037,144555,144557],{"id":144556},"_27-vscode-icons","2.7 vscode-icons",[24,144559,144560],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[20037,144562,144564],{"id":144563},"_28-easy-less","2.8 Easy LESS",[24,144566,144567],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[20037,144569,144571],{"id":144570},"_29-会了吧插件","2.9 会了吧插件",[24,144573,144574],{},"会了吧插件可以展示代码中英语单词的意思。",[20037,144576,144578],{"id":144577},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[24,144580,144581],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[24,144583,144584],{},"②选定多个相同的单词:ctrl+D",[24,144586,144587],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[24,144589,144590],{},"④全局替换某些单词:ctrl+h",[24,144592,144593],{},"⑤快速定位到某一行:ctrl+g",[24,144595,144596],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":39,"searchDepth":46,"depth":46,"links":144598},[144599,144600,144601,144602,144603,144604,144605,144606,144607,144608],{"id":144477,"depth":46,"text":144478},{"id":144484,"depth":46,"text":144485},{"id":144498,"depth":46,"text":144499},{"id":144511,"depth":46,"text":144512},{"id":144528,"depth":46,"text":144529},{"id":144549,"depth":46,"text":144550},{"id":144556,"depth":46,"text":144557},{"id":144563,"depth":46,"text":144564},{"id":144570,"depth":46,"text":144571},{"id":144577,"depth":46,"text":144578},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":144469,"description":20020},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":144615,"title":144616,"body":144617,"description":20020,"extension":20021,"meta":144776,"navigation":216,"path":144777,"seo":144778,"stem":144779,"__hash__":144780},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":144618,"toc":144768},[144619,144622,144626,144636,144642,144648,144652,144661,144665,144670,144673,144676,144680,144683,144693,144702,144711,144720,144730,144737,144742,144747,144760],[10,144620,144616],{"id":144621},"_3-html文本与容器标签",[20037,144623,144625],{"id":144624},"_31-标题标签","3.1 标题标签",[24,144627,144628,144631,144632,144635],{},[152,144629,144630],{},"\u003Ch1>","我是一级标签",[152,144633,144634],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[24,144637,144638,144631,144640],{},[152,144639,144630],{},[152,144641,144634],{},[24,144643,141898,144644,144647],{},[152,144645,144646],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[20037,144649,144651],{"id":144650},"_32-段落标签","3.2 段落标签",[24,144653,144654,144657,144658],{},[152,144655,144656],{},"\u003Cp>","....",[152,144659,144660],{},"\u003C\u002Fp>",[20037,144662,144664],{"id":144663},"_33-换行标签","3.3 换行标签",[24,144666,144667],{},[152,144668,144669],{},"\u003Cbr \u002F>",[24,144671,144672],{},"具有强制换行的作用",[24,144674,144675],{},"单标签",[20037,144677,144679],{"id":144678},"_34-文本格式化标签","3.4 文本格式化标签",[24,144681,144682],{},"提供粗体、斜体和下划线等效果",[24,144684,144685,144686,101102,144689,144692],{},"加粗：",[152,144687,144688],{},"\u003Cstrong>...\u003C\u002Fstrong>",[152,144690,144691],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[24,144694,144695,144696,101102,144699,144692],{},"斜体：",[152,144697,144698],{},"\u003Cem>...\u003C\u002Fem>",[152,144700,144701],{},"\u003Ci>...\u003C\u002Fi>",[24,144703,144704,144705,101102,144708,144692],{},"删除线：",[152,144706,144707],{},"\u003Cdel>...\u003C\u002Fdel>",[152,144709,144710],{},"\u003Cs>...\u003C\u002Fs>",[24,144712,144713,144714,101102,144717,144692],{},"下划线：",[152,144715,144716],{},"\u003Cins>...\u003C\u002Fins>",[152,144718,144719],{},"\u003Cu>...\u003C\u002Fu>",[20037,144721,144723,144724,38203,144727,121256],{"id":144722},"_35-div和span标签","3.5 ",[152,144725,144726],{},"\u003Cdiv>",[152,144728,144729],{},"\u003Cspan>",[24,144731,144732,119581,144734,144736],{},[152,144733,144726],{},[152,144735,144729],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[24,144738,144739],{},[152,144740,144741],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[24,144743,144744],{},[152,144745,144746],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[24,144748,144749,144750,144752,144753,144755,144756,144759],{},"两者特点：①",[152,144751,144726],{}," 标签用来布局，但一行通常只放一个 ",[152,144754,144726],{},"。可以理解为一个大盒子，独占一行，在 ",[152,144757,144758],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[24,144761,95812,144762,144764,144765,144767],{},[152,144763,144729],{}," 标签也可用于布局，一行可以放多个 ",[152,144766,144729],{},"，可理解为小盒子。",{"title":39,"searchDepth":46,"depth":46,"links":144769},[144770,144771,144772,144773,144774],{"id":144624,"depth":46,"text":144625},{"id":144650,"depth":46,"text":144651},{"id":144663,"depth":46,"text":144664},{"id":144678,"depth":46,"text":144679},{"id":144722,"depth":46,"text":144775},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":144616,"description":20020},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":144782,"title":144783,"body":144784,"description":20020,"extension":20021,"meta":144981,"navigation":216,"path":144982,"seo":144983,"stem":144984,"__hash__":144985},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":144785,"toc":144973},[144786,144789,144793,144796,144802,144809,144815,144821,144824,144827,144830,144833,144836,144839,144842,144846,144849,144852,144855,144861,144867,144873,144880,144884,144890,144896,144899,144902,144908,144914,144920,144923,144926,144930,144933,144943,144949,144953,144962,144966,144969],[10,144787,144783],{"id":144788},"_4-html图像与链接",[20037,144790,144792],{"id":144791},"_41-图像标签","4.1 图像标签",[24,144794,144795],{},"（1）标签",[24,144797,144798,144801],{},[152,144799,144800],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[24,144803,144804,144805,144808],{},"src是",[152,144806,144807],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[24,144810,144811,144812],{},"alt:文本，替换文本。图像不能显示的文字 ",[152,144813,144814],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[24,144816,144817,144818],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[152,144819,144820],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[24,144822,144823],{},"width:像素，设置图像的宽度",[24,144825,144826],{},"height:像素，设置图像的高度",[24,144828,144829],{},"border：像素，设置图像的边框粗细",[24,144831,144832],{},"（2）图像标签属性的注意点：",[24,144834,144835],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[24,144837,144838],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[24,144840,144841],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[20037,144843,144845],{"id":144844},"_42-路径注意要点","4.2 路径注意要点：",[24,144847,144848],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[24,144850,144851],{},"（2）根目录：就是打开文件夹的第一层根目录",[24,144853,144854],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[24,144856,144857,144858],{},"①同一级路径：图像文件位于HTML文件同一级，如",[152,144859,144860],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[24,144862,144863,144864],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[152,144865,144866],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[24,144868,144869,144870],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[152,144871,144872],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[24,144874,144875,144876,2033],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[20318,144877,144878],{"href":144878,"rel":144879},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[43656],[20037,144881,144883],{"id":144882},"_43-超链接标签","4.3 超链接标签",[24,144885,144886,144889],{},[152,144887,144888],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[24,144891,144892,144893],{},"①语法格式：",[152,144894,144895],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[24,144897,144898],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[24,144900,144901],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[24,144903,144904,144905],{},"③链接分类：外部链接：",[152,144906,144907],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[24,144909,144910,144911],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[152,144912,144913],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[24,144915,144916,144917],{},"空链接：如果当时没有确定链接目标时，",[152,144918,144919],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[24,144921,144922],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[24,144924,144925],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[20037,144927,144929],{"id":144928},"_44-锚点链接","4.4 锚点链接",[24,144931,144932],{},"点我们点击链接，可以快速定位到页面中的某个位置",[24,144934,144935,144936,144939,144940],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[152,144937,144938],{},"\u003Ca href=\"#two\">","第二级",[152,144941,144942],{},"\u003C\u002Fa>",[24,144944,144945,144946],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[152,144947,144948],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[20037,144950,144952],{"id":144951},"_45-注释标签","4.5 注释标签",[24,144954,144955,144958,144959],{},[152,144956,144957],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[152,144960,144961],{},"ctrl+\u002F",[20037,144963,144965],{"id":144964},"_46-特殊字符","4.6 特殊字符",[24,144967,144968],{},"可以实现添加多个空格",[37,144970],{"style":144971,"src":144972},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":39,"searchDepth":46,"depth":46,"links":144974},[144975,144976,144977,144978,144979,144980],{"id":144791,"depth":46,"text":144792},{"id":144844,"depth":46,"text":144845},{"id":144882,"depth":46,"text":144883},{"id":144928,"depth":46,"text":144929},{"id":144951,"depth":46,"text":144952},{"id":144964,"depth":46,"text":144965},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":144783,"description":20020},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":144987,"title":144988,"body":144989,"description":20020,"extension":20021,"meta":145282,"navigation":216,"path":145283,"seo":145284,"stem":145285,"__hash__":145286},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":144990,"toc":145273},[144991,144994,144998,145001,145004,145007,145010,145013,145016,145019,145022,145025,145045,145051,145055,145058,145061,145064,145067,145070,145073,145077,145080,145083,145086,145089,145102,145107,145110,145113,145128,145131,145134,145137,145140,145143,145147,145150,145157,145160,145163,145166,145169,145172,145178,145181,145184,145190,145193,145196,145199,145205,145208,145211,145225,145232,145235,145238,145245,145254,145257,145260,145263,145267,145270],[10,144992,144988],{"id":144993},"_5-html表格列表与表单",[20037,144995,144997],{"id":144996},"_51-表格标签","5.1 表格标签",[24,144999,145000],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[24,145002,145003],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[24,145005,145006],{},"②表格基本语法：",[37,145008],{"style":144971,"src":145009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[24,145011,145012],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[37,145014],{"style":144971,"src":145015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[24,145017,145018],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[37,145020],{"style":144971,"src":145021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[24,145023,145024],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[24,145026,145027,145030,145031,145033,145034,145037,145038,145040,145041,145044],{},[152,145028,145029],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[152,145032,145029],{},"内部必须拥有",[152,145035,145036],{},"\u003Ctr>","标签，一般位于第一行，",[152,145039,145029],{},"比",[152,145042,145043],{},"\u003Cth>","范围广",[24,145046,145047,145050],{},[152,145048,145049],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[20037,145052,145054],{"id":145053},"_52-合并单元格","5.2 合并单元格",[24,145056,145057],{},"（1）合并单元格方式：",[24,145059,145060],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[24,145062,145063],{},"②跨列合并：colspan=\"合并单元格的个数\"",[24,145065,145066],{},"（2）目标单元格：",[24,145068,145069],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[24,145071,145072],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[20037,145074,145076],{"id":145075},"_53-列表标签","5.3 列表标签",[24,145078,145079],{},"（1）分类：无序列表、有序列表、自定义列表",[24,145081,145082],{},"①无序列表：",[37,145084],{"style":144971,"src":145085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[24,145087,145088],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[24,145090,145091,145094,145095,145098,145099,145101],{},[152,145092,145093],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[152,145096,145097],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[152,145100,145093],{},"中输入其他标签或文字是不对的",[24,145103,145104,145106],{},[152,145105,145097],{},"之间相当于一个容器，可以容纳所有元素",[24,145108,145109],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[24,145111,145112],{},"在css中去除前边的小圆点采用如下代码:",[146,145114,145118],{"className":145115,"code":145116,"language":145117,"meta":39,"style":39},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[152,145119,145120],{"__ignoreMap":39},[155,145121,145122,145125],{"class":157,"line":158},[155,145123,145124],{"class":69863},"list-style",[155,145126,145127],{"class":171},": none;\n",[24,145129,145130],{},"②有序列表：",[37,145132],{"style":144971,"src":145133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[24,145135,145136],{},"③自定义列表：",[37,145138],{"style":144971,"src":145139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[37,145141],{"style":144971,"src":145142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[20037,145144,145146],{"id":145145},"_54-表单标签","5.4 表单标签",[24,145148,145149],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[24,145151,145152,145153,145156],{},"（1）表单域：包含单元素的区域，",[152,145154,145155],{},"\u003Cform>","标签可以实现信息的收集和传递。",[37,145158],{"style":144971,"src":145159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[24,145161,145162],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[24,145164,145165],{},"表单元素提交必须有name属性",[24,145167,145168],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[24,145170,145171],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[24,145173,95789,145174,145177],{},[152,145175,145176],{},"\u003Cinput>","输入表单元素",[37,145179],{"style":144971,"src":145180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[37,145182],{"style":144971,"src":145183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[24,145185,145186,145187],{},"单选按钮：",[152,145188,145189],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[37,145191],{"style":144971,"src":145192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[24,145194,145195],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[37,145197],{"style":144971,"src":145198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[24,145200,145201,145204],{},[20234,145202,145203],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[24,145206,145207],{},"②select下拉表单元素：可以节约页面控件",[37,145209],{"style":144971,"src":145210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[24,145212,145213,33622,145215,145218,145219,145221,145222,145224],{},[20234,145214,20122],{},[152,145216,145217],{},"\u003Cselect>","中至少包含一对",[152,145220,121277],{},"；在",[152,145223,121277],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[24,145226,145227,145228,145231],{},"③",[152,145229,145230],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[37,145233],{"style":144971,"src":145234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[24,145236,145237],{},"3行20列",[20037,145239,145241,145242,121256],{"id":145240},"_55-lable标签","5.5 ",[152,145243,145244],{},"\u003Clable>",[24,145246,145247,145248,145250,145251,145253],{},"它不是表单标签，但常常与表单标签搭配使用，",[152,145249,145244],{},"标签用于绑定一个表单标签，当点击",[152,145252,145244],{},"标签内的文本",[24,145255,145256],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[37,145258],{"style":144971,"src":145259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[37,145261],{"style":144971,"src":145262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[20037,145264,145266],{"id":145265},"_56-实例","5.6 实例",[37,145268],{"style":144971,"src":145269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[20011,145271,145272],{},"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":39,"searchDepth":46,"depth":46,"links":145274},[145275,145276,145277,145278,145279,145281],{"id":144996,"depth":46,"text":144997},{"id":145053,"depth":46,"text":145054},{"id":145075,"depth":46,"text":145076},{"id":145145,"depth":46,"text":145146},{"id":145240,"depth":46,"text":145280},"5.5 \u003Clable>标签",{"id":145265,"depth":46,"text":145266},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":144988,"description":20020},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":145288,"title":145289,"body":145290,"description":20020,"extension":20021,"meta":145839,"navigation":216,"path":145840,"seo":145841,"stem":145842,"__hash__":145843},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":145291,"toc":145814},[145292,145295,145299,145302,145305,145309,145312,145315,145318,145321,145324,145327,145330,145334,145337,145341,145344,145347,145350,145354,145357,145360,145363,145369,145372,145375,145378,145381,145384,145387,145390,145423,145427,145430,145433,145436,145440,145443,145446,145449,145452,145455,145459,145462,145465,145468,145472,145475,145479,145482,145486,145489,145494,145498,145501,145505,145508,145511,145514,145517,145544,145547,145551,145554,145557,145562,145565,145568,145572,145575,145580,145583,145586,145589,145593,145596,145599,145602,145606,145609,145612,145615,145619,145623,145626,145666,145669,145673,145680,145683,145687,145690,145736,145740,145743,145746,145749,145777,145781,145784,145811],[10,145293,145289],{"id":145294},"_6-css语法与文本样式",[20037,145296,145298],{"id":145297},"_61-css语法规范","6.1 css语法规范",[24,145300,145301],{},"由两部分组成，选择器及一条或多条声明",[37,145303],{"style":144971,"src":145304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[24,145306,145307],{},[20234,145308,20122],{},[24,145310,145311],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[24,145313,145314],{},"②属性与属性值以“键值对”的形式出现",[24,145316,145317],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[24,145319,145320],{},"④属性和属性值之间用英文“;”分开",[37,145322],{"style":144971,"src":145323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[37,145325],{"style":144971,"src":145326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[37,145328],{"style":144971,"src":145329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[20037,145331,145333],{"id":145332},"_62-css选择器","6.2 css选择器",[24,145335,145336],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[14,145338,145340],{"id":145339},"_621-标签选择器","6.2.1 标签选择器",[24,145342,145343],{},"①优点：能快速为页面中同类型的标签统一设置样式",[24,145345,145346],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[37,145348],{"style":144971,"src":145349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[14,145351,145353],{"id":145352},"_622-类选择器","6.2.2 类选择器",[24,145355,145356],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[24,145358,145359],{},"②样例",[37,145361],{"style":144971,"src":145362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[24,145364,145365,145366,145368],{},"③ ",[20234,145367,145203],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[24,145370,145371],{},"可以理解为给这个标签起了个名字，来表示；",[24,145373,145374],{},"长名称或词组可以使用横线来为选择器命名；",[24,145376,145377],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[24,145379,145380],{},"命名要有意义；",[37,145382],{"style":144971,"src":145383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[24,145385,145386],{},"类选择器也可以指定特殊的元素p.center{}",[24,145388,145389],{},"p.center和.center都对",[146,145391,145393],{"className":145115,"code":145392,"language":145117,"meta":39,"style":39},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[152,145394,145395,145400,145409,145419],{"__ignoreMap":39},[155,145396,145397],{"class":157,"line":158},[155,145398,145399],{"class":161},"\u002F* 类选择器指定特殊元素 *\u002F\n",[155,145401,145402,145404,145407],{"class":157,"line":46},[155,145403,24],{"class":69863},[155,145405,145406],{"class":226},".center",[155,145408,35397],{"class":171},[155,145410,145411,145413,145415,145417],{"class":157,"line":121},[155,145412,89089],{"class":263},[155,145414,70000],{"class":171},[155,145416,70155],{"class":263},[155,145418,21206],{"class":171},[155,145420,145421],{"class":157,"line":180},[155,145422,21475],{"class":171},[14,145424,145426],{"id":145425},"_623-多类名使用","6.2.3 多类名使用",[24,145428,145429],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[37,145431],{"style":144971,"src":145432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[24,145434,145435],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[14,145437,145439],{"id":145438},"_624-id选择器","6.2.4 id选择器",[24,145441,145442],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[24,145444,145445],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[37,145447],{"style":144971,"src":145448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[24,145450,145451],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[24,145453,145454],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[14,145456,145458],{"id":145457},"_625-通配符选择器","6.2.5 通配符选择器",[24,145460,145461],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[24,145463,145464],{},"* {",[24,145466,145467],{},"color=\"red\"}",[14,145469,145471],{"id":145470},"_626-总结","6.2.6 总结",[37,145473],{"style":144971,"src":145474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[20037,145476,145478],{"id":145477},"_63-css字体属性","6.3 css字体属性",[24,145480,145481],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[14,145483,145485],{"id":145484},"_631-字体系列","6.3.1 字体系列",[24,145487,145488],{},"font-family: '宋体';",[24,145490,145491,145493],{},[20234,145492,20122],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[14,145495,145497],{"id":145496},"_632-字体大小","6.3.2 字体大小",[24,145499,145500],{},"font-size: 20px",[24,145502,145503,46262],{},[20234,145504,145203],{},[24,145506,145507],{},"①px（像素）大小是网页的最常用单位",[24,145509,145510],{},"②谷歌浏览器默认为16px",[24,145512,145513],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[24,145515,145516],{},"④可以给body指定整个页面的大小：会自动引用",[146,145518,145520],{"className":145115,"code":145519,"language":145117,"meta":39,"style":39},"body {\n  font-size: 16px;\n}\n",[152,145521,145522,145528,145540],{"__ignoreMap":39},[155,145523,145524,145526],{"class":157,"line":158},[155,145525,70363],{"class":69863},[155,145527,35397],{"class":171},[155,145529,145530,145532,145534,145536,145538],{"class":157,"line":46},[155,145531,89189],{"class":263},[155,145533,70000],{"class":171},[155,145535,439],{"class":263},[155,145537,70055],{"class":167},[155,145539,21206],{"class":171},[155,145541,145542],{"class":157,"line":121},[155,145543,21475],{"class":171},[24,145545,145546],{},"⑤标题标签比较特殊，需要单独指定大小",[14,145548,145550],{"id":145549},"_633-字体粗细","6.3.3 字体粗细",[24,145552,145553],{},"font-weight: bold;",[24,145555,145556],{},"font-weight: 100；",[24,145558,145559,145561],{},[20234,145560,20122],{}," ①粗体文字变细：尽量别用normal，多用数字",[24,145563,145564],{},"font-weight= 400;",[24,145566,145567],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[14,145569,145571],{"id":145570},"_634-文字样式","6.3.4 文字样式",[24,145573,145574],{},"font-style: normal；",[24,145576,145577,46262],{},[20234,145578,145579],{},"属性值",[24,145581,145582],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[24,145584,145585],{},"②italic：浏览器会显示斜体的字体样式",[37,145587],{"style":144971,"src":145588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[14,145590,145592],{"id":145591},"_635-字体符合属性","6.3.5 字体符合属性",[37,145594],{"style":144971,"src":145595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[37,145597],{"style":144971,"src":145598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[24,145600,145601],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[24,145603,145604,46262],{},[20234,145605,145203],{},[24,145607,145608],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[24,145610,145611],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[24,145613,145614],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[20037,145616,145618],{"id":145617},"_64-css-test文本属性","6.4 css test文本属性",[14,145620,145622],{"id":145621},"_641-文本颜色","6.4.1 文本颜色",[24,145624,145625],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[146,145627,145629],{"className":145115,"code":145628,"language":145117,"meta":39,"style":39},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[152,145630,145631,145636,145642,145652,145657,145662],{"__ignoreMap":39},[155,145632,145633],{"class":157,"line":158},[155,145634,145635],{"class":161},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[155,145637,145638,145640],{"class":157,"line":46},[155,145639,24],{"class":69863},[155,145641,35397],{"class":171},[155,145643,145644,145646,145648,145650],{"class":157,"line":121},[155,145645,89468],{"class":263},[155,145647,70000],{"class":171},[155,145649,75984],{"class":263},[155,145651,21206],{"class":171},[155,145653,145654],{"class":157,"line":180},[155,145655,145656],{"class":161},"  \u002F* color: #ff0000; *\u002F\n",[155,145658,145659],{"class":157,"line":194},[155,145660,145661],{"class":161},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[155,145663,145664],{"class":157,"line":200},[155,145665,21475],{"class":171},[37,145667],{"style":144971,"src":145668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[14,145670,145672],{"id":145671},"_642-对齐文本","6.4.2 对齐文本",[24,145674,145675,145676,145679],{},"text-align属于用于设置元素内文本内容的 ",[20234,145677,145678],{},"水平对齐"," 方式",[24,145681,145682],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[14,145684,145686],{"id":145685},"_643-装饰文本","6.4.3 装饰文本",[24,145688,145689],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[146,145691,145693],{"className":145115,"code":145692,"language":145117,"meta":39,"style":39},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[152,145694,145695,145701,145711,145715,145721,145732],{"__ignoreMap":39},[155,145696,145697,145699],{"class":157,"line":158},[155,145698,20318],{"class":69863},[155,145700,35397],{"class":171},[155,145702,145703,145705,145707,145709],{"class":157,"line":46},[155,145704,89065],{"class":263},[155,145706,70000],{"class":171},[155,145708,73300],{"class":263},[155,145710,21206],{"class":171},[155,145712,145713],{"class":157,"line":121},[155,145714,21475],{"class":171},[155,145716,145717,145719],{"class":157,"line":180},[155,145718,24],{"class":69863},[155,145720,35397],{"class":171},[155,145722,145723,145725,145727,145730],{"class":157,"line":194},[155,145724,89065],{"class":263},[155,145726,70000],{"class":171},[155,145728,145729],{"class":263},"underline",[155,145731,21206],{"class":171},[155,145733,145734],{"class":157,"line":200},[155,145735,21475],{"class":171},[14,145737,145739],{"id":145738},"_644-文本缩进","6.4.4 文本缩进",[24,145741,145742],{},"实现文本的第一行首行缩进自己指定的距离",[24,145744,145745],{},"20px往右边走；-20px往左边走",[24,145747,145748],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[146,145750,145752],{"className":145115,"code":145751,"language":145117,"meta":39,"style":39},"p {\n  text-indent: 2em;\n}\n",[152,145753,145754,145760,145773],{"__ignoreMap":39},[155,145755,145756,145758],{"class":157,"line":158},[155,145757,24],{"class":69863},[155,145759,35397],{"class":171},[155,145761,145762,145765,145767,145769,145771],{"class":157,"line":46},[155,145763,145764],{"class":263},"  text-indent",[155,145766,70000],{"class":171},[155,145768,360],{"class":263},[155,145770,43344],{"class":167},[155,145772,21206],{"class":171},[155,145774,145775],{"class":157,"line":121},[155,145776,21475],{"class":171},[14,145778,145780],{"id":145779},"_645-行间距","6.4.5 行间距",[24,145782,145783],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[146,145785,145787],{"className":145115,"code":145786,"language":145117,"meta":39,"style":39},"p {\n  line-height: 1.6;\n}\n",[152,145788,145789,145795,145807],{"__ignoreMap":39},[155,145790,145791,145793],{"class":157,"line":158},[155,145792,24],{"class":69863},[155,145794,35397],{"class":171},[155,145796,145797,145800,145802,145805],{"class":157,"line":46},[155,145798,145799],{"class":263},"  line-height",[155,145801,70000],{"class":171},[155,145803,145804],{"class":263},"1.6",[155,145806,21206],{"class":171},[155,145808,145809],{"class":157,"line":121},[155,145810,21475],{"class":171},[20011,145812,145813],{},"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":39,"searchDepth":46,"depth":46,"links":145815},[145816,145817,145825,145832],{"id":145297,"depth":46,"text":145298},{"id":145332,"depth":46,"text":145333,"children":145818},[145819,145820,145821,145822,145823,145824],{"id":145339,"depth":121,"text":145340},{"id":145352,"depth":121,"text":145353},{"id":145425,"depth":121,"text":145426},{"id":145438,"depth":121,"text":145439},{"id":145457,"depth":121,"text":145458},{"id":145470,"depth":121,"text":145471},{"id":145477,"depth":46,"text":145478,"children":145826},[145827,145828,145829,145830,145831],{"id":145484,"depth":121,"text":145485},{"id":145496,"depth":121,"text":145497},{"id":145549,"depth":121,"text":145550},{"id":145570,"depth":121,"text":145571},{"id":145591,"depth":121,"text":145592},{"id":145617,"depth":46,"text":145618,"children":145833},[145834,145835,145836,145837,145838],{"id":145621,"depth":121,"text":145622},{"id":145671,"depth":121,"text":145672},{"id":145685,"depth":121,"text":145686},{"id":145738,"depth":121,"text":145739},{"id":145779,"depth":121,"text":145780},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":145289,"description":20020},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":145845,"title":145846,"body":145847,"description":20020,"extension":20021,"meta":146496,"navigation":216,"path":146497,"seo":146498,"stem":146499,"__hash__":146500},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":145848,"toc":146477},[145849,145852,145856,145860,145920,145924,145934,145937,145940,145944,145969,145973,145976,145979,145982,145985,145988,145992,145995,145998,146040,146043,146069,146075,146078,146082,146086,146092,146095,146098,146101,146104,146107,146110,146155,146159,146162,146165,146169,146173,146202,146205,146210,146213,146216,146219,146222,146226,146230,146233,146235,146238,146242,146245,146249,146252,146255,146258,146262,146266,146272,146282,146285,146288,146291,146294,146297,146420,146428,146436,146474],[10,145850,145846],{"id":145851},"_7-css引入方式与选择器进阶",[20037,145853,145855],{"id":145854},"_71-css引入方式","7.1 css引入方式",[14,145857,145859],{"id":145858},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[146,145861,145865],{"className":145862,"code":145863,"language":145864,"meta":39,"style":39},"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",[152,145866,145867,145875,145882,145894,145907,145912],{"__ignoreMap":39},[155,145868,145869,145871,145873],{"class":157,"line":158},[155,145870,20959],{"class":171},[155,145872,20011],{"class":69863},[155,145874,69870],{"class":171},[155,145876,145877,145880],{"class":157,"line":46},[155,145878,145879],{"class":69863},"  h1",[155,145881,35397],{"class":171},[155,145883,145884,145887,145889,145892],{"class":157,"line":121},[155,145885,145886],{"class":263},"    color",[155,145888,70000],{"class":171},[155,145890,145891],{"class":263},"blue",[155,145893,21206],{"class":171},[155,145895,145896,145899,145901,145903,145905],{"class":157,"line":180},[155,145897,145898],{"class":263},"    font-size",[155,145900,70000],{"class":171},[155,145902,12010],{"class":263},[155,145904,70055],{"class":167},[155,145906,21206],{"class":171},[155,145908,145909],{"class":157,"line":194},[155,145910,145911],{"class":171},"  }\n",[155,145913,145914,145916,145918],{"class":157,"line":200},[155,145915,70348],{"class":171},[155,145917,20011],{"class":69863},[155,145919,69870],{"class":171},[24,145921,145922,46262],{},[20234,145923,145203],{},[24,145925,95789,145926,145929,145930,145933],{},[152,145927,145928],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[152,145931,145932],{},"\u003Chead>","标签中",[24,145935,145936],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[24,145938,145939],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[14,145941,145943],{"id":145942},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[146,145945,145947],{"className":145862,"code":145946,"language":145864,"meta":39,"style":39},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[152,145948,145949],{"__ignoreMap":39},[155,145950,145951,145953,145955,145957,145959,145962,145965,145967],{"class":157,"line":158},[155,145952,20959],{"class":171},[155,145954,24],{"class":69863},[155,145956,81189],{"class":226},[155,145958,317],{"class":171},[155,145960,145961],{"class":732},"\"color: red; font-size: 16px;\"",[155,145963,145964],{"class":171},">这是一个段落\u003C\u002F",[155,145966,24],{"class":69863},[155,145968,69870],{"class":171},[24,145970,145971,46262],{},[20234,145972,145203],{},[24,145974,145975],{},"①style其实就是标签的属性",[24,145977,145978],{},"②在双引号中间，写法要符合css规范",[24,145980,145981],{},"③可以控制当前的标签设置样式",[24,145983,145984],{},"④书写繁琐，简单时才用",[24,145986,145987],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[14,145989,145991],{"id":145990},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[24,145993,145994],{},"使用最多，单独建一个css文件，然后html引用",[24,145996,145997],{},"①css文件部分： style.css",[146,145999,146001],{"className":145115,"code":146000,"language":145117,"meta":39,"style":39},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[152,146002,146003,146008,146014,146024,146036],{"__ignoreMap":39},[155,146004,146005],{"class":157,"line":158},[155,146006,146007],{"class":161},"\u002F* style.css *\u002F\n",[155,146009,146010,146012],{"class":157,"line":46},[155,146011,10],{"class":69863},[155,146013,35397],{"class":171},[155,146015,146016,146018,146020,146022],{"class":157,"line":121},[155,146017,89468],{"class":263},[155,146019,70000],{"class":171},[155,146021,145891],{"class":263},[155,146023,21206],{"class":171},[155,146025,146026,146028,146030,146032,146034],{"class":157,"line":180},[155,146027,89189],{"class":263},[155,146029,70000],{"class":171},[155,146031,12010],{"class":263},[155,146033,70055],{"class":167},[155,146035,21206],{"class":171},[155,146037,146038],{"class":157,"line":194},[155,146039,21475],{"class":171},[24,146041,146042],{},"②html部分",[146,146044,146046],{"className":145862,"code":146045,"language":145864,"meta":39,"style":39},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[152,146047,146048],{"__ignoreMap":39},[155,146049,146050,146052,146054,146056,146058,146060,146062,146064,146067],{"class":157,"line":158},[155,146051,20959],{"class":171},[155,146053,87568],{"class":69863},[155,146055,87571],{"class":226},[155,146057,317],{"class":171},[155,146059,87576],{"class":732},[155,146061,79620],{"class":226},[155,146063,317],{"class":171},[155,146065,146066],{"class":732},"\"style.css\"",[155,146068,69870],{"class":171},[24,146070,146071,146074],{},[152,146072,146073],{},"\u003Chr>","水平线标签（但是不常用！）",[24,146076,146077],{},"ctrl+0回到页面原来大小",[20037,146079,146081],{"id":146080},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[14,146083,146085],{"id":146084},"_721-快速生成html","7.2.1 快速生成html",[24,146087,146088,146089],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[152,146090,146091],{},"\u003Cdiv>``\u003C\u002Fdiv>",[24,146093,146094],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[24,146096,146097],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[24,146099,146100],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[24,146102,146103],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[24,146105,146106],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[24,146108,146109],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[146,146111,146113],{"className":145862,"code":146112,"language":145864,"meta":39,"style":39},"\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",[152,146114,146115,146120,146125,146130,146135,146140,146145,146150],{"__ignoreMap":39},[155,146116,146117],{"class":157,"line":158},[155,146118,146119],{"class":161},"\u003C!-- Emmet 语法示例 -->\n",[155,146121,146122],{"class":157,"line":46},[155,146123,146124],{"class":161},"\u003C!-- div*3        → 生成3个div -->\n",[155,146126,146127],{"class":157,"line":121},[155,146128,146129],{"class":161},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[155,146131,146132],{"class":157,"line":180},[155,146133,146134],{"class":161},"\u003C!-- div+p        → 兄弟div和p -->\n",[155,146136,146137],{"class":157,"line":194},[155,146138,146139],{"class":161},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[155,146141,146142],{"class":157,"line":200},[155,146143,146144],{"class":161},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[155,146146,146147],{"class":157,"line":213},[155,146148,146149],{"class":161},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[155,146151,146152],{"class":157,"line":220},[155,146153,146154],{"class":161},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[14,146156,146158],{"id":146157},"_722-快速生成css","7.2.2 快速生成css",[24,146160,146161],{},"简写开头",[24,146163,146164],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[20037,146166,146168],{"id":146167},"_73-css复合选择器","7.3 css复合选择器",[14,146170,146172],{"id":146171},"_731-后代选择器","7.3.1 后代选择器",[146,146174,146176],{"className":145115,"code":146175,"language":145117,"meta":39,"style":39},".parent .child {\n  color: blue;\n}\n",[152,146177,146178,146188,146198],{"__ignoreMap":39},[155,146179,146180,146183,146186],{"class":157,"line":158},[155,146181,146182],{"class":226},".parent",[155,146184,146185],{"class":226}," .child",[155,146187,35397],{"class":171},[155,146189,146190,146192,146194,146196],{"class":157,"line":46},[155,146191,89468],{"class":263},[155,146193,70000],{"class":171},[155,146195,145891],{"class":263},[155,146197,21206],{"class":171},[155,146199,146200],{"class":157,"line":121},[155,146201,21475],{"class":171},[24,146203,146204],{},"元素1 元素2 {样式声明}",[24,146206,146207],{},[20234,146208,146209],{},"注意点:",[24,146211,146212],{},"①元素1和元素2中间用空格隔开",[24,146214,146215],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[24,146217,146218],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[24,146220,146221],{},"④元素1和元素2可以是任意基础选择器",[14,146223,146225],{"id":146224},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[24,146227,146228],{},[20234,146229,146209],{},[24,146231,146232],{},"①元素1和元素2中间用大于号隔开",[24,146234,146215],{},[24,146236,146237],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[14,146239,146241],{"id":146240},"_733-并集选择器","7.3.3 并集选择器",[24,146243,146244],{},"元素1，元素2 {样式声明}",[24,146246,146247],{},[20234,146248,146209],{},[24,146250,146251],{},"①元素1和元素2中间用逗号隔开",[24,146253,146254],{},"②逗号可以理解为和的意思",[24,146256,146257],{},"③并集选择器通常用于集体声明",[14,146259,146261],{"id":146260},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[24,146263,146264],{},[20234,146265,146209],{},[24,146267,146268,146269,146271],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[87568,146270],{},"－:visited－:hover－:active。",[24,146273,146274,146275,146278,146279,45530],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[146276,146277],"hover",{}," 、 ",[146280,146281],"first-child",{},[24,146283,146284],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[24,146286,146287],{},"link对没访问的进行设置",[24,146289,146290],{},"vistied对已访问的进行改变",[24,146292,146293],{},"hover鼠标经过就会变",[24,146295,146296],{},"active常按(点)就会变",[146,146298,146300],{"className":145115,"code":146299,"language":145117,"meta":39,"style":39},"\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",[152,146301,146302,146307,146316,146326,146336,146340,146349,146360,146364,146372,146382,146392,146396,146405,146416],{"__ignoreMap":39},[155,146303,146304],{"class":157,"line":158},[155,146305,146306],{"class":161},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[155,146308,146309,146311,146314],{"class":157,"line":46},[155,146310,20318],{"class":69863},[155,146312,146313],{"class":226},":link",[155,146315,35397],{"class":171},[155,146317,146318,146320,146322,146324],{"class":157,"line":121},[155,146319,89468],{"class":263},[155,146321,70000],{"class":171},[155,146323,80932],{"class":263},[155,146325,21206],{"class":171},[155,146327,146328,146330,146332,146334],{"class":157,"line":180},[155,146329,89065],{"class":263},[155,146331,70000],{"class":171},[155,146333,73300],{"class":263},[155,146335,21206],{"class":171},[155,146337,146338],{"class":157,"line":194},[155,146339,21475],{"class":171},[155,146341,146342,146344,146347],{"class":157,"line":200},[155,146343,20318],{"class":69863},[155,146345,146346],{"class":226},":visited",[155,146348,35397],{"class":171},[155,146350,146351,146353,146355,146358],{"class":157,"line":213},[155,146352,89468],{"class":263},[155,146354,70000],{"class":171},[155,146356,146357],{"class":263},"purple",[155,146359,21206],{"class":171},[155,146361,146362],{"class":157,"line":220},[155,146363,21475],{"class":171},[155,146365,146366,146368,146370],{"class":157,"line":245},[155,146367,20318],{"class":69863},[155,146369,79503],{"class":226},[155,146371,35397],{"class":171},[155,146373,146374,146376,146378,146380],{"class":157,"line":251},[155,146375,89468],{"class":263},[155,146377,70000],{"class":171},[155,146379,73452],{"class":263},[155,146381,21206],{"class":171},[155,146383,146384,146386,146388,146390],{"class":157,"line":257},[155,146385,89065],{"class":263},[155,146387,70000],{"class":171},[155,146389,145729],{"class":263},[155,146391,21206],{"class":171},[155,146393,146394],{"class":157,"line":270},[155,146395,21475],{"class":171},[155,146397,146398,146400,146403],{"class":157,"line":276},[155,146399,20318],{"class":69863},[155,146401,146402],{"class":226},":active",[155,146404,35397],{"class":171},[155,146406,146407,146409,146411,146414],{"class":157,"line":297},[155,146408,89468],{"class":263},[155,146410,70000],{"class":171},[155,146412,146413],{"class":263},"green",[155,146415,21206],{"class":171},[155,146417,146418],{"class":157,"line":302},[155,146419,21475],{"class":171},[14,146421,146423,146424,146427],{"id":146422},"_735-伪类选择器","7.3.5 ",[146425,146426],"focus",{},"伪类选择器",[24,146429,146430,146432,146433,146435],{},[146425,146431],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[152,146434,145176],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[146,146437,146439],{"className":145115,"code":146438,"language":145117,"meta":39,"style":39},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[152,146440,146441,146449,146460,146470],{"__ignoreMap":39},[155,146442,146443,146445,146447],{"class":157,"line":158},[155,146444,72384],{"class":69863},[155,146446,80463],{"class":226},[155,146448,35397],{"class":171},[155,146450,146451,146454,146456,146458],{"class":157,"line":46},[155,146452,146453],{"class":263},"  border-color",[155,146455,70000],{"class":171},[155,146457,73452],{"class":263},[155,146459,21206],{"class":171},[155,146461,146462,146464,146466,146468],{"class":157,"line":121},[155,146463,89361],{"class":263},[155,146465,70000],{"class":171},[155,146467,73300],{"class":263},[155,146469,21206],{"class":171},[155,146471,146472],{"class":157,"line":180},[155,146473,21475],{"class":171},[20011,146475,146476],{},"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":39,"searchDepth":46,"depth":46,"links":146478},[146479,146484,146488],{"id":145854,"depth":46,"text":145855,"children":146480},[146481,146482,146483],{"id":145858,"depth":121,"text":145859},{"id":145942,"depth":121,"text":145943},{"id":145990,"depth":121,"text":145991},{"id":146080,"depth":46,"text":146081,"children":146485},[146486,146487],{"id":146084,"depth":121,"text":146085},{"id":146157,"depth":121,"text":146158},{"id":146167,"depth":46,"text":146168,"children":146489},[146490,146491,146492,146493,146494],{"id":146171,"depth":121,"text":146172},{"id":146224,"depth":121,"text":146225},{"id":146240,"depth":121,"text":146241},{"id":146260,"depth":121,"text":146261},{"id":146422,"depth":121,"text":146495},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":145846,"description":20020},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":146502,"title":146503,"body":146504,"description":20020,"extension":20021,"meta":148427,"navigation":216,"path":148428,"seo":148429,"stem":148430,"__hash__":148431},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":146505,"toc":148401},[146506,146509,146513,146522,146526,146552,146557,146560,146563,146566,146569,146573,146576,146586,146594,146598,146633,146638,146641,146644,146647,146650,146654,146657,146666,146670,146683,146688,146691,146694,146697,146701,146704,146708,146711,146766,146769,146800,146803,146857,146861,146864,147030,147153,147156,147159,147162,147165,147169,147172,147176,147179,147182,147186,147189,147220,147247,147275,147278,147282,147308,147351,147355,147449,147452,147479,147482,147485,147488,147491,147494,147497,147500,147503,147506,147510,147567,147594,147598,147646,147650,147691,147693,147696,147699,147702,147705,147709,147801,147804,147807,147810,147814,147937,148138,148142,148146,148149,148152,148155,148159,148162,148165,148190,148193,148196,148199,148202,148205,148209,148217,148279,148282,148340,148343,148346,148349,148352,148355,148358,148361,148398],[10,146507,146503],{"id":146508},"_8-css显示模式与背景特性",[20037,146510,146512],{"id":146511},"_81-css元素显示模式","8.1 css元素显示模式",[24,146514,146515,146516,146518,146519,146521],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[152,146517,144726],{},"自己占一行，比如一行可以放多个",[152,146520,144729],{},"，HTML 元素一般分为块元素和行内元素两种类型",[14,146523,146525],{"id":146524},"_811-块元素","8.1.1 块元素",[24,146527,146528,146529,146531,146532,20293,146535,20293,146537,20293,146539,20293,146542,20293,146545,146548,146549,146551],{},"常见的块元素有",[152,146530,144630],{},"~",[152,146533,146534],{},"\u003Ch6>",[152,146536,144656],{},[152,146538,144726],{},[152,146540,146541],{},"\u003Cul>",[152,146543,146544],{},"\u003Col>",[152,146546,146547],{},"\u003Cli>","等，其中 ",[152,146550,144726],{}," 标签是最典型的块元素",[24,146553,146554],{},[20234,146555,146556],{},"块级元素的特点：",[24,146558,146559],{},"① 比较霸道，自己独占一行。",[24,146561,146562],{},"② 高度，宽度、外边距以及内边距都可以控制。",[24,146564,146565],{},"③ 宽度默认是容器（父级宽度）的100%。",[24,146567,146568],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[24,146570,146571],{},[20234,146572,20122],{},[24,146574,146575],{},"①文字类的元素内不能使用块级元素",[24,146577,95812,146578,146580,146581,146583,146584],{},[152,146579,144656],{}," 标签主要用于存放文字，因此 ",[152,146582,144656],{}," 里面不能放块级元素，特别是不能放",[152,146585,144726],{},[24,146587,146588,146589,146531,146591,146593],{},"⑥同理， ",[152,146590,144630],{},[152,146592,146534],{},"等都是文字类块级标签，里面也不能放其他块级元素",[14,146595,146597],{"id":146596},"_812-行内元素","8.1.2 行内元素",[24,146599,146600,146601,20293,146603,20293,146606,20293,146609,20293,146612,20293,146615,20293,146618,20293,146621,20293,146624,20293,146627,146629,146630,146632],{},"常见的行内元素有 ",[152,146602,144888],{},[152,146604,146605],{},"\u003Cstrong>",[152,146607,146608],{},"\u003Cb>",[152,146610,146611],{},"\u003Cem>",[152,146613,146614],{},"\u003Ci>",[152,146616,146617],{},"\u003Cdel>",[152,146619,146620],{},"\u003Cs>",[152,146622,146623],{},"\u003Cins>",[152,146625,146626],{},"\u003Cu>",[152,146628,144729],{}," 等，其中 ",[152,146631,144729],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[24,146634,146635],{},[20234,146636,146637],{},"特点：",[24,146639,146640],{},"① 相邻行内元素在一行上，一行可以显示多个。",[24,146642,146643],{},"② 高、宽直接设置是无效的。",[24,146645,146646],{},"③ 默认宽度就是它本身内容的宽度。",[24,146648,146649],{},"④ 行内元素只能容纳文本或其他行内元素。",[24,146651,146652],{},[20234,146653,20122],{},[24,146655,146656],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[24,146658,146659,146660,146662,146663,146665],{},"②特殊情况链接 ",[152,146661,144888],{}," 里面可以放块级元素，但是给 ",[152,146664,144888],{}," 转换一下块级模式最安全",[14,146667,146669],{"id":146668},"_813-行内块元素","8.1.3 行内块元素",[24,146671,146672,146673,20293,146676,20293,146679,146682],{},"在行内元素中有几个特殊的标签 —— ",[152,146674,146675],{},"\u003Cimg \u002F>",[152,146677,146678],{},"\u003Cinput \u002F>",[152,146680,146681],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[24,146684,146685],{},[20234,146686,146687],{},"行内块元素的特点：",[24,146689,146690],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[24,146692,146693],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[24,146695,146696],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[14,146698,146700],{"id":146699},"_814-总结","8.1.4 总结",[37,146702],{"style":144971,"src":146703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[14,146705,146707],{"id":146706},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[24,146709,146710],{},"①转换为块元素：display:block;",[146,146712,146714],{"className":145115,"code":146713,"language":145117,"meta":39,"style":39},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[152,146715,146716,146721,146727,146738,146750,146762],{"__ignoreMap":39},[155,146717,146718],{"class":157,"line":158},[155,146719,146720],{"class":161},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[155,146722,146723,146725],{"class":157,"line":46},[155,146724,20318],{"class":69863},[155,146726,35397],{"class":171},[155,146728,146729,146732,146734,146736],{"class":157,"line":121},[155,146730,146731],{"class":263},"  display",[155,146733,70000],{"class":171},[155,146735,79432],{"class":263},[155,146737,21206],{"class":171},[155,146739,146740,146742,146744,146746,146748],{"class":157,"line":180},[155,146741,89131],{"class":263},[155,146743,70000],{"class":171},[155,146745,20389],{"class":263},[155,146747,70055],{"class":167},[155,146749,21206],{"class":171},[155,146751,146752,146754,146756,146758,146760],{"class":157,"line":194},[155,146753,89351],{"class":263},[155,146755,70000],{"class":171},[155,146757,20473],{"class":263},[155,146759,70055],{"class":167},[155,146761,21206],{"class":171},[155,146763,146764],{"class":157,"line":200},[155,146765,21475],{"class":171},[24,146767,146768],{},"②转换为行内元素：display:inline;",[146,146770,146772],{"className":145115,"code":146771,"language":145117,"meta":39,"style":39},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[152,146773,146774,146779,146785,146796],{"__ignoreMap":39},[155,146775,146776],{"class":157,"line":158},[155,146777,146778],{"class":161},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[155,146780,146781,146783],{"class":157,"line":46},[155,146782,70174],{"class":69863},[155,146784,35397],{"class":171},[155,146786,146787,146789,146791,146794],{"class":157,"line":121},[155,146788,146731],{"class":263},[155,146790,70000],{"class":171},[155,146792,146793],{"class":263},"inline",[155,146795,21206],{"class":171},[155,146797,146798],{"class":157,"line":180},[155,146799,21475],{"class":171},[24,146801,146802],{},"③转换为行内块：display:inline-block;",[146,146804,146806],{"className":145115,"code":146805,"language":145117,"meta":39,"style":39},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[152,146807,146808,146813,146819,146829,146841,146853],{"__ignoreMap":39},[155,146809,146810],{"class":157,"line":158},[155,146811,146812],{"class":161},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[155,146814,146815,146817],{"class":157,"line":46},[155,146816,155],{"class":69863},[155,146818,35397],{"class":171},[155,146820,146821,146823,146825,146827],{"class":157,"line":121},[155,146822,146731],{"class":263},[155,146824,70000],{"class":171},[155,146826,90946],{"class":263},[155,146828,21206],{"class":171},[155,146830,146831,146833,146835,146837,146839],{"class":157,"line":180},[155,146832,89131],{"class":263},[155,146834,70000],{"class":171},[155,146836,20672],{"class":263},[155,146838,70055],{"class":167},[155,146840,21206],{"class":171},[155,146842,146843,146845,146847,146849,146851],{"class":157,"line":194},[155,146844,89351],{"class":263},[155,146846,70000],{"class":171},[155,146848,14194],{"class":263},[155,146850,70055],{"class":167},[155,146852,21206],{"class":171},[155,146854,146855],{"class":157,"line":200},[155,146856,21475],{"class":171},[14,146858,146860],{"id":146859},"_816-小米侧边栏","8.1.6 小米侧边栏",[37,146862],{"style":144971,"src":146863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[146,146865,146867],{"className":145862,"code":146866,"language":145864,"meta":39,"style":39},"\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",[152,146868,146869,146874,146889,146908,146927,146946,146965,146984,147003,147022],{"__ignoreMap":39},[155,146870,146871],{"class":157,"line":158},[155,146872,146873],{"class":161},"\u003C!-- 小米侧边栏案例 -->\n",[155,146875,146876,146878,146880,146882,146884,146887],{"class":157,"line":46},[155,146877,20959],{"class":171},[155,146879,70174],{"class":69863},[155,146881,72049],{"class":226},[155,146883,317],{"class":171},[155,146885,146886],{"class":732},"\"sidebar\"",[155,146888,69870],{"class":171},[155,146890,146891,146893,146895,146897,146899,146901,146904,146906],{"class":157,"line":121},[155,146892,70707],{"class":171},[155,146894,20318],{"class":69863},[155,146896,79620],{"class":226},[155,146898,317],{"class":171},[155,146900,79625],{"class":732},[155,146902,146903],{"class":171},">手机 电话卡\u003C\u002F",[155,146905,20318],{"class":69863},[155,146907,69870],{"class":171},[155,146909,146910,146912,146914,146916,146918,146920,146923,146925],{"class":157,"line":180},[155,146911,70707],{"class":171},[155,146913,20318],{"class":69863},[155,146915,79620],{"class":226},[155,146917,317],{"class":171},[155,146919,79625],{"class":732},[155,146921,146922],{"class":171},">电视 盒子\u003C\u002F",[155,146924,20318],{"class":69863},[155,146926,69870],{"class":171},[155,146928,146929,146931,146933,146935,146937,146939,146942,146944],{"class":157,"line":194},[155,146930,70707],{"class":171},[155,146932,20318],{"class":69863},[155,146934,79620],{"class":226},[155,146936,317],{"class":171},[155,146938,79625],{"class":732},[155,146940,146941],{"class":171},">笔记本 平板\u003C\u002F",[155,146943,20318],{"class":69863},[155,146945,69870],{"class":171},[155,146947,146948,146950,146952,146954,146956,146958,146961,146963],{"class":157,"line":200},[155,146949,70707],{"class":171},[155,146951,20318],{"class":69863},[155,146953,79620],{"class":226},[155,146955,317],{"class":171},[155,146957,79625],{"class":732},[155,146959,146960],{"class":171},">出行 穿戴\u003C\u002F",[155,146962,20318],{"class":69863},[155,146964,69870],{"class":171},[155,146966,146967,146969,146971,146973,146975,146977,146980,146982],{"class":157,"line":213},[155,146968,70707],{"class":171},[155,146970,20318],{"class":69863},[155,146972,79620],{"class":226},[155,146974,317],{"class":171},[155,146976,79625],{"class":732},[155,146978,146979],{"class":171},">智能 路由器\u003C\u002F",[155,146981,20318],{"class":69863},[155,146983,69870],{"class":171},[155,146985,146986,146988,146990,146992,146994,146996,146999,147001],{"class":157,"line":220},[155,146987,70707],{"class":171},[155,146989,20318],{"class":69863},[155,146991,79620],{"class":226},[155,146993,317],{"class":171},[155,146995,79625],{"class":732},[155,146997,146998],{"class":171},">健康 儿童\u003C\u002F",[155,147000,20318],{"class":69863},[155,147002,69870],{"class":171},[155,147004,147005,147007,147009,147011,147013,147015,147018,147020],{"class":157,"line":245},[155,147006,70707],{"class":171},[155,147008,20318],{"class":69863},[155,147010,79620],{"class":226},[155,147012,317],{"class":171},[155,147014,79625],{"class":732},[155,147016,147017],{"class":171},">耳机 音响\u003C\u002F",[155,147019,20318],{"class":69863},[155,147021,69870],{"class":171},[155,147023,147024,147026,147028],{"class":157,"line":251},[155,147025,70348],{"class":171},[155,147027,70174],{"class":69863},[155,147029,69870],{"class":171},[146,147031,147033],{"className":145115,"code":147032,"language":145117,"meta":39,"style":39},".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",[152,147034,147035,147044,147054,147067,147079,147091,147103,147113,147124,147128,147138,147149],{"__ignoreMap":39},[155,147036,147037,147040,147042],{"class":157,"line":158},[155,147038,147039],{"class":226},".sidebar",[155,147041,21311],{"class":69863},[155,147043,35397],{"class":171},[155,147045,147046,147048,147050,147052],{"class":157,"line":46},[155,147047,146731],{"class":263},[155,147049,70000],{"class":171},[155,147051,79432],{"class":263},[155,147053,21206],{"class":171},[155,147055,147056,147058,147060,147063,147065],{"class":157,"line":121},[155,147057,89131],{"class":263},[155,147059,70000],{"class":171},[155,147061,147062],{"class":263},"234",[155,147064,70055],{"class":167},[155,147066,21206],{"class":171},[155,147068,147069,147071,147073,147075,147077],{"class":157,"line":180},[155,147070,89351],{"class":263},[155,147072,70000],{"class":171},[155,147074,20523],{"class":263},[155,147076,70055],{"class":167},[155,147078,21206],{"class":171},[155,147080,147081,147083,147085,147087,147089],{"class":157,"line":194},[155,147082,145799],{"class":263},[155,147084,70000],{"class":171},[155,147086,20523],{"class":263},[155,147088,70055],{"class":167},[155,147090,21206],{"class":171},[155,147092,147093,147095,147097,147099,147101],{"class":157,"line":200},[155,147094,89386],{"class":263},[155,147096,70000],{"class":171},[155,147098,14194],{"class":263},[155,147100,70055],{"class":167},[155,147102,21206],{"class":171},[155,147104,147105,147107,147109,147111],{"class":157,"line":213},[155,147106,89468],{"class":263},[155,147108,70000],{"class":171},[155,147110,79405],{"class":263},[155,147112,21206],{"class":171},[155,147114,147115,147117,147119,147122],{"class":157,"line":220},[155,147116,89441],{"class":263},[155,147118,70000],{"class":171},[155,147120,147121],{"class":263},"#55585a",[155,147123,21206],{"class":171},[155,147125,147126],{"class":157,"line":245},[155,147127,21475],{"class":171},[155,147129,147130,147132,147134,147136],{"class":157,"line":251},[155,147131,147039],{"class":226},[155,147133,21311],{"class":69863},[155,147135,79503],{"class":226},[155,147137,35397],{"class":171},[155,147139,147140,147142,147144,147147],{"class":157,"line":257},[155,147141,89441],{"class":263},[155,147143,70000],{"class":171},[155,147145,147146],{"class":263},"#ff6700",[155,147148,21206],{"class":171},[155,147150,147151],{"class":157,"line":270},[155,147152,21475],{"class":171},[37,147154],{"style":144971,"src":147155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[24,147157,147158],{},"行高=盒子高度：实现文字的垂直居中",[24,147160,147161],{},"原理讲解：",[37,147163],{"style":144971,"src":147164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[20037,147166,147168],{"id":147167},"_82-css背景","8.2 css背景",[24,147170,147171],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[14,147173,147175],{"id":147174},"_821-背景颜色","8.2.1 背景颜色",[24,147177,147178],{},"background-color:颜色值;",[24,147180,147181],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[14,147183,147185],{"id":147184},"_822-背景图片","8.2.2 背景图片",[24,147187,147188],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[146,147190,147192],{"className":145115,"code":147191,"language":145117,"meta":39,"style":39},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[152,147193,147194,147200,147216],{"__ignoreMap":39},[155,147195,147196,147198],{"class":157,"line":158},[155,147197,70174],{"class":69863},[155,147199,35397],{"class":171},[155,147201,147202,147205,147207,147209,147211,147214],{"class":157,"line":46},[155,147203,147204],{"class":263},"  background-image",[155,147206,70000],{"class":171},[155,147208,80289],{"class":263},[155,147210,230],{"class":171},[155,147212,147213],{"class":323},"images\u002Fbg.png",[155,147215,22596],{"class":171},[155,147217,147218],{"class":157,"line":121},[155,147219,21475],{"class":171},[20222,147221,147222,147231],{},[20225,147223,147224],{},[20228,147225,147226,147229],{},[20231,147227,147228],{"align":43527},"参数值",[20231,147230,121259],{"align":43527},[20269,147232,147233,147240],{},[20228,147234,147235,147237],{},[20274,147236,73300],{"align":43527},[20274,147238,147239],{"align":43527},"无背景图（默认的）",[20228,147241,147242,147244],{},[20274,147243,80289],{"align":43527},[20274,147245,147246],{"align":43527},"使用绝对或相对地址指定背景图像",[146,147248,147249],{"className":145115,"code":147191,"language":145117,"meta":39,"style":39},[152,147250,147251,147257,147271],{"__ignoreMap":39},[155,147252,147253,147255],{"class":157,"line":158},[155,147254,70174],{"class":69863},[155,147256,35397],{"class":171},[155,147258,147259,147261,147263,147265,147267,147269],{"class":157,"line":46},[155,147260,147204],{"class":263},[155,147262,70000],{"class":171},[155,147264,80289],{"class":263},[155,147266,230],{"class":171},[155,147268,147213],{"class":323},[155,147270,22596],{"class":171},[155,147272,147273],{"class":157,"line":121},[155,147274,21475],{"class":171},[24,147276,147277],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[14,147279,147281],{"id":147280},"_823-背景平铺","8.2.3 背景平铺",[146,147283,147285],{"className":145115,"code":147284,"language":145117,"meta":39,"style":39},"div {\n  background-repeat: no-repeat;\n}\n",[152,147286,147287,147293,147304],{"__ignoreMap":39},[155,147288,147289,147291],{"class":157,"line":158},[155,147290,70174],{"class":69863},[155,147292,35397],{"class":171},[155,147294,147295,147298,147300,147302],{"class":157,"line":46},[155,147296,147297],{"class":263},"  background-repeat",[155,147299,70000],{"class":171},[155,147301,80299],{"class":263},[155,147303,21206],{"class":171},[155,147305,147306],{"class":157,"line":121},[155,147307,21475],{"class":171},[20222,147309,147310,147318],{},[20225,147311,147312],{},[20228,147313,147314,147316],{},[20231,147315,147228],{"align":43527},[20231,147317,121259],{"align":43527},[20269,147319,147320,147328,147335,147343],{},[20228,147321,147322,147325],{},[20274,147323,147324],{"align":43527},"repeat",[20274,147326,147327],{"align":43527},"背景图像在纵向和横向上平铺（默认的）",[20228,147329,147330,147332],{},[20274,147331,80299],{"align":43527},[20274,147333,147334],{"align":43527},"背景图像不平铺",[20228,147336,147337,147340],{},[20274,147338,147339],{"align":43527},"repeat-x",[20274,147341,147342],{"align":43527},"背景图像在横向上平铺",[20228,147344,147345,147348],{},[20274,147346,147347],{"align":43527},"repeat-y",[20274,147349,147350],{"align":43527},"背景图像在纵向平铺",[14,147352,147354],{"id":147353},"_824-背景图片位置","8.2.4 背景图片位置",[146,147356,147358],{"className":145115,"code":147357,"language":145117,"meta":39,"style":39},"\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",[152,147359,147360,147365,147371,147385,147389,147394,147400,147416,147420,147425,147431,147445],{"__ignoreMap":39},[155,147361,147362],{"class":157,"line":158},[155,147363,147364],{"class":161},"\u002F* 方位名词 *\u002F\n",[155,147366,147367,147369],{"class":157,"line":46},[155,147368,70174],{"class":69863},[155,147370,35397],{"class":171},[155,147372,147373,147376,147378,147380,147383],{"class":157,"line":121},[155,147374,147375],{"class":263},"  background-position",[155,147377,70000],{"class":171},[155,147379,70155],{"class":263},[155,147381,147382],{"class":263}," top",[155,147384,21206],{"class":171},[155,147386,147387],{"class":157,"line":180},[155,147388,21475],{"class":171},[155,147390,147391],{"class":157,"line":194},[155,147392,147393],{"class":161},"\u002F* 精确单位 *\u002F\n",[155,147395,147396,147398],{"class":157,"line":200},[155,147397,70174],{"class":69863},[155,147399,35397],{"class":171},[155,147401,147402,147404,147406,147408,147410,147412,147414],{"class":157,"line":213},[155,147403,147375],{"class":263},[155,147405,70000],{"class":171},[155,147407,3458],{"class":263},[155,147409,70055],{"class":167},[155,147411,76067],{"class":263},[155,147413,70055],{"class":167},[155,147415,21206],{"class":171},[155,147417,147418],{"class":157,"line":220},[155,147419,21475],{"class":171},[155,147421,147422],{"class":157,"line":245},[155,147423,147424],{"class":161},"\u002F* 混合单位 *\u002F\n",[155,147426,147427,147429],{"class":157,"line":251},[155,147428,70174],{"class":69863},[155,147430,35397],{"class":171},[155,147432,147433,147435,147437,147439,147441,147443],{"class":157,"line":257},[155,147434,147375],{"class":263},[155,147436,70000],{"class":171},[155,147438,3458],{"class":263},[155,147440,70055],{"class":167},[155,147442,36937],{"class":263},[155,147444,21206],{"class":171},[155,147446,147447],{"class":157,"line":270},[155,147448,21475],{"class":171},[24,147450,147451],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[20222,147453,147454,147462],{},[20225,147455,147456],{},[20228,147457,147458,147460],{},[20231,147459,147228],{"align":43527},[20231,147461,45659],{"align":43527},[20269,147463,147464,147471],{},[20228,147465,147466,147468],{},[20274,147467,70531],{"align":43527},[20274,147469,147470],{"align":43527},"百分数|由浮点数和单位标识符组成的长度值",[20228,147472,147473,147476],{},[20274,147474,147475],{"align":43527},"position",[20274,147477,147478],{"align":43527},"top|center|bottom|left|center|right 方位名词",[24,147480,147481],{},"其他说明：",[24,147483,147484],{},"①参数是方位名词",[24,147486,147487],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[24,147489,147490],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[24,147492,147493],{},"②参数是精确单位",[24,147495,147496],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[24,147498,147499],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[24,147501,147502],{},"③参数是混合单位",[24,147504,147505],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[14,147507,147509],{"id":147508},"_825-背景图片固定","8.2.5 背景图片固定",[146,147511,147513],{"className":145115,"code":147512,"language":145117,"meta":39,"style":39},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[152,147514,147515,147520,147526,147538,147542,147547,147553,147563],{"__ignoreMap":39},[155,147516,147517],{"class":157,"line":158},[155,147518,147519],{"class":161},"\u002F* 背景滚动（默认） *\u002F\n",[155,147521,147522,147524],{"class":157,"line":46},[155,147523,70174],{"class":69863},[155,147525,35397],{"class":171},[155,147527,147528,147531,147533,147536],{"class":157,"line":121},[155,147529,147530],{"class":263},"  background-attachment",[155,147532,70000],{"class":171},[155,147534,147535],{"class":263},"scroll",[155,147537,21206],{"class":171},[155,147539,147540],{"class":157,"line":180},[155,147541,21475],{"class":171},[155,147543,147544],{"class":157,"line":194},[155,147545,147546],{"class":161},"\u002F* 背景固定 *\u002F\n",[155,147548,147549,147551],{"class":157,"line":200},[155,147550,70174],{"class":69863},[155,147552,35397],{"class":171},[155,147554,147555,147557,147559,147561],{"class":157,"line":213},[155,147556,147530],{"class":263},[155,147558,70000],{"class":171},[155,147560,104796],{"class":263},[155,147562,21206],{"class":171},[155,147564,147565],{"class":157,"line":220},[155,147566,21475],{"class":171},[20222,147568,147569,147578],{},[20225,147570,147571],{},[20228,147572,147573,147576],{},[20231,147574,147575],{"align":43527},"参数",[20231,147577,121259],{"align":43527},[20269,147579,147580,147587],{},[20228,147581,147582,147584],{},[20274,147583,147535],{"align":43527},[20274,147585,147586],{"align":43527},"背景图像是随对象内容滚动",[20228,147588,147589,147591],{},[20274,147590,104796],{"align":43527},[20274,147592,147593],{"align":43527},"背景图像固定",[14,147595,147597],{"id":147596},"_826-背景样式合写","8.2.6 背景样式合写",[146,147599,147601],{"className":145115,"code":147600,"language":145117,"meta":39,"style":39},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[152,147602,147603,147608,147614,147642],{"__ignoreMap":39},[155,147604,147605],{"class":157,"line":158},[155,147606,147607],{"class":161},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[155,147609,147610,147612],{"class":157,"line":46},[155,147611,70174],{"class":69863},[155,147613,35397],{"class":171},[155,147615,147616,147618,147620,147622,147625,147627,147629,147631,147633,147636,147638,147640],{"class":157,"line":121},[155,147617,89174],{"class":263},[155,147619,70000],{"class":171},[155,147621,79405],{"class":263},[155,147623,147624],{"class":263}," url",[155,147626,230],{"class":171},[155,147628,147213],{"class":323},[155,147630,33541],{"class":171},[155,147632,80299],{"class":263},[155,147634,147635],{"class":263}," fixed",[155,147637,36937],{"class":263},[155,147639,147382],{"class":263},[155,147641,21206],{"class":171},[155,147643,147644],{"class":157,"line":180},[155,147645,21475],{"class":171},[14,147647,147649],{"id":147648},"_827-背景色半透明","8.2.7 背景色半透明",[146,147651,147653],{"className":145115,"code":147652,"language":145117,"meta":39,"style":39},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[152,147654,147655,147661,147687],{"__ignoreMap":39},[155,147656,147657,147659],{"class":157,"line":158},[155,147658,70174],{"class":69863},[155,147660,35397],{"class":171},[155,147662,147663,147665,147667,147669,147671,147673,147675,147677,147679,147681,147683,147685],{"class":157,"line":46},[155,147664,89174],{"class":263},[155,147666,70000],{"class":171},[155,147668,73673],{"class":263},[155,147670,230],{"class":171},[155,147672,1109],{"class":263},[155,147674,7589],{"class":171},[155,147676,1109],{"class":263},[155,147678,7589],{"class":171},[155,147680,1109],{"class":263},[155,147682,7589],{"class":171},[155,147684,119084],{"class":263},[155,147686,22596],{"class":171},[155,147688,147689],{"class":157,"line":121},[155,147690,21475],{"class":171},[24,147692,117959],{},[24,147694,147695],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[24,147697,147698],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[24,147700,147701],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[24,147703,147704],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[14,147706,147708],{"id":147707},"_828-总结","8.2.8 总结",[20222,147710,147711,147722],{},[20225,147712,147713],{},[20228,147714,147715,147718,147720],{},[20231,147716,147717],{"align":43527},"属性",[20231,147719,121259],{"align":43527},[20231,147721,20237],{"align":43527},[20269,147723,147724,147735,147746,147757,147768,147779,147790],{},[20228,147725,147726,147729,147732],{},[20274,147727,147728],{"align":43527},"background-color",[20274,147730,147731],{"align":43527},"背景颜色",[20274,147733,147734],{"align":43527},"预定义的颜色值\u002F十六进制\u002FRGB代码",[20228,147736,147737,147740,147743],{},[20274,147738,147739],{"align":43527},"background-image",[20274,147741,147742],{"align":43527},"背景图片",[20274,147744,147745],{"align":43527},"url(图片路径)",[20228,147747,147748,147751,147754],{},[20274,147749,147750],{"align":43527},"background-repeat",[20274,147752,147753],{"align":43527},"是否平铺",[20274,147755,147756],{"align":43527},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[20228,147758,147759,147762,147765],{},[20274,147760,147761],{"align":43527},"background-position",[20274,147763,147764],{"align":43527},"背景位置",[20274,147766,147767],{"align":43527},"length\u002Fposition 分别是x和y坐标",[20228,147769,147770,147773,147776],{},[20274,147771,147772],{"align":43527},"background-attachment",[20274,147774,147775],{"align":43527},"背景附着",[20274,147777,147778],{"align":43527},"scroll(背景滚动) \u002Ffixed (背景固定)",[20228,147780,147781,147784,147787],{},[20274,147782,147783],{"align":43527},"背景简写",[20274,147785,147786],{"align":43527},"书写更简单",[20274,147788,147789],{"align":43527},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[20228,147791,147792,147795,147798],{},[20274,147793,147794],{"align":43527},"背景半透明",[20274,147796,147797],{"align":43527},"背景颜色半透明",[20274,147799,147800],{"align":43527},"background: rgba(0,0,0.3); 后面必须是4个值",[24,147802,147803],{},"颜色渐变：",[37,147805],{"style":144971,"src":147806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[37,147808],{"style":144971,"src":147809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[14,147811,147813],{"id":147812},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[146,147815,147817],{"className":145862,"code":147816,"language":145864,"meta":39,"style":39},"\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",[152,147818,147819,147834,147853,147872,147891,147910,147929],{"__ignoreMap":39},[155,147820,147821,147823,147825,147827,147829,147832],{"class":157,"line":158},[155,147822,20959],{"class":171},[155,147824,70174],{"class":69863},[155,147826,72049],{"class":226},[155,147828,317],{"class":171},[155,147830,147831],{"class":732},"\"nav\"",[155,147833,69870],{"class":171},[155,147835,147836,147838,147840,147842,147844,147846,147849,147851],{"class":157,"line":46},[155,147837,70707],{"class":171},[155,147839,20318],{"class":69863},[155,147841,79620],{"class":226},[155,147843,317],{"class":171},[155,147845,79625],{"class":732},[155,147847,147848],{"class":171},">五彩导航1\u003C\u002F",[155,147850,20318],{"class":69863},[155,147852,69870],{"class":171},[155,147854,147855,147857,147859,147861,147863,147865,147868,147870],{"class":157,"line":121},[155,147856,70707],{"class":171},[155,147858,20318],{"class":69863},[155,147860,79620],{"class":226},[155,147862,317],{"class":171},[155,147864,79625],{"class":732},[155,147866,147867],{"class":171},">五彩导航2\u003C\u002F",[155,147869,20318],{"class":69863},[155,147871,69870],{"class":171},[155,147873,147874,147876,147878,147880,147882,147884,147887,147889],{"class":157,"line":180},[155,147875,70707],{"class":171},[155,147877,20318],{"class":69863},[155,147879,79620],{"class":226},[155,147881,317],{"class":171},[155,147883,79625],{"class":732},[155,147885,147886],{"class":171},">五彩导航3\u003C\u002F",[155,147888,20318],{"class":69863},[155,147890,69870],{"class":171},[155,147892,147893,147895,147897,147899,147901,147903,147906,147908],{"class":157,"line":194},[155,147894,70707],{"class":171},[155,147896,20318],{"class":69863},[155,147898,79620],{"class":226},[155,147900,317],{"class":171},[155,147902,79625],{"class":732},[155,147904,147905],{"class":171},">五彩导航4\u003C\u002F",[155,147907,20318],{"class":69863},[155,147909,69870],{"class":171},[155,147911,147912,147914,147916,147918,147920,147922,147925,147927],{"class":157,"line":200},[155,147913,70707],{"class":171},[155,147915,20318],{"class":69863},[155,147917,79620],{"class":226},[155,147919,317],{"class":171},[155,147921,79625],{"class":732},[155,147923,147924],{"class":171},">五彩导航5\u003C\u002F",[155,147926,20318],{"class":69863},[155,147928,69870],{"class":171},[155,147930,147931,147933,147935],{"class":157,"line":213},[155,147932,70348],{"class":171},[155,147934,70174],{"class":69863},[155,147936,69870],{"class":171},[146,147938,147940],{"className":145115,"code":147939,"language":145117,"meta":39,"style":39},".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",[152,147941,147942,147951,147961,147973,147985,147995,148007,148017,148021,148046,148069,148092,148115],{"__ignoreMap":39},[155,147943,147944,147947,147949],{"class":157,"line":158},[155,147945,147946],{"class":226},".nav",[155,147948,21311],{"class":69863},[155,147950,35397],{"class":171},[155,147952,147953,147955,147957,147959],{"class":157,"line":46},[155,147954,146731],{"class":263},[155,147956,70000],{"class":171},[155,147958,90946],{"class":263},[155,147960,21206],{"class":171},[155,147962,147963,147965,147967,147969,147971],{"class":157,"line":121},[155,147964,89131],{"class":263},[155,147966,70000],{"class":171},[155,147968,523],{"class":263},[155,147970,70055],{"class":167},[155,147972,21206],{"class":171},[155,147974,147975,147977,147979,147981,147983],{"class":157,"line":180},[155,147976,89351],{"class":263},[155,147978,70000],{"class":171},[155,147980,20910],{"class":263},[155,147982,70055],{"class":167},[155,147984,21206],{"class":171},[155,147986,147987,147989,147991,147993],{"class":157,"line":194},[155,147988,89089],{"class":263},[155,147990,70000],{"class":171},[155,147992,70155],{"class":263},[155,147994,21206],{"class":171},[155,147996,147997,147999,148001,148003,148005],{"class":157,"line":200},[155,147998,145799],{"class":263},[155,148000,70000],{"class":171},[155,148002,20910],{"class":263},[155,148004,70055],{"class":167},[155,148006,21206],{"class":171},[155,148008,148009,148011,148013,148015],{"class":157,"line":213},[155,148010,89468],{"class":263},[155,148012,70000],{"class":171},[155,148014,79405],{"class":263},[155,148016,21206],{"class":171},[155,148018,148019],{"class":157,"line":220},[155,148020,21475],{"class":171},[155,148022,148023,148025,148027,148030,148032,148034,148037,148039,148041,148043],{"class":157,"line":245},[155,148024,147946],{"class":226},[155,148026,21311],{"class":69863},[155,148028,148029],{"class":226},":nth-child",[155,148031,230],{"class":171},[155,148033,329],{"class":263},[155,148035,148036],{"class":171},") { ",[155,148038,147728],{"class":263},[155,148040,70000],{"class":171},[155,148042,147146],{"class":263},[155,148044,148045],{"class":171},"; }\n",[155,148047,148048,148050,148052,148054,148056,148058,148060,148062,148064,148067],{"class":157,"line":251},[155,148049,147946],{"class":226},[155,148051,21311],{"class":69863},[155,148053,148029],{"class":226},[155,148055,230],{"class":171},[155,148057,360],{"class":263},[155,148059,148036],{"class":171},[155,148061,147728],{"class":263},[155,148063,70000],{"class":171},[155,148065,148066],{"class":263},"#ff0000",[155,148068,148045],{"class":171},[155,148070,148071,148073,148075,148077,148079,148081,148083,148085,148087,148090],{"class":157,"line":257},[155,148072,147946],{"class":226},[155,148074,21311],{"class":69863},[155,148076,148029],{"class":226},[155,148078,230],{"class":171},[155,148080,4444],{"class":263},[155,148082,148036],{"class":171},[155,148084,147728],{"class":263},[155,148086,70000],{"class":171},[155,148088,148089],{"class":263},"#00a4ff",[155,148091,148045],{"class":171},[155,148093,148094,148096,148098,148100,148102,148104,148106,148108,148110,148113],{"class":157,"line":270},[155,148095,147946],{"class":226},[155,148097,21311],{"class":69863},[155,148099,148029],{"class":226},[155,148101,230],{"class":171},[155,148103,1264],{"class":263},[155,148105,148036],{"class":171},[155,148107,147728],{"class":263},[155,148109,70000],{"class":171},[155,148111,148112],{"class":263},"#ff00ff",[155,148114,148045],{"class":171},[155,148116,148117,148119,148121,148123,148125,148127,148129,148131,148133,148136],{"class":157,"line":276},[155,148118,147946],{"class":226},[155,148120,21311],{"class":69863},[155,148122,148029],{"class":226},[155,148124,230],{"class":171},[155,148126,350],{"class":263},[155,148128,148036],{"class":171},[155,148130,147728],{"class":263},[155,148132,70000],{"class":171},[155,148134,148135],{"class":263},"#00ff00",[155,148137,148045],{"class":171},[20037,148139,148141],{"id":148140},"_83-css三大特性","8.3 css三大特性",[14,148143,148145],{"id":148144},"_831-层叠性","8.3.1 层叠性",[24,148147,148148],{},"为了解决样式冲突问题",[24,148150,148151],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[24,148153,148154],{},"   ②样式不冲突，不会层叠",[14,148156,148158],{"id":148157},"_832-继承性","8.3.2 继承性",[24,148160,148161],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[24,148163,148164],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[146,148166,148168],{"className":145115,"code":148167,"language":145117,"meta":39,"style":39},"p {\n  color: #333;\n}\n",[152,148169,148170,148176,148186],{"__ignoreMap":39},[155,148171,148172,148174],{"class":157,"line":158},[155,148173,24],{"class":69863},[155,148175,35397],{"class":171},[155,148177,148178,148180,148182,148184],{"class":157,"line":46},[155,148179,89468],{"class":263},[155,148181,70000],{"class":171},[155,148183,80932],{"class":263},[155,148185,21206],{"class":171},[155,148187,148188],{"class":157,"line":121},[155,148189,21475],{"class":171},[37,148191],{"style":144971,"src":148192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[24,148194,148195],{},"解释：①行高可以跟单位也可以不跟单位",[24,148197,148198],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[24,148200,148201],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[24,148203,148204],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[14,148206,148208],{"id":148207},"_833-优先级","8.3.3 优先级",[28,148210,148211,148214],{},[31,148212,148213],{},"选择器相同，则执行层叠性",[31,148215,148216],{},"选择器不同，则根据选择器权重执行",[20222,148218,148219,148229],{},[20225,148220,148221],{},[20228,148222,148223,148226],{},[20231,148224,148225],{"align":43527},"选择器",[20231,148227,148228],{"align":43527},"选择器权重",[20269,148230,148231,148239,148247,148255,148263,148271],{},[20228,148232,148233,148236],{},[20274,148234,148235],{"align":43527},"继承 或者*",[20274,148237,148238],{"align":43527},"0，0，0，0",[20228,148240,148241,148244],{},[20274,148242,148243],{"align":43527},"标签选择器",[20274,148245,148246],{"align":43527},"0，0，0，1",[20228,148248,148249,148252],{},[20274,148250,148251],{"align":43527},"类选择器，伪类选择器",[20274,148253,148254],{"align":43527},"0，0，1，0",[20228,148256,148257,148260],{},[20274,148258,148259],{"align":43527},"ID选择器",[20274,148261,148262],{"align":43527},"0，1，0，0",[20228,148264,148265,148268],{},[20274,148266,148267],{"align":43527},"行内样式",[20274,148269,148270],{"align":43527},"1，0，0，0",[20228,148272,148273,148276],{},[20274,148274,148275],{"align":43527},"！important",[20274,148277,148278],{"align":43527},"无穷大",[24,148280,148281],{},"! important用法：",[146,148283,148285],{"className":145115,"code":148284,"language":145117,"meta":39,"style":39},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[152,148286,148287,148292,148298,148311,148315,148320,148326,148336],{"__ignoreMap":39},[155,148288,148289],{"class":157,"line":158},[155,148290,148291],{"class":161},"\u002F* !important 拥有最高优先级 *\u002F\n",[155,148293,148294,148296],{"class":157,"line":46},[155,148295,70174],{"class":69863},[155,148297,35397],{"class":171},[155,148299,148300,148302,148304,148306,148309],{"class":157,"line":121},[155,148301,89468],{"class":263},[155,148303,70000],{"class":171},[155,148305,70208],{"class":263},[155,148307,148308],{"class":167}," !important",[155,148310,21206],{"class":171},[155,148312,148313],{"class":157,"line":180},[155,148314,21475],{"class":171},[155,148316,148317],{"class":157,"line":194},[155,148318,148319],{"class":161},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[155,148321,148322,148324],{"class":157,"line":200},[155,148323,70174],{"class":69863},[155,148325,35397],{"class":171},[155,148327,148328,148330,148332,148334],{"class":157,"line":213},[155,148329,89468],{"class":263},[155,148331,70000],{"class":171},[155,148333,75984],{"class":263},[155,148335,21206],{"class":171},[155,148337,148338],{"class":157,"line":220},[155,148339,21475],{"class":171},[24,148341,148342],{},"优先级注意点：",[24,148344,148345],{},"①权重是有4组数字组成,但是不会有进位",[24,148347,148348],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[24,148350,148351],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[24,148353,148354],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[24,148356,148357],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[24,148359,148360],{},"⑥复合选择器",[20222,148362,148363,148373],{},[20225,148364,148365],{},[20228,148366,148367,148370],{},[20231,148368,148369],{"align":43527},"div ul li",[20231,148371,148372],{"align":43527},"0,0,0,3",[20269,148374,148375,148383,148391],{},[20228,148376,148377,148380],{},[20274,148378,148379],{"align":43527},".nav ul li",[20274,148381,148382],{"align":43527},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[20228,148384,148385,148388],{},[20274,148386,148387],{"align":43527},"a:hover",[20274,148389,148390],{"align":43527},"0,0,1,1",[20228,148392,148393,148396],{},[20274,148394,148395],{"align":43527},".nav a",[20274,148397,148390],{"align":43527},[20011,148399,148400],{},"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":39,"searchDepth":46,"depth":46,"links":148402},[148403,148411,148422],{"id":146511,"depth":46,"text":146512,"children":148404},[148405,148406,148407,148408,148409,148410],{"id":146524,"depth":121,"text":146525},{"id":146596,"depth":121,"text":146597},{"id":146668,"depth":121,"text":146669},{"id":146699,"depth":121,"text":146700},{"id":146706,"depth":121,"text":146707},{"id":146859,"depth":121,"text":146860},{"id":147167,"depth":46,"text":147168,"children":148412},[148413,148414,148415,148416,148417,148418,148419,148420,148421],{"id":147174,"depth":121,"text":147175},{"id":147184,"depth":121,"text":147185},{"id":147280,"depth":121,"text":147281},{"id":147353,"depth":121,"text":147354},{"id":147508,"depth":121,"text":147509},{"id":147596,"depth":121,"text":147597},{"id":147648,"depth":121,"text":147649},{"id":147707,"depth":121,"text":147708},{"id":147812,"depth":121,"text":147813},{"id":148140,"depth":46,"text":148141,"children":148423},[148424,148425,148426],{"id":148144,"depth":121,"text":148145},{"id":148157,"depth":121,"text":148158},{"id":148207,"depth":121,"text":148208},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":146503,"description":20020},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":148433,"title":148434,"body":148435,"description":20020,"extension":20021,"meta":150025,"navigation":216,"path":150026,"seo":150027,"stem":150028,"__hash__":150029},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":148436,"toc":150004},[148437,148440,148444,148447,148450,148453,148456,148459,148462,148465,148469,148477,148514,148550,148553,148567,148572,148606,148609,148702,148707,148710,148740,148743,148748,148756,148760,148767,148813,148857,148862,148865,148868,148871,148874,148877,148880,148882,148885,148889,148894,148938,148943,148946,148949,148986,148991,148994,148997,149000,149003,149035,149038,149041,149044,149076,149079,149082,149085,149089,149092,149124,149127,149131,149151,149154,149162,149165,149169,149174,149177,149209,149214,149217,149255,149259,149264,149267,149270,149301,149304,149321,149326,149378,149438,149443,149497,149535,149539,149543,149546,149550,149558,149561,149563,149574,149579,149627,149661,149664,149667,149670,149673,149717,149720,149723,149726,149729,149732,149735,149779,149782,149785,149788,149791,149794,149797,149803,149806,149850,149853,149856,149859,149862,149865,149909,149912,149914,149917,149921,149925,149963,149967,149970,149973,149977,149985,149989,149992,149995,149998,150001],[10,148438,148434],{"id":148439},"_9-css盒模型浮动与切图",[20037,148441,148443],{"id":148442},"_91-盒子模型","9.1 盒子模型",[24,148445,148446],{},"利用盒子来设计网页",[24,148448,148449],{},"盒子包含：边框、外边距、内边距、实际内容",[24,148451,148452],{},"网页布局设置：",[24,148454,148455],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[24,148457,148458],{},"②利用css设置好盒子样式，然后摆放到相应位置",[24,148460,148461],{},"③往盒子里装内容",[37,148463],{"style":144971,"src":148464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[14,148466,148468],{"id":148467},"_911-边框border","9.1.1 边框（border）",[28,148470,148471,148474],{},[31,148472,148473],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[31,148475,148476],{},"语法",[146,148478,148480],{"className":145115,"code":148479,"language":145117,"meta":39,"style":39},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[152,148481,148482,148487,148493,148510],{"__ignoreMap":39},[155,148483,148484],{"class":157,"line":158},[155,148485,148486],{"class":161},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[155,148488,148489,148491],{"class":157,"line":46},[155,148490,70174],{"class":69863},[155,148492,35397],{"class":171},[155,148494,148495,148497,148499,148501,148503,148505,148508],{"class":157,"line":121},[155,148496,89459],{"class":263},[155,148498,70000],{"class":171},[155,148500,329],{"class":263},[155,148502,70055],{"class":167},[155,148504,70084],{"class":263},[155,148506,148507],{"class":263}," #ccc",[155,148509,21206],{"class":171},[155,148511,148512],{"class":157,"line":180},[155,148513,21475],{"class":171},[20222,148515,148516,148524],{},[20225,148517,148518],{},[20228,148519,148520,148522],{},[20231,148521,147717],{"align":43527},[20231,148523,121259],{"align":43527},[20269,148525,148526,148534,148542],{},[20228,148527,148528,148531],{},[20274,148529,148530],{"align":43527},"border-width",[20274,148532,148533],{"align":43527},"定义边框粗细，单位是px",[20228,148535,148536,148539],{},[20274,148537,148538],{"align":43527},"border-style",[20274,148540,148541],{"align":43527},"边框的样式",[20228,148543,148544,148547],{},[20274,148545,148546],{"align":43527},"border-color",[20274,148548,148549],{"align":43527},"边框的颜色",[24,148551,148552],{},"边框样式 border-style 可以设置如下值：",[21052,148554,148555,148558,148561,148564],{},[31,148556,148557],{},"none：没有边框即忽略所有边框的宽度（默认值）",[31,148559,148560],{},"solid：边框为单实线(最为常用的)",[31,148562,148563],{},"dashed：边框为虚线",[31,148565,148566],{},"dotted：边框为点线",[28,148568,148569],{"start":121},[31,148570,148571],{},"边框的合写分写",[146,148573,148574],{"className":145115,"code":148479,"language":145117,"meta":39,"style":39},[152,148575,148576,148580,148586,148602],{"__ignoreMap":39},[155,148577,148578],{"class":157,"line":158},[155,148579,148486],{"class":161},[155,148581,148582,148584],{"class":157,"line":46},[155,148583,70174],{"class":69863},[155,148585,35397],{"class":171},[155,148587,148588,148590,148592,148594,148596,148598,148600],{"class":157,"line":121},[155,148589,89459],{"class":263},[155,148591,70000],{"class":171},[155,148593,329],{"class":263},[155,148595,70055],{"class":167},[155,148597,70084],{"class":263},[155,148599,148507],{"class":263},[155,148601,21206],{"class":171},[155,148603,148604],{"class":157,"line":180},[155,148605,21475],{"class":171},[24,148607,148608],{},"边框分开写法：",[146,148610,148612],{"className":145115,"code":148611,"language":145117,"meta":39,"style":39},"\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",[152,148613,148614,148619,148625,148643,148661,148680,148698],{"__ignoreMap":39},[155,148615,148616],{"class":157,"line":158},[155,148617,148618],{"class":161},"\u002F* 边框分开写法 *\u002F\n",[155,148620,148621,148623],{"class":157,"line":46},[155,148622,70174],{"class":69863},[155,148624,35397],{"class":171},[155,148626,148627,148630,148632,148634,148636,148638,148641],{"class":157,"line":121},[155,148628,148629],{"class":263},"  border-top",[155,148631,70000],{"class":171},[155,148633,329],{"class":263},[155,148635,70055],{"class":167},[155,148637,70084],{"class":263},[155,148639,148640],{"class":263}," #000",[155,148642,21206],{"class":171},[155,148644,148645,148648,148650,148652,148654,148656,148659],{"class":157,"line":180},[155,148646,148647],{"class":263},"  border-right",[155,148649,70000],{"class":171},[155,148651,360],{"class":263},[155,148653,70055],{"class":167},[155,148655,80804],{"class":263},[155,148657,148658],{"class":263}," #333",[155,148660,21206],{"class":171},[155,148662,148663,148666,148668,148670,148672,148675,148678],{"class":157,"line":194},[155,148664,148665],{"class":263},"  border-bottom",[155,148667,70000],{"class":171},[155,148669,4444],{"class":263},[155,148671,70055],{"class":167},[155,148673,148674],{"class":263}," dotted",[155,148676,148677],{"class":263}," #666",[155,148679,21206],{"class":171},[155,148681,148682,148685,148687,148689,148691,148693,148696],{"class":157,"line":200},[155,148683,148684],{"class":263},"  border-left",[155,148686,70000],{"class":171},[155,148688,329],{"class":263},[155,148690,70055],{"class":167},[155,148692,70084],{"class":263},[155,148694,148695],{"class":263}," #999",[155,148697,21206],{"class":171},[155,148699,148700],{"class":157,"line":213},[155,148701,21475],{"class":171},[28,148703,148704],{"start":180},[31,148705,148706],{},"表格的细线边框",[24,148708,148709],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[146,148711,148713],{"className":145115,"code":148712,"language":145117,"meta":39,"style":39},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[152,148714,148715,148720,148726,148736],{"__ignoreMap":39},[155,148716,148717],{"class":157,"line":158},[155,148718,148719],{"class":161},"\u002F* 表格细线边框合并 *\u002F\n",[155,148721,148722,148724],{"class":157,"line":46},[155,148723,20222],{"class":69863},[155,148725,35397],{"class":171},[155,148727,148728,148730,148732,148734],{"class":157,"line":121},[155,148729,89141],{"class":263},[155,148731,70000],{"class":171},[155,148733,83598],{"class":263},[155,148735,21206],{"class":171},[155,148737,148738],{"class":157,"line":180},[155,148739,21475],{"class":171},[24,148741,148742],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[28,148744,148745],{"start":194},[31,148746,148747],{},"解决边框额外增加盒子的实际大小的方法：",[21052,148749,148750,148753],{},[31,148751,148752],{},"测量盒子大小的时候,不量边框",[31,148754,148755],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[14,148757,148759],{"id":148758},"_912-内边距","9.1.2 内边距",[28,148761,148762,148765],{},[31,148763,148764],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[31,148766,148476],{},[20222,148768,148769,148779],{},[20225,148770,148771],{},[20228,148772,148773,148776],{},[20231,148774,148775],{"align":43527},"值的个数",[20231,148777,148778],{"align":43527},"表达意思",[20269,148780,148781,148789,148797,148805],{},[20228,148782,148783,148786],{},[20274,148784,148785],{"align":43527},"padding: 5px;",[20274,148787,148788],{"align":43527},"1个值，代表上下左右都有5个元素",[20228,148790,148791,148794],{},[20274,148792,148793],{"align":43527},"padding: 5px 10px;",[20274,148795,148796],{"align":43527},"2个值，代表上下内边距为5像素，左右内边距为10像素",[20228,148798,148799,148802],{},[20274,148800,148801],{"align":43527},"padding: 5px 10px 20px;",[20274,148803,148804],{"align":43527},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[20228,148806,148807,148810],{},[20274,148808,148809],{"align":43527},"padding: 5px 10px 20px 30px;",[20274,148811,148812],{"align":43527},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[20222,148814,148815,148823],{},[20225,148816,148817],{},[20228,148818,148819,148821],{},[20231,148820,147717],{"align":43527},[20231,148822,121259],{"align":43527},[20269,148824,148825,148833,148841,148849],{},[20228,148826,148827,148830],{},[20274,148828,148829],{"align":43527},"padding-left",[20274,148831,148832],{"align":43527},"左内边距",[20228,148834,148835,148838],{},[20274,148836,148837],{"align":43527},"padding-right",[20274,148839,148840],{"align":43527},"右内边距",[20228,148842,148843,148846],{},[20274,148844,148845],{"align":43527},"padding-top",[20274,148847,148848],{"align":43527},"上内边距",[20228,148850,148851,148854],{},[20274,148852,148853],{"align":43527},"padding-bottom",[20274,148855,148856],{"align":43527},"下内边距",[28,148858,148859],{"start":121},[31,148860,148861],{},"内边距会影响盒子的实际大小",[24,148863,148864],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[24,148866,148867],{},"①内容和边框有了距离，添加了内边距",[24,148869,148870],{},"②padding影响了盒子实际大小",[24,148872,148873],{},"内边距对盒子大小的影响：",[24,148875,148876],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[24,148878,148879],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[24,148881,113783],{},[24,148883,148884],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[14,148886,148888],{"id":148887},"_913-外边距","9.1.3 外边距",[28,148890,148891],{},[31,148892,148893],{},"控制盒子与盒子之间的距离",[20222,148895,148896,148904],{},[20225,148897,148898],{},[20228,148899,148900,148902],{},[20231,148901,147717],{"align":43527},[20231,148903,121259],{"align":43527},[20269,148905,148906,148914,148922,148930],{},[20228,148907,148908,148911],{},[20274,148909,148910],{"align":43527},"margin-left",[20274,148912,148913],{"align":43527},"左外边距",[20228,148915,148916,148919],{},[20274,148917,148918],{"align":43527},"margin-right",[20274,148920,148921],{"align":43527},"右外边距",[20228,148923,148924,148927],{},[20274,148925,148926],{"align":43527},"margin-top",[20274,148928,148929],{"align":43527},"上外边距",[20228,148931,148932,148935],{},[20274,148933,148934],{"align":43527},"margin-bottom",[20274,148936,148937],{"align":43527},"下外边距",[28,148939,148940],{"start":46},[31,148941,148942],{},"外边距可以让块级盒子水平居中的两个条件：",[24,148944,148945],{},"①盒子必须指定了宽度（width）",[24,148947,148948],{},"②盒子左右的外边距都设置为 auto",[146,148950,148952],{"className":145115,"code":148951,"language":145117,"meta":39,"style":39},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[152,148953,148954,148959,148966,148982],{"__ignoreMap":39},[155,148955,148956],{"class":157,"line":158},[155,148957,148958],{"class":161},"\u002F* margin 复合写法（同上） *\u002F\n",[155,148960,148961,148964],{"class":157,"line":46},[155,148962,148963],{"class":226},".box",[155,148965,35397],{"class":171},[155,148967,148968,148970,148972,148974,148976,148979],{"class":157,"line":121},[155,148969,89033],{"class":263},[155,148971,70000],{"class":171},[155,148973,1109],{"class":263},[155,148975,70119],{"class":263},[155,148977,148978],{"class":171},";  ",[155,148980,148981],{"class":161},"\u002F* 块级盒子水平居中 *\u002F\n",[155,148983,148984],{"class":157,"line":180},[155,148985,21475],{"class":171},[28,148987,148988],{"start":121},[31,148989,148990],{},"外边距塌陷问题",[24,148992,148993],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[37,148995],{"style":144971,"src":148996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[24,148998,148999],{},"解决方案：",[24,149001,149002],{},"①可以为父亲元素定义上边距",[146,149004,149005],{"className":145115,"code":148951,"language":145117,"meta":39,"style":39},[152,149006,149007,149011,149017,149031],{"__ignoreMap":39},[155,149008,149009],{"class":157,"line":158},[155,149010,148958],{"class":161},[155,149012,149013,149015],{"class":157,"line":46},[155,149014,148963],{"class":226},[155,149016,35397],{"class":171},[155,149018,149019,149021,149023,149025,149027,149029],{"class":157,"line":121},[155,149020,89033],{"class":263},[155,149022,70000],{"class":171},[155,149024,1109],{"class":263},[155,149026,70119],{"class":263},[155,149028,148978],{"class":171},[155,149030,148981],{"class":161},[155,149032,149033],{"class":157,"line":180},[155,149034,21475],{"class":171},[24,149036,149037],{},"②可以为父亲元素定义上内边距",[24,149039,149040],{},"③可以为父亲元素添加overflow:hidden",[37,149042],{"style":144971,"src":149043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[146,149045,149046],{"className":145115,"code":148951,"language":145117,"meta":39,"style":39},[152,149047,149048,149052,149058,149072],{"__ignoreMap":39},[155,149049,149050],{"class":157,"line":158},[155,149051,148958],{"class":161},[155,149053,149054,149056],{"class":157,"line":46},[155,149055,148963],{"class":226},[155,149057,35397],{"class":171},[155,149059,149060,149062,149064,149066,149068,149070],{"class":157,"line":121},[155,149061,89033],{"class":263},[155,149063,70000],{"class":171},[155,149065,1109],{"class":263},[155,149067,70119],{"class":263},[155,149069,148978],{"class":171},[155,149071,148981],{"class":161},[155,149073,149074],{"class":157,"line":180},[155,149075,21475],{"class":171},[37,149077],{"style":144971,"src":149078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[24,149080,149081],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[24,149083,149084],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[14,149086,149088],{"id":149087},"_914-清除内外边距","9.1.4 清除内外边距",[24,149090,149091],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[146,149093,149094],{"className":145115,"code":148951,"language":145117,"meta":39,"style":39},[152,149095,149096,149100,149106,149120],{"__ignoreMap":39},[155,149097,149098],{"class":157,"line":158},[155,149099,148958],{"class":161},[155,149101,149102,149104],{"class":157,"line":46},[155,149103,148963],{"class":226},[155,149105,35397],{"class":171},[155,149107,149108,149110,149112,149114,149116,149118],{"class":157,"line":121},[155,149109,89033],{"class":263},[155,149111,70000],{"class":171},[155,149113,1109],{"class":263},[155,149115,70119],{"class":263},[155,149117,148978],{"class":171},[155,149119,148981],{"class":161},[155,149121,149122],{"class":157,"line":180},[155,149123,21475],{"class":171},[24,149125,149126],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[14,149128,149130],{"id":149129},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[21052,149132,149133,149136,149139,149142,149145,149148],{},[31,149134,149135],{},"文件→打开 ：可以打开我们要测量的图片",[31,149137,149138],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[31,149140,149141],{},"右击标尺，把里面的单位改为像素",[31,149143,149144],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[31,149146,149147],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[31,149149,149150],{},"用选区拖动 可以测量大小",[37,149152],{"style":144971,"src":149153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[21052,149155,149156,149159],{},[31,149157,149158],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[31,149160,149161],{},"吸管取色工具",[37,149163],{"style":144971,"src":149164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[14,149166,149168],{"id":149167},"_916-案例","9.1.6 案例",[28,149170,149171],{},[31,149172,149173],{},"小米商品",[37,149175],{"style":144971,"src":149176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[146,149178,149179],{"className":145115,"code":148951,"language":145117,"meta":39,"style":39},[152,149180,149181,149185,149191,149205],{"__ignoreMap":39},[155,149182,149183],{"class":157,"line":158},[155,149184,148958],{"class":161},[155,149186,149187,149189],{"class":157,"line":46},[155,149188,148963],{"class":226},[155,149190,35397],{"class":171},[155,149192,149193,149195,149197,149199,149201,149203],{"class":157,"line":121},[155,149194,89033],{"class":263},[155,149196,70000],{"class":171},[155,149198,1109],{"class":263},[155,149200,70119],{"class":263},[155,149202,148978],{"class":171},[155,149204,148981],{"class":161},[155,149206,149207],{"class":157,"line":180},[155,149208,21475],{"class":171},[28,149210,149211],{"start":46},[31,149212,149213],{},"快报模块",[37,149215],{"style":144971,"src":149216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[146,149218,149220],{"className":145862,"code":149219,"language":145864,"meta":39,"style":39},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[152,149221,149222,149227,149242,149247],{"__ignoreMap":39},[155,149223,149224],{"class":157,"line":158},[155,149225,149226],{"class":161},"\u003C!-- HTML 代码示例 -->\n",[155,149228,149229,149231,149233,149235,149237,149240],{"class":157,"line":46},[155,149230,20959],{"class":171},[155,149232,70174],{"class":69863},[155,149234,72049],{"class":226},[155,149236,317],{"class":171},[155,149238,149239],{"class":732},"\"example\"",[155,149241,69870],{"class":171},[155,149243,149244],{"class":157,"line":121},[155,149245,149246],{"class":171},"  示例内容\n",[155,149248,149249,149251,149253],{"class":157,"line":180},[155,149250,70348],{"class":171},[155,149252,70174],{"class":69863},[155,149254,69870],{"class":171},[14,149256,149258],{"id":149257},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[28,149260,149261],{},[31,149262,149263],{},"圆角边框",[24,149265,149266],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[37,149268],{"style":144971,"src":149269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[146,149271,149273],{"className":145115,"code":149272,"language":145117,"meta":39,"style":39},"div {\n  border: 1px solid #ccc;\n}\n",[152,149274,149275,149281,149297],{"__ignoreMap":39},[155,149276,149277,149279],{"class":157,"line":158},[155,149278,70174],{"class":69863},[155,149280,35397],{"class":171},[155,149282,149283,149285,149287,149289,149291,149293,149295],{"class":157,"line":46},[155,149284,89459],{"class":263},[155,149286,70000],{"class":171},[155,149288,329],{"class":263},[155,149290,70055],{"class":167},[155,149292,70084],{"class":263},[155,149294,148507],{"class":263},[155,149296,21206],{"class":171},[155,149298,149299],{"class":157,"line":121},[155,149300,21475],{"class":171},[24,149302,149303],{},"解释:",[21052,149305,149306,149309,149312,149315,149318],{},[31,149307,149308],{},"参数值可以为数值或百分比的形式",[31,149310,149311],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[31,149313,149314],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[31,149316,149317],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[31,149319,149320],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[28,149322,149323],{"start":46},[31,149324,149325],{},"盒子阴影",[146,149327,149329],{"className":145115,"code":149328,"language":145117,"meta":39,"style":39},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[152,149330,149331,149337,149374],{"__ignoreMap":39},[155,149332,149333,149335],{"class":157,"line":158},[155,149334,70174],{"class":69863},[155,149336,35397],{"class":171},[155,149338,149339,149342,149344,149346,149348,149350,149352,149354,149356,149358,149360,149362,149364,149366,149368,149370,149372],{"class":157,"line":46},[155,149340,149341],{"class":263},"  box-shadow",[155,149343,70000],{"class":171},[155,149345,1109],{"class":263},[155,149347,34580],{"class":263},[155,149349,70055],{"class":167},[155,149351,21925],{"class":263},[155,149353,70055],{"class":167},[155,149355,97330],{"class":263},[155,149357,230],{"class":171},[155,149359,1109],{"class":263},[155,149361,7589],{"class":171},[155,149363,1109],{"class":263},[155,149365,7589],{"class":171},[155,149367,1109],{"class":263},[155,149369,7589],{"class":171},[155,149371,104773],{"class":263},[155,149373,22596],{"class":171},[155,149375,149376],{"class":157,"line":121},[155,149377,21475],{"class":171},[20222,149379,149380,149388],{},[20225,149381,149382],{},[20228,149383,149384,149386],{},[20231,149385,20237],{"align":43527},[20231,149387,47278],{"align":43527},[20269,149389,149390,149398,149406,149414,149422,149430],{},[20228,149391,149392,149395],{},[20274,149393,149394],{"align":43527},"h-shadow",[20274,149396,149397],{"align":43527},"必需,水平阴影的位置,允许负值",[20228,149399,149400,149403],{},[20274,149401,149402],{"align":43527},"v-shadow",[20274,149404,149405],{"align":43527},"必需,垂直阴影的位置,允许负值",[20228,149407,149408,149411],{},[20274,149409,149410],{"align":43527},"blur",[20274,149412,149413],{"align":43527},"可选,模糊距离,就是影子的虚实",[20228,149415,149416,149419],{},[20274,149417,149418],{"align":43527},"spread",[20274,149420,149421],{"align":43527},"可选,阴影尺寸",[20228,149423,149424,149427],{},[20274,149425,149426],{"align":43527},"color",[20274,149428,149429],{"align":43527},"可选,阴影的颜色",[20228,149431,149432,149435],{},[20274,149433,149434],{"align":43527},"inset",[20274,149436,149437],{"align":43527},"可选,将外部阴影(outset)改为内部阴影",[28,149439,149440],{"start":121},[31,149441,149442],{},"文字阴影",[146,149444,149446],{"className":145115,"code":149445,"language":145117,"meta":39,"style":39},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[152,149447,149448,149454,149493],{"__ignoreMap":39},[155,149449,149450,149452],{"class":157,"line":158},[155,149451,24],{"class":69863},[155,149453,35397],{"class":171},[155,149455,149456,149459,149461,149463,149465,149467,149469,149471,149473,149475,149477,149479,149481,149483,149485,149487,149489,149491],{"class":157,"line":46},[155,149457,149458],{"class":263},"  text-shadow",[155,149460,70000],{"class":171},[155,149462,329],{"class":263},[155,149464,70055],{"class":167},[155,149466,1277],{"class":263},[155,149468,70055],{"class":167},[155,149470,34580],{"class":263},[155,149472,70055],{"class":167},[155,149474,97330],{"class":263},[155,149476,230],{"class":171},[155,149478,1109],{"class":263},[155,149480,7589],{"class":171},[155,149482,1109],{"class":263},[155,149484,7589],{"class":171},[155,149486,1109],{"class":263},[155,149488,7589],{"class":171},[155,149490,119084],{"class":263},[155,149492,22596],{"class":171},[155,149494,149495],{"class":157,"line":121},[155,149496,21475],{"class":171},[20222,149498,149499,149507],{},[20225,149500,149501],{},[20228,149502,149503,149505],{},[20231,149504,20237],{"align":43527},[20231,149506,47278],{"align":43527},[20269,149508,149509,149515,149522,149529],{},[20228,149510,149511,149513],{},[20274,149512,149394],{"align":43527},[20274,149514,149397],{"align":43527},[20228,149516,149517,149519],{},[20274,149518,149402],{"align":43527},[20274,149520,149521],{"align":43527},"必需,垂直阴影位置,允许负值",[20228,149523,149524,149526],{},[20274,149525,149410],{"align":43527},[20274,149527,149528],{"align":43527},"可选,模糊的距离",[20228,149530,149531,149533],{},[20274,149532,149426],{"align":43527},[20274,149534,149429],{"align":43527},[20037,149536,149538],{"id":149537},"_92-浮动","9.2 浮动",[14,149540,149542],{"id":149541},"_921-浮动介绍","9.2.1 浮动介绍",[24,149544,149545],{},"在16.2中详细介绍",[14,149547,149549],{"id":149548},"_922-清除浮动","9.2.2 清除浮动",[28,149551,149552,149555],{},[31,149553,149554],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[31,149556,149557],{},"清除浮动的本质",[24,149559,149560],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[24,149562,28874],{},[21052,149564,149565,149568,149571],{},[31,149566,149567],{},"如果父盒子本身有高度，则不需要清除浮动",[31,149569,149570],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[31,149572,149573],{},"父级有了高度，就不会影响下面的标准流了",[28,149575,149576],{"start":121},[31,149577,149578],{},"清除浮动样式",[146,149580,149582],{"className":145115,"code":149581,"language":145117,"meta":39,"style":39},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[152,149583,149584,149591,149602,149606,149613,149623],{"__ignoreMap":39},[155,149585,149586,149589],{"class":157,"line":158},[155,149587,149588],{"class":226},".left",[155,149590,35397],{"class":171},[155,149592,149593,149596,149598,149600],{"class":157,"line":46},[155,149594,149595],{"class":263},"  float",[155,149597,70000],{"class":171},[155,149599,43527],{"class":263},[155,149601,21206],{"class":171},[155,149603,149604],{"class":157,"line":121},[155,149605,21475],{"class":171},[155,149607,149608,149611],{"class":157,"line":180},[155,149609,149610],{"class":226},".right",[155,149612,35397],{"class":171},[155,149614,149615,149617,149619,149621],{"class":157,"line":194},[155,149616,149595],{"class":263},[155,149618,70000],{"class":171},[155,149620,91085],{"class":263},[155,149622,21206],{"class":171},[155,149624,149625],{"class":157,"line":200},[155,149626,21475],{"class":171},[20222,149628,149629,149637],{},[20225,149630,149631],{},[20228,149632,149633,149635],{},[20231,149634,145579],{"align":43527},[20231,149636,47278],{"align":43527},[20269,149638,149639,149646,149653],{},[20228,149640,149641,149643],{},[20274,149642,43527],{"align":43527},[20274,149644,149645],{"align":43527},"不允许左侧有浮动元素（清除左侧浮动的影响）",[20228,149647,149648,149650],{},[20274,149649,91085],{"align":43527},[20274,149651,149652],{"align":43527},"不允许右侧有浮动元素（清除右侧浮动的影响）",[20228,149654,149655,149658],{},[20274,149656,149657],{"align":43527},"both",[20274,149659,149660],{"align":43527},"同时清除左右侧浮动的影响",[24,149662,149663],{},"法一",[24,149665,149666],{},"额外标签法也称为隔墙法",[24,149668,149669],{},"使用方式：",[24,149671,149672],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[146,149674,149675],{"className":145115,"code":149581,"language":145117,"meta":39,"style":39},[152,149676,149677,149683,149693,149697,149703,149713],{"__ignoreMap":39},[155,149678,149679,149681],{"class":157,"line":158},[155,149680,149588],{"class":226},[155,149682,35397],{"class":171},[155,149684,149685,149687,149689,149691],{"class":157,"line":46},[155,149686,149595],{"class":263},[155,149688,70000],{"class":171},[155,149690,43527],{"class":263},[155,149692,21206],{"class":171},[155,149694,149695],{"class":157,"line":121},[155,149696,21475],{"class":171},[155,149698,149699,149701],{"class":157,"line":180},[155,149700,149610],{"class":226},[155,149702,35397],{"class":171},[155,149704,149705,149707,149709,149711],{"class":157,"line":194},[155,149706,149595],{"class":263},[155,149708,70000],{"class":171},[155,149710,91085],{"class":263},[155,149712,21206],{"class":171},[155,149714,149715],{"class":157,"line":200},[155,149716,21475],{"class":171},[24,149718,149719],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[24,149721,149722],{},"优点： 通俗易懂，书写方便",[24,149724,149725],{},"缺点： 添加许多无意义的标签，结构化较差",[24,149727,149728],{},"注意： 要求这个新的空标签必须是块级元素。",[24,149730,149731],{},"法二",[24,149733,149734],{},"父级添加overflow属性",[146,149736,149737],{"className":145115,"code":149581,"language":145117,"meta":39,"style":39},[152,149738,149739,149745,149755,149759,149765,149775],{"__ignoreMap":39},[155,149740,149741,149743],{"class":157,"line":158},[155,149742,149588],{"class":226},[155,149744,35397],{"class":171},[155,149746,149747,149749,149751,149753],{"class":157,"line":46},[155,149748,149595],{"class":263},[155,149750,70000],{"class":171},[155,149752,43527],{"class":263},[155,149754,21206],{"class":171},[155,149756,149757],{"class":157,"line":121},[155,149758,21475],{"class":171},[155,149760,149761,149763],{"class":157,"line":180},[155,149762,149610],{"class":226},[155,149764,35397],{"class":171},[155,149766,149767,149769,149771,149773],{"class":157,"line":194},[155,149768,149595],{"class":263},[155,149770,70000],{"class":171},[155,149772,91085],{"class":263},[155,149774,21206],{"class":171},[155,149776,149777],{"class":157,"line":200},[155,149778,21475],{"class":171},[24,149780,149781],{},"overflow: hidden;",[24,149783,149784],{},"优点：代码简洁",[24,149786,149787],{},"缺点：无法显示溢出的部分",[24,149789,149790],{},"注意：是给父元素添加代码",[24,149792,149793],{},"法三",[24,149795,149796],{},"父级添加after伪元素",[24,149798,149799,149802],{},[149800,149801],"after",{}," 方式是额外标签法的升级版",[24,149804,149805],{},"使用的时候复制就可以",[146,149807,149808],{"className":145115,"code":149581,"language":145117,"meta":39,"style":39},[152,149809,149810,149816,149826,149830,149836,149846],{"__ignoreMap":39},[155,149811,149812,149814],{"class":157,"line":158},[155,149813,149588],{"class":226},[155,149815,35397],{"class":171},[155,149817,149818,149820,149822,149824],{"class":157,"line":46},[155,149819,149595],{"class":263},[155,149821,70000],{"class":171},[155,149823,43527],{"class":263},[155,149825,21206],{"class":171},[155,149827,149828],{"class":157,"line":121},[155,149829,21475],{"class":171},[155,149831,149832,149834],{"class":157,"line":180},[155,149833,149610],{"class":226},[155,149835,35397],{"class":171},[155,149837,149838,149840,149842,149844],{"class":157,"line":194},[155,149839,149595],{"class":263},[155,149841,70000],{"class":171},[155,149843,91085],{"class":263},[155,149845,21206],{"class":171},[155,149847,149848],{"class":157,"line":200},[155,149849,21475],{"class":171},[24,149851,149852],{},"优点：没有增加标签，结构更简单",[24,149854,149855],{},"缺点：照顾低版本浏览器",[24,149857,149858],{},"代表网站： 百度、淘宝网、网易等",[24,149860,149861],{},"法四",[24,149863,149864],{},"父级添加双伪元素",[146,149866,149867],{"className":145115,"code":149581,"language":145117,"meta":39,"style":39},[152,149868,149869,149875,149885,149889,149895,149905],{"__ignoreMap":39},[155,149870,149871,149873],{"class":157,"line":158},[155,149872,149588],{"class":226},[155,149874,35397],{"class":171},[155,149876,149877,149879,149881,149883],{"class":157,"line":46},[155,149878,149595],{"class":263},[155,149880,70000],{"class":171},[155,149882,43527],{"class":263},[155,149884,21206],{"class":171},[155,149886,149887],{"class":157,"line":121},[155,149888,21475],{"class":171},[155,149890,149891,149893],{"class":157,"line":180},[155,149892,149610],{"class":226},[155,149894,35397],{"class":171},[155,149896,149897,149899,149901,149903],{"class":157,"line":194},[155,149898,149595],{"class":263},[155,149900,70000],{"class":171},[155,149902,91085],{"class":263},[155,149904,21206],{"class":171},[155,149906,149907],{"class":157,"line":200},[155,149908,21475],{"class":171},[24,149910,149911],{},"优点：代码更简洁",[24,149913,149855],{},[24,149915,149916],{},"代表网站：小米、腾讯等",[20037,149918,149920],{"id":149919},"_93-ps切图","9.3 PS切图",[14,149922,149924],{"id":149923},"_931-常见图片格式","9.3.1 常见图片格式",[20222,149926,149927,149937],{},[20225,149928,149929],{},[20228,149930,149931,149934],{},[20231,149932,149933],{"align":43527},"jpg图像格式",[20231,149935,149936],{"align":43527},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[20269,149938,149939,149947,149955],{},[20228,149940,149941,149944],{},[20274,149942,149943],{"align":43527},"gif图像格式",[20274,149945,149946],{"align":43527},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[20228,149948,149949,149952],{},[20274,149950,149951],{"align":43527},"png图像格式",[20274,149953,149954],{"align":43527},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[20228,149956,149957,149960],{},[20274,149958,149959],{"align":43527},"PSD图像格式",[20274,149961,149962],{"align":43527},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[14,149964,149966],{"id":149965},"_932-图层切图","9.3.2 图层切图",[24,149968,149969],{},"最简单的切图方式：右击图层 → 导出 → 切片",[24,149971,149972],{},"按住shift选中两个图层->图层菜单->合并图层",[14,149974,149976],{"id":149975},"_933-切片切图","9.3.3 切片切图",[21052,149978,149979,149982],{},[31,149980,149981],{},"利用切片工具手动划出",[31,149983,149984],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[14,149986,149988],{"id":149987},"_934-切图步骤","9.3.4 切图步骤",[24,149990,149991],{},"用切片工具选中：",[37,149993],{"style":144971,"src":149994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[24,149996,149997],{},"文件 -> 导出",[37,149999],{"style":144971,"src":150000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[20011,150002,150003],{},"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":39,"searchDepth":46,"depth":46,"links":150005},[150006,150015,150019],{"id":148442,"depth":46,"text":148443,"children":150007},[150008,150009,150010,150011,150012,150013,150014],{"id":148467,"depth":121,"text":148468},{"id":148758,"depth":121,"text":148759},{"id":148887,"depth":121,"text":148888},{"id":149087,"depth":121,"text":149088},{"id":149129,"depth":121,"text":149130},{"id":149167,"depth":121,"text":149168},{"id":149257,"depth":121,"text":149258},{"id":149537,"depth":46,"text":149538,"children":150016},[150017,150018],{"id":149541,"depth":121,"text":149542},{"id":149548,"depth":121,"text":149549},{"id":149919,"depth":46,"text":149920,"children":150020},[150021,150022,150023,150024],{"id":149923,"depth":121,"text":149924},{"id":149965,"depth":121,"text":149966},{"id":149975,"depth":121,"text":149976},{"id":149987,"depth":121,"text":149988},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":148434,"description":20020},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":150031,"title":150032,"body":150033,"description":20020,"extension":20021,"meta":150674,"navigation":216,"path":150675,"seo":150676,"stem":150677,"__hash__":150678},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":150034,"toc":150662},[150035,150038,150042,150068,150102,150106,150110,150113,150155,150162,150172,150180,150182,150185,150188,150191,150198,150212,150216,150219,150248,150252,150255,150269,150273,150276,150304,150308,150311,150337,150341,150346,150379,150384,150412,150416,150433,150479,150484,150528,150545,150652,150660],[10,150036,150032],{"id":150037},"_10-css规范与学成在线案例",[20037,150039,150041],{"id":150040},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[28,150043,150044,150050,150056,150062],{},[31,150045,150046,150049],{},[20234,150047,150048],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[31,150051,150052,150055],{},[20234,150053,150054],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[31,150057,150058,150061],{},[20234,150059,150060],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[31,150063,150064,150067],{},[20234,150065,150066],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[146,150069,150070],{"className":145115,"code":148479,"language":145117,"meta":39,"style":39},[152,150071,150072,150076,150082,150098],{"__ignoreMap":39},[155,150073,150074],{"class":157,"line":158},[155,150075,148486],{"class":161},[155,150077,150078,150080],{"class":157,"line":46},[155,150079,70174],{"class":69863},[155,150081,35397],{"class":171},[155,150083,150084,150086,150088,150090,150092,150094,150096],{"class":157,"line":121},[155,150085,89459],{"class":263},[155,150087,70000],{"class":171},[155,150089,329],{"class":263},[155,150091,70055],{"class":167},[155,150093,70084],{"class":263},[155,150095,148507],{"class":263},[155,150097,21206],{"class":171},[155,150099,150100],{"class":157,"line":180},[155,150101,21475],{"class":171},[20037,150103,150105],{"id":150104},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[14,150107,150109],{"id":150108},"_1021-header头部制作","10.2.1 header头部制作",[37,150111],{"style":144971,"src":150112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[21052,150114,150115,150122,150129,150135,150142,150149],{},[31,150116,150117,150118,150121],{},"1号是版心盒子 ",[20234,150119,150120],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[31,150123,150124,150125,150128],{},"版心盒子 里面包含 2号盒子 ",[20234,150126,150127],{},"logo"," 图标",[31,150130,150131,150132,150134],{},"版心盒子 里面包含 3号盒子 ",[20234,150133,72276],{}," 导航栏",[31,150136,150137,150138,150141],{},"版心盒子 里面包含 4号盒子 ",[20234,150139,150140],{},"search"," 搜索框",[31,150143,150144,150145,150148],{},"版心盒子 里面包含 5号盒子 ",[20234,150146,150147],{},"user"," 个人信息",[31,150150,150151,150152],{},"注意，要求里面的 ",[20234,150153,150154],{},"4个子盒子 必须都浮动",[28,150156,150157],{},[31,150158,150159],{},[20234,150160,150161],{},"导航栏注意点:",[24,150163,150164,150165,150168,150169],{},"实际开发中， ",[20234,150166,150167],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[20234,150170,150171],{},"用 li 包含链接(li+a)的做法",[21052,150173,150174,150177],{},[31,150175,150176],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[31,150178,150179],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[24,150181,28874],{},[24,150183,150184],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[24,150186,150187],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[24,150189,150190],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[28,150192,150193],{"start":46},[31,150194,150195],{},[20234,150196,150197],{},"4号盒子search的细节：",[21052,150199,150200,150203,150206],{},[31,150201,150202],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[31,150204,150205],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[31,150207,150208,150211],{},[152,150209,150210],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[14,150213,150215],{"id":150214},"_1022-banner制作","10.2.2 banner制作",[37,150217],{"style":144971,"src":150218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[21052,150220,150221,150228,150234,150241],{},[31,150222,150223,150224,150227],{},"1号盒子是通栏的大盒子 ",[20234,150225,150226],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[31,150229,150230,150231,150233],{},"2号盒子是版心 ",[20234,150232,20851],{}," ， 要水平居中对齐",[31,150235,150236,150237,150240],{},"3号盒子版心内，左对齐 ",[20234,150238,150239],{},"subnav"," 侧导航栏",[31,150242,150243,150244,150247],{},"4号盒子版心内，右对齐 ",[20234,150245,150246],{},"course"," 课程",[14,150249,150251],{"id":150250},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[37,150253],{"style":144971,"src":150254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[21052,150256,150257,150260,150263,150266],{},[31,150258,150259],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[31,150261,150262],{},"1号盒子是标题 H3 左侧浮动",[31,150264,150265],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[31,150267,150268],{},"3号盒子 右浮动 mod 修改",[14,150270,150272],{"id":150271},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[37,150274],{"style":144971,"src":150275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[21052,150277,150278,150284,150291,150298,150301],{},[31,150279,150280,150281,150283],{},"1号盒子为最大的盒子 ",[20234,150282,72277],{}," 版心水平居中对齐",[31,150285,150286,150287,150290],{},"2号盒子为上面部分 ",[20234,150288,150289],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[31,150292,150293,150294,150297],{},"3号盒子为底下部分 ",[20234,150295,150296],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[31,150299,150300],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[31,150302,150303],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[14,150305,150307],{"id":150306},"_1025-底部模块制作","10.2.5 底部模块制作",[37,150309],{"style":144971,"src":150310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[21052,150312,150313,150320,150323,150330],{},[31,150314,150315,150316,150319],{},"1号盒子通栏大盒子 底部 ",[20234,150317,150318],{},"footer"," 给高度 底色是白色",[31,150321,150322],{},"2号盒子版心水平居中",[31,150324,150325,150326,150329],{},"3号盒子版权 ",[20234,150327,150328],{},"copyright"," 左对齐",[31,150331,150332,150333,150336],{},"4号盒子 链接组 ",[20234,150334,150335],{},"links"," 右对齐",[14,150338,150340],{"id":150339},"_1026-代码模块","10.2.6 代码模块",[28,150342,150343],{},[31,150344,150345],{},"html部分",[146,150347,150349],{"className":145862,"code":150348,"language":145864,"meta":39,"style":39},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[152,150350,150351],{"__ignoreMap":39},[155,150352,150353,150355,150357,150359,150361,150364,150367,150369,150372,150375,150377],{"class":157,"line":158},[155,150354,20959],{"class":171},[155,150356,20318],{"class":69863},[155,150358,79620],{"class":226},[155,150360,317],{"class":171},[155,150362,150363],{"class":732},"\"https:\u002F\u002Fexample.com\"",[155,150365,150366],{"class":226}," target",[155,150368,317],{"class":171},[155,150370,150371],{"class":732},"\"_blank\"",[155,150373,150374],{"class":171},">链接文字\u003C\u002F",[155,150376,20318],{"class":69863},[155,150378,69870],{"class":171},[28,150380,150381],{"start":46},[31,150382,150383],{},"css部分",[146,150385,150386],{"className":145862,"code":150348,"language":145864,"meta":39,"style":39},[152,150387,150388],{"__ignoreMap":39},[155,150389,150390,150392,150394,150396,150398,150400,150402,150404,150406,150408,150410],{"class":157,"line":158},[155,150391,20959],{"class":171},[155,150393,20318],{"class":69863},[155,150395,79620],{"class":226},[155,150397,317],{"class":171},[155,150399,150363],{"class":732},[155,150401,150366],{"class":226},[155,150403,317],{"class":171},[155,150405,150371],{"class":732},[155,150407,150374],{"class":171},[155,150409,20318],{"class":69863},[155,150411,69870],{"class":171},[14,150413,150415],{"id":150414},"_1027-收获","10.2.7 收获",[28,150417,150418,150421,150424,150427,150430],{},[31,150419,150420],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[31,150422,150423],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[31,150425,150426],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[31,150428,150429],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[31,150431,150432],{},"遗忘代码",[146,150434,150436],{"className":145115,"code":150435,"language":145117,"meta":39,"style":39},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[152,150437,150438,150460,150465,150475],{"__ignoreMap":39},[155,150439,150440,150442,150444,150446,150448,150450,150452,150454,150456,150458],{"class":157,"line":158},[155,150441,70174],{"class":69863},[155,150443,7589],{"class":171},[155,150445,24],{"class":69863},[155,150447,7589],{"class":171},[155,150449,10],{"class":69863},[155,150451,7589],{"class":171},[155,150453,21052],{"class":69863},[155,150455,7589],{"class":171},[155,150457,31],{"class":69863},[155,150459,35397],{"class":171},[155,150461,150462],{"class":157,"line":46},[155,150463,150464],{"class":161},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[155,150466,150467,150469,150471,150473],{"class":157,"line":121},[155,150468,146731],{"class":263},[155,150470,70000],{"class":171},[155,150472,79432],{"class":263},[155,150474,21206],{"class":171},[155,150476,150477],{"class":157,"line":180},[155,150478,21475],{"class":171},[28,150480,150481],{"start":200},[31,150482,150483],{},"html引css的程序",[146,150485,150486],{"className":145115,"code":150435,"language":145117,"meta":39,"style":39},[152,150487,150488,150510,150514,150524],{"__ignoreMap":39},[155,150489,150490,150492,150494,150496,150498,150500,150502,150504,150506,150508],{"class":157,"line":158},[155,150491,70174],{"class":69863},[155,150493,7589],{"class":171},[155,150495,24],{"class":69863},[155,150497,7589],{"class":171},[155,150499,10],{"class":69863},[155,150501,7589],{"class":171},[155,150503,21052],{"class":69863},[155,150505,7589],{"class":171},[155,150507,31],{"class":69863},[155,150509,35397],{"class":171},[155,150511,150512],{"class":157,"line":46},[155,150513,150464],{"class":161},[155,150515,150516,150518,150520,150522],{"class":157,"line":121},[155,150517,146731],{"class":263},[155,150519,70000],{"class":171},[155,150521,79432],{"class":263},[155,150523,21206],{"class":171},[155,150525,150526],{"class":157,"line":180},[155,150527,21475],{"class":171},[28,150529,150530,150533,150536,150539,150542],{"start":213},[31,150531,150532],{},"浮动的盒子不会有外边距合并问题",[31,150534,150535],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[31,150537,150538],{},"ctrl+g快速定位行；shift+alt多个光标",[31,150540,150541],{},"学习上方各个模块的选择器起名方法，以后就这样用",[31,150543,150544],{},"在写选择器时尽量写全一些，例如",[146,150546,150548],{"className":145115,"code":150547,"language":145117,"meta":39,"style":39},"\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",[152,150549,150550,150555,150571,150576,150591,150596,150611,150616,150631,150636],{"__ignoreMap":39},[155,150551,150552],{"class":157,"line":158},[155,150553,150554],{"class":161},"\u002F* 静态定位（默认） *\u002F\n",[155,150556,150557,150560,150562,150564,150566,150569],{"class":157,"line":46},[155,150558,150559],{"class":226},".static",[155,150561,98370],{"class":171},[155,150563,147475],{"class":263},[155,150565,70000],{"class":171},[155,150567,150568],{"class":263},"static",[155,150570,148045],{"class":171},[155,150572,150573],{"class":157,"line":121},[155,150574,150575],{"class":161},"\u002F* 相对定位 *\u002F\n",[155,150577,150578,150581,150583,150585,150587,150589],{"class":157,"line":180},[155,150579,150580],{"class":226},".relative",[155,150582,98370],{"class":171},[155,150584,147475],{"class":263},[155,150586,70000],{"class":171},[155,150588,73327],{"class":263},[155,150590,148045],{"class":171},[155,150592,150593],{"class":157,"line":194},[155,150594,150595],{"class":161},"\u002F* 绝对定位 *\u002F\n",[155,150597,150598,150601,150603,150605,150607,150609],{"class":157,"line":200},[155,150599,150600],{"class":226},".absolute",[155,150602,98370],{"class":171},[155,150604,147475],{"class":263},[155,150606,70000],{"class":171},[155,150608,73394],{"class":263},[155,150610,148045],{"class":171},[155,150612,150613],{"class":157,"line":213},[155,150614,150615],{"class":161},"\u002F* 固定定位 *\u002F\n",[155,150617,150618,150621,150623,150625,150627,150629],{"class":157,"line":220},[155,150619,150620],{"class":226},".fixed",[155,150622,98370],{"class":171},[155,150624,147475],{"class":263},[155,150626,70000],{"class":171},[155,150628,104796],{"class":263},[155,150630,148045],{"class":171},[155,150632,150633],{"class":157,"line":245},[155,150634,150635],{"class":161},"\u002F* 粘性定位 *\u002F\n",[155,150637,150638,150641,150643,150645,150647,150650],{"class":157,"line":251},[155,150639,150640],{"class":226},".sticky",[155,150642,98370],{"class":171},[155,150644,147475],{"class":263},[155,150646,70000],{"class":171},[155,150648,150649],{"class":263},"sticky",[155,150651,148045],{"class":171},[28,150653,150654,150657],{"start":270},[31,150655,150656],{},"一定要用好注释",[31,150658,150659],{},"浮动的盒子不会有外边距合并的问题",[20011,150661,150003],{},{"title":39,"searchDepth":46,"depth":46,"links":150663},[150664,150665],{"id":150040,"depth":46,"text":150041},{"id":150104,"depth":46,"text":150105,"children":150666},[150667,150668,150669,150670,150671,150672,150673],{"id":150108,"depth":121,"text":150109},{"id":150214,"depth":121,"text":150215},{"id":150250,"depth":121,"text":150251},{"id":150271,"depth":121,"text":150272},{"id":150306,"depth":121,"text":150307},{"id":150339,"depth":121,"text":150340},{"id":150414,"depth":121,"text":150415},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":150032,"description":20020},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":150680,"title":150681,"body":150682,"description":20020,"extension":20021,"meta":152168,"navigation":216,"path":152169,"seo":152170,"stem":152171,"__hash__":152172},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":150683,"toc":152160},[150684,150687,150691,150695,150706,150710,150727,150771,150804,150807,150824,150827,150830,150874,150878,150882,150885,150888,150892,150895,150906,150969,151010,151013,151028,151082,151090,151093,151104,151158,151184,151187,151200,151254,151286,151340,151363,151417,151420,151423,151430,151484,151505,151559,151562,151565,151650,151658,151715,151738,151742,151745,151763,151767,151786,151840,151878,151882,151885,151888,151910,151914,151922,151925,151930,151941,151944,151948,151962,152006,152009,152013,152016,152021,152047,152052,152129,152132,152136,152139,152142,152145,152148,152151,152154,152157],[10,150685,150681],{"id":150686},"_11-传统布局与定位体系",[20037,150688,150690],{"id":150689},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[14,150692,150694],{"id":150693},"_1111-普通流标准流","11.1.1 普通流（标准流）",[21052,150696,150697,150700,150703],{},[31,150698,150699],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[31,150701,150702],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[31,150704,150705],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[14,150707,150709],{"id":150708},"_1112-浮动","11.1.2 浮动",[21052,150711,150712,150715,150718,150721,150724],{},[31,150713,150714],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[31,150716,150717],{},"浮动可以改变元素标签默认的排列方式",[31,150719,150720],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[31,150722,150723],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[31,150725,150726],{},"在使用行内块转换时盒子之间是有空隙的",[146,150728,150729],{"className":145115,"code":149581,"language":145117,"meta":39,"style":39},[152,150730,150731,150737,150747,150751,150757,150767],{"__ignoreMap":39},[155,150732,150733,150735],{"class":157,"line":158},[155,150734,149588],{"class":226},[155,150736,35397],{"class":171},[155,150738,150739,150741,150743,150745],{"class":157,"line":46},[155,150740,149595],{"class":263},[155,150742,70000],{"class":171},[155,150744,43527],{"class":263},[155,150746,21206],{"class":171},[155,150748,150749],{"class":157,"line":121},[155,150750,21475],{"class":171},[155,150752,150753,150755],{"class":157,"line":180},[155,150754,149610],{"class":226},[155,150756,35397],{"class":171},[155,150758,150759,150761,150763,150765],{"class":157,"line":194},[155,150760,149595],{"class":263},[155,150762,70000],{"class":171},[155,150764,91085],{"class":263},[155,150766,21206],{"class":171},[155,150768,150769],{"class":157,"line":200},[155,150770,21475],{"class":171},[20222,150772,150773,150781],{},[20225,150774,150775],{},[20228,150776,150777,150779],{},[20231,150778,145579],{"align":43527},[20231,150780,47278],{"align":43527},[20269,150782,150783,150790,150797],{},[20228,150784,150785,150787],{},[20274,150786,73300],{"align":43527},[20274,150788,150789],{"align":43527},"元素不浮动（默认值）",[20228,150791,150792,150794],{},[20274,150793,43527],{"align":43527},[20274,150795,150796],{"align":43527},"元素向左浮动",[20228,150798,150799,150801],{},[20274,150800,91085],{"align":43527},[20274,150802,150803],{"align":43527},"元素向右浮动",[24,150805,150806],{},"浮动重点：",[21052,150808,150809,150812,150815,150818,150821],{},[31,150810,150811],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[31,150813,150814],{},"浮动的元素会一行内显示并且元素顶部对齐",[31,150816,150817],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[31,150819,150820],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[31,150822,150823],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[24,150825,150826],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[24,150828,150829],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[146,150831,150832],{"className":145115,"code":149581,"language":145117,"meta":39,"style":39},[152,150833,150834,150840,150850,150854,150860,150870],{"__ignoreMap":39},[155,150835,150836,150838],{"class":157,"line":158},[155,150837,149588],{"class":226},[155,150839,35397],{"class":171},[155,150841,150842,150844,150846,150848],{"class":157,"line":46},[155,150843,149595],{"class":263},[155,150845,70000],{"class":171},[155,150847,43527],{"class":263},[155,150849,21206],{"class":171},[155,150851,150852],{"class":157,"line":121},[155,150853,21475],{"class":171},[155,150855,150856,150858],{"class":157,"line":180},[155,150857,149610],{"class":226},[155,150859,35397],{"class":171},[155,150861,150862,150864,150866,150868],{"class":157,"line":194},[155,150863,149595],{"class":263},[155,150865,70000],{"class":171},[155,150867,91085],{"class":263},[155,150869,21206],{"class":171},[155,150871,150872],{"class":157,"line":200},[155,150873,21475],{"class":171},[14,150875,150877],{"id":150876},"_1113-定位","11.1.3 定位",[19,150879,150881],{"id":150880},"_11131-使用场景","11.1.3.1 使用场景",[24,150883,150884],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[24,150886,150887],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[19,150889,150891],{"id":150890},"_11132-定位组成","11.1.3.2 定位组成",[24,150893,150894],{},"定位 = 定位模式 + 边偏移",[28,150896,150897],{},[31,150898,150899,150902,150903],{},[20234,150900,150901],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[20234,150904,150905],{},"定位模式",[146,150907,150909],{"className":145115,"code":150908,"language":145117,"meta":39,"style":39},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[152,150910,150911,150917,150931,150948,150965],{"__ignoreMap":39},[155,150912,150913,150915],{"class":157,"line":158},[155,150914,148963],{"class":226},[155,150916,35397],{"class":171},[155,150918,150919,150922,150924,150926,150928],{"class":157,"line":46},[155,150920,150921],{"class":263},"  position",[155,150923,70000],{"class":171},[155,150925,73327],{"class":263},[155,150927,148978],{"class":171},[155,150929,150930],{"class":161},"\u002F* 定位模式 *\u002F\n",[155,150932,150933,150936,150938,150940,150942,150945],{"class":157,"line":121},[155,150934,150935],{"class":263},"  top",[155,150937,70000],{"class":171},[155,150939,565],{"class":263},[155,150941,70055],{"class":167},[155,150943,150944],{"class":171},";           ",[155,150946,150947],{"class":161},"\u002F* 边偏移：上 *\u002F\n",[155,150949,150950,150953,150955,150957,150959,150962],{"class":157,"line":180},[155,150951,150952],{"class":263},"  left",[155,150954,70000],{"class":171},[155,150956,3458],{"class":263},[155,150958,70055],{"class":167},[155,150960,150961],{"class":171},";          ",[155,150963,150964],{"class":161},"\u002F* 边偏移：左 *\u002F\n",[155,150966,150967],{"class":157,"line":194},[155,150968,21475],{"class":171},[20222,150970,150971,150980],{},[20225,150972,150973],{},[20228,150974,150975,150977],{},[20231,150976,20237],{"align":43527},[20231,150978,150979],{"align":43527},"语义",[20269,150981,150982,150989,150996,151003],{},[20228,150983,150984,150986],{},[20274,150985,150568],{"align":43527},[20274,150987,150988],{"align":43527},"静态定位",[20228,150990,150991,150993],{},[20274,150992,73327],{"align":43527},[20274,150994,150995],{"align":43527},"相对定位",[20228,150997,150998,151000],{},[20274,150999,73394],{"align":43527},[20274,151001,151002],{"align":43527},"绝对定位",[20228,151004,151005,151007],{},[20274,151006,104796],{"align":43527},[20274,151008,151009],{"align":43527},"固定定位",[24,151011,151012],{},"（1）静态定位：",[21052,151014,151015,151026],{},[31,151016,151017,151018,151021,151022,151025],{},"静态定位是元素的 ",[20234,151019,151020],{},"默认定位方式"," ， ",[20234,151023,151024],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[31,151027,25045],{},[146,151029,151030],{"className":145115,"code":150908,"language":145117,"meta":39,"style":39},[152,151031,151032,151038,151050,151064,151078],{"__ignoreMap":39},[155,151033,151034,151036],{"class":157,"line":158},[155,151035,148963],{"class":226},[155,151037,35397],{"class":171},[155,151039,151040,151042,151044,151046,151048],{"class":157,"line":46},[155,151041,150921],{"class":263},[155,151043,70000],{"class":171},[155,151045,73327],{"class":263},[155,151047,148978],{"class":171},[155,151049,150930],{"class":161},[155,151051,151052,151054,151056,151058,151060,151062],{"class":157,"line":121},[155,151053,150935],{"class":263},[155,151055,70000],{"class":171},[155,151057,565],{"class":263},[155,151059,70055],{"class":167},[155,151061,150944],{"class":171},[155,151063,150947],{"class":161},[155,151065,151066,151068,151070,151072,151074,151076],{"class":157,"line":180},[155,151067,150952],{"class":263},[155,151069,70000],{"class":171},[155,151071,3458],{"class":263},[155,151073,70055],{"class":167},[155,151075,150961],{"class":171},[155,151077,150964],{"class":161},[155,151079,151080],{"class":157,"line":194},[155,151081,21475],{"class":171},[21052,151083,151084,151087],{},[31,151085,151086],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[31,151088,151089],{},"静态定位在布局时我们几乎不用的",[24,151091,151092],{},"（2）相对定位",[21052,151094,151095,151102],{},[31,151096,151097,151098,151101],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[20234,151099,151100],{},"原来的位置"," 来说的（自恋型）",[31,151103,25045],{},[146,151105,151106],{"className":145115,"code":150908,"language":145117,"meta":39,"style":39},[152,151107,151108,151114,151126,151140,151154],{"__ignoreMap":39},[155,151109,151110,151112],{"class":157,"line":158},[155,151111,148963],{"class":226},[155,151113,35397],{"class":171},[155,151115,151116,151118,151120,151122,151124],{"class":157,"line":46},[155,151117,150921],{"class":263},[155,151119,70000],{"class":171},[155,151121,73327],{"class":263},[155,151123,148978],{"class":171},[155,151125,150930],{"class":161},[155,151127,151128,151130,151132,151134,151136,151138],{"class":157,"line":121},[155,151129,150935],{"class":263},[155,151131,70000],{"class":171},[155,151133,565],{"class":263},[155,151135,70055],{"class":167},[155,151137,150944],{"class":171},[155,151139,150947],{"class":161},[155,151141,151142,151144,151146,151148,151150,151152],{"class":157,"line":180},[155,151143,150952],{"class":263},[155,151145,70000],{"class":171},[155,151147,3458],{"class":263},[155,151149,70055],{"class":167},[155,151151,150961],{"class":171},[155,151153,150964],{"class":161},[155,151155,151156],{"class":157,"line":194},[155,151157,21475],{"class":171},[21052,151159,151160],{},[31,151161,151162,151163,151165,151166,151168,151169,151172,151173,151176,151177,151179,151180,151183],{},"相对定位的特点：",[72279,151164],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[72279,151167],{},"  ② ",[20234,151170,151171],{},"原来"," 在标准流的 ",[20234,151174,151175],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[72279,151178],{},"  ③因此， ",[20234,151181,151182],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[24,151185,151186],{},"（3）绝对定位",[21052,151188,151189,151198],{},[31,151190,151191,151193,151194,151197],{},[20234,151192,151002],{}," 是元素在移动位置的时候，是相对于它 ",[20234,151195,151196],{},"祖先元素"," 来说的（拼爹型）",[31,151199,25045],{},[146,151201,151202],{"className":145115,"code":150908,"language":145117,"meta":39,"style":39},[152,151203,151204,151210,151222,151236,151250],{"__ignoreMap":39},[155,151205,151206,151208],{"class":157,"line":158},[155,151207,148963],{"class":226},[155,151209,35397],{"class":171},[155,151211,151212,151214,151216,151218,151220],{"class":157,"line":46},[155,151213,150921],{"class":263},[155,151215,70000],{"class":171},[155,151217,73327],{"class":263},[155,151219,148978],{"class":171},[155,151221,150930],{"class":161},[155,151223,151224,151226,151228,151230,151232,151234],{"class":157,"line":121},[155,151225,150935],{"class":263},[155,151227,70000],{"class":171},[155,151229,565],{"class":263},[155,151231,70055],{"class":167},[155,151233,150944],{"class":171},[155,151235,150947],{"class":161},[155,151237,151238,151240,151242,151244,151246,151248],{"class":157,"line":180},[155,151239,150952],{"class":263},[155,151241,70000],{"class":171},[155,151243,3458],{"class":263},[155,151245,70055],{"class":167},[155,151247,150961],{"class":171},[155,151249,150964],{"class":161},[155,151251,151252],{"class":157,"line":194},[155,151253,21475],{"class":171},[21052,151255,151256,151271,151280,151283],{},[31,151257,151258,151259,151261,151262,151264,151265,151267,151268,151270],{},"绝对定位的特点：",[72279,151260],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[72279,151263],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[72279,151266],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[72279,151269],{},"  (4)固定定位",[31,151272,151273,151275,151276,151279],{},[20234,151274,151009],{}," 是元素 ",[20234,151277,151278],{},"固定于浏览器可视区的位置"," 。（认死理型）",[31,151281,151282],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[31,151284,151285],{},"语法:",[146,151287,151288],{"className":145115,"code":150908,"language":145117,"meta":39,"style":39},[152,151289,151290,151296,151308,151322,151336],{"__ignoreMap":39},[155,151291,151292,151294],{"class":157,"line":158},[155,151293,148963],{"class":226},[155,151295,35397],{"class":171},[155,151297,151298,151300,151302,151304,151306],{"class":157,"line":46},[155,151299,150921],{"class":263},[155,151301,70000],{"class":171},[155,151303,73327],{"class":263},[155,151305,148978],{"class":171},[155,151307,150930],{"class":161},[155,151309,151310,151312,151314,151316,151318,151320],{"class":157,"line":121},[155,151311,150935],{"class":263},[155,151313,70000],{"class":171},[155,151315,565],{"class":263},[155,151317,70055],{"class":167},[155,151319,150944],{"class":171},[155,151321,150947],{"class":161},[155,151323,151324,151326,151328,151330,151332,151334],{"class":157,"line":180},[155,151325,150952],{"class":263},[155,151327,70000],{"class":171},[155,151329,3458],{"class":263},[155,151331,70055],{"class":167},[155,151333,150961],{"class":171},[155,151335,150964],{"class":161},[155,151337,151338],{"class":157,"line":194},[155,151339,21475],{"class":171},[21052,151341,151342,151351],{},[31,151343,151344,151345,151347,151348,151350],{},"特点:",[72279,151346],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[72279,151349],{},"  ②固定定位不再占有原先的位置,完全脱标",[31,151352,151353,151354,151356,151357,151359,151360,151362],{},"固定在版心位置的方法:",[72279,151355],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[72279,151358],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[72279,151361],{},"  实例：",[146,151364,151365],{"className":145115,"code":150908,"language":145117,"meta":39,"style":39},[152,151366,151367,151373,151385,151399,151413],{"__ignoreMap":39},[155,151368,151369,151371],{"class":157,"line":158},[155,151370,148963],{"class":226},[155,151372,35397],{"class":171},[155,151374,151375,151377,151379,151381,151383],{"class":157,"line":46},[155,151376,150921],{"class":263},[155,151378,70000],{"class":171},[155,151380,73327],{"class":263},[155,151382,148978],{"class":171},[155,151384,150930],{"class":161},[155,151386,151387,151389,151391,151393,151395,151397],{"class":157,"line":121},[155,151388,150935],{"class":263},[155,151390,70000],{"class":171},[155,151392,565],{"class":263},[155,151394,70055],{"class":167},[155,151396,150944],{"class":171},[155,151398,150947],{"class":161},[155,151400,151401,151403,151405,151407,151409,151411],{"class":157,"line":180},[155,151402,150952],{"class":263},[155,151404,70000],{"class":171},[155,151406,3458],{"class":263},[155,151408,70055],{"class":167},[155,151410,150961],{"class":171},[155,151412,150964],{"class":161},[155,151414,151415],{"class":157,"line":194},[155,151416,21475],{"class":171},[37,151418],{"style":144971,"src":151419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[24,151421,151422],{},"(5)粘性定位",[21052,151424,151425,151428],{},[31,151426,151427],{},"粘性定位可以被认为是相对定位和固定定位的混合",[31,151429,25045],{},[146,151431,151432],{"className":145115,"code":150908,"language":145117,"meta":39,"style":39},[152,151433,151434,151440,151452,151466,151480],{"__ignoreMap":39},[155,151435,151436,151438],{"class":157,"line":158},[155,151437,148963],{"class":226},[155,151439,35397],{"class":171},[155,151441,151442,151444,151446,151448,151450],{"class":157,"line":46},[155,151443,150921],{"class":263},[155,151445,70000],{"class":171},[155,151447,73327],{"class":263},[155,151449,148978],{"class":171},[155,151451,150930],{"class":161},[155,151453,151454,151456,151458,151460,151462,151464],{"class":157,"line":121},[155,151455,150935],{"class":263},[155,151457,70000],{"class":171},[155,151459,565],{"class":263},[155,151461,70055],{"class":167},[155,151463,150944],{"class":171},[155,151465,150947],{"class":161},[155,151467,151468,151470,151472,151474,151476,151478],{"class":157,"line":180},[155,151469,150952],{"class":263},[155,151471,70000],{"class":171},[155,151473,3458],{"class":263},[155,151475,70055],{"class":167},[155,151477,150961],{"class":171},[155,151479,150964],{"class":161},[155,151481,151482],{"class":157,"line":194},[155,151483,21475],{"class":171},[21052,151485,151486],{},[31,151487,151488,151489,151491,151492,151494,151495,151497,151498,151501,151502,151504],{},"粘性定位的特点：",[72279,151490],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[72279,151493],{},"  ②粘性定位占有原先的位置（相对定位特点）",[72279,151496],{},"  ③必须添加 top 、left、right、bottom ",[20234,151499,151500],{},"其中一个"," 才有效",[72279,151503],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[146,151506,151507],{"className":145115,"code":150908,"language":145117,"meta":39,"style":39},[152,151508,151509,151515,151527,151541,151555],{"__ignoreMap":39},[155,151510,151511,151513],{"class":157,"line":158},[155,151512,148963],{"class":226},[155,151514,35397],{"class":171},[155,151516,151517,151519,151521,151523,151525],{"class":157,"line":46},[155,151518,150921],{"class":263},[155,151520,70000],{"class":171},[155,151522,73327],{"class":263},[155,151524,148978],{"class":171},[155,151526,150930],{"class":161},[155,151528,151529,151531,151533,151535,151537,151539],{"class":157,"line":121},[155,151530,150935],{"class":263},[155,151532,70000],{"class":171},[155,151534,565],{"class":263},[155,151536,70055],{"class":167},[155,151538,150944],{"class":171},[155,151540,150947],{"class":161},[155,151542,151543,151545,151547,151549,151551,151553],{"class":157,"line":180},[155,151544,150952],{"class":263},[155,151546,70000],{"class":171},[155,151548,3458],{"class":263},[155,151550,70055],{"class":167},[155,151552,150961],{"class":171},[155,151554,150964],{"class":161},[155,151556,151557],{"class":157,"line":194},[155,151558,21475],{"class":171},[37,151560],{"style":144971,"src":151561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[24,151563,151564],{},"(6)总结",[20222,151566,151567,151582],{},[20225,151568,151569],{},[20228,151570,151571,151573,151576,151579],{},[20231,151572,150905],{"align":43527},[20231,151574,151575],{"align":43527},"是否脱标",[20231,151577,151578],{"align":43527},"移动位置",[20231,151580,151581],{"align":43527},"是否常用",[20269,151583,151584,151597,151611,151625,151638],{},[20228,151585,151586,151589,151591,151594],{},[20274,151587,151588],{"align":43527},"Static 静态定位",[20274,151590,123241],{"align":43527},[20274,151592,151593],{"align":43527},"不能使用边偏移",[20274,151595,151596],{"align":43527},"很少",[20228,151598,151599,151602,151605,151608],{},[20274,151600,151601],{"align":43527},"Relative 相对定位",[20274,151603,151604],{"align":43527},"否(占有位置)",[20274,151606,151607],{"align":43527},"相对于自身位置移动",[20274,151609,151610],{"align":43527},"基本单独使用",[20228,151612,151613,151616,151619,151622],{},[20274,151614,151615],{"align":43527},"Absolute 绝对定位",[20274,151617,151618],{"align":43527},"是(不占有位置)",[20274,151620,151621],{"align":43527},"带有定位的父级",[20274,151623,151624],{"align":43527},"要和定位父级元素搭配使用",[20228,151626,151627,151630,151632,151635],{},[20274,151628,151629],{"align":43527},"Fixed 固定定位",[20274,151631,151618],{"align":43527},[20274,151633,151634],{"align":43527},"浏览器可视区",[20274,151636,151637],{"align":43527},"单独使用,不需要父级",[20228,151639,151640,151643,151645,151647],{},[20274,151641,151642],{"align":43527},"Sticky 粘性定位",[20274,151644,151604],{"align":43527},[20274,151646,151634],{"align":43527},[20274,151648,151649],{"align":43527},"当前阶段少",[28,151651,151652],{"start":46},[31,151653,151654,151657],{},[20234,151655,151656],{},"边偏移"," 则决定了该元素的最终位置",[20222,151659,151660,151671],{},[20225,151661,151662],{},[20228,151663,151664,151667,151669],{},[20231,151665,151666],{"align":43527},"边偏移属性",[20231,151668,47281],{"align":43527},[20231,151670,47278],{"align":43527},[20269,151672,151673,151684,151695,151705],{},[20228,151674,151675,151678,151681],{},[20274,151676,151677],{"align":43527},"top",[20274,151679,151680],{"align":43527},"top: 80px;",[20274,151682,151683],{"align":43527},"顶端偏移量，定义元素相对于父元素上边线的距离",[20228,151685,151686,151689,151692],{},[20274,151687,151688],{"align":43527},"bottom",[20274,151690,151691],{"align":43527},"bottom: 80px ;",[20274,151693,151694],{"align":43527},"底部偏移量，定义元素相对于其父元素下边线的距离",[20228,151696,151697,151699,151702],{},[20274,151698,43527],{"align":43527},[20274,151700,151701],{"align":43527},"left: 80px ;",[20274,151703,151704],{"align":43527},"左侧偏移量，定义元素相对于其父元素左边线的距离",[20228,151706,151707,151709,151712],{},[20274,151708,91085],{"align":43527},[20274,151710,151711],{"align":43527},"right: 80px ;",[20274,151713,151714],{"align":43527},"右侧偏移量，定义元素相对于其父元素右边线的距离",[21052,151716,151717],{},[31,151718,28874,151719,151721,151722,151724,151725,151727,151728,151731,151732,151734,151735,151737],{},[72279,151720],{},"  ① ",[20234,151723,151656],{}," 需要和 ",[20234,151726,150905],{}," 联合使用， ",[20234,151729,151730],{},"单独使用无效"," ；",[72279,151733],{},"  ②top和bottom不要同时使用",[72279,151736],{},"  ③left和right不要同时使用",[19,151739,151741],{"id":151740},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[24,151743,151744],{},"子级是绝对定位的话，父级要用相对定位",[21052,151746,151747,151750,151753,151756],{},[31,151748,151749],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[31,151751,151752],{},"父盒子需要加定位限制子盒子在父盒子内显示",[31,151754,151755],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[31,151757,151758,151759,151762],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[20234,151760,151761],{},"子绝父绝"," 也会遇到",[19,151764,151766],{"id":151765},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[21052,151768,151769,151784],{},[31,151770,151771,151772,151775,151776,151779,151780,151783],{},"在使用 ",[20234,151773,151774],{},"定位"," 布局时，可能会 ",[20234,151777,151778],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[20234,151781,151782],{},"z-index"," 来控制盒子的前后次序 (z轴)",[31,151785,25045],{},[146,151787,151788],{"className":145115,"code":150908,"language":145117,"meta":39,"style":39},[152,151789,151790,151796,151808,151822,151836],{"__ignoreMap":39},[155,151791,151792,151794],{"class":157,"line":158},[155,151793,148963],{"class":226},[155,151795,35397],{"class":171},[155,151797,151798,151800,151802,151804,151806],{"class":157,"line":46},[155,151799,150921],{"class":263},[155,151801,70000],{"class":171},[155,151803,73327],{"class":263},[155,151805,148978],{"class":171},[155,151807,150930],{"class":161},[155,151809,151810,151812,151814,151816,151818,151820],{"class":157,"line":121},[155,151811,150935],{"class":263},[155,151813,70000],{"class":171},[155,151815,565],{"class":263},[155,151817,70055],{"class":167},[155,151819,150944],{"class":171},[155,151821,150947],{"class":161},[155,151823,151824,151826,151828,151830,151832,151834],{"class":157,"line":180},[155,151825,150952],{"class":263},[155,151827,70000],{"class":171},[155,151829,3458],{"class":263},[155,151831,70055],{"class":167},[155,151833,150961],{"class":171},[155,151835,150964],{"class":161},[155,151837,151838],{"class":157,"line":194},[155,151839,21475],{"class":171},[21052,151841,151842],{},[31,151843,151844,151845,151721,151847,151849,151850,146278,151853,101102,151856,151858,151859,151861,151862,151865,151866,151731,151869,151871,151872,151875,151877],{},"z-index的特性",[72279,151846],{},[20234,151848,145579],{}," ： ",[20234,151851,151852],{},"正整数",[20234,151854,151855],{},"负整数",[20234,151857,1109],{}," ，默认值是 0，数值越大，盒子越靠上；",[72279,151860],{},"  ②如果 ",[20234,151863,151864],{},"属性值相同"," ，则按照书写顺序， ",[20234,151867,151868],{},"后来居上",[72279,151870],{},"  ③数字后面 ",[20234,151873,151874],{},"不能加单位",[72279,151876],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[19,151879,151881],{"id":151880},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[24,151883,151884],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[24,151886,151887],{},"方法:",[21052,151889,151890,151900],{},[31,151891,151892,151893,151896,151897],{},"left: 50%; 让 ",[20234,151894,151895],{},"盒子的左侧"," 移动到 ",[20234,151898,151899],{},"父级元素的水平中心位置",[31,151901,151902,151903,151906,151907],{},"margin-left: -100px; 让盒子 ",[20234,151904,151905],{},"向左"," 移动 ",[20234,151908,151909],{},"自身宽度的一半",[19,151911,151913],{"id":151912},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[28,151915,151916,151919],{},[31,151917,151918],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[31,151920,151921],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[24,151923,151924],{},"也就是说绝对定位和固定定位和浮动类似",[28,151926,151927],{"start":121},[31,151928,151929],{},"display 是显示模式， 可以改变显示模式有以下方式:",[21052,151931,151932,151935,151938],{},[31,151933,151934],{},"可以用inline-block 转换为行内块",[31,151936,151937],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[31,151939,151940],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[24,151942,151943],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[19,151945,151947],{"id":151946},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[28,151949,151950,151953,151956,151959],{},[31,151951,151952],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[31,151954,151955],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[31,151957,151958],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[31,151960,151961],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[146,151963,151964],{"className":145115,"code":149581,"language":145117,"meta":39,"style":39},[152,151965,151966,151972,151982,151986,151992,152002],{"__ignoreMap":39},[155,151967,151968,151970],{"class":157,"line":158},[155,151969,149588],{"class":226},[155,151971,35397],{"class":171},[155,151973,151974,151976,151978,151980],{"class":157,"line":46},[155,151975,149595],{"class":263},[155,151977,70000],{"class":171},[155,151979,43527],{"class":263},[155,151981,21206],{"class":171},[155,151983,151984],{"class":157,"line":121},[155,151985,21475],{"class":171},[155,151987,151988,151990],{"class":157,"line":180},[155,151989,149610],{"class":226},[155,151991,35397],{"class":171},[155,151993,151994,151996,151998,152000],{"class":157,"line":194},[155,151995,149595],{"class":263},[155,151997,70000],{"class":171},[155,151999,91085],{"class":263},[155,152001,21206],{"class":171},[155,152003,152004],{"class":157,"line":200},[155,152005,21475],{"class":171},[37,152007],{"style":144971,"src":152008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[19,152010,152012],{"id":152011},"_11138-轮播图","11.1.3.8 轮播图",[37,152014],{"style":144971,"src":152015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[28,152017,152018],{},[31,152019,152020],{},"制作顺序:",[21052,152022,152023,152026,152029,152038],{},[31,152024,152025],{},"大盒子我们类名为： tb-promo 淘宝广告",[31,152027,152028],{},"里面先放一张图片",[31,152030,152031,152032,152034,152035,152037],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[72279,152033],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[72279,152036],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[31,152039,152040,152041,152043,152044,152046],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[72279,152042],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[72279,152045],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[28,152048,152049],{"start":46},[31,152050,152051],{},"代码模块",[146,152053,152055],{"className":145115,"code":152054,"language":145117,"meta":39,"style":39},"\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",[152,152056,152057,152062,152069,152079,152089,152099,152103,152108,152115,152125],{"__ignoreMap":39},[155,152058,152059],{"class":157,"line":158},[155,152060,152061],{"class":161},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[155,152063,152064,152067],{"class":157,"line":46},[155,152065,152066],{"class":226},".son",[155,152068,35397],{"class":171},[155,152070,152071,152073,152075,152077],{"class":157,"line":121},[155,152072,150921],{"class":263},[155,152074,70000],{"class":171},[155,152076,73394],{"class":263},[155,152078,21206],{"class":171},[155,152080,152081,152083,152085,152087],{"class":157,"line":180},[155,152082,150935],{"class":263},[155,152084,70000],{"class":171},[155,152086,1109],{"class":263},[155,152088,21206],{"class":171},[155,152090,152091,152093,152095,152097],{"class":157,"line":194},[155,152092,150952],{"class":263},[155,152094,70000],{"class":171},[155,152096,1109],{"class":263},[155,152098,21206],{"class":171},[155,152100,152101],{"class":157,"line":200},[155,152102,21475],{"class":171},[155,152104,152105],{"class":157,"line":213},[155,152106,152107],{"class":161},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[155,152109,152110,152113],{"class":157,"line":220},[155,152111,152112],{"class":226},".father",[155,152114,35397],{"class":171},[155,152116,152117,152119,152121,152123],{"class":157,"line":245},[155,152118,150921],{"class":263},[155,152120,70000],{"class":171},[155,152122,73327],{"class":263},[155,152124,21206],{"class":171},[155,152126,152127],{"class":157,"line":251},[155,152128,21475],{"class":171},[24,152130,152131],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[14,152133,152135],{"id":152134},"_1114-定位数值的移动","11.1.4 定位数值的移动",[37,152137],{"style":144971,"src":152138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[24,152140,152141],{},"✨ 黄金口诀：",[24,152143,152144],{},"\"TOP正下负上，LEFT正右负左\"",[24,152146,152147],{},"\"RIGHT正左负右，BOTTOM正上负下",[24,152149,152150],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[24,152152,152153],{},"✨ 简单记：",[24,152155,152156],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[20011,152158,152159],{},"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":39,"searchDepth":46,"depth":46,"links":152161},[152162],{"id":150689,"depth":46,"text":150690,"children":152163},[152164,152165,152166,152167],{"id":150693,"depth":121,"text":150694},{"id":150708,"depth":121,"text":150709},{"id":150876,"depth":121,"text":150877},{"id":152134,"depth":121,"text":152135},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":150681,"description":20020},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":152174,"title":152175,"body":152176,"description":20020,"extension":20021,"meta":153599,"navigation":216,"path":153600,"seo":153601,"stem":153602,"__hash__":153603},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":152177,"toc":153578},[152178,152181,152185,152193,152197,152202,152210,152222,152226,152231,152239,152250,152254,152259,152300,152308,152312,152315,152318,152321,152415,152418,152512,152515,152609,152612,152615,152650,152653,152656,152686,152689,152692,152695,152698,152701,152704,152707,152777,152780,152784,152788,152829,152833,152839,152842,152845,152849,152852,152855,152858,152939,152942,152945,152949,152953,152956,152959,152962,152965,152968,152974,152983,152987,153006,153010,153020,153023,153026,153029,153032,153035,153038,153041,153044,153053,153057,153066,153069,153074,153127,153132,153298,153301,153304,153309,153312,153315,153318,153321,153326,153474,153477,153480,153485,153488,153493,153527,153530,153533,153537,153540,153547,153550,153553,153556,153559,153562,153565,153568,153572,153575],[10,152179,152175],{"id":152180},"_12-显示隐藏与图形资源",[20037,152182,152184],{"id":152183},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[21052,152186,152187,152190],{},[31,152188,152189],{},"目的:让一个元素在页面中消失或者显示出来",[31,152191,152192],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[14,152194,152196],{"id":152195},"_1211-display-显示","12.1.1 display 显示",[28,152198,152199],{},[31,152200,152201],{},"display 设置或检索对象是否及如何显示",[21052,152203,152204,152207],{},[31,152205,152206],{},"display: none;隐藏对象",[31,152208,152209],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[28,152211,152212,152219],{"start":46},[31,152213,152214,152215,152218],{},"特点： display 隐藏元素后， ",[20234,152216,152217],{},"不再占"," 有原来的位置",[31,152220,152221],{},"在js中使用非常的广泛",[14,152223,152225],{"id":152224},"_1212-visibility可见性","12.1.2 visibility可见性",[28,152227,152228],{},[31,152229,152230],{},"visibility 属性用于指定一个元素应可见还是隐藏",[21052,152232,152233,152236],{},[31,152234,152235],{},"visibility： visible；元素可见",[31,152237,152238],{},"visibility：hidden；元素隐藏",[28,152240,152241,152244,152247],{"start":46},[31,152242,152243],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[31,152245,152246],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[31,152248,152249],{},"隐藏后继续占有原有位置",[14,152251,152253],{"id":152252},"_1213-overflow溢出","12.1.3 overflow溢出",[21052,152255,152256],{},[31,152257,152258],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[20222,152260,152261,152269],{},[20225,152262,152263],{},[20228,152264,152265,152267],{},[20231,152266,145579],{"align":43527},[20231,152268,47278],{"align":43527},[20269,152270,152271,152279,152286,152293],{},[20228,152272,152273,152276],{},[20274,152274,152275],{"align":43527},"visible",[20274,152277,152278],{"align":43527},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[20228,152280,152281,152283],{},[20274,152282,80277],{"align":43527},[20274,152284,152285],{"align":43527},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[20228,152287,152288,152290],{},[20274,152289,147535],{"align":43527},[20274,152291,152292],{"align":43527},"不管超出内容否，总是显示滚动条",[20228,152294,152295,152297],{},[20274,152296,91226],{"align":43527},[20274,152298,152299],{"align":43527},"超出自动显示滚动条，不超出不显示滚动条",[21052,152301,152302,152305],{},[31,152303,152304],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[31,152306,152307],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[14,152309,152311],{"id":152310},"_1214-案例收获","12.1.4 案例收获",[37,152313],{"style":144971,"src":152314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[24,152316,152317],{},"问题：没做出来动态效果，使用hover没实现",[24,152319,152320],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[146,152322,152323],{"className":145115,"code":150547,"language":145117,"meta":39,"style":39},[152,152324,152325,152329,152343,152347,152361,152365,152379,152383,152397,152401],{"__ignoreMap":39},[155,152326,152327],{"class":157,"line":158},[155,152328,150554],{"class":161},[155,152330,152331,152333,152335,152337,152339,152341],{"class":157,"line":46},[155,152332,150559],{"class":226},[155,152334,98370],{"class":171},[155,152336,147475],{"class":263},[155,152338,70000],{"class":171},[155,152340,150568],{"class":263},[155,152342,148045],{"class":171},[155,152344,152345],{"class":157,"line":121},[155,152346,150575],{"class":161},[155,152348,152349,152351,152353,152355,152357,152359],{"class":157,"line":180},[155,152350,150580],{"class":226},[155,152352,98370],{"class":171},[155,152354,147475],{"class":263},[155,152356,70000],{"class":171},[155,152358,73327],{"class":263},[155,152360,148045],{"class":171},[155,152362,152363],{"class":157,"line":194},[155,152364,150595],{"class":161},[155,152366,152367,152369,152371,152373,152375,152377],{"class":157,"line":200},[155,152368,150600],{"class":226},[155,152370,98370],{"class":171},[155,152372,147475],{"class":263},[155,152374,70000],{"class":171},[155,152376,73394],{"class":263},[155,152378,148045],{"class":171},[155,152380,152381],{"class":157,"line":213},[155,152382,150615],{"class":161},[155,152384,152385,152387,152389,152391,152393,152395],{"class":157,"line":220},[155,152386,150620],{"class":226},[155,152388,98370],{"class":171},[155,152390,147475],{"class":263},[155,152392,70000],{"class":171},[155,152394,104796],{"class":263},[155,152396,148045],{"class":171},[155,152398,152399],{"class":157,"line":245},[155,152400,150635],{"class":161},[155,152402,152403,152405,152407,152409,152411,152413],{"class":157,"line":251},[155,152404,150640],{"class":226},[155,152406,98370],{"class":171},[155,152408,147475],{"class":263},[155,152410,70000],{"class":171},[155,152412,150649],{"class":263},[155,152414,148045],{"class":171},[24,152416,152417],{},"完整代码：",[146,152419,152420],{"className":145115,"code":150547,"language":145117,"meta":39,"style":39},[152,152421,152422,152426,152440,152444,152458,152462,152476,152480,152494,152498],{"__ignoreMap":39},[155,152423,152424],{"class":157,"line":158},[155,152425,150554],{"class":161},[155,152427,152428,152430,152432,152434,152436,152438],{"class":157,"line":46},[155,152429,150559],{"class":226},[155,152431,98370],{"class":171},[155,152433,147475],{"class":263},[155,152435,70000],{"class":171},[155,152437,150568],{"class":263},[155,152439,148045],{"class":171},[155,152441,152442],{"class":157,"line":121},[155,152443,150575],{"class":161},[155,152445,152446,152448,152450,152452,152454,152456],{"class":157,"line":180},[155,152447,150580],{"class":226},[155,152449,98370],{"class":171},[155,152451,147475],{"class":263},[155,152453,70000],{"class":171},[155,152455,73327],{"class":263},[155,152457,148045],{"class":171},[155,152459,152460],{"class":157,"line":194},[155,152461,150595],{"class":161},[155,152463,152464,152466,152468,152470,152472,152474],{"class":157,"line":200},[155,152465,150600],{"class":226},[155,152467,98370],{"class":171},[155,152469,147475],{"class":263},[155,152471,70000],{"class":171},[155,152473,73394],{"class":263},[155,152475,148045],{"class":171},[155,152477,152478],{"class":157,"line":213},[155,152479,150615],{"class":161},[155,152481,152482,152484,152486,152488,152490,152492],{"class":157,"line":220},[155,152483,150620],{"class":226},[155,152485,98370],{"class":171},[155,152487,147475],{"class":263},[155,152489,70000],{"class":171},[155,152491,104796],{"class":263},[155,152493,148045],{"class":171},[155,152495,152496],{"class":157,"line":245},[155,152497,150635],{"class":161},[155,152499,152500,152502,152504,152506,152508,152510],{"class":157,"line":251},[155,152501,150640],{"class":226},[155,152503,98370],{"class":171},[155,152505,147475],{"class":263},[155,152507,70000],{"class":171},[155,152509,150649],{"class":263},[155,152511,148045],{"class":171},[24,152513,152514],{},"分布思路重点详解：",[146,152516,152517],{"className":145115,"code":150547,"language":145117,"meta":39,"style":39},[152,152518,152519,152523,152537,152541,152555,152559,152573,152577,152591,152595],{"__ignoreMap":39},[155,152520,152521],{"class":157,"line":158},[155,152522,150554],{"class":161},[155,152524,152525,152527,152529,152531,152533,152535],{"class":157,"line":46},[155,152526,150559],{"class":226},[155,152528,98370],{"class":171},[155,152530,147475],{"class":263},[155,152532,70000],{"class":171},[155,152534,150568],{"class":263},[155,152536,148045],{"class":171},[155,152538,152539],{"class":157,"line":121},[155,152540,150575],{"class":161},[155,152542,152543,152545,152547,152549,152551,152553],{"class":157,"line":180},[155,152544,150580],{"class":226},[155,152546,98370],{"class":171},[155,152548,147475],{"class":263},[155,152550,70000],{"class":171},[155,152552,73327],{"class":263},[155,152554,148045],{"class":171},[155,152556,152557],{"class":157,"line":194},[155,152558,150595],{"class":161},[155,152560,152561,152563,152565,152567,152569,152571],{"class":157,"line":200},[155,152562,150600],{"class":226},[155,152564,98370],{"class":171},[155,152566,147475],{"class":263},[155,152568,70000],{"class":171},[155,152570,73394],{"class":263},[155,152572,148045],{"class":171},[155,152574,152575],{"class":157,"line":213},[155,152576,150615],{"class":161},[155,152578,152579,152581,152583,152585,152587,152589],{"class":157,"line":220},[155,152580,150620],{"class":226},[155,152582,98370],{"class":171},[155,152584,147475],{"class":263},[155,152586,70000],{"class":171},[155,152588,104796],{"class":263},[155,152590,148045],{"class":171},[155,152592,152593],{"class":157,"line":245},[155,152594,150635],{"class":161},[155,152596,152597,152599,152601,152603,152605,152607],{"class":157,"line":251},[155,152598,150640],{"class":226},[155,152600,98370],{"class":171},[155,152602,147475],{"class":263},[155,152604,70000],{"class":171},[155,152606,150649],{"class":263},[155,152608,148045],{"class":171},[37,152610],{"style":144971,"src":152611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[24,152613,152614],{},"图片太大，盒子太小，此时需要修改图片的大小",[146,152616,152618],{"className":145862,"code":152617,"language":145864,"meta":39,"style":39},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[152,152619,152620],{"__ignoreMap":39},[155,152621,152622,152624,152626,152628,152630,152633,152635,152637,152640,152643,152645,152648],{"class":157,"line":158},[155,152623,20959],{"class":171},[155,152625,37],{"class":69863},[155,152627,73802],{"class":226},[155,152629,317],{"class":171},[155,152631,152632],{"class":732},"\"images\u002Fpic.jpg\"",[155,152634,73810],{"class":226},[155,152636,317],{"class":171},[155,152638,152639],{"class":732},"\"描述文字\"",[155,152641,152642],{"class":226}," title",[155,152644,317],{"class":171},[155,152646,152647],{"class":732},"\"悬停提示\"",[155,152649,69870],{"class":171},[37,152651],{"style":144971,"src":152652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[24,152654,152655],{},"制造遮罩层",[146,152657,152658],{"className":145862,"code":152617,"language":145864,"meta":39,"style":39},[152,152659,152660],{"__ignoreMap":39},[155,152661,152662,152664,152666,152668,152670,152672,152674,152676,152678,152680,152682,152684],{"class":157,"line":158},[155,152663,20959],{"class":171},[155,152665,37],{"class":69863},[155,152667,73802],{"class":226},[155,152669,317],{"class":171},[155,152671,152632],{"class":732},[155,152673,73810],{"class":226},[155,152675,317],{"class":171},[155,152677,152639],{"class":732},[155,152679,152642],{"class":226},[155,152681,317],{"class":171},[155,152683,152647],{"class":732},[155,152685,69870],{"class":171},[24,152687,152688],{},"此时是这样的为标准流",[37,152690],{"style":144971,"src":152691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[24,152693,152694],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[24,152696,152697],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[24,152699,152700],{},"让他在中间，用center(background-position)",[24,152702,152703],{},"将需要变的尽可能放到一个盒子中",[24,152705,152706],{},"放大盒子上内部盒子发生变化",[146,152708,152710],{"className":145115,"code":152709,"language":145117,"meta":39,"style":39},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[152,152711,152712,152718,152728,152732,152739,152749,152761,152773],{"__ignoreMap":39},[155,152713,152714,152716],{"class":157,"line":158},[155,152715,146182],{"class":226},[155,152717,35397],{"class":171},[155,152719,152720,152722,152724,152726],{"class":157,"line":46},[155,152721,150921],{"class":263},[155,152723,70000],{"class":171},[155,152725,73327],{"class":263},[155,152727,21206],{"class":171},[155,152729,152730],{"class":157,"line":121},[155,152731,21475],{"class":171},[155,152733,152734,152737],{"class":157,"line":180},[155,152735,152736],{"class":226},".child",[155,152738,35397],{"class":171},[155,152740,152741,152743,152745,152747],{"class":157,"line":194},[155,152742,150921],{"class":263},[155,152744,70000],{"class":171},[155,152746,73394],{"class":263},[155,152748,21206],{"class":171},[155,152750,152751,152753,152755,152757,152759],{"class":157,"line":200},[155,152752,150935],{"class":263},[155,152754,70000],{"class":171},[155,152756,20715],{"class":263},[155,152758,2938],{"class":167},[155,152760,21206],{"class":171},[155,152762,152763,152765,152767,152769,152771],{"class":157,"line":213},[155,152764,150952],{"class":263},[155,152766,70000],{"class":171},[155,152768,20715],{"class":263},[155,152770,2938],{"class":167},[155,152772,21206],{"class":171},[155,152774,152775],{"class":157,"line":220},[155,152776,21475],{"class":171},[24,152778,152779],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[20037,152781,152783],{"id":152782},"_122-精灵图","12.2 精灵图",[14,152785,152787],{"id":152786},"_1221-理解","12.2.1 理解",[28,152789,152790,152808],{},[31,152791,152792,152793,151021,152796,152799,152800,152803,152804,152807],{},"目的： ",[20234,152794,152795],{},"为了有效地减少服务器接收和发送请求的次数",[20234,152797,152798],{},"提高"," 页面的 ",[20234,152801,152802],{},"加载速度"," ，出现了 ",[20234,152805,152806],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[31,152809,152810,152811,152813,152814,152816,152817,152819,152820,152822,152823,152825,152826,152828],{},"使用精灵图核心：",[72279,152812],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[72279,152815],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[72279,152818],{},"  ③移动背景图片位置， 此时可以使用 background-position",[72279,152821],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[72279,152824],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[72279,152827],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[14,152830,152832],{"id":152831},"_1222-扒图","12.2.2 扒图",[146,152834,152837],{"className":152835,"code":152836,"language":25051},[25049],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[152,152838,152836],{"__ignoreMap":39},[37,152840],{"style":144971,"src":152841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[37,152843],{"style":144971,"src":152844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[14,152846,152848],{"id":152847},"_1223-精灵图的实现","12.2.3 精灵图的实现",[37,152850],{"style":144971,"src":152851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[24,152853,152854],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[37,152856],{"style":144971,"src":152857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[146,152859,152861],{"className":145115,"code":152860,"language":145117,"meta":39,"style":39},"\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",[152,152862,152863,152868,152875,152887,152899,152918,152935],{"__ignoreMap":39},[155,152864,152865],{"class":157,"line":158},[155,152866,152867],{"class":161},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[155,152869,152870,152873],{"class":157,"line":46},[155,152871,152872],{"class":226},".icon",[155,152874,35397],{"class":171},[155,152876,152877,152879,152881,152883,152885],{"class":157,"line":121},[155,152878,89131],{"class":263},[155,152880,70000],{"class":171},[155,152882,3458],{"class":263},[155,152884,70055],{"class":167},[155,152886,21206],{"class":171},[155,152888,152889,152891,152893,152895,152897],{"class":157,"line":180},[155,152890,89351],{"class":263},[155,152892,70000],{"class":171},[155,152894,3458],{"class":263},[155,152896,70055],{"class":167},[155,152898,21206],{"class":171},[155,152900,152901,152903,152905,152907,152909,152912,152914,152916],{"class":157,"line":194},[155,152902,89174],{"class":263},[155,152904,70000],{"class":171},[155,152906,80289],{"class":263},[155,152908,230],{"class":171},[155,152910,152911],{"class":323},"sprites.png",[155,152913,33541],{"class":171},[155,152915,80299],{"class":263},[155,152917,21206],{"class":171},[155,152919,152920,152922,152924,152926,152928,152931,152933],{"class":157,"line":200},[155,152921,147375],{"class":263},[155,152923,70000],{"class":171},[155,152925,70326],{"class":263},[155,152927,70055],{"class":167},[155,152929,152930],{"class":263}," -20",[155,152932,70055],{"class":167},[155,152934,21206],{"class":171},[155,152936,152937],{"class":157,"line":213},[155,152938,21475],{"class":171},[37,152940],{"style":144971,"src":152941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[24,152943,152944],{},"在前端中坐标轴的正方向是右和下",[20037,152946,152948],{"id":152947},"_123-字体图标","12.3 字体图标",[14,152950,152952],{"id":152951},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[24,152954,152955],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[24,152957,152958],{},"精灵图是有诸多优点的，但是缺点很明显。",[24,152960,152961],{},"1.图片文件还是比较大的。",[24,152963,152964],{},"2.图片本身放大和缩小会失真。",[24,152966,152967],{},"3.一旦图片制作完毕想要更换非常复杂。",[24,152969,152970,152971,45530],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[20234,152972,152973],{},"字体图标 iconfont",[24,152975,152976,152979,152980,48174],{},[20234,152977,152978],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[20234,152981,152982],{},"展示的是图标，本质属于字体",[14,152984,152986],{"id":152985},"_1232-字体图标的优点","12.3.2 字体图标的优点",[21052,152988,152989,152994,152997,153000,153003],{},[31,152990,152991,152993],{},[20234,152992,45666],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[31,152995,152996],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[31,152998,152999],{},"兼容性：几乎支持所有的浏览器，请放心使用",[31,153001,153002],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[31,153004,153005],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[14,153007,153009],{"id":153008},"_1233-字体库下载网站","12.3.3 字体库下载网站",[21052,153011,153012],{},[31,153013,153014,153015],{},"icomoon字体库：",[20318,153016,153019],{"href":153017,"rel":153018},"http:\u002F\u002Ficomoon.io\u002F",[43656],"http:\u002F\u002Ficomoon.io",[24,153021,153022],{},"进去之后点icomoon app",[37,153024],{"style":144971,"src":153025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[24,153027,153028],{},"可以对其编辑：",[37,153030],{"style":144971,"src":153031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[24,153033,153034],{},"生成字体：",[37,153036],{"style":144971,"src":153037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[24,153039,153040],{},"下载：",[37,153042],{"style":144971,"src":153043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[21052,153045,153046],{},[31,153047,153048,153049],{},"阿里iconfont字体库： ",[20318,153050,153051],{"href":153051,"rel":153052},"http:\u002F\u002Fwww.iconfont.cn\u002F",[43656],[14,153054,153056],{"id":153055},"_1234-字体图标的引入","12.3.4 字体图标的引入",[28,153058,153059],{},[31,153060,153061,153062,153065],{},"把下载包里面的 ",[20234,153063,153064],{},"fonts"," 文件夹放入页面根目录下",[37,153067],{"style":144971,"src":153068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[28,153070,153071],{"start":46},[31,153072,153073],{},"字体文件格式",[20222,153075,153076,153085],{},[20225,153077,153078],{},[20228,153079,153080,153083],{},[20231,153081,153082],{"align":43527},"格式",[20231,153084,43531],{"align":43527},[20269,153086,153087,153097,153107,153117],{},[20228,153088,153089,153094],{},[20274,153090,153091],{"align":43527},[20234,153092,153093],{},".ttf",[20274,153095,153096],{"align":43527},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[20228,153098,153099,153104],{},[20274,153100,153101],{"align":43527},[20234,153102,153103],{},".woff",[20274,153105,153106],{"align":43527},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[20228,153108,153109,153114],{},[20274,153110,153111],{"align":43527},[20234,153112,153113],{},".eot",[20274,153115,153116],{"align":43527},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[20228,153118,153119,153124],{},[20274,153120,153121],{"align":43527},[20234,153122,153123],{},"svg",[20274,153125,153126],{"align":43527},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[28,153128,153129],{"start":121},[31,153130,153131],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[146,153133,153135],{"className":145115,"code":153134,"language":145117,"meta":39,"style":39},"\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",[152,153136,153137,153142,153149,153161,153177,153202,153223,153243,153263,153267,153273,153283,153294],{"__ignoreMap":39},[155,153138,153139],{"class":157,"line":158},[155,153140,153141],{"class":161},"\u002F* 引入字体图标 *\u002F\n",[155,153143,153144,153147],{"class":157,"line":46},[155,153145,153146],{"class":167},"@font-face",[155,153148,35397],{"class":171},[155,153150,153151,153154,153156,153159],{"class":157,"line":121},[155,153152,153153],{"class":263},"  font-family",[155,153155,70000],{"class":171},[155,153157,153158],{"class":732},"'icomoon'",[155,153160,21206],{"class":171},[155,153162,153163,153166,153168,153170,153172,153175],{"class":157,"line":180},[155,153164,153165],{"class":263},"  src",[155,153167,70000],{"class":171},[155,153169,80289],{"class":263},[155,153171,230],{"class":171},[155,153173,153174],{"class":732},"'fonts\u002Ficomoon.eot'",[155,153176,22596],{"class":171},[155,153178,153179,153181,153183,153185,153187,153190,153192,153195,153197,153200],{"class":157,"line":194},[155,153180,153165],{"class":263},[155,153182,70000],{"class":171},[155,153184,80289],{"class":263},[155,153186,230],{"class":171},[155,153188,153189],{"class":732},"'fonts\u002Ficomoon.eot?#iefix'",[155,153191,33541],{"class":171},[155,153193,153194],{"class":263},"format",[155,153196,230],{"class":171},[155,153198,153199],{"class":732},"'embedded-opentype'",[155,153201,7657],{"class":171},[155,153203,153204,153207,153209,153212,153214,153216,153218,153221],{"class":157,"line":200},[155,153205,153206],{"class":263},"       url",[155,153208,230],{"class":171},[155,153210,153211],{"class":732},"'fonts\u002Ficomoon.woff'",[155,153213,33541],{"class":171},[155,153215,153194],{"class":263},[155,153217,230],{"class":171},[155,153219,153220],{"class":732},"'woff'",[155,153222,7657],{"class":171},[155,153224,153225,153227,153229,153232,153234,153236,153238,153241],{"class":157,"line":213},[155,153226,153206],{"class":263},[155,153228,230],{"class":171},[155,153230,153231],{"class":732},"'fonts\u002Ficomoon.ttf'",[155,153233,33541],{"class":171},[155,153235,153194],{"class":263},[155,153237,230],{"class":171},[155,153239,153240],{"class":732},"'truetype'",[155,153242,7657],{"class":171},[155,153244,153245,153247,153249,153252,153254,153256,153258,153261],{"class":157,"line":220},[155,153246,153206],{"class":263},[155,153248,230],{"class":171},[155,153250,153251],{"class":732},"'fonts\u002Ficomoon.svg#icomoon'",[155,153253,33541],{"class":171},[155,153255,153194],{"class":263},[155,153257,230],{"class":171},[155,153259,153260],{"class":732},"'svg'",[155,153262,22596],{"class":171},[155,153264,153265],{"class":157,"line":245},[155,153266,21475],{"class":171},[155,153268,153269,153271],{"class":157,"line":251},[155,153270,152872],{"class":226},[155,153272,35397],{"class":171},[155,153274,153275,153277,153279,153281],{"class":157,"line":257},[155,153276,153153],{"class":263},[155,153278,70000],{"class":171},[155,153280,153158],{"class":732},[155,153282,21206],{"class":171},[155,153284,153285,153288,153290,153292],{"class":157,"line":270},[155,153286,153287],{"class":263},"  font-style",[155,153289,70000],{"class":171},[155,153291,82404],{"class":263},[155,153293,21206],{"class":171},[155,153295,153296],{"class":157,"line":276},[155,153297,21475],{"class":171},[24,153299,153300],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[37,153302],{"style":144971,"src":153303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[28,153305,153306],{"start":180},[31,153307,153308],{},"添加字体",[37,153310],{"style":144971,"src":153311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[24,153313,153314],{},"复制：",[37,153316],{"style":144971,"src":153317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[24,153319,153320],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[28,153322,153323],{"start":194},[31,153324,153325],{},"代码展示：",[146,153327,153328],{"className":145115,"code":153134,"language":145117,"meta":39,"style":39},[152,153329,153330,153334,153340,153350,153364,153386,153404,153422,153440,153444,153450,153460,153470],{"__ignoreMap":39},[155,153331,153332],{"class":157,"line":158},[155,153333,153141],{"class":161},[155,153335,153336,153338],{"class":157,"line":46},[155,153337,153146],{"class":167},[155,153339,35397],{"class":171},[155,153341,153342,153344,153346,153348],{"class":157,"line":121},[155,153343,153153],{"class":263},[155,153345,70000],{"class":171},[155,153347,153158],{"class":732},[155,153349,21206],{"class":171},[155,153351,153352,153354,153356,153358,153360,153362],{"class":157,"line":180},[155,153353,153165],{"class":263},[155,153355,70000],{"class":171},[155,153357,80289],{"class":263},[155,153359,230],{"class":171},[155,153361,153174],{"class":732},[155,153363,22596],{"class":171},[155,153365,153366,153368,153370,153372,153374,153376,153378,153380,153382,153384],{"class":157,"line":194},[155,153367,153165],{"class":263},[155,153369,70000],{"class":171},[155,153371,80289],{"class":263},[155,153373,230],{"class":171},[155,153375,153189],{"class":732},[155,153377,33541],{"class":171},[155,153379,153194],{"class":263},[155,153381,230],{"class":171},[155,153383,153199],{"class":732},[155,153385,7657],{"class":171},[155,153387,153388,153390,153392,153394,153396,153398,153400,153402],{"class":157,"line":200},[155,153389,153206],{"class":263},[155,153391,230],{"class":171},[155,153393,153211],{"class":732},[155,153395,33541],{"class":171},[155,153397,153194],{"class":263},[155,153399,230],{"class":171},[155,153401,153220],{"class":732},[155,153403,7657],{"class":171},[155,153405,153406,153408,153410,153412,153414,153416,153418,153420],{"class":157,"line":213},[155,153407,153206],{"class":263},[155,153409,230],{"class":171},[155,153411,153231],{"class":732},[155,153413,33541],{"class":171},[155,153415,153194],{"class":263},[155,153417,230],{"class":171},[155,153419,153240],{"class":732},[155,153421,7657],{"class":171},[155,153423,153424,153426,153428,153430,153432,153434,153436,153438],{"class":157,"line":220},[155,153425,153206],{"class":263},[155,153427,230],{"class":171},[155,153429,153251],{"class":732},[155,153431,33541],{"class":171},[155,153433,153194],{"class":263},[155,153435,230],{"class":171},[155,153437,153260],{"class":732},[155,153439,22596],{"class":171},[155,153441,153442],{"class":157,"line":245},[155,153443,21475],{"class":171},[155,153445,153446,153448],{"class":157,"line":251},[155,153447,152872],{"class":226},[155,153449,35397],{"class":171},[155,153451,153452,153454,153456,153458],{"class":157,"line":257},[155,153453,153153],{"class":263},[155,153455,70000],{"class":171},[155,153457,153158],{"class":732},[155,153459,21206],{"class":171},[155,153461,153462,153464,153466,153468],{"class":157,"line":270},[155,153463,153287],{"class":263},[155,153465,70000],{"class":171},[155,153467,82404],{"class":263},[155,153469,21206],{"class":171},[155,153471,153472],{"class":157,"line":276},[155,153473,21475],{"class":171},[37,153475],{"style":144971,"src":153476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[24,153478,153479],{},"更加细节展示：",[28,153481,153482],{},[31,153483,153484],{},"html 标签内添加小图标",[37,153486],{"style":144971,"src":153487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[28,153489,153490],{"start":46},[31,153491,153492],{},"给标签定义字体",[146,153494,153495],{"className":145862,"code":149219,"language":145864,"meta":39,"style":39},[152,153496,153497,153501,153515,153519],{"__ignoreMap":39},[155,153498,153499],{"class":157,"line":158},[155,153500,149226],{"class":161},[155,153502,153503,153505,153507,153509,153511,153513],{"class":157,"line":46},[155,153504,20959],{"class":171},[155,153506,70174],{"class":69863},[155,153508,72049],{"class":226},[155,153510,317],{"class":171},[155,153512,149239],{"class":732},[155,153514,69870],{"class":171},[155,153516,153517],{"class":157,"line":121},[155,153518,149246],{"class":171},[155,153520,153521,153523,153525],{"class":157,"line":180},[155,153522,70348],{"class":171},[155,153524,70174],{"class":69863},[155,153526,69870],{"class":171},[24,153528,153529],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[37,153531],{"style":144971,"src":153532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[14,153534,153536],{"id":153535},"_1235-字体图标的追加","12.3.5 字体图标的追加",[24,153538,153539],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[24,153541,153542,153543,153546],{},"把压缩包里面的 ",[20234,153544,153545],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[24,153548,153549],{},"打开网站，点下方：",[37,153551],{"style":144971,"src":153552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[37,153554],{"style":144971,"src":153555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[37,153557],{"style":144971,"src":153558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[24,153560,153561],{},"点yes重新加载",[24,153563,153564],{},"然后重复之前的操作就可以实现了",[24,153566,153567],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[14,153569,153571],{"id":153570},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[37,153573],{"style":144971,"src":153574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[20011,153576,153577],{},"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":39,"searchDepth":46,"depth":46,"links":153579},[153580,153586,153591],{"id":152183,"depth":46,"text":152184,"children":153581},[153582,153583,153584,153585],{"id":152195,"depth":121,"text":152196},{"id":152224,"depth":121,"text":152225},{"id":152252,"depth":121,"text":152253},{"id":152310,"depth":121,"text":152311},{"id":152782,"depth":46,"text":152783,"children":153587},[153588,153589,153590],{"id":152786,"depth":121,"text":152787},{"id":152831,"depth":121,"text":152832},{"id":152847,"depth":121,"text":152848},{"id":152947,"depth":46,"text":152948,"children":153592},[153593,153594,153595,153596,153597,153598],{"id":152951,"depth":121,"text":152952},{"id":152985,"depth":121,"text":152986},{"id":153008,"depth":121,"text":153009},{"id":153055,"depth":121,"text":153056},{"id":153535,"depth":121,"text":153536},{"id":153570,"depth":121,"text":153571},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":152175,"description":20020},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":153605,"title":153606,"body":153607,"description":20020,"extension":20021,"meta":154834,"navigation":216,"path":154835,"seo":154836,"stem":154837,"__hash__":154838},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":153608,"toc":154815},[153609,153612,153616,153619,153633,153701,153731,153734,153738,153742,153844,153891,153895,153898,153901,153935,153938,153941,153944,153947,153950,153953,153956,153958,153961,153964,153967,153970,153973,153976,153979,154007,154010,154014,154017,154024,154027,154030,154056,154059,154063,154066,154069,154076,154080,154083,154085,154117,154120,154123,154135,154141,154144,154147,154150,154152,154156,154159,154162,154165,154210,154214,154216,154219,154226,154268,154271,154275,154280,154294,154298,154301,154304,154307,154310,154313,154347,154350,154353,154407,154410,154413,154416,154419,154471,154474,154477,154526,154530,154532,154535,154538,154541,154544,154547,154605,154608,154614,154617,154620,154652,154655,154659,154663,154666,154698,154702,154705,154749,154753,154756,154759,154762,154765,154768,154771,154774,154776,154779,154781,154784,154787,154790,154793,154798,154801,154803,154806,154809,154812],[10,153610,153606],{"id":153611},"_13-界面样式与布局技巧",[20037,153613,153615],{"id":153614},"_131-css三角","13.1 css三角",[24,153617,153618],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[21052,153620,153621,153624,153627,153630],{},[31,153622,153623],{},"用css 边框可以模拟三角效果",[31,153625,153626],{},"宽度高度为0",[31,153628,153629],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[31,153631,153632],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[146,153634,153636],{"className":145115,"code":153635,"language":145117,"meta":39,"style":39},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[152,153637,153638,153643,153650,153660,153670,153686,153697],{"__ignoreMap":39},[155,153639,153640],{"class":157,"line":158},[155,153641,153642],{"class":161},"\u002F* CSS 实现三角形 *\u002F\n",[155,153644,153645,153648],{"class":157,"line":46},[155,153646,153647],{"class":226},".triangle",[155,153649,35397],{"class":171},[155,153651,153652,153654,153656,153658],{"class":157,"line":121},[155,153653,89131],{"class":263},[155,153655,70000],{"class":171},[155,153657,1109],{"class":263},[155,153659,21206],{"class":171},[155,153661,153662,153664,153666,153668],{"class":157,"line":180},[155,153663,89351],{"class":263},[155,153665,70000],{"class":171},[155,153667,1109],{"class":263},[155,153669,21206],{"class":171},[155,153671,153672,153674,153676,153678,153680,153682,153684],{"class":157,"line":194},[155,153673,89459],{"class":263},[155,153675,70000],{"class":171},[155,153677,565],{"class":263},[155,153679,70055],{"class":167},[155,153681,70084],{"class":263},[155,153683,82554],{"class":263},[155,153685,21206],{"class":171},[155,153687,153688,153691,153693,153695],{"class":157,"line":200},[155,153689,153690],{"class":263},"  border-bottom-color",[155,153692,70000],{"class":171},[155,153694,80932],{"class":263},[155,153696,21206],{"class":171},[155,153698,153699],{"class":157,"line":213},[155,153700,21475],{"class":171},[146,153702,153703],{"className":145115,"code":149272,"language":145117,"meta":39,"style":39},[152,153704,153705,153711,153727],{"__ignoreMap":39},[155,153706,153707,153709],{"class":157,"line":158},[155,153708,70174],{"class":69863},[155,153710,35397],{"class":171},[155,153712,153713,153715,153717,153719,153721,153723,153725],{"class":157,"line":46},[155,153714,89459],{"class":263},[155,153716,70000],{"class":171},[155,153718,329],{"class":263},[155,153720,70055],{"class":167},[155,153722,70084],{"class":263},[155,153724,148507],{"class":263},[155,153726,21206],{"class":171},[155,153728,153729],{"class":157,"line":121},[155,153730,21475],{"class":171},[37,153732],{"style":144971,"src":153733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[20037,153735,153737],{"id":153736},"_132-css用户界面样式","13.2 css用户界面样式",[14,153739,153741],{"id":153740},"_1321-鼠标样式","13.2.1 鼠标样式",[146,153743,153745],{"className":145115,"code":153744,"language":145117,"meta":39,"style":39},"\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",[152,153746,153747,153752,153771,153789,153808,153825],{"__ignoreMap":39},[155,153748,153749],{"class":157,"line":158},[155,153750,153751],{"class":161},"\u002F* 鼠标样式 *\u002F\n",[155,153753,153754,153756,153758,153761,153763,153765,153768],{"class":157,"line":46},[155,153755,70174],{"class":69863},[155,153757,98370],{"class":171},[155,153759,153760],{"class":263},"cursor",[155,153762,70000],{"class":171},[155,153764,80593],{"class":263},[155,153766,153767],{"class":171},"; }   ",[155,153769,153770],{"class":161},"\u002F* 手型 *\u002F\n",[155,153772,153773,153775,153777,153779,153781,153784,153786],{"class":157,"line":121},[155,153774,70174],{"class":69863},[155,153776,98370],{"class":171},[155,153778,153760],{"class":263},[155,153780,70000],{"class":171},[155,153782,153783],{"class":263},"default",[155,153785,153767],{"class":171},[155,153787,153788],{"class":161},"\u002F* 默认 *\u002F\n",[155,153790,153791,153793,153795,153797,153799,153802,153805],{"class":157,"line":180},[155,153792,70174],{"class":69863},[155,153794,98370],{"class":171},[155,153796,153760],{"class":263},[155,153798,70000],{"class":171},[155,153800,153801],{"class":263},"move",[155,153803,153804],{"class":171},"; }      ",[155,153806,153807],{"class":161},"\u002F* 移动 *\u002F\n",[155,153809,153810,153812,153814,153816,153818,153820,153822],{"class":157,"line":194},[155,153811,70174],{"class":69863},[155,153813,98370],{"class":171},[155,153815,153760],{"class":263},[155,153817,70000],{"class":171},[155,153819,25051],{"class":263},[155,153821,153804],{"class":171},[155,153823,153824],{"class":161},"\u002F* 文本 *\u002F\n",[155,153826,153827,153829,153831,153833,153835,153838,153841],{"class":157,"line":200},[155,153828,70174],{"class":69863},[155,153830,98370],{"class":171},[155,153832,153760],{"class":263},[155,153834,70000],{"class":171},[155,153836,153837],{"class":263},"not-allowed",[155,153839,153840],{"class":171},"; } ",[155,153842,153843],{"class":161},"\u002F* 禁止 *\u002F\n",[20222,153845,153846,153854],{},[20225,153847,153848],{},[20228,153849,153850,153852],{},[20231,153851,145579],{"align":43527},[20231,153853,47278],{"align":43527},[20269,153855,153856,153863,153870,153877,153884],{},[20228,153857,153858,153860],{},[20274,153859,153783],{"align":43527},[20274,153861,153862],{"align":43527},"小白 默认",[20228,153864,153865,153867],{},[20274,153866,80593],{"align":43527},[20274,153868,153869],{"align":43527},"小手",[20228,153871,153872,153874],{},[20274,153873,153801],{"align":43527},[20274,153875,153876],{"align":43527},"移动",[20228,153878,153879,153881],{},[20274,153880,25051],{"align":43527},[20274,153882,153883],{"align":43527},"文本",[20228,153885,153886,153888],{},[20274,153887,153837],{"align":43527},[20274,153889,153890],{"align":43527},"禁止",[14,153892,153894],{"id":153893},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[24,153896,153897],{},"去除表单轮廓线",[24,153899,153900],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[146,153902,153903],{"className":145115,"code":148479,"language":145117,"meta":39,"style":39},[152,153904,153905,153909,153915,153931],{"__ignoreMap":39},[155,153906,153907],{"class":157,"line":158},[155,153908,148486],{"class":161},[155,153910,153911,153913],{"class":157,"line":46},[155,153912,70174],{"class":69863},[155,153914,35397],{"class":171},[155,153916,153917,153919,153921,153923,153925,153927,153929],{"class":157,"line":121},[155,153918,89459],{"class":263},[155,153920,70000],{"class":171},[155,153922,329],{"class":263},[155,153924,70055],{"class":167},[155,153926,70084],{"class":263},[155,153928,148507],{"class":263},[155,153930,21206],{"class":171},[155,153932,153933],{"class":157,"line":180},[155,153934,21475],{"class":171},[24,153936,153937],{},"文本域：",[37,153939],{"style":144971,"src":153940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[24,153942,153943],{},"此时会有一个空白区域",[37,153945],{"style":144971,"src":153946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[24,153948,153949],{},"写在同一行就不会出现这个问题",[37,153951],{"style":144971,"src":153952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[24,153954,153955],{},"文本域是行内块元素，一定记住！！！",[24,153957,116796],{},[37,153959],{"style":144971,"src":153960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[24,153962,153963],{},"文本域尽量放在一行",[24,153965,153966],{},"知识回顾：cols是列，rols是行",[37,153968],{"style":144971,"src":153969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[24,153971,153972],{},"它可以进行拖动，显然这是我们不愿意看到的",[37,153974],{"style":144971,"src":153975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[24,153977,153978],{},"使用resize进行解决",[146,153980,153982],{"className":145115,"code":153981,"language":145117,"meta":39,"style":39},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[152,153983,153984,153990,154003],{"__ignoreMap":39},[155,153985,153986,153988],{"class":157,"line":158},[155,153987,72384],{"class":69863},[155,153989,35397],{"class":171},[155,153991,153992,153994,153996,153998,154000],{"class":157,"line":46},[155,153993,89361],{"class":263},[155,153995,70000],{"class":171},[155,153997,73300],{"class":263},[155,153999,148978],{"class":171},[155,154001,154002],{"class":161},"\u002F* 取消表单轮廓线 *\u002F\n",[155,154004,154005],{"class":157,"line":121},[155,154006,21475],{"class":171},[24,154008,154009],{},"此时就无法通过右下方实现拖动了",[14,154011,154013],{"id":154012},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[24,154015,154016],{},"实现一个盒子中的文字和图片对齐",[24,154018,154019,154020,154023],{},"用于设置一个元素的 ",[20234,154021,154022],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[24,154025,154026],{},"图片和文字默认是基线对齐",[37,154028],{"style":144971,"src":154029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[146,154031,154032],{"className":145115,"code":153981,"language":145117,"meta":39,"style":39},[152,154033,154034,154040,154052],{"__ignoreMap":39},[155,154035,154036,154038],{"class":157,"line":158},[155,154037,72384],{"class":69863},[155,154039,35397],{"class":171},[155,154041,154042,154044,154046,154048,154050],{"class":157,"line":46},[155,154043,89361],{"class":263},[155,154045,70000],{"class":171},[155,154047,73300],{"class":263},[155,154049,148978],{"class":171},[155,154051,154002],{"class":161},[155,154053,154054],{"class":157,"line":121},[155,154055,21475],{"class":171},[37,154057],{"style":144971,"src":154058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[19,154060,154062],{"id":154061},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[24,154064,154065],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[37,154067],{"style":144971,"src":154068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[24,154070,154071,154072,154075],{},"此时可以给图片、表单这些行内块元素的 ",[20234,154073,154074],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[19,154077,154079],{"id":154078},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[24,154081,154082],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[24,154084,34460],{},[146,154086,154088],{"className":145115,"code":154087,"language":145117,"meta":39,"style":39},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[152,154089,154090,154095,154101,154113],{"__ignoreMap":39},[155,154091,154092],{"class":157,"line":158},[155,154093,154094],{"class":161},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[155,154096,154097,154099],{"class":157,"line":46},[155,154098,37],{"class":69863},[155,154100,35397],{"class":171},[155,154102,154103,154106,154108,154111],{"class":157,"line":121},[155,154104,154105],{"class":263},"  vertical-align",[155,154107,70000],{"class":171},[155,154109,154110],{"class":263},"middle",[155,154112,21206],{"class":171},[155,154114,154115],{"class":157,"line":180},[155,154116,21475],{"class":171},[37,154118],{"style":144971,"src":154119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[24,154121,154122],{},"主要解决方法有两种：",[28,154124,154125],{},[31,154126,154127,154130,154131,154134],{},[20234,154128,154129],{},"给图片"," 添加 ",[20234,154132,154133],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[24,154136,154137,154138],{},"2.把图片转换为块级元素 ",[20234,154139,154140],{},"display: block",[24,154142,154143],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[24,154145,154146],{},"img {",[24,154148,154149],{},"vertical-align:middle;",[24,154151,2711],{},[14,154153,154155],{"id":154154},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[24,154157,154158],{},"效果：",[37,154160],{"style":144971,"src":154161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[24,154163,154164],{},"单行文本溢出显示省略号--必须满足三个条件：",[146,154166,154168],{"className":145115,"code":154167,"language":145117,"meta":39,"style":39},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[152,154169,154170,154175,154181,154191,154196,154206],{"__ignoreMap":39},[155,154171,154172],{"class":157,"line":158},[155,154173,154174],{"class":161},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[155,154176,154177,154179],{"class":157,"line":46},[155,154178,37],{"class":69863},[155,154180,35397],{"class":171},[155,154182,154183,154185,154187,154189],{"class":157,"line":121},[155,154184,154105],{"class":263},[155,154186,70000],{"class":171},[155,154188,154110],{"class":263},[155,154190,21206],{"class":171},[155,154192,154193],{"class":157,"line":180},[155,154194,154195],{"class":161},"  \u002F* 或 *\u002F\n",[155,154197,154198,154200,154202,154204],{"class":157,"line":194},[155,154199,146731],{"class":263},[155,154201,70000],{"class":171},[155,154203,79432],{"class":263},[155,154205,21206],{"class":171},[155,154207,154208],{"class":157,"line":200},[155,154209,21475],{"class":171},[14,154211,154213],{"id":154212},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[24,154215,154158],{},[37,154217],{"style":144971,"src":154218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[24,154220,154221,154222,154225],{},"多行文本溢出显示省略号， ",[20234,154223,154224],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[146,154227,154228],{"className":145115,"code":154167,"language":145117,"meta":39,"style":39},[152,154229,154230,154234,154240,154250,154254,154264],{"__ignoreMap":39},[155,154231,154232],{"class":157,"line":158},[155,154233,154174],{"class":161},[155,154235,154236,154238],{"class":157,"line":46},[155,154237,37],{"class":69863},[155,154239,35397],{"class":171},[155,154241,154242,154244,154246,154248],{"class":157,"line":121},[155,154243,154105],{"class":263},[155,154245,70000],{"class":171},[155,154247,154110],{"class":263},[155,154249,21206],{"class":171},[155,154251,154252],{"class":157,"line":180},[155,154253,154195],{"class":161},[155,154255,154256,154258,154260,154262],{"class":157,"line":194},[155,154257,146731],{"class":263},[155,154259,70000],{"class":171},[155,154261,79432],{"class":263},[155,154263,21206],{"class":171},[155,154265,154266],{"class":157,"line":200},[155,154267,21475],{"class":171},[24,154269,154270],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[20037,154272,154274],{"id":154273},"_133-常见布局技巧","13.3 常见布局技巧",[24,154276,154277],{},[20234,154278,154279],{},"巧妙利用一个技术更快更好的布局：",[28,154281,154282,154285,154288,154291],{},[31,154283,154284],{},"margin负值的运用",[31,154286,154287],{},"文字围绕浮动元素",[31,154289,154290],{},"行内块的巧妙运用",[31,154292,154293],{},"CSS三角强化",[14,154295,154297],{"id":154296},"_1331-margin负值的运用","13.3.1 margin负值的运用",[24,154299,154300],{},"应用场景：",[37,154302],{"style":144971,"src":154303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[37,154305],{"style":144971,"src":154306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[24,154308,154309],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[24,154311,154312],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[146,154314,154315],{"className":145115,"code":148479,"language":145117,"meta":39,"style":39},[152,154316,154317,154321,154327,154343],{"__ignoreMap":39},[155,154318,154319],{"class":157,"line":158},[155,154320,148486],{"class":161},[155,154322,154323,154325],{"class":157,"line":46},[155,154324,70174],{"class":69863},[155,154326,35397],{"class":171},[155,154328,154329,154331,154333,154335,154337,154339,154341],{"class":157,"line":121},[155,154330,89459],{"class":263},[155,154332,70000],{"class":171},[155,154334,329],{"class":263},[155,154336,70055],{"class":167},[155,154338,70084],{"class":263},[155,154340,148507],{"class":263},[155,154342,21206],{"class":171},[155,154344,154345],{"class":157,"line":180},[155,154346,21475],{"class":171},[37,154348],{"style":144971,"src":154349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[24,154351,154352],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[146,154354,154356],{"className":145115,"code":154355,"language":145117,"meta":39,"style":39},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[152,154357,154358,154363,154369,154379,154391,154403],{"__ignoreMap":39},[155,154359,154360],{"class":157,"line":158},[155,154361,154362],{"class":161},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[155,154364,154365,154367],{"class":157,"line":46},[155,154366,148963],{"class":226},[155,154368,35397],{"class":171},[155,154370,154371,154373,154375,154377],{"class":157,"line":121},[155,154372,150921],{"class":263},[155,154374,70000],{"class":171},[155,154376,73327],{"class":263},[155,154378,21206],{"class":171},[155,154380,154381,154383,154385,154387,154389],{"class":157,"line":180},[155,154382,150935],{"class":263},[155,154384,70000],{"class":171},[155,154386,565],{"class":263},[155,154388,70055],{"class":167},[155,154390,21206],{"class":171},[155,154392,154393,154395,154397,154399,154401],{"class":157,"line":194},[155,154394,150952],{"class":263},[155,154396,70000],{"class":171},[155,154398,3458],{"class":263},[155,154400,70055],{"class":167},[155,154402,21206],{"class":171},[155,154404,154405],{"class":157,"line":200},[155,154406,21475],{"class":171},[24,154408,154409],{},"加上上述代码会发现：",[37,154411],{"style":144971,"src":154412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[24,154414,154415],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[24,154417,154418],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[146,154420,154421],{"className":145115,"code":154355,"language":145117,"meta":39,"style":39},[152,154422,154423,154427,154433,154443,154455,154467],{"__ignoreMap":39},[155,154424,154425],{"class":157,"line":158},[155,154426,154362],{"class":161},[155,154428,154429,154431],{"class":157,"line":46},[155,154430,148963],{"class":226},[155,154432,35397],{"class":171},[155,154434,154435,154437,154439,154441],{"class":157,"line":121},[155,154436,150921],{"class":263},[155,154438,70000],{"class":171},[155,154440,73327],{"class":263},[155,154442,21206],{"class":171},[155,154444,154445,154447,154449,154451,154453],{"class":157,"line":180},[155,154446,150935],{"class":263},[155,154448,70000],{"class":171},[155,154450,565],{"class":263},[155,154452,70055],{"class":167},[155,154454,21206],{"class":171},[155,154456,154457,154459,154461,154463,154465],{"class":157,"line":194},[155,154458,150952],{"class":263},[155,154460,70000],{"class":171},[155,154462,3458],{"class":263},[155,154464,70055],{"class":167},[155,154466,21206],{"class":171},[155,154468,154469],{"class":157,"line":200},[155,154470,21475],{"class":171},[24,154472,154473],{},"解决方式2：",[24,154475,154476],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[146,154478,154480],{"className":145115,"code":154479,"language":145117,"meta":39,"style":39},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[152,154481,154482,154488,154498,154510,154522],{"__ignoreMap":39},[155,154483,154484,154486],{"class":157,"line":158},[155,154485,70174],{"class":69863},[155,154487,35397],{"class":171},[155,154489,154490,154492,154494,154496],{"class":157,"line":46},[155,154491,150921],{"class":263},[155,154493,70000],{"class":171},[155,154495,73327],{"class":263},[155,154497,21206],{"class":171},[155,154499,154500,154502,154504,154506,154508],{"class":157,"line":121},[155,154501,150935],{"class":263},[155,154503,70000],{"class":171},[155,154505,565],{"class":263},[155,154507,70055],{"class":167},[155,154509,21206],{"class":171},[155,154511,154512,154514,154516,154518,154520],{"class":157,"line":180},[155,154513,150952],{"class":263},[155,154515,70000],{"class":171},[155,154517,3458],{"class":263},[155,154519,70055],{"class":167},[155,154521,21206],{"class":171},[155,154523,154524],{"class":157,"line":194},[155,154525,21475],{"class":171},[14,154527,154529],{"id":154528},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[24,154531,154300],{},[37,154533],{"style":144971,"src":154534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[24,154536,154537],{},"实现结构图：",[37,154539],{"style":144971,"src":154540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[24,154542,154543],{},"巧妙运用浮动元素不会压住文字的特性",[24,154545,154546],{},"代码显示：",[146,154548,154550],{"className":145115,"code":154549,"language":145117,"meta":39,"style":39},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[152,154551,154552,154558,154568,154572,154577,154581,154587,154601],{"__ignoreMap":39},[155,154553,154554,154556],{"class":157,"line":158},[155,154555,148963],{"class":226},[155,154557,35397],{"class":171},[155,154559,154560,154562,154564,154566],{"class":157,"line":46},[155,154561,149595],{"class":263},[155,154563,70000],{"class":171},[155,154565,43527],{"class":263},[155,154567,21206],{"class":171},[155,154569,154570],{"class":157,"line":121},[155,154571,21475],{"class":171},[155,154573,154574],{"class":157,"line":180},[155,154575,154576],{"class":171},"```Css\n",[155,154578,154579],{"class":157,"line":194},[155,154580,148958],{"class":161},[155,154582,154583,154585],{"class":157,"line":200},[155,154584,148963],{"class":226},[155,154586,35397],{"class":171},[155,154588,154589,154591,154593,154595,154597,154599],{"class":157,"line":213},[155,154590,89033],{"class":263},[155,154592,70000],{"class":171},[155,154594,1109],{"class":263},[155,154596,70119],{"class":263},[155,154598,148978],{"class":171},[155,154600,148981],{"class":161},[155,154602,154603],{"class":157,"line":220},[155,154604,21475],{"class":171},[24,154606,154607],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[146,154609,154612],{"className":154610,"code":154611,"language":25051},[25049],"\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",[152,154613,154611],{"__ignoreMap":39},[37,154615],{"style":144971,"src":154616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[24,154618,154619],{},"最终展示结果：",[146,154621,154622],{"className":145115,"code":148951,"language":145117,"meta":39,"style":39},[152,154623,154624,154628,154634,154648],{"__ignoreMap":39},[155,154625,154626],{"class":157,"line":158},[155,154627,148958],{"class":161},[155,154629,154630,154632],{"class":157,"line":46},[155,154631,148963],{"class":226},[155,154633,35397],{"class":171},[155,154635,154636,154638,154640,154642,154644,154646],{"class":157,"line":121},[155,154637,89033],{"class":263},[155,154639,70000],{"class":171},[155,154641,1109],{"class":263},[155,154643,70119],{"class":263},[155,154645,148978],{"class":171},[155,154647,148981],{"class":161},[155,154649,154650],{"class":157,"line":180},[155,154651,21475],{"class":171},[37,154653],{"style":144971,"src":154654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[20037,154656,154658],{"id":154657},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[14,154660,154662],{"id":154661},"_1341-原理","13.4.1 原理",[37,154664],{"style":144971,"src":154665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[146,154667,154668],{"className":145115,"code":148951,"language":145117,"meta":39,"style":39},[152,154669,154670,154674,154680,154694],{"__ignoreMap":39},[155,154671,154672],{"class":157,"line":158},[155,154673,148958],{"class":161},[155,154675,154676,154678],{"class":157,"line":46},[155,154677,148963],{"class":226},[155,154679,35397],{"class":171},[155,154681,154682,154684,154686,154688,154690,154692],{"class":157,"line":121},[155,154683,89033],{"class":263},[155,154685,70000],{"class":171},[155,154687,1109],{"class":263},[155,154689,70119],{"class":263},[155,154691,148978],{"class":171},[155,154693,148981],{"class":161},[155,154695,154696],{"class":157,"line":180},[155,154697,21475],{"class":171},[14,154699,154701],{"id":154700},"_1342-实例","13.4.2 实例",[37,154703],{"style":144971,"src":154704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[146,154706,154707],{"className":145115,"code":149581,"language":145117,"meta":39,"style":39},[152,154708,154709,154715,154725,154729,154735,154745],{"__ignoreMap":39},[155,154710,154711,154713],{"class":157,"line":158},[155,154712,149588],{"class":226},[155,154714,35397],{"class":171},[155,154716,154717,154719,154721,154723],{"class":157,"line":46},[155,154718,149595],{"class":263},[155,154720,70000],{"class":171},[155,154722,43527],{"class":263},[155,154724,21206],{"class":171},[155,154726,154727],{"class":157,"line":121},[155,154728,21475],{"class":171},[155,154730,154731,154733],{"class":157,"line":180},[155,154732,149610],{"class":226},[155,154734,35397],{"class":171},[155,154736,154737,154739,154741,154743],{"class":157,"line":194},[155,154738,149595],{"class":263},[155,154740,70000],{"class":171},[155,154742,91085],{"class":263},[155,154744,21206],{"class":171},[155,154746,154747],{"class":157,"line":200},[155,154748,21475],{"class":171},[20037,154750,154752],{"id":154751},"_135-css的初始化","13.5 css的初始化",[24,154754,154755],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[24,154757,154758],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[24,154760,154761],{},"每个网页都必须首先进行 CSS初始化。",[24,154763,154764],{},"这里我们以 京东CSS初始化代码为例。",[24,154766,154767],{},"在网页右键查看网页源代码",[24,154769,154770],{},"找到css的link引入语句",[24,154772,154773],{},"然后ctrl+f 输入body",[24,154775,95789],{},[37,154777],{"style":144971,"src":154778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[24,154780,95812],{},[37,154782],{"style":144971,"src":154783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[24,154785,154786],{},"③打开了网页上传压缩的代码",[37,154788],{"style":144971,"src":154789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[24,154791,154792],{},"④从body前可以查看这个网页的初始化代码",[24,154794,154795],{},[20234,154796,154797],{},"Unicode编码字体：",[24,154799,154800],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[24,154802,101770],{},[24,154804,154805],{},"黑体 \\9ED1\\4F53",[24,154807,154808],{},"宋体 \\5B8B\\4F53",[24,154810,154811],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[20011,154813,154814],{},"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":39,"searchDepth":46,"depth":46,"links":154816},[154817,154818,154825,154829,154833],{"id":153614,"depth":46,"text":153615},{"id":153736,"depth":46,"text":153737,"children":154819},[154820,154821,154822,154823,154824],{"id":153740,"depth":121,"text":153741},{"id":153893,"depth":121,"text":153894},{"id":154012,"depth":121,"text":154013},{"id":154154,"depth":121,"text":154155},{"id":154212,"depth":121,"text":154213},{"id":154273,"depth":46,"text":154274,"children":154826},[154827,154828],{"id":154296,"depth":121,"text":154297},{"id":154528,"depth":121,"text":154529},{"id":154657,"depth":46,"text":154658,"children":154830},[154831,154832],{"id":154661,"depth":121,"text":154662},{"id":154700,"depth":121,"text":154701},{"id":154751,"depth":46,"text":154752},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":153606,"description":20020},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":154840,"title":154841,"body":154842,"description":20020,"extension":20021,"meta":156528,"navigation":216,"path":156529,"seo":156530,"stem":156531,"__hash__":156532},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":154843,"toc":156517},[154844,154847,154851,154855,154858,154865,154868,154871,154909,154912,154914,154928,154932,154941,154945,154950,154953,154956,154959,154994,154999,155002,155032,155035,155040,155043,155046,155076,155079,155133,155136,155140,155145,155157,155160,155164,155194,155197,155202,155205,155235,155238,155242,155259,155263,155267,155270,155303,155306,155310,155313,155316,155319,155322,155325,155436,155439,155442,155445,155547,155550,155554,155558,155562,155565,155605,155608,155610,155626,155630,155633,155638,155719,155722,155725,155851,155856,155859,155867,155870,155875,155960,155963,155967,155970,155973,155977,155997,156002,156086,156089,156094,156097,156100,156178,156181,156184,156187,156190,156193,156198,156201,156204,156276,156279,156284,156287,156384,156387,156393,156396,156399,156402,156405,156408,156411,156414,156417,156421,156426,156429,156462,156467,156470,156511,156514],[10,154845,154841],{"id":154846},"_14-html5与css3新特性",[20037,154848,154850],{"id":154849},"_141-html5的新特性","14.1 HTML5的新特性",[14,154852,154854],{"id":154853},"_1411-基本标签","14.1.1 基本标签",[24,154856,154857],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[24,154859,154860,154861,154864],{},"这些新特性都有兼容性问题，基本是 ",[20234,154862,154863],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[24,154866,154867],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[24,154869,154870],{},"现在使用的是新特性：",[21052,154872,154873,154879,154885,154891,154897,154903],{},[31,154874,154875,154878],{},[152,154876,154877],{},"\u003Cheader>"," 头部标签",[31,154880,154881,154884],{},[152,154882,154883],{},"\u003Cnav>"," 导航标签",[31,154886,154887,154890],{},[152,154888,154889],{},"\u003Carticle>"," 内容标签",[31,154892,154893,154896],{},[152,154894,154895],{},"\u003Csection>"," 定义文档某个区域",[31,154898,154899,154902],{},[152,154900,154901],{},"\u003Caside>"," 侧边栏标签",[31,154904,154905,154908],{},[152,154906,154907],{},"\u003Cfooter>"," 尾部标签",[37,154910],{"style":144971,"src":154911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[24,154913,20122],{},[21052,154915,154916,154919,154922,154925],{},[31,154917,154918],{},"这种语义化标准主要是针对搜索引擎的",[31,154920,154921],{},"这些标签页面中可以经常使用",[31,154923,154924],{},"在IE9中，需要把这些元素转换为块级元素",[31,154926,154927],{},"移动端更喜欢使用这些标签",[14,154929,154931],{"id":154930},"_1412-多媒体标签","14.1.2 多媒体标签",[24,154933,154934,154935,154937,154938,154940],{},"音频 ",[20234,154936,47963],{}," 和视频 ",[20234,154939,47972],{}," 两个标签",[19,154942,154944],{"id":154943},"_14121-视频标签-video","14.1.2.1 视频标签- video",[28,154946,154947],{},[31,154948,154949],{},"支持格式：",[37,154951],{"style":144971,"src":154952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[24,154954,154955],{},"尽量使用MP4，兼容性好",[24,154957,154958],{},"用MP4就可以",[146,154960,154962],{"className":145862,"code":154961,"language":145864,"meta":39,"style":39},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[152,154963,154964],{"__ignoreMap":39},[155,154965,154966,154968,154970,154972,154974,154977,154979,154982,154985,154988,154990,154992],{"class":157,"line":158},[155,154967,20959],{"class":171},[155,154969,47972],{"class":69863},[155,154971,73802],{"class":226},[155,154973,317],{"class":171},[155,154975,154976],{"class":732},"\"movie.mp4\"",[155,154978,110986],{"class":226},[155,154980,154981],{"class":226}," autoplay",[155,154983,154984],{"class":226}," muted",[155,154986,154987],{"class":226}," loop",[155,154989,73877],{"class":171},[155,154991,47972],{"class":69863},[155,154993,69870],{"class":171},[28,154995,154996],{"start":46},[31,154997,154998],{},"兼容写法",[24,155000,155001],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[146,155003,155004],{"className":145862,"code":154961,"language":145864,"meta":39,"style":39},[152,155005,155006],{"__ignoreMap":39},[155,155007,155008,155010,155012,155014,155016,155018,155020,155022,155024,155026,155028,155030],{"class":157,"line":158},[155,155009,20959],{"class":171},[155,155011,47972],{"class":69863},[155,155013,73802],{"class":226},[155,155015,317],{"class":171},[155,155017,154976],{"class":732},[155,155019,110986],{"class":226},[155,155021,154981],{"class":226},[155,155023,154984],{"class":226},[155,155025,154987],{"class":226},[155,155027,73877],{"class":171},[155,155029,47972],{"class":69863},[155,155031,69870],{"class":171},[24,155033,155034],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[28,155036,155037],{"start":121},[31,155038,155039],{},"video常用属性",[37,155041],{"style":144971,"src":155042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[24,155044,155045],{},"poster属性后面是跟的等待加载图片的地址",[146,155047,155048],{"className":145862,"code":152617,"language":145864,"meta":39,"style":39},[152,155049,155050],{"__ignoreMap":39},[155,155051,155052,155054,155056,155058,155060,155062,155064,155066,155068,155070,155072,155074],{"class":157,"line":158},[155,155053,20959],{"class":171},[155,155055,37],{"class":69863},[155,155057,73802],{"class":226},[155,155059,317],{"class":171},[155,155061,152632],{"class":732},[155,155063,73810],{"class":226},[155,155065,317],{"class":171},[155,155067,152639],{"class":732},[155,155069,152642],{"class":226},[155,155071,317],{"class":171},[155,155073,152647],{"class":732},[155,155075,69870],{"class":171},[24,155077,155078],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[146,155080,155082],{"className":145115,"code":155081,"language":145117,"meta":39,"style":39},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[152,155083,155084,155089,155095,155119,155124,155129],{"__ignoreMap":39},[155,155085,155086],{"class":157,"line":158},[155,155087,155088],{"class":161},"\u002F* 2D 位移 *\u002F\n",[155,155090,155091,155093],{"class":157,"line":46},[155,155092,70174],{"class":69863},[155,155094,35397],{"class":171},[155,155096,155097,155100,155102,155105,155107,155109,155111,155113,155115,155117],{"class":157,"line":121},[155,155098,155099],{"class":263},"  transform",[155,155101,70000],{"class":171},[155,155103,155104],{"class":263},"translate",[155,155106,230],{"class":171},[155,155108,20389],{"class":263},[155,155110,70055],{"class":167},[155,155112,7589],{"class":171},[155,155114,20715],{"class":263},[155,155116,70055],{"class":167},[155,155118,22596],{"class":171},[155,155120,155121],{"class":157,"line":180},[155,155122,155123],{"class":161},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[155,155125,155126],{"class":157,"line":194},[155,155127,155128],{"class":161},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[155,155130,155131],{"class":157,"line":200},[155,155132,21475],{"class":171},[24,155134,155135],{},"muted:自动静音属性",[19,155137,155139],{"id":155138},"_14122-音频标签audio","14.1.2.2 音频标签audio",[28,155141,155142],{},[31,155143,155144],{},"基本使用",[24,155146,155147,155148,155153,155154],{},"当前 ",[20234,155149,155150],{},[152,155151,155152],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[20234,155155,155156],{},"mp3格式",[37,155158],{"style":144971,"src":155159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[28,155161,155162],{"start":46},[31,155163,154998],{},[146,155165,155166],{"className":145862,"code":154961,"language":145864,"meta":39,"style":39},[152,155167,155168],{"__ignoreMap":39},[155,155169,155170,155172,155174,155176,155178,155180,155182,155184,155186,155188,155190,155192],{"class":157,"line":158},[155,155171,20959],{"class":171},[155,155173,47972],{"class":69863},[155,155175,73802],{"class":226},[155,155177,317],{"class":171},[155,155179,154976],{"class":732},[155,155181,110986],{"class":226},[155,155183,154981],{"class":226},[155,155185,154984],{"class":226},[155,155187,154987],{"class":226},[155,155189,73877],{"class":171},[155,155191,47972],{"class":69863},[155,155193,69870],{"class":171},[24,155195,155196],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[28,155198,155199],{"start":121},[31,155200,155201],{},"常用属性",[37,155203],{"style":144971,"src":155204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[146,155206,155207],{"className":145862,"code":154961,"language":145864,"meta":39,"style":39},[152,155208,155209],{"__ignoreMap":39},[155,155210,155211,155213,155215,155217,155219,155221,155223,155225,155227,155229,155231,155233],{"class":157,"line":158},[155,155212,20959],{"class":171},[155,155214,47972],{"class":69863},[155,155216,73802],{"class":226},[155,155218,317],{"class":171},[155,155220,154976],{"class":732},[155,155222,110986],{"class":226},[155,155224,154981],{"class":226},[155,155226,154984],{"class":226},[155,155228,154987],{"class":226},[155,155230,73877],{"class":171},[155,155232,47972],{"class":69863},[155,155234,69870],{"class":171},[24,155236,155237],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[19,155239,155241],{"id":155240},"_14123-总结","14.1.2.3 总结",[21052,155243,155244,155247,155250,155253,155256],{},[31,155245,155246],{},"音频标签和视频标签使用方式基本一致",[31,155248,155249],{},"浏览器支持情况不同",[31,155251,155252],{},"谷歌浏览器把音频和视频自动播放禁止了",[31,155254,155255],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[31,155257,155258],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[14,155260,155262],{"id":155261},"_1413-表单元素","14.1.3 表单元素",[19,155264,155266],{"id":155265},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[37,155268],{"style":144971,"src":155269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[146,155271,155273],{"className":145862,"code":155272,"language":145864,"meta":39,"style":39},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[152,155274,155275],{"__ignoreMap":39},[155,155276,155277,155279,155281,155283,155285,155287,155289,155291,155294,155296,155298,155301],{"class":157,"line":158},[155,155278,20959],{"class":171},[155,155280,72384],{"class":69863},[155,155282,72387],{"class":226},[155,155284,317],{"class":171},[155,155286,81262],{"class":732},[155,155288,34745],{"class":226},[155,155290,317],{"class":171},[155,155292,155293],{"class":732},"\"username\"",[155,155295,79583],{"class":226},[155,155297,317],{"class":171},[155,155299,155300],{"class":732},"\"请输入用户名\"",[155,155302,69870],{"class":171},[37,155304],{"style":144971,"src":155305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[19,155307,155309],{"id":155308},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[37,155311],{"style":144971,"src":155312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[24,155314,155315],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[24,155317,155318],{},"快捷操作：",[37,155320],{"style":144971,"src":155321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[24,155323,155324],{},"例子1：",[146,155326,155328],{"className":145862,"code":155327,"language":145864,"meta":39,"style":39},"\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",[152,155329,155330,155353,155380,155409,155428],{"__ignoreMap":39},[155,155331,155332,155334,155336,155338,155340,155343,155346,155348,155351],{"class":157,"line":158},[155,155333,20959],{"class":171},[155,155335,85188],{"class":69863},[155,155337,85191],{"class":226},[155,155339,317],{"class":171},[155,155341,155342],{"class":732},"\"\u002Fsubmit\"",[155,155344,155345],{"class":226}," method",[155,155347,317],{"class":171},[155,155349,155350],{"class":732},"\"post\"",[155,155352,69870],{"class":171},[155,155354,155355,155357,155359,155361,155363,155365,155367,155369,155371,155373,155375,155378],{"class":157,"line":46},[155,155356,70707],{"class":171},[155,155358,72384],{"class":69863},[155,155360,72387],{"class":226},[155,155362,317],{"class":171},[155,155364,81262],{"class":732},[155,155366,34745],{"class":226},[155,155368,317],{"class":171},[155,155370,155293],{"class":732},[155,155372,79583],{"class":226},[155,155374,317],{"class":171},[155,155376,155377],{"class":732},"\"用户名\"",[155,155379,69870],{"class":171},[155,155381,155382,155384,155386,155388,155390,155393,155395,155397,155400,155402,155404,155407],{"class":157,"line":121},[155,155383,70707],{"class":171},[155,155385,72384],{"class":69863},[155,155387,72387],{"class":226},[155,155389,317],{"class":171},[155,155391,155392],{"class":732},"\"password\"",[155,155394,34745],{"class":226},[155,155396,317],{"class":171},[155,155398,155399],{"class":732},"\"pwd\"",[155,155401,79583],{"class":226},[155,155403,317],{"class":171},[155,155405,155406],{"class":732},"\"密码\"",[155,155408,69870],{"class":171},[155,155410,155411,155413,155415,155417,155419,155421,155424,155426],{"class":157,"line":180},[155,155412,70707],{"class":171},[155,155414,72450],{"class":69863},[155,155416,72387],{"class":226},[155,155418,317],{"class":171},[155,155420,85211],{"class":732},[155,155422,155423],{"class":171},">提交\u003C\u002F",[155,155425,72450],{"class":69863},[155,155427,69870],{"class":171},[155,155429,155430,155432,155434],{"class":157,"line":194},[155,155431,70348],{"class":171},[155,155433,85188],{"class":69863},[155,155435,69870],{"class":171},[37,155437],{"style":144971,"src":155438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[24,155440,155441],{},"value是表单域的内容",[24,155443,155444],{},"例子2：",[146,155446,155447],{"className":145862,"code":155327,"language":145864,"meta":39,"style":39},[152,155448,155449,155469,155495,155521,155539],{"__ignoreMap":39},[155,155450,155451,155453,155455,155457,155459,155461,155463,155465,155467],{"class":157,"line":158},[155,155452,20959],{"class":171},[155,155454,85188],{"class":69863},[155,155456,85191],{"class":226},[155,155458,317],{"class":171},[155,155460,155342],{"class":732},[155,155462,155345],{"class":226},[155,155464,317],{"class":171},[155,155466,155350],{"class":732},[155,155468,69870],{"class":171},[155,155470,155471,155473,155475,155477,155479,155481,155483,155485,155487,155489,155491,155493],{"class":157,"line":46},[155,155472,70707],{"class":171},[155,155474,72384],{"class":69863},[155,155476,72387],{"class":226},[155,155478,317],{"class":171},[155,155480,81262],{"class":732},[155,155482,34745],{"class":226},[155,155484,317],{"class":171},[155,155486,155293],{"class":732},[155,155488,79583],{"class":226},[155,155490,317],{"class":171},[155,155492,155377],{"class":732},[155,155494,69870],{"class":171},[155,155496,155497,155499,155501,155503,155505,155507,155509,155511,155513,155515,155517,155519],{"class":157,"line":121},[155,155498,70707],{"class":171},[155,155500,72384],{"class":69863},[155,155502,72387],{"class":226},[155,155504,317],{"class":171},[155,155506,155392],{"class":732},[155,155508,34745],{"class":226},[155,155510,317],{"class":171},[155,155512,155399],{"class":732},[155,155514,79583],{"class":226},[155,155516,317],{"class":171},[155,155518,155406],{"class":732},[155,155520,69870],{"class":171},[155,155522,155523,155525,155527,155529,155531,155533,155535,155537],{"class":157,"line":180},[155,155524,70707],{"class":171},[155,155526,72450],{"class":69863},[155,155528,72387],{"class":226},[155,155530,317],{"class":171},[155,155532,85211],{"class":732},[155,155534,155423],{"class":171},[155,155536,72450],{"class":69863},[155,155538,69870],{"class":171},[155,155540,155541,155543,155545],{"class":157,"line":194},[155,155542,70348],{"class":171},[155,155544,85188],{"class":69863},[155,155546,69870],{"class":171},[37,155548],{"style":144971,"src":155549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[20037,155551,155553],{"id":155552},"_142-css新特性","14.2 CSS新特性",[14,155555,155557],{"id":155556},"_1421-新增选择器","14.2.1 新增选择器",[19,155559,155561],{"id":155560},"_14211-属性选择器","14.2.1.1 属性选择器",[37,155563],{"style":144971,"src":155564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[146,155566,155568],{"className":145115,"code":155567,"language":145117,"meta":39,"style":39},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[152,155569,155570,155585,155601],{"__ignoreMap":39},[155,155571,155572,155574,155576,155578,155580,155582],{"class":157,"line":158},[155,155573,72384],{"class":69863},[155,155575,4091],{"class":171},[155,155577,121670],{"class":226},[155,155579,317],{"class":167},[155,155581,81262],{"class":732},[155,155583,155584],{"class":171},"] {\n",[155,155586,155587,155589,155591,155593,155595,155597,155599],{"class":157,"line":46},[155,155588,89459],{"class":263},[155,155590,70000],{"class":171},[155,155592,329],{"class":263},[155,155594,70055],{"class":167},[155,155596,70084],{"class":263},[155,155598,148695],{"class":263},[155,155600,21206],{"class":171},[155,155602,155603],{"class":157,"line":121},[155,155604,21475],{"class":171},[37,155606],{"style":144971,"src":155607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[24,155609,20122],{},[21052,155611,155612,155615,155618,155621],{},[31,155613,155614],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[31,155616,155617],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[31,155619,155620],{},"属性选择器也可以选择出来自定义的属性",[31,155622,155623,155625],{},[20234,155624,28874],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[19,155627,155629],{"id":155628},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[37,155631],{"style":144971,"src":155632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[28,155634,155635],{},[31,155636,155637],{},"fist-child",[146,155639,155641],{"className":145115,"code":155640,"language":145117,"meta":39,"style":39},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[152,155642,155643,155648,155663,155683,155701],{"__ignoreMap":39},[155,155644,155645],{"class":157,"line":158},[155,155646,155647],{"class":161},"\u002F* 属性选择器 *\u002F\n",[155,155649,155650,155652,155654,155656,155658,155660],{"class":157,"line":46},[155,155651,72384],{"class":69863},[155,155653,4091],{"class":171},[155,155655,121670],{"class":226},[155,155657,317],{"class":167},[155,155659,81262],{"class":732},[155,155661,155662],{"class":171},"] { }\n",[155,155664,155665,155667,155669,155671,155674,155677,155680],{"class":157,"line":121},[155,155666,72384],{"class":69863},[155,155668,4091],{"class":171},[155,155670,223],{"class":226},[155,155672,155673],{"class":167},"^=",[155,155675,155676],{"class":732},"\"icon\"",[155,155678,155679],{"class":171},"] { }  ",[155,155681,155682],{"class":161},"\u002F* 以 icon 开头 *\u002F\n",[155,155684,155685,155687,155689,155691,155694,155696,155698],{"class":157,"line":180},[155,155686,72384],{"class":69863},[155,155688,4091],{"class":171},[155,155690,223],{"class":226},[155,155692,155693],{"class":167},"$=",[155,155695,155676],{"class":732},[155,155697,155679],{"class":171},[155,155699,155700],{"class":161},"\u002F* 以 icon 结尾 *\u002F\n",[155,155702,155703,155705,155707,155709,155712,155714,155716],{"class":157,"line":194},[155,155704,72384],{"class":69863},[155,155706,4091],{"class":171},[155,155708,223],{"class":226},[155,155710,155711],{"class":167},"*=",[155,155713,155676],{"class":732},[155,155715,155679],{"class":171},[155,155717,155718],{"class":161},"\u002F* 包含 icon *\u002F\n",[24,155720,155721],{},"ul的第一个儿子文本为红色",[24,155723,155724],{},"一定要在冒号前加空格，不然就是选中所有的了",[146,155726,155728],{"className":145115,"code":155727,"language":145117,"meta":39,"style":39},".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",[152,155729,155730,155736,155746,155750,155754,155759,155772,155785,155801,155818,155835],{"__ignoreMap":39},[155,155731,155732,155734],{"class":157,"line":158},[155,155733,145406],{"class":226},[155,155735,35397],{"class":171},[155,155737,155738,155740,155742,155744],{"class":157,"line":46},[155,155739,89468],{"class":263},[155,155741,70000],{"class":171},[155,155743,75984],{"class":263},[155,155745,21206],{"class":171},[155,155747,155748],{"class":157,"line":121},[155,155749,21475],{"class":171},[155,155751,155752],{"class":157,"line":180},[155,155753,154576],{"class":171},[155,155755,155756],{"class":157,"line":194},[155,155757,155758],{"class":161},"\u002F* 结构伪类选择器 *\u002F\n",[155,155760,155761,155763,155766,155769],{"class":157,"line":200},[155,155762,31],{"class":69863},[155,155764,155765],{"class":226},":first-child",[155,155767,155768],{"class":171}," { }           ",[155,155770,155771],{"class":161},"\u002F* 第一个 *\u002F\n",[155,155773,155774,155776,155779,155782],{"class":157,"line":213},[155,155775,31],{"class":69863},[155,155777,155778],{"class":226},":last-child",[155,155780,155781],{"class":171}," { }            ",[155,155783,155784],{"class":161},"\u002F* 最后一个 *\u002F\n",[155,155786,155787,155789,155791,155793,155795,155798],{"class":157,"line":220},[155,155788,31],{"class":69863},[155,155790,148029],{"class":226},[155,155792,230],{"class":171},[155,155794,360],{"class":263},[155,155796,155797],{"class":171},") { }          ",[155,155799,155800],{"class":161},"\u002F* 第2个 *\u002F\n",[155,155802,155803,155805,155807,155809,155812,155815],{"class":157,"line":245},[155,155804,31],{"class":69863},[155,155806,148029],{"class":226},[155,155808,230],{"class":171},[155,155810,155811],{"class":263},"2n",[155,155813,155814],{"class":171},") { }         ",[155,155816,155817],{"class":161},"\u002F* 偶数 *\u002F\n",[155,155819,155820,155822,155824,155826,155829,155832],{"class":157,"line":251},[155,155821,31],{"class":69863},[155,155823,148029],{"class":226},[155,155825,230],{"class":171},[155,155827,155828],{"class":263},"2n+1",[155,155830,155831],{"class":171},") { }       ",[155,155833,155834],{"class":161},"\u002F* 奇数 *\u002F\n",[155,155836,155837,155839,155841,155843,155846,155848],{"class":157,"line":257},[155,155838,31],{"class":69863},[155,155840,148029],{"class":226},[155,155842,230],{"class":171},[155,155844,155845],{"class":263},"-n+3",[155,155847,155831],{"class":171},[155,155849,155850],{"class":161},"\u002F* 前3个 *\u002F\n",[70174,155852,155855],{"className":155853},[155854],"example","\n  示例内容\n",[24,155857,155858],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[21052,155860,155861],{},[31,155862,155863,155866],{},[152,155864,155865],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[24,155868,155869],{},"也就是说它选择的是熊大",[28,155871,155872],{"start":200},[31,155873,155874],{},"权重",[146,155876,155878],{"className":145115,"code":155877,"language":145117,"meta":39,"style":39},"\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",[152,155879,155880,155884,155894,155904,155918,155932,155946],{"__ignoreMap":39},[155,155881,155882],{"class":157,"line":158},[155,155883,155758],{"class":161},[155,155885,155886,155888,155890,155892],{"class":157,"line":46},[155,155887,31],{"class":69863},[155,155889,155765],{"class":226},[155,155891,155768],{"class":171},[155,155893,155771],{"class":161},[155,155895,155896,155898,155900,155902],{"class":157,"line":121},[155,155897,31],{"class":69863},[155,155899,155778],{"class":226},[155,155901,155781],{"class":171},[155,155903,155784],{"class":161},[155,155905,155906,155908,155910,155912,155914,155916],{"class":157,"line":180},[155,155907,31],{"class":69863},[155,155909,148029],{"class":226},[155,155911,230],{"class":171},[155,155913,360],{"class":263},[155,155915,155797],{"class":171},[155,155917,155800],{"class":161},[155,155919,155920,155922,155924,155926,155928,155930],{"class":157,"line":194},[155,155921,31],{"class":69863},[155,155923,148029],{"class":226},[155,155925,230],{"class":171},[155,155927,155811],{"class":263},[155,155929,155814],{"class":171},[155,155931,155817],{"class":161},[155,155933,155934,155936,155938,155940,155942,155944],{"class":157,"line":200},[155,155935,31],{"class":69863},[155,155937,148029],{"class":226},[155,155939,230],{"class":171},[155,155941,155828],{"class":263},[155,155943,155831],{"class":171},[155,155945,155834],{"class":161},[155,155947,155948,155950,155952,155954,155956,155958],{"class":157,"line":213},[155,155949,31],{"class":69863},[155,155951,148029],{"class":226},[155,155953,230],{"class":171},[155,155955,155845],{"class":263},[155,155957,155831],{"class":171},[155,155959,155850],{"class":161},[24,155961,155962],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[19,155964,155966],{"id":155965},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[24,155968,155969],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[37,155971],{"style":144971,"src":155972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[28,155974,155975],{},[31,155976,20122],{},[21052,155978,155979,155982,155985,155988,155991,155994],{},[31,155980,155981],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[31,155983,155984],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[31,155986,155987],{},"语法： element::before {}",[31,155989,155990],{},"before 和 after 必须有 content 属性",[31,155992,155993],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[31,155995,155996],{},"伪元素选择器和标签选择器一样，权重为 1",[28,155998,155999],{"start":46},[31,156000,156001],{},"实例",[146,156003,156004],{"className":145115,"code":155877,"language":145117,"meta":39,"style":39},[152,156005,156006,156010,156020,156030,156044,156058,156072],{"__ignoreMap":39},[155,156007,156008],{"class":157,"line":158},[155,156009,155758],{"class":161},[155,156011,156012,156014,156016,156018],{"class":157,"line":46},[155,156013,31],{"class":69863},[155,156015,155765],{"class":226},[155,156017,155768],{"class":171},[155,156019,155771],{"class":161},[155,156021,156022,156024,156026,156028],{"class":157,"line":121},[155,156023,31],{"class":69863},[155,156025,155778],{"class":226},[155,156027,155781],{"class":171},[155,156029,155784],{"class":161},[155,156031,156032,156034,156036,156038,156040,156042],{"class":157,"line":180},[155,156033,31],{"class":69863},[155,156035,148029],{"class":226},[155,156037,230],{"class":171},[155,156039,360],{"class":263},[155,156041,155797],{"class":171},[155,156043,155800],{"class":161},[155,156045,156046,156048,156050,156052,156054,156056],{"class":157,"line":194},[155,156047,31],{"class":69863},[155,156049,148029],{"class":226},[155,156051,230],{"class":171},[155,156053,155811],{"class":263},[155,156055,155814],{"class":171},[155,156057,155817],{"class":161},[155,156059,156060,156062,156064,156066,156068,156070],{"class":157,"line":200},[155,156061,31],{"class":69863},[155,156063,148029],{"class":226},[155,156065,230],{"class":171},[155,156067,155828],{"class":263},[155,156069,155831],{"class":171},[155,156071,155834],{"class":161},[155,156073,156074,156076,156078,156080,156082,156084],{"class":157,"line":213},[155,156075,31],{"class":69863},[155,156077,148029],{"class":226},[155,156079,230],{"class":171},[155,156081,155845],{"class":263},[155,156083,155831],{"class":171},[155,156085,155850],{"class":161},[37,156087],{"style":144971,"src":156088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[28,156090,156091],{"start":121},[31,156092,156093],{},"使用场景1",[37,156095],{"style":144971,"src":156096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[24,156098,156099],{},"不需要再加盒子来整红色那部分了",[146,156101,156103],{"className":145115,"code":156102,"language":145117,"meta":39,"style":39},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[152,156104,156105,156110,156119,156130,156140,156144,156153,156164,156174],{"__ignoreMap":39},[155,156106,156107],{"class":157,"line":158},[155,156108,156109],{"class":161},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[155,156111,156112,156114,156117],{"class":157,"line":46},[155,156113,70174],{"class":69863},[155,156115,156116],{"class":226},"::before",[155,156118,35397],{"class":171},[155,156120,156121,156124,156126,156128],{"class":157,"line":121},[155,156122,156123],{"class":263},"  content",[155,156125,70000],{"class":171},[155,156127,15430],{"class":732},[155,156129,21206],{"class":171},[155,156131,156132,156134,156136,156138],{"class":157,"line":180},[155,156133,146731],{"class":263},[155,156135,70000],{"class":171},[155,156137,79432],{"class":263},[155,156139,21206],{"class":171},[155,156141,156142],{"class":157,"line":194},[155,156143,21475],{"class":171},[155,156145,156146,156148,156151],{"class":157,"line":200},[155,156147,70174],{"class":69863},[155,156149,156150],{"class":226},"::after",[155,156152,35397],{"class":171},[155,156154,156155,156157,156159,156162],{"class":157,"line":213},[155,156156,156123],{"class":263},[155,156158,70000],{"class":171},[155,156160,156161],{"class":732},"\"→\"",[155,156163,21206],{"class":171},[155,156165,156166,156168,156170,156172],{"class":157,"line":220},[155,156167,89468],{"class":263},[155,156169,70000],{"class":171},[155,156171,80633],{"class":263},[155,156173,21206],{"class":171},[155,156175,156176],{"class":157,"line":245},[155,156177,21475],{"class":171},[37,156179],{"style":144971,"src":156180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[24,156182,156183],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[37,156185],{"style":144971,"src":156186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[24,156188,156189],{},"但是在引用时需要先转义一下",[24,156191,156192],{},"content='\\e930'",[28,156194,156195],{"start":180},[31,156196,156197],{},"使用场景2",[24,156199,156200],{},"仿土豆效果",[24,156202,156203],{},"通过使用伪元素选择器可以减少body中盒子的数量",[146,156205,156206],{"className":145115,"code":156102,"language":145117,"meta":39,"style":39},[152,156207,156208,156212,156220,156230,156240,156244,156252,156262,156272],{"__ignoreMap":39},[155,156209,156210],{"class":157,"line":158},[155,156211,156109],{"class":161},[155,156213,156214,156216,156218],{"class":157,"line":46},[155,156215,70174],{"class":69863},[155,156217,156116],{"class":226},[155,156219,35397],{"class":171},[155,156221,156222,156224,156226,156228],{"class":157,"line":121},[155,156223,156123],{"class":263},[155,156225,70000],{"class":171},[155,156227,15430],{"class":732},[155,156229,21206],{"class":171},[155,156231,156232,156234,156236,156238],{"class":157,"line":180},[155,156233,146731],{"class":263},[155,156235,70000],{"class":171},[155,156237,79432],{"class":263},[155,156239,21206],{"class":171},[155,156241,156242],{"class":157,"line":194},[155,156243,21475],{"class":171},[155,156245,156246,156248,156250],{"class":157,"line":200},[155,156247,70174],{"class":69863},[155,156249,156150],{"class":226},[155,156251,35397],{"class":171},[155,156253,156254,156256,156258,156260],{"class":157,"line":213},[155,156255,156123],{"class":263},[155,156257,70000],{"class":171},[155,156259,156161],{"class":732},[155,156261,21206],{"class":171},[155,156263,156264,156266,156268,156270],{"class":157,"line":220},[155,156265,89468],{"class":263},[155,156267,70000],{"class":171},[155,156269,80633],{"class":263},[155,156271,21206],{"class":171},[155,156273,156274],{"class":157,"line":245},[155,156275,21475],{"class":171},[37,156277],{"style":144971,"src":156278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[28,156280,156281],{"start":194},[31,156282,156283],{},"使用场景3",[24,156285,156286],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[146,156288,156290],{"className":145115,"code":156289,"language":145117,"meta":39,"style":39},".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",[152,156291,156292,156298,156308,156312,156316,156320,156328,156338,156348,156352,156360,156370,156380],{"__ignoreMap":39},[155,156293,156294,156296],{"class":157,"line":158},[155,156295,148963],{"class":226},[155,156297,35397],{"class":171},[155,156299,156300,156302,156304,156306],{"class":157,"line":46},[155,156301,149595],{"class":263},[155,156303,70000],{"class":171},[155,156305,43527],{"class":263},[155,156307,21206],{"class":171},[155,156309,156310],{"class":157,"line":121},[155,156311,21475],{"class":171},[155,156313,156314],{"class":157,"line":180},[155,156315,154576],{"class":171},[155,156317,156318],{"class":157,"line":194},[155,156319,156109],{"class":161},[155,156321,156322,156324,156326],{"class":157,"line":200},[155,156323,70174],{"class":69863},[155,156325,156116],{"class":226},[155,156327,35397],{"class":171},[155,156329,156330,156332,156334,156336],{"class":157,"line":213},[155,156331,156123],{"class":263},[155,156333,70000],{"class":171},[155,156335,15430],{"class":732},[155,156337,21206],{"class":171},[155,156339,156340,156342,156344,156346],{"class":157,"line":220},[155,156341,146731],{"class":263},[155,156343,70000],{"class":171},[155,156345,79432],{"class":263},[155,156347,21206],{"class":171},[155,156349,156350],{"class":157,"line":245},[155,156351,21475],{"class":171},[155,156353,156354,156356,156358],{"class":157,"line":251},[155,156355,70174],{"class":69863},[155,156357,156150],{"class":226},[155,156359,35397],{"class":171},[155,156361,156362,156364,156366,156368],{"class":157,"line":257},[155,156363,156123],{"class":263},[155,156365,70000],{"class":171},[155,156367,156161],{"class":732},[155,156369,21206],{"class":171},[155,156371,156372,156374,156376,156378],{"class":157,"line":270},[155,156373,89468],{"class":263},[155,156375,70000],{"class":171},[155,156377,80633],{"class":263},[155,156379,21206],{"class":171},[155,156381,156382],{"class":157,"line":276},[155,156383,21475],{"class":171},[24,156385,156386],{},"div {\nmargin: 0 auto;\n}",[146,156388,156391],{"className":156389,"code":156390,"language":25051},[25049],"\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",[152,156392,156390],{"__ignoreMap":39},[24,156394,156395],{},"如果想让多个元素都发生变化",[24,156397,156398],{},"不能如下操作：",[24,156400,156401],{},"transition: width 2s ease 0.5s;",[24,156403,156404],{},"transition: height 2s ease 0.5s;不对！！！",[24,156406,156407],{},"上方会样式冲突，导致不显示任何过渡效果",[24,156409,156410],{},"使用如下：加逗号隔开",[24,156412,156413],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[24,156415,156416],{},"transition all 2s ease;",[14,156418,156420],{"id":156419},"_1426-过渡练习","14.2.6 过渡练习",[28,156422,156423],{},[31,156424,156425],{},"进度条",[37,156427],{"style":144971,"src":156428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[146,156430,156432],{"className":145115,"code":156431,"language":145117,"meta":39,"style":39},"div {\n  transition: all 0.3s ease;\n}\n",[152,156433,156434,156440,156458],{"__ignoreMap":39},[155,156435,156436,156438],{"class":157,"line":158},[155,156437,70174],{"class":69863},[155,156439,35397],{"class":171},[155,156441,156442,156445,156447,156449,156452,156454,156456],{"class":157,"line":46},[155,156443,156444],{"class":263},"  transition",[155,156446,70000],{"class":171},[155,156448,47910],{"class":263},[155,156450,156451],{"class":263}," 0.3",[155,156453,20753],{"class":167},[155,156455,97243],{"class":263},[155,156457,21206],{"class":171},[155,156459,156460],{"class":157,"line":121},[155,156461,21475],{"class":171},[28,156463,156464],{"start":46},[31,156465,156466],{},"小米logo",[24,156468,156469],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[146,156471,156473],{"className":145115,"code":156472,"language":145117,"meta":39,"style":39},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[152,156474,156475,156480,156486,156502,156507],{"__ignoreMap":39},[155,156476,156477],{"class":157,"line":158},[155,156478,156479],{"class":161},"\u002F* CSS3 过渡 *\u002F\n",[155,156481,156482,156484],{"class":157,"line":46},[155,156483,70174],{"class":69863},[155,156485,35397],{"class":171},[155,156487,156488,156490,156492,156494,156496,156498,156500],{"class":157,"line":121},[155,156489,156444],{"class":263},[155,156491,70000],{"class":171},[155,156493,47910],{"class":263},[155,156495,156451],{"class":263},[155,156497,20753],{"class":167},[155,156499,97243],{"class":263},[155,156501,21206],{"class":171},[155,156503,156504],{"class":157,"line":180},[155,156505,156506],{"class":161},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[155,156508,156509],{"class":157,"line":194},[155,156510,21475],{"class":171},[24,156512,156513],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[20011,156515,156516],{},"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":39,"searchDepth":46,"depth":46,"links":156518},[156519,156524],{"id":154849,"depth":46,"text":154850,"children":156520},[156521,156522,156523],{"id":154853,"depth":121,"text":154854},{"id":154930,"depth":121,"text":154931},{"id":155261,"depth":121,"text":155262},{"id":155552,"depth":46,"text":155553,"children":156525},[156526,156527],{"id":155556,"depth":121,"text":155557},{"id":156419,"depth":121,"text":156420},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":154841,"description":20020},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":156534,"title":156535,"body":156536,"description":20020,"extension":20021,"meta":158280,"navigation":216,"path":158281,"seo":158282,"stem":158283,"__hash__":158284},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":156537,"toc":158261},[156538,156541,156545,156548,156554,156560,156564,156566,156569,156572,156575,156578,156581,156584,156587,156591,156595,156598,156601,156604,156608,156611,156614,156619,156622,156625,156628,156632,156635,156644,156647,156650,156654,156657,156660,156665,156672,156686,156694,156701,156706,156709,156712,156715,156722,156726,156732,156738,156741,156744,156749,156755,156757,156765,156770,156773,156779,156781,156786,156791,156794,156796,156801,156804,156809,156814,156848,156852,156856,156859,156863,156866,156952,156955,156992,156995,157031,157035,157040,157053,157107,157109,157137,157139,157167,157173,157187,157189,157233,157235,157279,157282,157289,157300,157302,157329,157331,157357,157364,157380,157382,157476,157478,157572,157579,157582,157587,157593,157667,157670,157672,157708,157710,157746,157749,157756,157775,157778,157781,157783,157808,157810,157834,157837,157840,157870,157874,157877,157940,157942,158008,158010,158074,158077,158109,158111,158137,158139,158165,158168,158199,158201,158227,158229,158255,158258],[10,156539,156535],{"id":156540},"_15-品优购项目上篇-搭建与公共模块",[20037,156542,156544],{"id":156543},"_151-项目规划","15.1 项目规划",[37,156546],{"style":144971,"src":156547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[24,156549,156550,156553],{},[20234,156551,156552],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[24,156555,156556,156559],{},[20234,156557,156558],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[20037,156561,156563],{"id":156562},"_152-项目介绍","15.2 项目介绍",[24,156565,156552],{},[37,156567],{"style":144971,"src":156568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[24,156570,156571],{},"主页：",[37,156573],{"style":144971,"src":156574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[24,156576,156577],{},"列表页：",[37,156579],{"style":144971,"src":156580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[24,156582,156583],{},"注册页：",[37,156585],{"style":144971,"src":156586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[20037,156588,156590],{"id":156589},"_153-项目搭建工作","15.3 项目搭建工作",[14,156592,156594],{"id":156593},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[37,156596],{"style":144971,"src":156597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[24,156599,156600],{},"经常更换的图片要放到upload文件夹中",[24,156602,156603],{},"不经常换的放到images文件夹中",[14,156605,156607],{"id":156606},"_1532-创建文件如下","15.3.2 创建文件如下",[37,156609],{"style":144971,"src":156610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[37,156612],{"style":144971,"src":156613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[24,156615,156616],{},[20234,156617,156618],{},"初始化样式：",[24,156620,156621],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[24,156623,156624],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[24,156626,156627],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[14,156629,156631],{"id":156630},"_1533-项目模块化开发","15.3.3 项目模块化开发",[24,156633,156634],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[24,156636,156637,156638,156643],{},"这里最典型的应用就是 ",[20234,156639,156640],{},[152,156641,156642],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[37,156645],{"style":144971,"src":156646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[24,156648,156649],{},"通过link方法来引入",[14,156651,156653],{"id":156652},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[37,156655],{"style":144971,"src":156656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[24,156658,156659],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[28,156661,156662],{},[31,156663,156664],{},"制作favicon图标",[24,156666,156667,156668,156671],{},"①把品优购图标切成 ",[152,156669,156670],{},"png"," 图片",[24,156673,156674,156675,156677,156678,156681,156682],{},"②把 ",[152,156676,156670],{}," 图片转换为 ",[152,156679,156680],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[20318,156683,156684],{"href":156684,"rel":156685},"http:\u002F\u002Fwww.bitbug.net\u002F",[43656],[28,156687,156688,156691],{"start":46},[31,156689,156690],{},"favicon图标放到网站根目录下",[31,156692,156693],{},"HTML页面引入favicon",[24,156695,156696,156697,156700],{},"在html 页面里面的 ",[152,156698,156699],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[24,156702,156703],{},[152,156704,156705],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[24,156707,156708],{},"复制这行代码或者在生成这个的网站进行复制",[37,156710],{"style":144971,"src":156711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[24,156713,156714],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[24,156716,156717,156718],{},"例如:",[20318,156719,156720],{"href":156720,"rel":156721},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[43656],[14,156723,156725],{"id":156724},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[24,156727,156728,156731],{},[20234,156729,156730],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[24,156733,156734,156737],{},[20234,156735,156736],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[24,156739,156740],{},"页面必须有三个标签用来符合 SEO 优化",[37,156742],{"style":144971,"src":156743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[28,156745,156746],{},[31,156747,156748],{},"title网站标题",[24,156750,156751,156754],{},[20234,156752,156753],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[24,156756,87353],{},[21052,156758,156759,156762],{},[31,156760,156761],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[31,156763,156764],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[28,156766,156767],{"start":46},[31,156768,156769],{},"description网站描述",[24,156771,156772],{},"简要说明我们网站主要是做什么的",[24,156774,156775,156778],{},[20234,156776,156777],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[24,156780,87353],{},[24,156782,156783],{},[152,156784,156785],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[28,156787,156788],{"start":121},[31,156789,156790],{},"keywords关键词",[24,156792,156793],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[24,156795,87353],{},[24,156797,156798],{},[152,156799,156800],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[24,156802,156803],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[24,156805,156806],{},[20234,156807,156808],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[28,156810,156811],{"start":180},[31,156812,156813],{},"代码总结",[146,156815,156816],{"className":145862,"code":149219,"language":145864,"meta":39,"style":39},[152,156817,156818,156822,156836,156840],{"__ignoreMap":39},[155,156819,156820],{"class":157,"line":158},[155,156821,149226],{"class":161},[155,156823,156824,156826,156828,156830,156832,156834],{"class":157,"line":46},[155,156825,20959],{"class":171},[155,156827,70174],{"class":69863},[155,156829,72049],{"class":226},[155,156831,317],{"class":171},[155,156833,149239],{"class":732},[155,156835,69870],{"class":171},[155,156837,156838],{"class":157,"line":121},[155,156839,149246],{"class":171},[155,156841,156842,156844,156846],{"class":157,"line":180},[155,156843,70348],{"class":171},[155,156845,70174],{"class":69863},[155,156847,69870],{"class":171},[20037,156849,156851],{"id":156850},"_154-项目公共部分制作","15.4 项目公共部分制作",[14,156853,156855],{"id":156854},"_1541-常用模块类命名","15.4.1 常用模块类命名",[37,156857],{"style":144971,"src":156858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[14,156860,156862],{"id":156861},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[24,156864,156865],{},"布局思路：",[21052,156867,156868,156871,156874,156896,156929],{},[31,156869,156870],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[31,156872,156873],{},"里面包含版心的盒子",[31,156875,156876,156877],{},"版心盒子里面包含 1 号左侧盒子左浮动",[21052,156878,156879,156887,156893],{},[31,156880,156881,156882,41292,156884,156886],{},"1 号盒子 里面包含一个",[152,156883,21052],{},[152,156885,21052],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[31,156888,156889,156890,156892],{},"里面的内容是水平排列，所以需要给",[152,156891,31],{},"设置浮动",[31,156894,156895],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[31,156897,156898,156899],{},"版心盒子里面包含 2 号右侧盒子右浮动",[21052,156900,156901,156915,156920],{},[31,156902,156903,156904,41292,156906,156908,156909,156911,156912,156914],{},"2 号盒子 里面包含一个",[152,156905,21052],{},[152,156907,21052],{},"包裹",[152,156910,31],{},"，中间的",[152,156913,20970],{},"可以用样式去设置，也可以用字符 |",[31,156916,156917,156918,156892],{},"里面内容水平排列，给",[152,156919,31],{},[31,156921,156922,156923,156925,156926,156928],{},"找到里面所有偶数的 ",[152,156924,31],{}," 设置样式（偶数的 ",[152,156927,31],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[31,156930,156931,156932],{},"需要用到字体图标",[21052,156933,156934,156940,156943,156946,156949],{},[31,156935,156936,156937],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[152,156938,156939],{},"arrow-icon",[31,156941,156942],{},"先要引入字体图片的资源",[31,156944,156945],{},"在样式里面利用 font-face 来进行声明",[31,156947,156948],{},"在伪元素的 content属性设置 图标的编码",[31,156950,156951],{},"给伪元素设置font-family属性",[24,156953,156954],{},"结构实例代码：",[146,156956,156958],{"className":145115,"code":156957,"language":145117,"meta":39,"style":39},"div::before {\n  content: \"\";\n  display: block;\n}\n",[152,156959,156960,156968,156978,156988],{"__ignoreMap":39},[155,156961,156962,156964,156966],{"class":157,"line":158},[155,156963,70174],{"class":69863},[155,156965,156116],{"class":226},[155,156967,35397],{"class":171},[155,156969,156970,156972,156974,156976],{"class":157,"line":46},[155,156971,156123],{"class":263},[155,156973,70000],{"class":171},[155,156975,15430],{"class":732},[155,156977,21206],{"class":171},[155,156979,156980,156982,156984,156986],{"class":157,"line":121},[155,156981,146731],{"class":263},[155,156983,70000],{"class":171},[155,156985,79432],{"class":263},[155,156987,21206],{"class":171},[155,156989,156990],{"class":157,"line":180},[155,156991,21475],{"class":171},[24,156993,156994],{},"样式实例代码：",[146,156996,156997],{"className":145115,"code":156957,"language":145117,"meta":39,"style":39},[152,156998,156999,157007,157017,157027],{"__ignoreMap":39},[155,157000,157001,157003,157005],{"class":157,"line":158},[155,157002,70174],{"class":69863},[155,157004,156116],{"class":226},[155,157006,35397],{"class":171},[155,157008,157009,157011,157013,157015],{"class":157,"line":46},[155,157010,156123],{"class":263},[155,157012,70000],{"class":171},[155,157014,15430],{"class":732},[155,157016,21206],{"class":171},[155,157018,157019,157021,157023,157025],{"class":157,"line":121},[155,157020,146731],{"class":263},[155,157022,70000],{"class":171},[155,157024,79432],{"class":263},[155,157026,21206],{"class":171},[155,157028,157029],{"class":157,"line":180},[155,157030,21475],{"class":171},[14,157032,157034],{"id":157033},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[21052,157036,157037],{},[31,157038,157039],{},"header 盒子必须要有高度",[24,157041,157042,157043,157045,157046],{},"1 号盒子是 ",[152,157044,150127],{}," 标志定位，在正常开发过程中， ",[20234,157047,157048,157049,157052],{},"logo的布局其实是有讲究的，需要进行 ",[152,157050,157051],{},"logoSEO","的优化 （★★★）",[21052,157054,157055,157063,157071,157098],{},[31,157056,157057,157059,157060,157062],{},[152,157058,150127],{}," 里面首先放一个 ",[152,157061,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[31,157064,157065,157067,157068,157070],{},[152,157066,10],{}," 里面再放一个链接，可以返回首页的，把 ",[152,157069,150127],{}," 的背景图片给链接即可",[31,157072,157073,157074],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[21052,157075,157076,157091],{},[31,157077,157078,157079,157082,157083,157086,157087,157090],{},"方法1：",[152,157080,157081],{},"text-indent"," 移到盒子外面（",[152,157084,157085],{},"text-indent: -9999px",") ，然后 ",[152,157088,157089],{},"overflow:hidden"," ，淘宝的做法",[31,157092,157093,157094,157097],{},"方法2：直接给 ",[152,157095,157096],{},"font-size: 0;"," 就看不到文字了，京东的做法",[31,157099,157100,157101,157103,157104,157106],{},"最后给链接一个 ",[152,157102,69970],{}," 属性，这样鼠标放到 ",[152,157105,150127],{}," 上就可以看到提示文字了",[24,157108,156954],{},[146,157110,157111],{"className":145862,"code":150348,"language":145864,"meta":39,"style":39},[152,157112,157113],{"__ignoreMap":39},[155,157114,157115,157117,157119,157121,157123,157125,157127,157129,157131,157133,157135],{"class":157,"line":158},[155,157116,20959],{"class":171},[155,157118,20318],{"class":69863},[155,157120,79620],{"class":226},[155,157122,317],{"class":171},[155,157124,150363],{"class":732},[155,157126,150366],{"class":226},[155,157128,317],{"class":171},[155,157130,150371],{"class":732},[155,157132,150374],{"class":171},[155,157134,20318],{"class":69863},[155,157136,69870],{"class":171},[24,157138,156994],{},[146,157140,157141],{"className":145862,"code":150348,"language":145864,"meta":39,"style":39},[152,157142,157143],{"__ignoreMap":39},[155,157144,157145,157147,157149,157151,157153,157155,157157,157159,157161,157163,157165],{"class":157,"line":158},[155,157146,20959],{"class":171},[155,157148,20318],{"class":69863},[155,157150,79620],{"class":226},[155,157152,317],{"class":171},[155,157154,150363],{"class":732},[155,157156,150366],{"class":226},[155,157158,317],{"class":171},[155,157160,150371],{"class":732},[155,157162,150374],{"class":171},[155,157164,20318],{"class":69863},[155,157166,69870],{"class":171},[24,157168,157169,157170,157172],{},"2 号盒子是 ",[152,157171,150140],{}," 搜索模块定位",[21052,157174,157175,157178,157181,157184],{},[31,157176,157177],{},"search盒子利用定位的方式放在对应的位置",[31,157179,157180],{},"search盒子设置绝对定位，header盒子设置相对定位",[31,157182,157183],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[31,157185,157186],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[24,157188,156954],{},[146,157190,157191],{"className":145115,"code":150435,"language":145117,"meta":39,"style":39},[152,157192,157193,157215,157219,157229],{"__ignoreMap":39},[155,157194,157195,157197,157199,157201,157203,157205,157207,157209,157211,157213],{"class":157,"line":158},[155,157196,70174],{"class":69863},[155,157198,7589],{"class":171},[155,157200,24],{"class":69863},[155,157202,7589],{"class":171},[155,157204,10],{"class":69863},[155,157206,7589],{"class":171},[155,157208,21052],{"class":69863},[155,157210,7589],{"class":171},[155,157212,31],{"class":69863},[155,157214,35397],{"class":171},[155,157216,157217],{"class":157,"line":46},[155,157218,150464],{"class":161},[155,157220,157221,157223,157225,157227],{"class":157,"line":121},[155,157222,146731],{"class":263},[155,157224,70000],{"class":171},[155,157226,79432],{"class":263},[155,157228,21206],{"class":171},[155,157230,157231],{"class":157,"line":180},[155,157232,21475],{"class":171},[24,157234,156994],{},[146,157236,157237],{"className":145115,"code":150435,"language":145117,"meta":39,"style":39},[152,157238,157239,157261,157265,157275],{"__ignoreMap":39},[155,157240,157241,157243,157245,157247,157249,157251,157253,157255,157257,157259],{"class":157,"line":158},[155,157242,70174],{"class":69863},[155,157244,7589],{"class":171},[155,157246,24],{"class":69863},[155,157248,7589],{"class":171},[155,157250,10],{"class":69863},[155,157252,7589],{"class":171},[155,157254,21052],{"class":69863},[155,157256,7589],{"class":171},[155,157258,31],{"class":69863},[155,157260,35397],{"class":171},[155,157262,157263],{"class":157,"line":46},[155,157264,150464],{"class":161},[155,157266,157267,157269,157271,157273],{"class":157,"line":121},[155,157268,146731],{"class":263},[155,157270,70000],{"class":171},[155,157272,79432],{"class":263},[155,157274,21206],{"class":171},[155,157276,157277],{"class":157,"line":180},[155,157278,21475],{"class":171},[24,157280,157281],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[24,157283,157284,157285,157288],{},"3 号盒子是 ",[152,157286,157287],{},"hotwords"," 热词模块定位",[21052,157290,157291,157294,157297],{},[31,157292,157293],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[31,157295,157296],{},"给里面所有的a标签设置 左右10px的外边距",[31,157298,157299],{},"给第一个a标签设置文字变红色（#c81623）",[24,157301,156954],{},[146,157303,157305],{"className":145115,"code":157304,"language":145117,"meta":39,"style":39},"div {\n  margin: 0 auto;\n}\n",[152,157306,157307,157313,157325],{"__ignoreMap":39},[155,157308,157309,157311],{"class":157,"line":158},[155,157310,70174],{"class":69863},[155,157312,35397],{"class":171},[155,157314,157315,157317,157319,157321,157323],{"class":157,"line":46},[155,157316,89033],{"class":263},[155,157318,70000],{"class":171},[155,157320,1109],{"class":263},[155,157322,70119],{"class":263},[155,157324,21206],{"class":171},[155,157326,157327],{"class":157,"line":121},[155,157328,21475],{"class":171},[24,157330,156994],{},[146,157332,157333],{"className":145115,"code":157304,"language":145117,"meta":39,"style":39},[152,157334,157335,157341,157353],{"__ignoreMap":39},[155,157336,157337,157339],{"class":157,"line":158},[155,157338,70174],{"class":69863},[155,157340,35397],{"class":171},[155,157342,157343,157345,157347,157349,157351],{"class":157,"line":46},[155,157344,89033],{"class":263},[155,157346,70000],{"class":171},[155,157348,1109],{"class":263},[155,157350,70119],{"class":263},[155,157352,21206],{"class":171},[155,157354,157355],{"class":157,"line":121},[155,157356,21475],{"class":171},[24,157358,157359,157360,157363],{},"4 号盒子是 ",[152,157361,157362],{},"shopcar"," 购物车模块",[21052,157365,157366,157371,157374,157377],{},[31,157367,141898,157368,157370],{},[152,157369,157362],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[31,157372,157373],{},"count 统计部分用绝对定位做",[31,157375,157376],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[31,157378,157379],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[24,157381,156954],{},[146,157383,157384],{"className":145115,"code":150547,"language":145117,"meta":39,"style":39},[152,157385,157386,157390,157404,157408,157422,157426,157440,157444,157458,157462],{"__ignoreMap":39},[155,157387,157388],{"class":157,"line":158},[155,157389,150554],{"class":161},[155,157391,157392,157394,157396,157398,157400,157402],{"class":157,"line":46},[155,157393,150559],{"class":226},[155,157395,98370],{"class":171},[155,157397,147475],{"class":263},[155,157399,70000],{"class":171},[155,157401,150568],{"class":263},[155,157403,148045],{"class":171},[155,157405,157406],{"class":157,"line":121},[155,157407,150575],{"class":161},[155,157409,157410,157412,157414,157416,157418,157420],{"class":157,"line":180},[155,157411,150580],{"class":226},[155,157413,98370],{"class":171},[155,157415,147475],{"class":263},[155,157417,70000],{"class":171},[155,157419,73327],{"class":263},[155,157421,148045],{"class":171},[155,157423,157424],{"class":157,"line":194},[155,157425,150595],{"class":161},[155,157427,157428,157430,157432,157434,157436,157438],{"class":157,"line":200},[155,157429,150600],{"class":226},[155,157431,98370],{"class":171},[155,157433,147475],{"class":263},[155,157435,70000],{"class":171},[155,157437,73394],{"class":263},[155,157439,148045],{"class":171},[155,157441,157442],{"class":157,"line":213},[155,157443,150615],{"class":161},[155,157445,157446,157448,157450,157452,157454,157456],{"class":157,"line":220},[155,157447,150620],{"class":226},[155,157449,98370],{"class":171},[155,157451,147475],{"class":263},[155,157453,70000],{"class":171},[155,157455,104796],{"class":263},[155,157457,148045],{"class":171},[155,157459,157460],{"class":157,"line":245},[155,157461,150635],{"class":161},[155,157463,157464,157466,157468,157470,157472,157474],{"class":157,"line":251},[155,157465,150640],{"class":226},[155,157467,98370],{"class":171},[155,157469,147475],{"class":263},[155,157471,70000],{"class":171},[155,157473,150649],{"class":263},[155,157475,148045],{"class":171},[24,157477,156994],{},[146,157479,157480],{"className":145115,"code":150547,"language":145117,"meta":39,"style":39},[152,157481,157482,157486,157500,157504,157518,157522,157536,157540,157554,157558],{"__ignoreMap":39},[155,157483,157484],{"class":157,"line":158},[155,157485,150554],{"class":161},[155,157487,157488,157490,157492,157494,157496,157498],{"class":157,"line":46},[155,157489,150559],{"class":226},[155,157491,98370],{"class":171},[155,157493,147475],{"class":263},[155,157495,70000],{"class":171},[155,157497,150568],{"class":263},[155,157499,148045],{"class":171},[155,157501,157502],{"class":157,"line":121},[155,157503,150575],{"class":161},[155,157505,157506,157508,157510,157512,157514,157516],{"class":157,"line":180},[155,157507,150580],{"class":226},[155,157509,98370],{"class":171},[155,157511,147475],{"class":263},[155,157513,70000],{"class":171},[155,157515,73327],{"class":263},[155,157517,148045],{"class":171},[155,157519,157520],{"class":157,"line":194},[155,157521,150595],{"class":161},[155,157523,157524,157526,157528,157530,157532,157534],{"class":157,"line":200},[155,157525,150600],{"class":226},[155,157527,98370],{"class":171},[155,157529,147475],{"class":263},[155,157531,70000],{"class":171},[155,157533,73394],{"class":263},[155,157535,148045],{"class":171},[155,157537,157538],{"class":157,"line":213},[155,157539,150615],{"class":161},[155,157541,157542,157544,157546,157548,157550,157552],{"class":157,"line":220},[155,157543,150620],{"class":226},[155,157545,98370],{"class":171},[155,157547,147475],{"class":263},[155,157549,70000],{"class":171},[155,157551,104796],{"class":263},[155,157553,148045],{"class":171},[155,157555,157556],{"class":157,"line":245},[155,157557,150635],{"class":161},[155,157559,157560,157562,157564,157566,157568,157570],{"class":157,"line":251},[155,157561,150640],{"class":226},[155,157563,98370],{"class":171},[155,157565,147475],{"class":263},[155,157567,70000],{"class":171},[155,157569,150649],{"class":263},[155,157571,148045],{"class":171},[14,157573,157575,157576,157578],{"id":157574},"_1544-nav导航模块制作","15.4.4 ",[152,157577,72276],{},"导航模块制作",[37,157580],{"style":144971,"src":157581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[24,157583,157584,157586],{},[152,157585,72276],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[24,157588,157589,157590],{},"1 号盒子左侧浮动，",[152,157591,157592],{},"dropdown",[21052,157594,157595,157605,157613,157619,157627,157637,157645,157656],{},[31,157596,157597,157598,119581,157601,157604],{},"1号盒子有讲究，根据相关性 里面包含 ",[152,157599,157600],{},".dt",[152,157602,157603],{},".dd"," 两个盒子",[31,157606,157607,157609,157610,157612],{},[152,157608,157600],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[152,157611,157603],{}," 挤到下面去了",[31,157614,157615,157616,157618],{},"给 ",[152,157617,157603],{}," 盒子设置宽度 和 高度，以及背景颜色",[31,157620,157615,157621,157623,157624,138800],{},[152,157622,157603],{}," 盒子里面定义 无序列表 （",[152,157625,157626],{},"ul > li > a",[31,157628,157629,157630,157632,157633,157636],{},"每个 ",[152,157631,31],{}," 都有一个高度（",[152,157634,157635],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[31,157638,157615,157639,157641,157642,138800],{},[152,157640,31],{}," 里面的a设置文字大小（",[152,157643,157644],{},"14px",[31,157646,157615,157647,157649,157650,157652,157653,157655],{},[152,157648,31],{}," 设置 ",[152,157651,146276],{},"，当鼠标移入的时候，让",[152,157654,31],{},"的背景变成白色，让里面的文字变成红色",[31,157657,157658,157660,157661,157663,157664,157666],{},[152,157659,31],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[152,157662,31],{},"的右侧，那么给",[152,157665,31],{},"设置相对定位",[24,157668,157669],{},"一定要注意相关性",[24,157671,156954],{},[146,157673,157674],{"className":145115,"code":156957,"language":145117,"meta":39,"style":39},[152,157675,157676,157684,157694,157704],{"__ignoreMap":39},[155,157677,157678,157680,157682],{"class":157,"line":158},[155,157679,70174],{"class":69863},[155,157681,156116],{"class":226},[155,157683,35397],{"class":171},[155,157685,157686,157688,157690,157692],{"class":157,"line":46},[155,157687,156123],{"class":263},[155,157689,70000],{"class":171},[155,157691,15430],{"class":732},[155,157693,21206],{"class":171},[155,157695,157696,157698,157700,157702],{"class":157,"line":121},[155,157697,146731],{"class":263},[155,157699,70000],{"class":171},[155,157701,79432],{"class":263},[155,157703,21206],{"class":171},[155,157705,157706],{"class":157,"line":180},[155,157707,21475],{"class":171},[24,157709,156994],{},[146,157711,157712],{"className":145115,"code":156957,"language":145117,"meta":39,"style":39},[152,157713,157714,157722,157732,157742],{"__ignoreMap":39},[155,157715,157716,157718,157720],{"class":157,"line":158},[155,157717,70174],{"class":69863},[155,157719,156116],{"class":226},[155,157721,35397],{"class":171},[155,157723,157724,157726,157728,157730],{"class":157,"line":46},[155,157725,156123],{"class":263},[155,157727,70000],{"class":171},[155,157729,15430],{"class":732},[155,157731,21206],{"class":171},[155,157733,157734,157736,157738,157740],{"class":157,"line":121},[155,157735,146731],{"class":263},[155,157737,70000],{"class":171},[155,157739,79432],{"class":263},[155,157741,21206],{"class":171},[155,157743,157744],{"class":157,"line":180},[155,157745,21475],{"class":171},[24,157747,157748],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[24,157750,157751,157752,157755],{},"2 号盒子左侧浮动，",[152,157753,157754],{},"navitems"," 导航栏组",[21052,157757,157758,157763,157772],{},[31,157759,157760,157761],{},"里面结构是 ",[152,157762,157626],{},[31,157764,157765,157766,157768,157769,157771],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[152,157767,20318],{},"左右的",[152,157770,355],{},"把两侧撑开",[31,157773,157774],{},"让文字垂直居中（行高等于高度）",[37,157776],{"style":144971,"src":157777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[24,157779,157780],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[24,157782,156954],{},[146,157784,157786],{"className":145115,"code":157785,"language":145117,"meta":39,"style":39},".box {\n  float: left;\n}\n",[152,157787,157788,157794,157804],{"__ignoreMap":39},[155,157789,157790,157792],{"class":157,"line":158},[155,157791,148963],{"class":226},[155,157793,35397],{"class":171},[155,157795,157796,157798,157800,157802],{"class":157,"line":46},[155,157797,149595],{"class":263},[155,157799,70000],{"class":171},[155,157801,43527],{"class":263},[155,157803,21206],{"class":171},[155,157805,157806],{"class":157,"line":121},[155,157807,21475],{"class":171},[24,157809,156994],{},[146,157811,157812],{"className":145115,"code":157785,"language":145117,"meta":39,"style":39},[152,157813,157814,157820,157830],{"__ignoreMap":39},[155,157815,157816,157818],{"class":157,"line":158},[155,157817,148963],{"class":226},[155,157819,35397],{"class":171},[155,157821,157822,157824,157826,157828],{"class":157,"line":46},[155,157823,149595],{"class":263},[155,157825,70000],{"class":171},[155,157827,43527],{"class":263},[155,157829,21206],{"class":171},[155,157831,157832],{"class":157,"line":121},[155,157833,21475],{"class":171},[24,157835,157836],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[37,157838],{"style":144971,"src":157839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[146,157841,157842],{"className":145115,"code":149272,"language":145117,"meta":39,"style":39},[152,157843,157844,157850,157866],{"__ignoreMap":39},[155,157845,157846,157848],{"class":157,"line":158},[155,157847,70174],{"class":69863},[155,157849,35397],{"class":171},[155,157851,157852,157854,157856,157858,157860,157862,157864],{"class":157,"line":46},[155,157853,89459],{"class":263},[155,157855,70000],{"class":171},[155,157857,329],{"class":263},[155,157859,70055],{"class":167},[155,157861,70084],{"class":263},[155,157863,148507],{"class":263},[155,157865,21206],{"class":171},[155,157867,157868],{"class":157,"line":121},[155,157869,21475],{"class":171},[14,157871,157873],{"id":157872},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[37,157875],{"style":144971,"src":157876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[21052,157878,157879,157884,157889],{},[31,157880,157881,157883],{},[152,157882,150318],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[31,157885,157886,157888],{},[152,157887,150318],{}," 里面有一个大的版心",[31,157890,157891,157892,157895,157896],{},"版心里面包含 1 号盒子，",[152,157893,157894],{},"mod_service"," 是服务模块，mod 是模块的意思",[21052,157897,157898,157903,157916,157932,157937],{},[31,157899,157615,157900,157902],{},[152,157901,157894],{}," 设置高度（80px）和下边框",[31,157904,157905,157906,157909,157910,157912,157913,157915],{},"在里面定义 ",[152,157907,157908],{},"ul > li"," ,每个",[152,157911,31],{}," 宽度是300px 高度是 50px，给每个",[152,157914,31],{},"设置35px的左内边距",[31,157917,157918,157919,157921,157922,157924,157925,157927,157928,38203,157930,138800],{},"在每个",[152,157920,31],{},"里面，放一个 ",[152,157923,42701],{},"（里面放图标），一个",[152,157926,70174],{},"（里面放",[152,157929,70174],{},[152,157931,24],{},[31,157933,157615,157934,157936],{},[152,157935,42701],{},"设置浮动，让h5与这个div左右排列",[31,157938,157939],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[24,157941,156954],{},[146,157943,157945],{"className":145115,"code":157944,"language":145117,"meta":39,"style":39},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[152,157946,157947,157953,157965,157977,158004],{"__ignoreMap":39},[155,157948,157949,157951],{"class":157,"line":158},[155,157950,152872],{"class":226},[155,157952,35397],{"class":171},[155,157954,157955,157957,157959,157961,157963],{"class":157,"line":46},[155,157956,89131],{"class":263},[155,157958,70000],{"class":171},[155,157960,3458],{"class":263},[155,157962,70055],{"class":167},[155,157964,21206],{"class":171},[155,157966,157967,157969,157971,157973,157975],{"class":157,"line":121},[155,157968,89351],{"class":263},[155,157970,70000],{"class":171},[155,157972,3458],{"class":263},[155,157974,70055],{"class":167},[155,157976,21206],{"class":171},[155,157978,157979,157981,157983,157985,157987,157989,157991,157993,157996,157998,158000,158002],{"class":157,"line":180},[155,157980,89174],{"class":263},[155,157982,70000],{"class":171},[155,157984,80289],{"class":263},[155,157986,230],{"class":171},[155,157988,152911],{"class":323},[155,157990,33541],{"class":171},[155,157992,80299],{"class":263},[155,157994,157995],{"class":263}," -10",[155,157997,70055],{"class":167},[155,157999,152930],{"class":263},[155,158001,70055],{"class":167},[155,158003,21206],{"class":171},[155,158005,158006],{"class":157,"line":194},[155,158007,21475],{"class":171},[24,158009,156994],{},[146,158011,158012],{"className":145115,"code":157944,"language":145117,"meta":39,"style":39},[152,158013,158014,158020,158032,158044,158070],{"__ignoreMap":39},[155,158015,158016,158018],{"class":157,"line":158},[155,158017,152872],{"class":226},[155,158019,35397],{"class":171},[155,158021,158022,158024,158026,158028,158030],{"class":157,"line":46},[155,158023,89131],{"class":263},[155,158025,70000],{"class":171},[155,158027,3458],{"class":263},[155,158029,70055],{"class":167},[155,158031,21206],{"class":171},[155,158033,158034,158036,158038,158040,158042],{"class":157,"line":121},[155,158035,89351],{"class":263},[155,158037,70000],{"class":171},[155,158039,3458],{"class":263},[155,158041,70055],{"class":167},[155,158043,21206],{"class":171},[155,158045,158046,158048,158050,158052,158054,158056,158058,158060,158062,158064,158066,158068],{"class":157,"line":180},[155,158047,89174],{"class":263},[155,158049,70000],{"class":171},[155,158051,80289],{"class":263},[155,158053,230],{"class":171},[155,158055,152911],{"class":323},[155,158057,33541],{"class":171},[155,158059,80299],{"class":263},[155,158061,157995],{"class":263},[155,158063,70055],{"class":167},[155,158065,152930],{"class":263},[155,158067,70055],{"class":167},[155,158069,21206],{"class":171},[155,158071,158072],{"class":157,"line":194},[155,158073,21475],{"class":171},[24,158075,158076],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[21052,158078,158079,158082,158088,158094,158106],{},[31,158080,158081],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[31,158083,158084,158085,138800],{},"里面的布局利用 自定义列表来实现（",[152,158086,158087],{},"dl > dt + dd",[31,158089,157615,158090,158093],{},[152,158091,158092],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[31,158095,157615,158096,158099,158100,38203,158102,158105],{},[152,158097,158098],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[152,158101,158098],{},[152,158103,158104],{},"dd","之间有些距离",[31,158107,158108],{},"最后一个 dl 结构和样式不一样，需要单独设置",[24,158110,156954],{},[146,158112,158113],{"className":145115,"code":157304,"language":145117,"meta":39,"style":39},[152,158114,158115,158121,158133],{"__ignoreMap":39},[155,158116,158117,158119],{"class":157,"line":158},[155,158118,70174],{"class":69863},[155,158120,35397],{"class":171},[155,158122,158123,158125,158127,158129,158131],{"class":157,"line":46},[155,158124,89033],{"class":263},[155,158126,70000],{"class":171},[155,158128,1109],{"class":263},[155,158130,70119],{"class":263},[155,158132,21206],{"class":171},[155,158134,158135],{"class":157,"line":121},[155,158136,21475],{"class":171},[24,158138,156994],{},[146,158140,158141],{"className":145115,"code":157304,"language":145117,"meta":39,"style":39},[152,158142,158143,158149,158161],{"__ignoreMap":39},[155,158144,158145,158147],{"class":157,"line":158},[155,158146,70174],{"class":69863},[155,158148,35397],{"class":171},[155,158150,158151,158153,158155,158157,158159],{"class":157,"line":46},[155,158152,89033],{"class":263},[155,158154,70000],{"class":171},[155,158156,1109],{"class":263},[155,158158,70119],{"class":263},[155,158160,21206],{"class":171},[155,158162,158163],{"class":157,"line":121},[155,158164,21475],{"class":171},[24,158166,158167],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[21052,158169,158170,158179,158182,158193],{},[31,158171,158172,158173,158175,158176,158178],{},"分为上下两块，上面是 ",[152,158174,150335],{}," 友情链接，下面是 ",[152,158177,150328],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[31,158180,158181],{},"把内容分别复制到相应模块中",[31,158183,157615,158184,158186,158187,158189,158190,158192],{},[152,158185,150335],{}," 设置 15px 的下外边距，给",[152,158188,150335],{}," 里面 的 ",[152,158191,20318],{}," 标签设置 左右 3px 的外边距",[31,158194,158195,158196,158198],{},"给",[152,158197,150328],{}," 设置 20px 的行高",[24,158200,156954],{},[146,158202,158203],{"className":145115,"code":157304,"language":145117,"meta":39,"style":39},[152,158204,158205,158211,158223],{"__ignoreMap":39},[155,158206,158207,158209],{"class":157,"line":158},[155,158208,70174],{"class":69863},[155,158210,35397],{"class":171},[155,158212,158213,158215,158217,158219,158221],{"class":157,"line":46},[155,158214,89033],{"class":263},[155,158216,70000],{"class":171},[155,158218,1109],{"class":263},[155,158220,70119],{"class":263},[155,158222,21206],{"class":171},[155,158224,158225],{"class":157,"line":121},[155,158226,21475],{"class":171},[24,158228,156994],{},[146,158230,158231],{"className":145115,"code":157304,"language":145117,"meta":39,"style":39},[152,158232,158233,158239,158251],{"__ignoreMap":39},[155,158234,158235,158237],{"class":157,"line":158},[155,158236,70174],{"class":69863},[155,158238,35397],{"class":171},[155,158240,158241,158243,158245,158247,158249],{"class":157,"line":46},[155,158242,89033],{"class":263},[155,158244,70000],{"class":171},[155,158246,1109],{"class":263},[155,158248,70119],{"class":263},[155,158250,21206],{"class":171},[155,158252,158253],{"class":157,"line":121},[155,158254,21475],{"class":171},[24,158256,158257],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[20011,158259,158260],{},"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":39,"searchDepth":46,"depth":46,"links":158262},[158263,158264,158265,158272],{"id":156543,"depth":46,"text":156544},{"id":156562,"depth":46,"text":156563},{"id":156589,"depth":46,"text":156590,"children":158266},[158267,158268,158269,158270,158271],{"id":156593,"depth":121,"text":156594},{"id":156606,"depth":121,"text":156607},{"id":156630,"depth":121,"text":156631},{"id":156652,"depth":121,"text":156653},{"id":156724,"depth":121,"text":156725},{"id":156850,"depth":46,"text":156851,"children":158273},[158274,158275,158276,158277,158279],{"id":156854,"depth":121,"text":156855},{"id":156861,"depth":121,"text":156862},{"id":157033,"depth":121,"text":157034},{"id":157574,"depth":121,"text":158278},"15.4.4 nav导航模块制作",{"id":157872,"depth":121,"text":157873},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":156535,"description":20020},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":158286,"title":158287,"body":158288,"description":20020,"extension":20021,"meta":160690,"navigation":216,"path":160691,"seo":160692,"stem":160693,"__hash__":160694},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":158289,"toc":160667},[158290,158293,158297,158301,158313,158316,158319,158322,158333,158335,158359,158361,158385,158390,158393,158395,158431,158433,158469,158472,158477,158480,158483,158486,158516,158523,158526,158536,158538,158572,158575,158609,158615,158632,158634,158670,158672,158708,158713,158738,158740,158766,158768,158792,158799,158802,158866,158868,158910,158912,158952,158959,158964,158966,158996,158998,159028,159032,159035,159042,159054,159056,159082,159084,159108,159111,159113,159137,159143,159153,159155,159185,159187,159217,159224,159265,159267,159303,159305,159341,159345,159348,159351,159354,159360,159365,159368,159391,159394,159418,159421,159445,159450,159453,159456,159459,159462,159465,159539,159541,159571,159573,159603,159606,159609,159641,159645,159649,159663,159672,159675,159680,159682,159776,159778,159872,159895,159897,159921,159923,159947,159954,159957,159967,159969,159993,159998,160006,160008,160038,160043,160083,160085,160111,160113,160139,160143,160146,160151,160154,160158,160166,160173,160181,160183,160213,160215,160245,160253,160256,160259,160261,160291,160293,160323,160326,160331,160333,160357,160359,160383,160386,160471,160473,160497,160499,160523,160527,160529,160553,160555,160589,160593,160607,160610,160615,160618,160623,160626,160656,160664],[10,158291,158287],{"id":158292},"_16-品优购项目下篇-主体与页面开发",[20037,158294,158296],{"id":158295},"_161-项目主体模块制作","16.1 项目主体模块制作",[14,158298,158300],{"id":158299},"_1611-首页制作","16.1.1 首页制作",[24,158302,158303,158305,158306,158308,158309,158312],{},[20234,158304,120621],{}," 主体模块是 ",[20234,158307,92621],{}," 里面专有的，注意需要新的样式文件 ",[20234,158310,158311],{},"index.css，"," 就不要写在common.css中了",[37,158314],{"style":144971,"src":158315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[37,158317],{"style":144971,"src":158318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[24,158320,158321],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[21052,158323,158324,158327,158330],{},[31,158325,158326],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[31,158328,158329],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[31,158331,158332],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[24,158334,156954],{},[146,158336,158337],{"className":145115,"code":157785,"language":145117,"meta":39,"style":39},[152,158338,158339,158345,158355],{"__ignoreMap":39},[155,158340,158341,158343],{"class":157,"line":158},[155,158342,148963],{"class":226},[155,158344,35397],{"class":171},[155,158346,158347,158349,158351,158353],{"class":157,"line":46},[155,158348,149595],{"class":263},[155,158350,70000],{"class":171},[155,158352,43527],{"class":263},[155,158354,21206],{"class":171},[155,158356,158357],{"class":157,"line":121},[155,158358,21475],{"class":171},[24,158360,156994],{},[146,158362,158363],{"className":145115,"code":157785,"language":145117,"meta":39,"style":39},[152,158364,158365,158371,158381],{"__ignoreMap":39},[155,158366,158367,158369],{"class":157,"line":158},[155,158368,148963],{"class":226},[155,158370,35397],{"class":171},[155,158372,158373,158375,158377,158379],{"class":157,"line":46},[155,158374,149595],{"class":263},[155,158376,70000],{"class":171},[155,158378,43527],{"class":263},[155,158380,21206],{"class":171},[155,158382,158383],{"class":157,"line":121},[155,158384,21475],{"class":171},[28,158386,158387],{},[31,158388,158389],{},"左侧focus模块制作",[37,158391],{"style":144971,"src":158392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[24,158394,156954],{},[146,158396,158397],{"className":145115,"code":146438,"language":145117,"meta":39,"style":39},[152,158398,158399,158407,158417,158427],{"__ignoreMap":39},[155,158400,158401,158403,158405],{"class":157,"line":158},[155,158402,72384],{"class":69863},[155,158404,80463],{"class":226},[155,158406,35397],{"class":171},[155,158408,158409,158411,158413,158415],{"class":157,"line":46},[155,158410,146453],{"class":263},[155,158412,70000],{"class":171},[155,158414,73452],{"class":263},[155,158416,21206],{"class":171},[155,158418,158419,158421,158423,158425],{"class":157,"line":121},[155,158420,89361],{"class":263},[155,158422,70000],{"class":171},[155,158424,73300],{"class":263},[155,158426,21206],{"class":171},[155,158428,158429],{"class":157,"line":180},[155,158430,21475],{"class":171},[24,158432,156994],{},[146,158434,158435],{"className":145115,"code":146438,"language":145117,"meta":39,"style":39},[152,158436,158437,158445,158455,158465],{"__ignoreMap":39},[155,158438,158439,158441,158443],{"class":157,"line":158},[155,158440,72384],{"class":69863},[155,158442,80463],{"class":226},[155,158444,35397],{"class":171},[155,158446,158447,158449,158451,158453],{"class":157,"line":46},[155,158448,146453],{"class":263},[155,158450,70000],{"class":171},[155,158452,73452],{"class":263},[155,158454,21206],{"class":171},[155,158456,158457,158459,158461,158463],{"class":157,"line":121},[155,158458,89361],{"class":263},[155,158460,70000],{"class":171},[155,158462,73300],{"class":263},[155,158464,21206],{"class":171},[155,158466,158467],{"class":157,"line":180},[155,158468,21475],{"class":171},[24,158470,158471],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[28,158473,158474],{"start":46},[31,158475,158476],{},"右侧newsflash模块制作",[37,158478],{"style":144971,"src":158479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[24,158481,158482],{},"右侧的模块 分为上中下三个盒子",[24,158484,158485],{},"结构代码：",[146,158487,158488],{"className":145862,"code":152617,"language":145864,"meta":39,"style":39},[152,158489,158490],{"__ignoreMap":39},[155,158491,158492,158494,158496,158498,158500,158502,158504,158506,158508,158510,158512,158514],{"class":157,"line":158},[155,158493,20959],{"class":171},[155,158495,37],{"class":69863},[155,158497,73802],{"class":226},[155,158499,317],{"class":171},[155,158501,152632],{"class":732},[155,158503,73810],{"class":226},[155,158505,317],{"class":171},[155,158507,152639],{"class":732},[155,158509,152642],{"class":226},[155,158511,317],{"class":171},[155,158513,152647],{"class":732},[155,158515,69870],{"class":171},[24,158517,158518,158519,158522],{},"1 号盒子为 ",[152,158520,158521],{},"news"," 新闻模块 高度为 165px",[37,158524],{"style":144971,"src":158525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[24,158527,158528,158529,158532,158533],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[152,158530,158531],{},"news-hd","，下面是 ",[152,158534,158535],{},"news-bd",[24,158537,158485],{},[146,158539,158540],{"className":145862,"code":149219,"language":145864,"meta":39,"style":39},[152,158541,158542,158546,158560,158564],{"__ignoreMap":39},[155,158543,158544],{"class":157,"line":158},[155,158545,149226],{"class":161},[155,158547,158548,158550,158552,158554,158556,158558],{"class":157,"line":46},[155,158549,20959],{"class":171},[155,158551,70174],{"class":69863},[155,158553,72049],{"class":226},[155,158555,317],{"class":171},[155,158557,149239],{"class":732},[155,158559,69870],{"class":171},[155,158561,158562],{"class":157,"line":121},[155,158563,149246],{"class":171},[155,158565,158566,158568,158570],{"class":157,"line":180},[155,158567,70348],{"class":171},[155,158569,70174],{"class":69863},[155,158571,69870],{"class":171},[24,158573,158574],{},"样式代码：",[146,158576,158577],{"className":145862,"code":149219,"language":145864,"meta":39,"style":39},[152,158578,158579,158583,158597,158601],{"__ignoreMap":39},[155,158580,158581],{"class":157,"line":158},[155,158582,149226],{"class":161},[155,158584,158585,158587,158589,158591,158593,158595],{"class":157,"line":46},[155,158586,20959],{"class":171},[155,158588,70174],{"class":69863},[155,158590,72049],{"class":226},[155,158592,317],{"class":171},[155,158594,149239],{"class":732},[155,158596,69870],{"class":171},[155,158598,158599],{"class":157,"line":121},[155,158600,149246],{"class":171},[155,158602,158603,158605,158607],{"class":157,"line":180},[155,158604,70348],{"class":171},[155,158606,70174],{"class":69863},[155,158608,69870],{"class":171},[24,158610,158611,158612,158614],{},"上面是",[152,158613,158531],{},"，设置高度是 33px，设置下边框",[21052,158616,158617,158623],{},[31,158618,158619,158620,158622],{},"里面放一个",[152,158621,42701],{}," 标题",[31,158624,158625,158626,158628,158629,158631],{},"放一个a",[152,158627,121256],{},"，内容是 更多，然后让 ",[152,158630,20318],{}," 进行右浮动，三角用伪元素设置字体图标就好",[24,158633,158485],{},[146,158635,158636],{"className":145115,"code":156957,"language":145117,"meta":39,"style":39},[152,158637,158638,158646,158656,158666],{"__ignoreMap":39},[155,158639,158640,158642,158644],{"class":157,"line":158},[155,158641,70174],{"class":69863},[155,158643,156116],{"class":226},[155,158645,35397],{"class":171},[155,158647,158648,158650,158652,158654],{"class":157,"line":46},[155,158649,156123],{"class":263},[155,158651,70000],{"class":171},[155,158653,15430],{"class":732},[155,158655,21206],{"class":171},[155,158657,158658,158660,158662,158664],{"class":157,"line":121},[155,158659,146731],{"class":263},[155,158661,70000],{"class":171},[155,158663,79432],{"class":263},[155,158665,21206],{"class":171},[155,158667,158668],{"class":157,"line":180},[155,158669,21475],{"class":171},[24,158671,158574],{},[146,158673,158674],{"className":145115,"code":156957,"language":145117,"meta":39,"style":39},[152,158675,158676,158684,158694,158704],{"__ignoreMap":39},[155,158677,158678,158680,158682],{"class":157,"line":158},[155,158679,70174],{"class":69863},[155,158681,156116],{"class":226},[155,158683,35397],{"class":171},[155,158685,158686,158688,158690,158692],{"class":157,"line":46},[155,158687,156123],{"class":263},[155,158689,70000],{"class":171},[155,158691,15430],{"class":732},[155,158693,21206],{"class":171},[155,158695,158696,158698,158700,158702],{"class":157,"line":121},[155,158697,146731],{"class":263},[155,158699,70000],{"class":171},[155,158701,79432],{"class":263},[155,158703,21206],{"class":171},[155,158705,158706],{"class":157,"line":180},[155,158707,21475],{"class":171},[24,158709,158710,158711],{},"下面是",[152,158712,158535],{},[21052,158714,158715,158723],{},[31,158716,158717,158718,119581,158720,158722],{},"里面包含 ",[152,158719,21052],{},[152,158721,31],{}," 还有链接",[31,158724,158195,158725,158727,158728,158730,158731,158734,158735],{},[152,158726,31],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[152,158729,149781],{}," 2.设置 ",[152,158732,158733],{},"white-space: nowrap;"," 3. 设置 ",[152,158736,158737],{},"text-overflow: ellipsis;",[24,158739,158485],{},[146,158741,158743],{"className":145115,"code":158742,"language":145117,"meta":39,"style":39},"div {\n  overflow: hidden;\n}\n",[152,158744,158745,158751,158762],{"__ignoreMap":39},[155,158746,158747,158749],{"class":157,"line":158},[155,158748,70174],{"class":69863},[155,158750,35397],{"class":171},[155,158752,158753,158756,158758,158760],{"class":157,"line":46},[155,158754,158755],{"class":263},"  overflow",[155,158757,70000],{"class":171},[155,158759,80277],{"class":263},[155,158761,21206],{"class":171},[155,158763,158764],{"class":157,"line":121},[155,158765,21475],{"class":171},[24,158767,158574],{},[146,158769,158770],{"className":145115,"code":158742,"language":145117,"meta":39,"style":39},[152,158771,158772,158778,158788],{"__ignoreMap":39},[155,158773,158774,158776],{"class":157,"line":158},[155,158775,70174],{"class":69863},[155,158777,35397],{"class":171},[155,158779,158780,158782,158784,158786],{"class":157,"line":46},[155,158781,158755],{"class":263},[155,158783,70000],{"class":171},[155,158785,80277],{"class":263},[155,158787,21206],{"class":171},[155,158789,158790],{"class":157,"line":121},[155,158791,21475],{"class":171},[24,158793,158794,158795,158798],{},"2 号盒子为 ",[152,158796,158797],{},"lifeservice"," 生活服务模块 高度为 209px",[37,158800],{"style":144971,"src":158801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[21052,158803,158804,158807,158817,158841,158852],{},[31,158805,158806],{},"设置边框（左右下边框）",[31,158808,158809,158810,158813,158814,158816],{},"里面的内容 是 ",[152,158811,158812],{},"ul > 12*li","，给",[152,158815,31],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[31,158818,158819,158820],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[21052,158821,158822,158827,158836],{},[31,158823,158824,158826],{},[152,158825,158797],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[31,158828,158829,158830,158832,158833,158835],{},"可以让 ",[152,158831,158797],{}," 里面的 ",[152,158834,21052],{}," 宽度为 252，就可以装的下 4 个 小 li",[31,158837,158838,158840],{},[152,158839,158797],{}," 盒子 overflow 隐藏多余的部分就可以了",[31,158842,135030,158843,158845,158846,158848,158849,158851],{},[152,158844,31],{}," 里面放一个 ",[152,158847,20513],{},"（里面放图标），下面的文本用 ",[152,158850,24],{}," 标签包裹",[31,158853,157615,158854,158856,158857,158859,158860,157649,158862,158865],{},[152,158855,20513],{}," 设置 24px宽和28px的高（注意 ",[152,158858,20513],{}," 是行内元素， 转成行内块），给 ",[152,158861,31],{},[152,158863,158864],{},"text-align:center"," 让里面内容居中显示",[24,158867,158485],{},[146,158869,158871],{"className":145115,"code":158870,"language":145117,"meta":39,"style":39},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[152,158872,158873,158891,158896,158906],{"__ignoreMap":39},[155,158874,158875,158877,158879,158881,158883,158885,158887,158889],{"class":157,"line":158},[155,158876,155],{"class":69863},[155,158878,7589],{"class":171},[155,158880,20318],{"class":69863},[155,158882,7589],{"class":171},[155,158884,43344],{"class":69863},[155,158886,7589],{"class":171},[155,158888,20234],{"class":69863},[155,158890,35397],{"class":171},[155,158892,158893],{"class":157,"line":46},[155,158894,158895],{"class":161},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[155,158897,158898,158900,158902,158904],{"class":157,"line":121},[155,158899,146731],{"class":263},[155,158901,70000],{"class":171},[155,158903,146793],{"class":263},[155,158905,21206],{"class":171},[155,158907,158908],{"class":157,"line":180},[155,158909,21475],{"class":171},[24,158911,158574],{},[146,158913,158914],{"className":145115,"code":158870,"language":145117,"meta":39,"style":39},[152,158915,158916,158934,158938,158948],{"__ignoreMap":39},[155,158917,158918,158920,158922,158924,158926,158928,158930,158932],{"class":157,"line":158},[155,158919,155],{"class":69863},[155,158921,7589],{"class":171},[155,158923,20318],{"class":69863},[155,158925,7589],{"class":171},[155,158927,43344],{"class":69863},[155,158929,7589],{"class":171},[155,158931,20234],{"class":69863},[155,158933,35397],{"class":171},[155,158935,158936],{"class":157,"line":46},[155,158937,158895],{"class":161},[155,158939,158940,158942,158944,158946],{"class":157,"line":121},[155,158941,146731],{"class":263},[155,158943,70000],{"class":171},[155,158945,146793],{"class":263},[155,158947,21206],{"class":171},[155,158949,158950],{"class":157,"line":180},[155,158951,21475],{"class":171},[24,158953,158954,158955,158958],{},"3 号盒子为 ",[152,158956,158957],{},"bargain"," 特价商品",[21052,158960,158961],{},[31,158962,158963],{},"这个比较简单，直接插入一张图片即可",[24,158965,158485],{},[146,158967,158968],{"className":145862,"code":152617,"language":145864,"meta":39,"style":39},[152,158969,158970],{"__ignoreMap":39},[155,158971,158972,158974,158976,158978,158980,158982,158984,158986,158988,158990,158992,158994],{"class":157,"line":158},[155,158973,20959],{"class":171},[155,158975,37],{"class":69863},[155,158977,73802],{"class":226},[155,158979,317],{"class":171},[155,158981,152632],{"class":732},[155,158983,73810],{"class":226},[155,158985,317],{"class":171},[155,158987,152639],{"class":732},[155,158989,152642],{"class":226},[155,158991,317],{"class":171},[155,158993,152647],{"class":732},[155,158995,69870],{"class":171},[24,158997,158574],{},[146,158999,159000],{"className":145862,"code":152617,"language":145864,"meta":39,"style":39},[152,159001,159002],{"__ignoreMap":39},[155,159003,159004,159006,159008,159010,159012,159014,159016,159018,159020,159022,159024,159026],{"class":157,"line":158},[155,159005,20959],{"class":171},[155,159007,37],{"class":69863},[155,159009,73802],{"class":226},[155,159011,317],{"class":171},[155,159013,152632],{"class":732},[155,159015,73810],{"class":226},[155,159017,317],{"class":171},[155,159019,152639],{"class":732},[155,159021,152642],{"class":226},[155,159023,317],{"class":171},[155,159025,152647],{"class":732},[155,159027,69870],{"class":171},[14,159029,159031],{"id":159030},"_1612-推荐模块制作","16.1.2 推荐模块制作",[37,159033],{"style":144971,"src":159034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[24,159036,159037,159038,159041],{},"大盒子 ",[152,159039,159040],{},"recom"," 推荐模块 recommend",[21052,159043,159044],{},[31,159045,159046,159047,159049,159050,159053],{},"给这个 ",[152,159048,159040],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[152,159051,159052],{},"#ebebeb","），设置距离上边 12px",[24,159055,158485],{},[146,159057,159059],{"className":145115,"code":159058,"language":145117,"meta":39,"style":39},"div {\n  background-color: #f0f0f0;\n}\n",[152,159060,159061,159067,159078],{"__ignoreMap":39},[155,159062,159063,159065],{"class":157,"line":158},[155,159064,70174],{"class":69863},[155,159066,35397],{"class":171},[155,159068,159069,159071,159073,159076],{"class":157,"line":46},[155,159070,89441],{"class":263},[155,159072,70000],{"class":171},[155,159074,159075],{"class":263},"#f0f0f0",[155,159077,21206],{"class":171},[155,159079,159080],{"class":157,"line":121},[155,159081,21475],{"class":171},[24,159083,158574],{},[146,159085,159086],{"className":145115,"code":159058,"language":145117,"meta":39,"style":39},[152,159087,159088,159094,159104],{"__ignoreMap":39},[155,159089,159090,159092],{"class":157,"line":158},[155,159091,70174],{"class":69863},[155,159093,35397],{"class":171},[155,159095,159096,159098,159100,159102],{"class":157,"line":46},[155,159097,89441],{"class":263},[155,159099,70000],{"class":171},[155,159101,159075],{"class":263},[155,159103,21206],{"class":171},[155,159105,159106],{"class":157,"line":121},[155,159107,21475],{"class":171},[24,159109,159110],{},"里面包含 2 个盒子， 浮动即可",[24,159112,158485],{},[146,159114,159115],{"className":145115,"code":157785,"language":145117,"meta":39,"style":39},[152,159116,159117,159123,159133],{"__ignoreMap":39},[155,159118,159119,159121],{"class":157,"line":158},[155,159120,148963],{"class":226},[155,159122,35397],{"class":171},[155,159124,159125,159127,159129,159131],{"class":157,"line":46},[155,159126,149595],{"class":263},[155,159128,70000],{"class":171},[155,159130,43527],{"class":263},[155,159132,21206],{"class":171},[155,159134,159135],{"class":157,"line":121},[155,159136,21475],{"class":171},[24,159138,159139,159140],{},"1 号盒子 ",[152,159141,159142],{},"recom_hd",[21052,159144,159145,159148],{},[31,159146,159147],{},"设置宽度205px，高度163px",[31,159149,158619,159150,159152],{},[152,159151,37],{},"标签，插入图片即可",[24,159154,158485],{},[146,159156,159157],{"className":145862,"code":152617,"language":145864,"meta":39,"style":39},[152,159158,159159],{"__ignoreMap":39},[155,159160,159161,159163,159165,159167,159169,159171,159173,159175,159177,159179,159181,159183],{"class":157,"line":158},[155,159162,20959],{"class":171},[155,159164,37],{"class":69863},[155,159166,73802],{"class":226},[155,159168,317],{"class":171},[155,159170,152632],{"class":732},[155,159172,73810],{"class":226},[155,159174,317],{"class":171},[155,159176,152639],{"class":732},[155,159178,152642],{"class":226},[155,159180,317],{"class":171},[155,159182,152647],{"class":732},[155,159184,69870],{"class":171},[24,159186,158574],{},[146,159188,159189],{"className":145862,"code":152617,"language":145864,"meta":39,"style":39},[152,159190,159191],{"__ignoreMap":39},[155,159192,159193,159195,159197,159199,159201,159203,159205,159207,159209,159211,159213,159215],{"class":157,"line":158},[155,159194,20959],{"class":171},[155,159196,37],{"class":69863},[155,159198,73802],{"class":226},[155,159200,317],{"class":171},[155,159202,152632],{"class":732},[155,159204,73810],{"class":226},[155,159206,317],{"class":171},[155,159208,152639],{"class":732},[155,159210,152642],{"class":226},[155,159212,317],{"class":171},[155,159214,152647],{"class":732},[155,159216,69870],{"class":171},[24,159218,159219,159220,159223],{},"2 号盒子 ",[152,159221,159222],{},"recom_bd"," ，注意里面的小竖线",[21052,159225,159226,159237,159240,159245,159250],{},[31,159227,159228,159229,159231,159232,159234,159235],{},"右侧结构里面放 ",[152,159230,21052],{}," 包含 4个 ",[152,159233,31],{},"，每个li里面包含一个",[152,159236,37],{},[31,159238,159239],{},"直接利用切片工具把里面的内容当成一张图片",[31,159241,157615,159242,159244],{},[152,159243,31],{}," 设置浮动",[31,159246,157615,159247,159249],{},[152,159248,37],{}," 设置宽高，宽度 248px，高度 163px",[31,159251,159252,159253,158813,159256,159258,159259,159261,159262],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[152,159254,159255],{},"top 10px",[152,159257,31],{},"设置相对定位（注意，最后一个",[152,159260,31],{},"不用设置伪元素），可以利用 ",[152,159263,159264],{},"nth-child(-n+3){...}",[24,159266,158485],{},[146,159268,159269],{"className":145115,"code":156957,"language":145117,"meta":39,"style":39},[152,159270,159271,159279,159289,159299],{"__ignoreMap":39},[155,159272,159273,159275,159277],{"class":157,"line":158},[155,159274,70174],{"class":69863},[155,159276,156116],{"class":226},[155,159278,35397],{"class":171},[155,159280,159281,159283,159285,159287],{"class":157,"line":46},[155,159282,156123],{"class":263},[155,159284,70000],{"class":171},[155,159286,15430],{"class":732},[155,159288,21206],{"class":171},[155,159290,159291,159293,159295,159297],{"class":157,"line":121},[155,159292,146731],{"class":263},[155,159294,70000],{"class":171},[155,159296,79432],{"class":263},[155,159298,21206],{"class":171},[155,159300,159301],{"class":157,"line":180},[155,159302,21475],{"class":171},[24,159304,158574],{},[146,159306,159307],{"className":145115,"code":156957,"language":145117,"meta":39,"style":39},[152,159308,159309,159317,159327,159337],{"__ignoreMap":39},[155,159310,159311,159313,159315],{"class":157,"line":158},[155,159312,70174],{"class":69863},[155,159314,156116],{"class":226},[155,159316,35397],{"class":171},[155,159318,159319,159321,159323,159325],{"class":157,"line":46},[155,159320,156123],{"class":263},[155,159322,70000],{"class":171},[155,159324,15430],{"class":732},[155,159326,21206],{"class":171},[155,159328,159329,159331,159333,159335],{"class":157,"line":121},[155,159330,146731],{"class":263},[155,159332,70000],{"class":171},[155,159334,79432],{"class":263},[155,159336,21206],{"class":171},[155,159338,159339],{"class":157,"line":180},[155,159340,21475],{"class":171},[14,159342,159344],{"id":159343},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[37,159346],{"style":144971,"src":159347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[24,159349,159350],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[24,159352,159353],{},"第一楼是家用电器模块： 里面包含两个盒子",[24,159355,159356,159359],{},[152,159357,159358],{},"box_hd"," 制作",[24,159361,159139,159362,159364],{},[152,159363,159358],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[37,159366],{"style":144971,"src":159367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[21052,159369,159370,159375,159380,159383],{},[31,159371,159372,159374],{},[152,159373,159358],{}," 给 30px 的高度，2个像素的下边框",[31,159376,159377,159378],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[152,159379,157626],{},[31,159381,159382],{},"左侧盒左浮动，右侧盒子右浮动",[31,159384,159385,159387,159388,159390],{},[152,159386,20318],{},"标签之间的距离用左右的",[152,159389,355],{},"撑开即可",[24,159392,159393],{},"结构代码",[146,159395,159396],{"className":145115,"code":157785,"language":145117,"meta":39,"style":39},[152,159397,159398,159404,159414],{"__ignoreMap":39},[155,159399,159400,159402],{"class":157,"line":158},[155,159401,148963],{"class":226},[155,159403,35397],{"class":171},[155,159405,159406,159408,159410,159412],{"class":157,"line":46},[155,159407,149595],{"class":263},[155,159409,70000],{"class":171},[155,159411,43527],{"class":263},[155,159413,21206],{"class":171},[155,159415,159416],{"class":157,"line":121},[155,159417,21475],{"class":171},[24,159419,159420],{},"样式代码",[146,159422,159423],{"className":145115,"code":157785,"language":145117,"meta":39,"style":39},[152,159424,159425,159431,159441],{"__ignoreMap":39},[155,159426,159427,159429],{"class":157,"line":158},[155,159428,148963],{"class":226},[155,159430,35397],{"class":171},[155,159432,159433,159435,159437,159439],{"class":157,"line":46},[155,159434,149595],{"class":263},[155,159436,70000],{"class":171},[155,159438,43527],{"class":263},[155,159440,21206],{"class":171},[155,159442,159443],{"class":157,"line":121},[155,159444,21475],{"class":171},[24,159446,159447,159359],{},[152,159448,159449],{},"box_bd",[24,159451,159452],{},"2 号盒子 box_bd，不要给高度",[37,159454],{"style":144971,"src":159455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[24,159457,159458],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[24,159460,159461],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[24,159463,159464],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[21052,159466,159467,159479,159495],{},[31,159468,159469,159471,159472,159475,159476,159478],{},[152,159470,159449],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[152,159473,159474],{},"tab_content","，在",[152,159477,159474],{}," 里面包裹tab选项卡对应的内容",[31,159480,159481,159482,159485,159486,159488,159489,159491,159492,159494],{},"内容被一个大盒子包裹（",[152,159483,159484],{},"tab_list_item","），里面是 ",[152,159487,21052],{}," 包裹 5个 ",[152,159490,31],{},"，每个",[152,159493,31],{},"设置对应的宽度，然后设置浮动",[31,159496,159497,159498,159500,159501,159503,159504],{},"而这5个",[152,159499,31],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[152,159502,31],{},"设置",[21052,159505,159506,159524,159527],{},[31,159507,159508,159509,159511,159512,159514,159515,159517,159518,159520,159521,159523],{},"第一个小 ",[152,159510,31],{}," 分为上下结构，上面是 ",[152,159513,21052],{}," 包裹 ",[152,159516,31],{}," ，",[152,159519,31],{},"里面包裹 ",[152,159522,20318],{},"，下面插入一张图片",[31,159525,159526],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[31,159528,159529,159530,159532,159533,159535,159536,159538],{},"后面的小 ",[152,159531,31],{}," 里面先放一个",[152,159534,20318],{},"标签，然后在",[152,159537,20318],{},"标签里面插入图片即可",[24,159540,159393],{},[146,159542,159543],{"className":145862,"code":152617,"language":145864,"meta":39,"style":39},[152,159544,159545],{"__ignoreMap":39},[155,159546,159547,159549,159551,159553,159555,159557,159559,159561,159563,159565,159567,159569],{"class":157,"line":158},[155,159548,20959],{"class":171},[155,159550,37],{"class":69863},[155,159552,73802],{"class":226},[155,159554,317],{"class":171},[155,159556,152632],{"class":732},[155,159558,73810],{"class":226},[155,159560,317],{"class":171},[155,159562,152639],{"class":732},[155,159564,152642],{"class":226},[155,159566,317],{"class":171},[155,159568,152647],{"class":732},[155,159570,69870],{"class":171},[24,159572,159420],{},[146,159574,159575],{"className":145862,"code":152617,"language":145864,"meta":39,"style":39},[152,159576,159577],{"__ignoreMap":39},[155,159578,159579,159581,159583,159585,159587,159589,159591,159593,159595,159597,159599,159601],{"class":157,"line":158},[155,159580,20959],{"class":171},[155,159582,37],{"class":69863},[155,159584,73802],{"class":226},[155,159586,317],{"class":171},[155,159588,152632],{"class":732},[155,159590,73810],{"class":226},[155,159592,317],{"class":171},[155,159594,152639],{"class":732},[155,159596,152642],{"class":226},[155,159598,317],{"class":171},[155,159600,152647],{"class":732},[155,159602,69870],{"class":171},[24,159604,159605],{},"tab栏切换需求！！！！！！介绍：",[37,159607],{"style":144971,"src":159608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[21052,159610,159611,159619,159625,159628],{},[31,159612,159613,159616,159617],{},[152,159614,159615],{},"tab","栏的布局是 ",[152,159618,157626],{},[31,159620,159621,159622,159624],{},"有多少个",[152,159623,159615],{},"选项卡，那么对应就有多少个内容",[31,159626,159627],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[31,159629,159630,159631,159634,159635,159637,159638,159640],{},"等后面我们学习了",[152,159632,159633],{},"js","之后，我们就会配合",[152,159636,159633],{},"来实现，",[152,159639,159615],{},"栏的切换",[20037,159642,159644],{"id":159643},"_162-列表制作","16.2 列表制作",[14,159646,159648],{"id":159647},"_1621-准备工作","16.2.1 准备工作",[21052,159650,159651,159654,159657,159660],{},[31,159652,159653],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[31,159655,159656],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[31,159658,159659],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[31,159661,159662],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[14,159664,159666,159667,119581,159669,159671],{"id":159665},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[152,159668,150120],{},[152,159670,72276],{}," 修改",[37,159673],{"style":144971,"src":159674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[21052,159676,159677],{},[31,159678,159679],{},"秒杀盒子 sk（ second kill ） 定位即可",[24,159681,158485],{},[146,159683,159684],{"className":145115,"code":150547,"language":145117,"meta":39,"style":39},[152,159685,159686,159690,159704,159708,159722,159726,159740,159744,159758,159762],{"__ignoreMap":39},[155,159687,159688],{"class":157,"line":158},[155,159689,150554],{"class":161},[155,159691,159692,159694,159696,159698,159700,159702],{"class":157,"line":46},[155,159693,150559],{"class":226},[155,159695,98370],{"class":171},[155,159697,147475],{"class":263},[155,159699,70000],{"class":171},[155,159701,150568],{"class":263},[155,159703,148045],{"class":171},[155,159705,159706],{"class":157,"line":121},[155,159707,150575],{"class":161},[155,159709,159710,159712,159714,159716,159718,159720],{"class":157,"line":180},[155,159711,150580],{"class":226},[155,159713,98370],{"class":171},[155,159715,147475],{"class":263},[155,159717,70000],{"class":171},[155,159719,73327],{"class":263},[155,159721,148045],{"class":171},[155,159723,159724],{"class":157,"line":194},[155,159725,150595],{"class":161},[155,159727,159728,159730,159732,159734,159736,159738],{"class":157,"line":200},[155,159729,150600],{"class":226},[155,159731,98370],{"class":171},[155,159733,147475],{"class":263},[155,159735,70000],{"class":171},[155,159737,73394],{"class":263},[155,159739,148045],{"class":171},[155,159741,159742],{"class":157,"line":213},[155,159743,150615],{"class":161},[155,159745,159746,159748,159750,159752,159754,159756],{"class":157,"line":220},[155,159747,150620],{"class":226},[155,159749,98370],{"class":171},[155,159751,147475],{"class":263},[155,159753,70000],{"class":171},[155,159755,104796],{"class":263},[155,159757,148045],{"class":171},[155,159759,159760],{"class":157,"line":245},[155,159761,150635],{"class":161},[155,159763,159764,159766,159768,159770,159772,159774],{"class":157,"line":251},[155,159765,150640],{"class":226},[155,159767,98370],{"class":171},[155,159769,147475],{"class":263},[155,159771,70000],{"class":171},[155,159773,150649],{"class":263},[155,159775,148045],{"class":171},[24,159777,158574],{},[146,159779,159780],{"className":145115,"code":150547,"language":145117,"meta":39,"style":39},[152,159781,159782,159786,159800,159804,159818,159822,159836,159840,159854,159858],{"__ignoreMap":39},[155,159783,159784],{"class":157,"line":158},[155,159785,150554],{"class":161},[155,159787,159788,159790,159792,159794,159796,159798],{"class":157,"line":46},[155,159789,150559],{"class":226},[155,159791,98370],{"class":171},[155,159793,147475],{"class":263},[155,159795,70000],{"class":171},[155,159797,150568],{"class":263},[155,159799,148045],{"class":171},[155,159801,159802],{"class":157,"line":121},[155,159803,150575],{"class":161},[155,159805,159806,159808,159810,159812,159814,159816],{"class":157,"line":180},[155,159807,150580],{"class":226},[155,159809,98370],{"class":171},[155,159811,147475],{"class":263},[155,159813,70000],{"class":171},[155,159815,73327],{"class":263},[155,159817,148045],{"class":171},[155,159819,159820],{"class":157,"line":194},[155,159821,150595],{"class":161},[155,159823,159824,159826,159828,159830,159832,159834],{"class":157,"line":200},[155,159825,150600],{"class":226},[155,159827,98370],{"class":171},[155,159829,147475],{"class":263},[155,159831,70000],{"class":171},[155,159833,73394],{"class":263},[155,159835,148045],{"class":171},[155,159837,159838],{"class":157,"line":213},[155,159839,150615],{"class":161},[155,159841,159842,159844,159846,159848,159850,159852],{"class":157,"line":220},[155,159843,150620],{"class":226},[155,159845,98370],{"class":171},[155,159847,147475],{"class":263},[155,159849,70000],{"class":171},[155,159851,104796],{"class":263},[155,159853,148045],{"class":171},[155,159855,159856],{"class":157,"line":245},[155,159857,150635],{"class":161},[155,159859,159860,159862,159864,159866,159868,159870],{"class":157,"line":251},[155,159861,150640],{"class":226},[155,159863,98370],{"class":171},[155,159865,147475],{"class":263},[155,159867,70000],{"class":171},[155,159869,150649],{"class":263},[155,159871,148045],{"class":171},[21052,159873,159874,159885],{},[31,159875,159876,159877,159880,159881,119581,159883],{},"1 号盒子左侧浮动 ",[152,159878,159879],{},"sk_list"," 里面包含 ",[152,159882,21052],{},[152,159884,31],{},[31,159886,159887,159888,159880,159891,119581,159893],{},"2 号盒子左侧浮动 ",[152,159889,159890],{},"sk_con",[152,159892,21052],{},[152,159894,31],{},[24,159896,158485],{},[146,159898,159899],{"className":145115,"code":157785,"language":145117,"meta":39,"style":39},[152,159900,159901,159907,159917],{"__ignoreMap":39},[155,159902,159903,159905],{"class":157,"line":158},[155,159904,148963],{"class":226},[155,159906,35397],{"class":171},[155,159908,159909,159911,159913,159915],{"class":157,"line":46},[155,159910,149595],{"class":263},[155,159912,70000],{"class":171},[155,159914,43527],{"class":263},[155,159916,21206],{"class":171},[155,159918,159919],{"class":157,"line":121},[155,159920,21475],{"class":171},[24,159922,158574],{},[146,159924,159925],{"className":145115,"code":157785,"language":145117,"meta":39,"style":39},[152,159926,159927,159933,159943],{"__ignoreMap":39},[155,159928,159929,159931],{"class":157,"line":158},[155,159930,148963],{"class":226},[155,159932,35397],{"class":171},[155,159934,159935,159937,159939,159941],{"class":157,"line":46},[155,159936,149595],{"class":263},[155,159938,70000],{"class":171},[155,159940,43527],{"class":263},[155,159942,21206],{"class":171},[155,159944,159945],{"class":157,"line":121},[155,159946,21475],{"class":171},[14,159948,159950,159951],{"id":159949},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[152,159952,159953],{},"sk_container",[37,159955],{"style":144971,"src":159956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[21052,159958,159959,159964],{},[31,159960,159139,159961,159963],{},[152,159962,159953],{}," 给宽度 1200，不要给高度",[31,159965,159966],{},"一定不要忘记清除浮动",[24,159968,158485],{},[146,159970,159971],{"className":145115,"code":157785,"language":145117,"meta":39,"style":39},[152,159972,159973,159979,159989],{"__ignoreMap":39},[155,159974,159975,159977],{"class":157,"line":158},[155,159976,148963],{"class":226},[155,159978,35397],{"class":171},[155,159980,159981,159983,159985,159987],{"class":157,"line":46},[155,159982,149595],{"class":263},[155,159984,70000],{"class":171},[155,159986,43527],{"class":263},[155,159988,21206],{"class":171},[155,159990,159991],{"class":157,"line":121},[155,159992,21475],{"class":171},[28,159994,159995],{},[31,159996,159997],{},"sk_hd制作",[21052,159999,160000],{},[31,160001,159219,160002,160005],{},[152,160003,160004],{},"sk_hd"," ，插入图片即可",[24,160007,158485],{},[146,160009,160010],{"className":145862,"code":152617,"language":145864,"meta":39,"style":39},[152,160011,160012],{"__ignoreMap":39},[155,160013,160014,160016,160018,160020,160022,160024,160026,160028,160030,160032,160034,160036],{"class":157,"line":158},[155,160015,20959],{"class":171},[155,160017,37],{"class":69863},[155,160019,73802],{"class":226},[155,160021,317],{"class":171},[155,160023,152632],{"class":732},[155,160025,73810],{"class":226},[155,160027,317],{"class":171},[155,160029,152639],{"class":732},[155,160031,152642],{"class":226},[155,160033,317],{"class":171},[155,160035,152647],{"class":732},[155,160037,69870],{"class":171},[28,160039,160040],{"start":46},[31,160041,160042],{},"sk_bd制作",[21052,160044,160045],{},[31,160046,160047,160048,160051,160052,119581,160054,160056],{},"3 号盒子 ",[152,160049,160050],{},"sk_bd"," ，里面包含很多的 ",[152,160053,21052],{},[152,160055,31],{},[21052,160057,160058,160067],{},[31,160059,160060,160061,160063,160064,160066],{},"当鼠标移入到 ",[152,160062,31],{}," 上面的时候显示红色的边框，在这里先给 ",[152,160065,31],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[31,160068,160069,160070,160072,160073,160075,160076,160079,160080,160082],{},"由于给每个 ",[152,160071,31],{}," 都设置了外边距，导致一行的最后一个 ",[152,160074,31],{}," 掉了下来，在这里我们利用 ",[152,160077,160078],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[152,160081,31],{},"，去掉外边距就好了",[24,160084,158485],{},[146,160086,160087],{"className":145115,"code":157304,"language":145117,"meta":39,"style":39},[152,160088,160089,160095,160107],{"__ignoreMap":39},[155,160090,160091,160093],{"class":157,"line":158},[155,160092,70174],{"class":69863},[155,160094,35397],{"class":171},[155,160096,160097,160099,160101,160103,160105],{"class":157,"line":46},[155,160098,89033],{"class":263},[155,160100,70000],{"class":171},[155,160102,1109],{"class":263},[155,160104,70119],{"class":263},[155,160106,21206],{"class":171},[155,160108,160109],{"class":157,"line":121},[155,160110,21475],{"class":171},[24,160112,158574],{},[146,160114,160115],{"className":145115,"code":157304,"language":145117,"meta":39,"style":39},[152,160116,160117,160123,160135],{"__ignoreMap":39},[155,160118,160119,160121],{"class":157,"line":158},[155,160120,70174],{"class":69863},[155,160122,35397],{"class":171},[155,160124,160125,160127,160129,160131,160133],{"class":157,"line":46},[155,160126,89033],{"class":263},[155,160128,70000],{"class":171},[155,160130,1109],{"class":263},[155,160132,70119],{"class":263},[155,160134,21206],{"class":171},[155,160136,160137],{"class":157,"line":121},[155,160138,21475],{"class":171},[20037,160140,160142],{"id":160141},"_163-注册页面制作","16.3 注册页面制作",[37,160144],{"style":144971,"src":160145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[24,160147,160148,160150],{},[20234,160149,28874],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[37,160152],{"style":144971,"src":160153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[14,160155,160157],{"id":160156},"_1631-准备工作","16.3.1 准备工作",[21052,160159,160160,160163],{},[31,160161,160162],{},"创建register.html，引入 base.css，引入favicon图标",[31,160164,160165],{},"创建register.css ，在html页面进行引入",[14,160167,160169,160170,160172],{"id":160168},"_1632-header-头部实现","16.3.2 ",[152,160171,150120],{}," 头部实现",[21052,160174,160175,160178],{},[31,160176,160177],{},"整个内容用 版心 进行包裹",[31,160179,160180],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[24,160182,158485],{},[146,160184,160185],{"className":145862,"code":152617,"language":145864,"meta":39,"style":39},[152,160186,160187],{"__ignoreMap":39},[155,160188,160189,160191,160193,160195,160197,160199,160201,160203,160205,160207,160209,160211],{"class":157,"line":158},[155,160190,20959],{"class":171},[155,160192,37],{"class":69863},[155,160194,73802],{"class":226},[155,160196,317],{"class":171},[155,160198,152632],{"class":732},[155,160200,73810],{"class":226},[155,160202,317],{"class":171},[155,160204,152639],{"class":732},[155,160206,152642],{"class":226},[155,160208,317],{"class":171},[155,160210,152647],{"class":732},[155,160212,69870],{"class":171},[24,160214,158574],{},[146,160216,160217],{"className":145862,"code":152617,"language":145864,"meta":39,"style":39},[152,160218,160219],{"__ignoreMap":39},[155,160220,160221,160223,160225,160227,160229,160231,160233,160235,160237,160239,160241,160243],{"class":157,"line":158},[155,160222,20959],{"class":171},[155,160224,37],{"class":69863},[155,160226,73802],{"class":226},[155,160228,317],{"class":171},[155,160230,152632],{"class":732},[155,160232,73810],{"class":226},[155,160234,317],{"class":171},[155,160236,152639],{"class":732},[155,160238,152642],{"class":226},[155,160240,317],{"class":171},[155,160242,152647],{"class":732},[155,160244,69870],{"class":171},[14,160246,160248,160249,160252],{"id":160247},"_1633-registerarea-主体模块实现","16.3.3 ",[152,160250,160251],{},"registerarea"," 主体模块实现",[37,160254],{"style":144971,"src":160255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[24,160257,160258],{},"整个大盒子 高度为 522px，设置4个边框",[24,160260,158485],{},[146,160262,160263],{"className":145115,"code":149272,"language":145117,"meta":39,"style":39},[152,160264,160265,160271,160287],{"__ignoreMap":39},[155,160266,160267,160269],{"class":157,"line":158},[155,160268,70174],{"class":69863},[155,160270,35397],{"class":171},[155,160272,160273,160275,160277,160279,160281,160283,160285],{"class":157,"line":46},[155,160274,89459],{"class":263},[155,160276,70000],{"class":171},[155,160278,329],{"class":263},[155,160280,70055],{"class":167},[155,160282,70084],{"class":263},[155,160284,148507],{"class":263},[155,160286,21206],{"class":171},[155,160288,160289],{"class":157,"line":121},[155,160290,21475],{"class":171},[24,160292,158574],{},[146,160294,160295],{"className":145115,"code":149272,"language":145117,"meta":39,"style":39},[152,160296,160297,160303,160319],{"__ignoreMap":39},[155,160298,160299,160301],{"class":157,"line":158},[155,160300,70174],{"class":69863},[155,160302,35397],{"class":171},[155,160304,160305,160307,160309,160311,160313,160315,160317],{"class":157,"line":46},[155,160306,89459],{"class":263},[155,160308,70000],{"class":171},[155,160310,329],{"class":263},[155,160312,70055],{"class":167},[155,160314,70084],{"class":263},[155,160316,148507],{"class":263},[155,160318,21206],{"class":171},[155,160320,160321],{"class":157,"line":121},[155,160322,21475],{"class":171},[24,160324,160325],{},"1号盒子 是一个 h3 标签，放标题",[21052,160327,160328],{},[31,160329,160330],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[24,160332,158485],{},[146,160334,160335],{"className":145115,"code":157785,"language":145117,"meta":39,"style":39},[152,160336,160337,160343,160353],{"__ignoreMap":39},[155,160338,160339,160341],{"class":157,"line":158},[155,160340,148963],{"class":226},[155,160342,35397],{"class":171},[155,160344,160345,160347,160349,160351],{"class":157,"line":46},[155,160346,149595],{"class":263},[155,160348,70000],{"class":171},[155,160350,43527],{"class":263},[155,160352,21206],{"class":171},[155,160354,160355],{"class":157,"line":121},[155,160356,21475],{"class":171},[24,160358,158574],{},[146,160360,160361],{"className":145115,"code":157785,"language":145117,"meta":39,"style":39},[152,160362,160363,160369,160379],{"__ignoreMap":39},[155,160364,160365,160367],{"class":157,"line":158},[155,160366,148963],{"class":226},[155,160368,35397],{"class":171},[155,160370,160371,160373,160375,160377],{"class":157,"line":46},[155,160372,149595],{"class":263},[155,160374,70000],{"class":171},[155,160376,43527],{"class":263},[155,160378,21206],{"class":171},[155,160380,160381],{"class":157,"line":121},[155,160382,21475],{"class":171},[24,160384,160385],{},"2号盒子 里面放注册的内容",[21052,160387,160388,160391,160400,160414,160427,160430,160433,160451,160465],{},[31,160389,160390],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[31,160392,160393,160394,160396,160397,160399],{},"里面的内容利用 ",[152,160395,21052],{}," 包含 ",[152,160398,31],{}," 来实现的（不需要用表格）",[31,160401,157629,160402,160404,160405,160407,160408,160410,160411,160413],{},[152,160403,31],{}," 里面，左侧放 ",[152,160406,3212],{}," 标签， 中间放",[152,160409,72384],{}," 标签， 右侧放 ",[152,160412,155],{}," 提示信息",[31,160415,160416,160417,160419,160420,160422,160423,160426],{},"左侧 ",[152,160418,3212],{},"里面的文字都是右对齐，我们可以给",[152,160421,3212],{},"设置一个宽度（88px），然后利用",[152,160424,160425],{},"text-align"," 来设置右对齐",[31,160428,160429],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[31,160431,160432],{},"右侧 span修饰一下文字颜色",[31,160434,160435,160436],{},"提示信息的样式优化",[21052,160437,160438,160441,160444],{},[31,160439,160440],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[31,160442,160443],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[31,160445,160446,160447,160450],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[152,160448,160449],{},"vertical-algin"," 来设置 图片与文字对齐方式",[31,160452,160453,160454],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[21052,160455,160456,160462],{},[31,160457,160458,160459,160461],{},"设置 ",[152,160460,43344],{}," 的 左右 12px 的内边距，设置一下文字颜色",[31,160463,160464],{},"分别设置 背景颜色",[31,160466,160467,160468,160470],{},"同意协议 和 完成注册 都是用 ",[152,160469,31],{}," 进行包裹",[24,160472,158485],{},[146,160474,160475],{"className":145115,"code":159058,"language":145117,"meta":39,"style":39},[152,160476,160477,160483,160493],{"__ignoreMap":39},[155,160478,160479,160481],{"class":157,"line":158},[155,160480,70174],{"class":69863},[155,160482,35397],{"class":171},[155,160484,160485,160487,160489,160491],{"class":157,"line":46},[155,160486,89441],{"class":263},[155,160488,70000],{"class":171},[155,160490,159075],{"class":263},[155,160492,21206],{"class":171},[155,160494,160495],{"class":157,"line":121},[155,160496,21475],{"class":171},[24,160498,158574],{},[146,160500,160501],{"className":145115,"code":159058,"language":145117,"meta":39,"style":39},[152,160502,160503,160509,160519],{"__ignoreMap":39},[155,160504,160505,160507],{"class":157,"line":158},[155,160506,70174],{"class":69863},[155,160508,35397],{"class":171},[155,160510,160511,160513,160515,160517],{"class":157,"line":46},[155,160512,89441],{"class":263},[155,160514,70000],{"class":171},[155,160516,159075],{"class":263},[155,160518,21206],{"class":171},[155,160520,160521],{"class":157,"line":121},[155,160522,21475],{"class":171},[14,160524,160526],{"id":160525},"_1634-底部实现","16.3.4 底部实现",[24,160528,158485],{},[146,160530,160531],{"className":145115,"code":159058,"language":145117,"meta":39,"style":39},[152,160532,160533,160539,160549],{"__ignoreMap":39},[155,160534,160535,160537],{"class":157,"line":158},[155,160536,70174],{"class":69863},[155,160538,35397],{"class":171},[155,160540,160541,160543,160545,160547],{"class":157,"line":46},[155,160542,89441],{"class":263},[155,160544,70000],{"class":171},[155,160546,159075],{"class":263},[155,160548,21206],{"class":171},[155,160550,160551],{"class":157,"line":121},[155,160552,21475],{"class":171},[24,160554,158574],{},[146,160556,160557],{"className":145862,"code":149219,"language":145864,"meta":39,"style":39},[152,160558,160559,160563,160577,160581],{"__ignoreMap":39},[155,160560,160561],{"class":157,"line":158},[155,160562,149226],{"class":161},[155,160564,160565,160567,160569,160571,160573,160575],{"class":157,"line":46},[155,160566,20959],{"class":171},[155,160568,70174],{"class":69863},[155,160570,72049],{"class":226},[155,160572,317],{"class":171},[155,160574,149239],{"class":732},[155,160576,69870],{"class":171},[155,160578,160579],{"class":157,"line":121},[155,160580,149246],{"class":171},[155,160582,160583,160585,160587],{"class":157,"line":180},[155,160584,70348],{"class":171},[155,160586,70174],{"class":69863},[155,160588,69870],{"class":171},[20037,160590,160592],{"id":160591},"_164-项目总结","16.4 项目总结",[28,160594,160595,160598,160601,160604],{},[31,160596,160597],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[31,160599,160600],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[31,160602,160603],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[31,160605,160606],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[37,160608],{"style":144971,"src":160609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[28,160611,160612],{"start":194},[31,160613,160614],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[37,160616],{"style":144971,"src":160617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[28,160619,160620],{"start":200},[31,160621,160622],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[37,160624],{"style":144971,"src":160625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[146,160627,160628],{"className":145862,"code":155272,"language":145864,"meta":39,"style":39},[152,160629,160630],{"__ignoreMap":39},[155,160631,160632,160634,160636,160638,160640,160642,160644,160646,160648,160650,160652,160654],{"class":157,"line":158},[155,160633,20959],{"class":171},[155,160635,72384],{"class":69863},[155,160637,72387],{"class":226},[155,160639,317],{"class":171},[155,160641,81262],{"class":732},[155,160643,34745],{"class":226},[155,160645,317],{"class":171},[155,160647,155293],{"class":732},[155,160649,79583],{"class":226},[155,160651,317],{"class":171},[155,160653,155300],{"class":732},[155,160655,69870],{"class":171},[28,160657,160658,160661],{"start":213},[31,160659,160660],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[31,160662,160663],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[20011,160665,160666],{},"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":39,"searchDepth":46,"depth":46,"links":160668},[160669,160674,160681,160689],{"id":158295,"depth":46,"text":158296,"children":160670},[160671,160672,160673],{"id":158299,"depth":121,"text":158300},{"id":159030,"depth":121,"text":159031},{"id":159343,"depth":121,"text":159344},{"id":159643,"depth":46,"text":159644,"children":160675},[160676,160677,160679],{"id":159647,"depth":121,"text":159648},{"id":159665,"depth":121,"text":160678},"16.2.2 列表页 header 和 nav 修改",{"id":159949,"depth":121,"text":160680},"16.2.3 列表页主体 sk_container",{"id":160141,"depth":46,"text":160142,"children":160682},[160683,160684,160686,160688],{"id":160156,"depth":121,"text":160157},{"id":160168,"depth":121,"text":160685},"16.3.2 header 头部实现",{"id":160247,"depth":121,"text":160687},"16.3.3 registerarea 主体模块实现",{"id":160525,"depth":121,"text":160526},{"id":160591,"depth":46,"text":160592},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":158287,"description":20020},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":160696,"title":160697,"body":160698,"description":20020,"extension":20021,"meta":160806,"navigation":216,"path":160807,"seo":160808,"stem":160809,"__hash__":160810},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":160699,"toc":160801},[160700,160703,160707,160710,160713,160722,160731,160735,160740,160747,160765,160768,160771,160774,160777,160780,160783,160786,160789,160792,160795,160798],[10,160701,160697],{"id":160702},"_17-web服务器与网站发布",[20037,160704,160706],{"id":160705},"_171-web服务器","17.1 Web服务器",[24,160708,160709],{},"把自己网站上传到服务器上，可以让其他人访问",[37,160711],{"style":144971,"src":160712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[24,160714,160715,160718,160719],{},[20234,160716,160717],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[20234,160720,160721],{},"Web 服务器等",[24,160723,160724,160725,119581,160728,45530],{},"根据服务器在网络中所在的位置不同，又可分为 ",[20234,160726,160727],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[20234,160729,160730],{},"远程服务器",[14,160732,160734],{"id":160733},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[24,160736,160737],{},[20234,160738,160739],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[24,160741,160742,160743],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[20318,160744,160745],{"href":160745,"rel":160746},"http:\u002F\u002Ffree.3v.do\u002F",[43656],[21052,160748,160749,160752,160755,160762],{},[31,160750,160751],{},"去免费空间网站注册账号。",[31,160753,160754],{},"记录下主机名、用户名、密码、域名。",[31,160756,160757,160758,160761],{},"利用 ",[152,160759,160760],{},"utftp"," 软件 上传网站到远程服务器",[31,160763,160764],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[24,160766,160767],{},"使用软件上传，对上传软件文件进行解压",[37,160769],{"style":144971,"src":160770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[37,160772],{"style":144971,"src":160773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[24,160775,160776],{},"输入刚刚申请的服务器账号信息：",[37,160778],{"style":144971,"src":160779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[37,160781],{"style":144971,"src":160782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[37,160784],{"style":144971,"src":160785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[37,160787],{"style":144971,"src":160788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[24,160790,160791],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[37,160793],{"style":144971,"src":160794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[24,160796,160797],{},"浏览器输入域名即可访问",[24,160799,160800],{},"首页一定必须是index",{"title":39,"searchDepth":46,"depth":46,"links":160802},[160803],{"id":160705,"depth":46,"text":160706,"children":160804},[160805],{"id":160733,"depth":121,"text":160734},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":160697,"description":20020},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":160812,"title":160813,"body":160814,"description":20020,"extension":20021,"meta":161741,"navigation":216,"path":161742,"seo":161743,"stem":161744,"__hash__":161745},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":160815,"toc":161724},[160816,160819,160823,160826,160829,160840,160843,160847,160851,160856,160859,160862,160865,160868,160872,160898,160902,160906,160909,160912,160916,160949,160953,160956,160959,161023,161027,161031,161034,161037,161040,161044,161089,161093,161096,161126,161130,161134,161137,161140,161144,161147,161216,161219,161327,161329,161335,161339,161342,161345,161441,161444,161448,161472,161476,161479,161483,161486,161490,161493,161496,161499,161502,161506,161509,161512,161516,161520,161523,161526,161529,161532,161536,161539,161543,161546,161549,161594,161598,161602,161605,161608,161611,161643,161647,161650,161684,161688,161691,161721],[10,160817,160813],{"id":160818},"_18-2d动画与3d转换",[20037,160820,160822],{"id":160821},"_181-css3-2d转换","18.1 CSS3 2D转换",[24,160824,160825],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[24,160827,160828],{},"转换（transform）你可以简单理解为变形",[21052,160830,160831,160834,160837],{},[31,160832,160833],{},"移动：translate",[31,160835,160836],{},"旋转：rotate",[31,160838,160839],{},"缩放：scale",[37,160841],{"style":144971,"src":160842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[14,160844,160846],{"id":160845},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[19,160848,160850],{"id":160849},"_18111-translate介绍","18.1.1.1 translate介绍",[24,160852,160853,160854],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[20234,160855,151774],{},[37,160857],{"style":144971,"src":160858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[24,160860,160861],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[24,160863,160864],{},"对于行内元素无效",[24,160866,160867],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[19,160869,160871],{"id":160870},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[146,160873,160874],{"className":145115,"code":157304,"language":145117,"meta":39,"style":39},[152,160875,160876,160882,160894],{"__ignoreMap":39},[155,160877,160878,160880],{"class":157,"line":158},[155,160879,70174],{"class":69863},[155,160881,35397],{"class":171},[155,160883,160884,160886,160888,160890,160892],{"class":157,"line":46},[155,160885,89033],{"class":263},[155,160887,70000],{"class":171},[155,160889,1109],{"class":263},[155,160891,70119],{"class":263},[155,160893,21206],{"class":171},[155,160895,160896],{"class":157,"line":121},[155,160897,21475],{"class":171},[14,160899,160901],{"id":160900},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[19,160903,160905],{"id":160904},"_18121-rotate介绍","18.1.2.1 rotate介绍",[24,160907,160908],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[37,160910],{"style":144971,"src":160911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[19,160913,160915],{"id":160914},"_18122-旋转效果","18.1.2.2 旋转效果",[146,160917,160919],{"className":145115,"code":160918,"language":145117,"meta":39,"style":39},"div {\n  transform: rotate(45deg);\n}\n",[152,160920,160921,160927,160945],{"__ignoreMap":39},[155,160922,160923,160925],{"class":157,"line":158},[155,160924,70174],{"class":69863},[155,160926,35397],{"class":171},[155,160928,160929,160931,160933,160936,160938,160940,160943],{"class":157,"line":46},[155,160930,155099],{"class":263},[155,160932,70000],{"class":171},[155,160934,160935],{"class":263},"rotate",[155,160937,230],{"class":171},[155,160939,20595],{"class":263},[155,160941,160942],{"class":167},"deg",[155,160944,22596],{"class":171},[155,160946,160947],{"class":157,"line":121},[155,160948,21475],{"class":171},[19,160950,160952],{"id":160951},"_18123-三角做法","18.1.2.3 三角做法",[24,160954,160955],{},"该下标当经过最外层大盒子时会实现向上反转",[37,160957],{"style":144971,"src":160958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[146,160960,160961],{"className":145115,"code":153635,"language":145117,"meta":39,"style":39},[152,160962,160963,160967,160973,160983,160993,161009,161019],{"__ignoreMap":39},[155,160964,160965],{"class":157,"line":158},[155,160966,153642],{"class":161},[155,160968,160969,160971],{"class":157,"line":46},[155,160970,153647],{"class":226},[155,160972,35397],{"class":171},[155,160974,160975,160977,160979,160981],{"class":157,"line":121},[155,160976,89131],{"class":263},[155,160978,70000],{"class":171},[155,160980,1109],{"class":263},[155,160982,21206],{"class":171},[155,160984,160985,160987,160989,160991],{"class":157,"line":180},[155,160986,89351],{"class":263},[155,160988,70000],{"class":171},[155,160990,1109],{"class":263},[155,160992,21206],{"class":171},[155,160994,160995,160997,160999,161001,161003,161005,161007],{"class":157,"line":194},[155,160996,89459],{"class":263},[155,160998,70000],{"class":171},[155,161000,565],{"class":263},[155,161002,70055],{"class":167},[155,161004,70084],{"class":263},[155,161006,82554],{"class":263},[155,161008,21206],{"class":171},[155,161010,161011,161013,161015,161017],{"class":157,"line":200},[155,161012,153690],{"class":263},[155,161014,70000],{"class":171},[155,161016,80932],{"class":263},[155,161018,21206],{"class":171},[155,161020,161021],{"class":157,"line":213},[155,161022,21475],{"class":171},[14,161024,161026],{"id":161025},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[19,161028,161030],{"id":161029},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[24,161032,161033],{},"设置中心点",[37,161035],{"style":144971,"src":161036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[24,161038,161039],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[19,161041,161043],{"id":161042},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[146,161045,161047],{"className":145115,"code":161046,"language":145117,"meta":39,"style":39},"\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",[152,161048,161049,161054,161060,161075,161080,161085],{"__ignoreMap":39},[155,161050,161051],{"class":157,"line":158},[155,161052,161053],{"class":161},"\u002F* 转换中心点 *\u002F\n",[155,161055,161056,161058],{"class":157,"line":46},[155,161057,70174],{"class":69863},[155,161059,35397],{"class":171},[155,161061,161062,161065,161067,161069,161071,161073],{"class":157,"line":121},[155,161063,161064],{"class":263},"  transform-origin",[155,161066,70000],{"class":171},[155,161068,70155],{"class":263},[155,161070,36937],{"class":263},[155,161072,148978],{"class":171},[155,161074,153788],{"class":161},[155,161076,161077],{"class":157,"line":180},[155,161078,161079],{"class":161},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[155,161081,161082],{"class":157,"line":194},[155,161083,161084],{"class":161},"  \u002F* transform-origin: left top; *\u002F\n",[155,161086,161087],{"class":157,"line":200},[155,161088,21475],{"class":171},[19,161090,161092],{"id":161091},"_18133-旋转案例","18.1.3.3 旋转案例",[37,161094],{"style":144971,"src":161095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[146,161097,161098],{"className":145115,"code":160918,"language":145117,"meta":39,"style":39},[152,161099,161100,161106,161122],{"__ignoreMap":39},[155,161101,161102,161104],{"class":157,"line":158},[155,161103,70174],{"class":69863},[155,161105,35397],{"class":171},[155,161107,161108,161110,161112,161114,161116,161118,161120],{"class":157,"line":46},[155,161109,155099],{"class":263},[155,161111,70000],{"class":171},[155,161113,160935],{"class":263},[155,161115,230],{"class":171},[155,161117,20595],{"class":263},[155,161119,160942],{"class":167},[155,161121,22596],{"class":171},[155,161123,161124],{"class":157,"line":121},[155,161125,21475],{"class":171},[14,161127,161129],{"id":161128},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[19,161131,161133],{"id":161132},"_18141-scale介绍","18.1.4.1 scale介绍",[24,161135,161136],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[37,161138],{"style":144971,"src":161139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[19,161141,161143],{"id":161142},"_18142-分页按钮","18.1.4.2 分页按钮",[37,161145],{"style":144971,"src":161146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[146,161148,161150],{"className":145115,"code":161149,"language":145117,"meta":39,"style":39},"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",[152,161151,161152,161158,161174,161178,161182,161187,161193,161207,161212],{"__ignoreMap":39},[155,161153,161154,161156],{"class":157,"line":158},[155,161155,70174],{"class":69863},[155,161157,35397],{"class":171},[155,161159,161160,161162,161164,161167,161169,161172],{"class":157,"line":46},[155,161161,155099],{"class":263},[155,161163,70000],{"class":171},[155,161165,161166],{"class":263},"scale",[155,161168,230],{"class":171},[155,161170,161171],{"class":263},"1.2",[155,161173,22596],{"class":171},[155,161175,161176],{"class":157,"line":121},[155,161177,21475],{"class":171},[155,161179,161180],{"class":157,"line":180},[155,161181,154576],{"class":171},[155,161183,161184],{"class":157,"line":194},[155,161185,161186],{"class":161},"\u002F* 2D 缩放 *\u002F\n",[155,161188,161189,161191],{"class":157,"line":200},[155,161190,70174],{"class":69863},[155,161192,35397],{"class":171},[155,161194,161195,161197,161199,161201,161203,161205],{"class":157,"line":213},[155,161196,155099],{"class":263},[155,161198,70000],{"class":171},[155,161200,161166],{"class":263},[155,161202,230],{"class":171},[155,161204,161171],{"class":263},[155,161206,22596],{"class":171},[155,161208,161209],{"class":157,"line":220},[155,161210,161211],{"class":161},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[155,161213,161214],{"class":157,"line":245},[155,161215,21475],{"class":171},[24,161217,161218],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[146,161220,161222],{"className":145115,"code":161221,"language":145117,"meta":39,"style":39},"\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",[152,161223,161224,161229,161239,161260,161281,161285,161290,161296,161323],{"__ignoreMap":39},[155,161225,161226],{"class":157,"line":158},[155,161227,161228],{"class":161},"\u002F* 定义动画 *\u002F\n",[155,161230,161231,161234,161237],{"class":157,"line":46},[155,161232,161233],{"class":167},"@keyframes",[155,161235,161236],{"class":323}," move",[155,161238,35397],{"class":171},[155,161240,161241,161244,161246,161248,161250,161253,161255,161257],{"class":157,"line":121},[155,161242,161243],{"class":226},"  0%",[155,161245,98370],{"class":171},[155,161247,17765],{"class":263},[155,161249,70000],{"class":171},[155,161251,161252],{"class":263},"translateX",[155,161254,230],{"class":171},[155,161256,1109],{"class":263},[155,161258,161259],{"class":171},"); }\n",[155,161261,161262,161265,161267,161269,161271,161273,161275,161277,161279],{"class":157,"line":180},[155,161263,161264],{"class":226},"  100%",[155,161266,98370],{"class":171},[155,161268,17765],{"class":263},[155,161270,70000],{"class":171},[155,161272,161252],{"class":263},[155,161274,230],{"class":171},[155,161276,20389],{"class":263},[155,161278,70055],{"class":167},[155,161280,161259],{"class":171},[155,161282,161283],{"class":157,"line":194},[155,161284,21475],{"class":171},[155,161286,161287],{"class":157,"line":200},[155,161288,161289],{"class":161},"\u002F* 调用动画 *\u002F\n",[155,161291,161292,161294],{"class":157,"line":213},[155,161293,70174],{"class":69863},[155,161295,35397],{"class":171},[155,161297,161298,161301,161303,161305,161307,161309,161311,161313,161315,161318,161321],{"class":157,"line":220},[155,161299,161300],{"class":263},"  animation",[155,161302,70000],{"class":171},[155,161304,153801],{"class":263},[155,161306,1277],{"class":263},[155,161308,20753],{"class":167},[155,161310,97243],{"class":263},[155,161312,1151],{"class":263},[155,161314,20753],{"class":167},[155,161316,161317],{"class":263}," infinite",[155,161319,161320],{"class":263}," alternate",[155,161322,21206],{"class":171},[155,161324,161325],{"class":157,"line":245},[155,161326,21475],{"class":171},[24,161328,161218],{},[146,161330,161333],{"className":161331,"code":161332,"language":25051},[25049],"\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",[152,161334,161332],{"__ignoreMap":39},[19,161336,161338],{"id":161337},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[24,161340,161341],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[37,161343],{"style":144971,"src":161344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[146,161346,161347],{"className":145115,"code":161221,"language":145117,"meta":39,"style":39},[152,161348,161349,161353,161361,161379,161399,161403,161407,161413,161437],{"__ignoreMap":39},[155,161350,161351],{"class":157,"line":158},[155,161352,161228],{"class":161},[155,161354,161355,161357,161359],{"class":157,"line":46},[155,161356,161233],{"class":167},[155,161358,161236],{"class":323},[155,161360,35397],{"class":171},[155,161362,161363,161365,161367,161369,161371,161373,161375,161377],{"class":157,"line":121},[155,161364,161243],{"class":226},[155,161366,98370],{"class":171},[155,161368,17765],{"class":263},[155,161370,70000],{"class":171},[155,161372,161252],{"class":263},[155,161374,230],{"class":171},[155,161376,1109],{"class":263},[155,161378,161259],{"class":171},[155,161380,161381,161383,161385,161387,161389,161391,161393,161395,161397],{"class":157,"line":180},[155,161382,161264],{"class":226},[155,161384,98370],{"class":171},[155,161386,17765],{"class":263},[155,161388,70000],{"class":171},[155,161390,161252],{"class":263},[155,161392,230],{"class":171},[155,161394,20389],{"class":263},[155,161396,70055],{"class":167},[155,161398,161259],{"class":171},[155,161400,161401],{"class":157,"line":194},[155,161402,21475],{"class":171},[155,161404,161405],{"class":157,"line":200},[155,161406,161289],{"class":161},[155,161408,161409,161411],{"class":157,"line":213},[155,161410,70174],{"class":69863},[155,161412,35397],{"class":171},[155,161414,161415,161417,161419,161421,161423,161425,161427,161429,161431,161433,161435],{"class":157,"line":220},[155,161416,161300],{"class":263},[155,161418,70000],{"class":171},[155,161420,153801],{"class":263},[155,161422,1277],{"class":263},[155,161424,20753],{"class":167},[155,161426,97243],{"class":263},[155,161428,1151],{"class":263},[155,161430,20753],{"class":167},[155,161432,161317],{"class":263},[155,161434,161320],{"class":263},[155,161436,21206],{"class":171},[155,161438,161439],{"class":157,"line":245},[155,161440,21475],{"class":171},[24,161442,161443],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[14,161445,161447],{"id":161446},"_1823-知识点回顾","18.2.3 知识点回顾",[146,161449,161450],{"className":145115,"code":147284,"language":145117,"meta":39,"style":39},[152,161451,161452,161458,161468],{"__ignoreMap":39},[155,161453,161454,161456],{"class":157,"line":158},[155,161455,70174],{"class":69863},[155,161457,35397],{"class":171},[155,161459,161460,161462,161464,161466],{"class":157,"line":46},[155,161461,147297],{"class":263},[155,161463,70000],{"class":171},[155,161465,80299],{"class":263},[155,161467,21206],{"class":171},[155,161469,161470],{"class":157,"line":121},[155,161471,21475],{"class":171},[20037,161473,161475],{"id":161474},"_183-3d-转换","18.3 3D 转换",[24,161477,161478],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[14,161480,161482],{"id":161481},"_1831-坐标轴认识","18.3.1 坐标轴认识",[37,161484],{"style":144971,"src":161485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[14,161487,161489],{"id":161488},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[37,161491],{"style":144971,"src":161492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[24,161494,161495],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[24,161497,161498],{},"translate3d的效果需要搭配透视perspective来使用",[37,161500],{"style":144971,"src":161501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[14,161503,161505],{"id":161504},"_1833-透视-perspective","18.3.3 透视 perspective",[37,161507],{"style":144971,"src":161508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[24,161510,161511],{},"透视写在父盒子上，单位为像素",[14,161513,161515],{"id":161514},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[19,161517,161519],{"id":161518},"_18341-分开解释","18.3.4.1 分开解释",[37,161521],{"style":144971,"src":161522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[37,161524],{"style":144971,"src":161525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[37,161527],{"style":144971,"src":161528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[24,161530,161531],{},"总结来说就是左手原则",[19,161533,161535],{"id":161534},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[37,161537],{"style":144971,"src":161538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[14,161540,161542],{"id":161541},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[37,161544],{"style":144971,"src":161545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[37,161547],{"style":144971,"src":161548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[146,161550,161552],{"className":145115,"code":161551,"language":145117,"meta":39,"style":39},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[152,161553,161554,161560,161573,161590],{"__ignoreMap":39},[155,161555,161556,161558],{"class":157,"line":158},[155,161557,70174],{"class":69863},[155,161559,35397],{"class":171},[155,161561,161562,161565,161567,161569,161571],{"class":157,"line":46},[155,161563,161564],{"class":263},"  perspective",[155,161566,70000],{"class":171},[155,161568,83637],{"class":263},[155,161570,70055],{"class":167},[155,161572,21206],{"class":171},[155,161574,161575,161577,161579,161582,161584,161586,161588],{"class":157,"line":121},[155,161576,155099],{"class":263},[155,161578,70000],{"class":171},[155,161580,161581],{"class":263},"rotateX",[155,161583,230],{"class":171},[155,161585,20595],{"class":263},[155,161587,160942],{"class":167},[155,161589,22596],{"class":171},[155,161591,161592],{"class":157,"line":180},[155,161593,21475],{"class":171},[14,161595,161597],{"id":161596},"_1836-案例","18.3.6 案例",[19,161599,161601],{"id":161600},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[37,161603],{"style":144971,"src":161604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[37,161606],{"style":144971,"src":161607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[37,161609],{"style":144971,"src":161610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[146,161612,161614],{"className":145115,"code":161613,"language":145117,"meta":39,"style":39},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[152,161615,161616,161621,161627,161639],{"__ignoreMap":39},[155,161617,161618],{"class":157,"line":158},[155,161619,161620],{"class":161},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[155,161622,161623,161625],{"class":157,"line":46},[155,161624,152112],{"class":226},[155,161626,35397],{"class":171},[155,161628,161629,161631,161633,161635,161637],{"class":157,"line":121},[155,161630,161564],{"class":263},[155,161632,70000],{"class":171},[155,161634,83637],{"class":263},[155,161636,70055],{"class":167},[155,161638,21206],{"class":171},[155,161640,161641],{"class":157,"line":180},[155,161642,21475],{"class":171},[19,161644,161646],{"id":161645},"_18362-3d导航栏","18.3.6.2 3D导航栏",[37,161648],{"style":144971,"src":161649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[146,161651,161652],{"className":145862,"code":149219,"language":145864,"meta":39,"style":39},[152,161653,161654,161658,161672,161676],{"__ignoreMap":39},[155,161655,161656],{"class":157,"line":158},[155,161657,149226],{"class":161},[155,161659,161660,161662,161664,161666,161668,161670],{"class":157,"line":46},[155,161661,20959],{"class":171},[155,161663,70174],{"class":69863},[155,161665,72049],{"class":226},[155,161667,317],{"class":171},[155,161669,149239],{"class":732},[155,161671,69870],{"class":171},[155,161673,161674],{"class":157,"line":121},[155,161675,149246],{"class":171},[155,161677,161678,161680,161682],{"class":157,"line":180},[155,161679,70348],{"class":171},[155,161681,70174],{"class":69863},[155,161683,69870],{"class":171},[19,161685,161687],{"id":161686},"_18363-旋转木马","18.3.6.3 旋转木马",[37,161689],{"style":144971,"src":161690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[146,161692,161693],{"className":145115,"code":160918,"language":145117,"meta":39,"style":39},[152,161694,161695,161701,161717],{"__ignoreMap":39},[155,161696,161697,161699],{"class":157,"line":158},[155,161698,70174],{"class":69863},[155,161700,35397],{"class":171},[155,161702,161703,161705,161707,161709,161711,161713,161715],{"class":157,"line":46},[155,161704,155099],{"class":263},[155,161706,70000],{"class":171},[155,161708,160935],{"class":263},[155,161710,230],{"class":171},[155,161712,20595],{"class":263},[155,161714,160942],{"class":167},[155,161716,22596],{"class":171},[155,161718,161719],{"class":157,"line":121},[155,161720,21475],{"class":171},[20011,161722,161723],{},"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":39,"searchDepth":46,"depth":46,"links":161725},[161726,161733],{"id":160821,"depth":46,"text":160822,"children":161727},[161728,161729,161730,161731,161732],{"id":160845,"depth":121,"text":160846},{"id":160900,"depth":121,"text":160901},{"id":161025,"depth":121,"text":161026},{"id":161128,"depth":121,"text":161129},{"id":161446,"depth":121,"text":161447},{"id":161474,"depth":46,"text":161475,"children":161734},[161735,161736,161737,161738,161739,161740],{"id":161481,"depth":121,"text":161482},{"id":161488,"depth":121,"text":161489},{"id":161504,"depth":121,"text":161505},{"id":161514,"depth":121,"text":161515},{"id":161541,"depth":121,"text":161542},{"id":161596,"depth":121,"text":161597},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":160813,"description":20020},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":161747,"title":161748,"body":161749,"description":20020,"extension":20021,"meta":161952,"navigation":216,"path":161953,"seo":161954,"stem":161955,"__hash__":161956},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":161750,"toc":161941},[161751,161754,161758,161761,161764,161768,161771,161774,161777,161781,161784,161788,161791,161795,161798,161802,161816,161820,161845,161848,161851,161868,161872,161876,161879,161882,161886,161889,161892,161910,161914,161917,161931,161935,161938],[10,161752,161748],{"id":161753},"_19-移动端基础-前缀现状与视口",[20037,161755,161757],{"id":161756},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[37,161759],{"style":144971,"src":161760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[24,161762,161763],{},"意思就是加个前缀，增加兼容性",[20037,161765,161767],{"id":161766},"_192-移动端现状认识","19.2 移动端现状认识",[37,161769],{"style":144971,"src":161770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[24,161772,161773],{},"调试方法：",[37,161775],{"style":144971,"src":161776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[20037,161778,161780],{"id":161779},"_193-视口","19.3 视口",[24,161782,161783],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[14,161785,161787],{"id":161786},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[37,161789],{"style":144971,"src":161790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[14,161792,161794],{"id":161793},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[37,161796],{"style":144971,"src":161797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[14,161799,161801],{"id":161800},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[21052,161803,161804,161807,161810,161813],{},[31,161805,161806],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[31,161808,161809],{},"理想视口，对设备来讲，是最理想的视口尺寸",[31,161811,161812],{},"需要手动添写meta视口标签通知浏览器操作",[31,161814,161815],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[14,161817,161819],{"id":161818},"_1934-meta视口标签","19.3.4 meta视口标签",[146,161821,161823],{"className":145862,"code":161822,"language":145864,"meta":39,"style":39},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[152,161824,161825],{"__ignoreMap":39},[155,161826,161827,161829,161831,161833,161835,161837,161839,161841,161843],{"class":157,"line":158},[155,161828,20959],{"class":171},[155,161830,69907],{"class":69863},[155,161832,34745],{"class":226},[155,161834,317],{"class":171},[155,161836,69954],{"class":732},[155,161838,69934],{"class":226},[155,161840,317],{"class":171},[155,161842,69961],{"class":732},[155,161844,69870],{"class":171},[37,161846],{"style":144971,"src":161847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[24,161849,161850],{},"标准视口设置：",[28,161852,161853,161856,161859,161862,161865],{},[31,161854,161855],{},"视口宽度和设备保持一致",[31,161857,161858],{},"视口的默认缩放比例1.0",[31,161860,161861],{},"不允许用户自行缩放",[31,161863,161864],{},"最大允许的缩放比例1.0",[31,161866,161867],{},"最小允许的缩放比例1.0",[14,161869,161871],{"id":161870},"_1935-二倍图","19.3.5 二倍图",[19,161873,161875],{"id":161874},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[37,161877],{"style":144971,"src":161878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[37,161880],{"style":144971,"src":161881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[19,161883,161885],{"id":161884},"_19352-多倍图","19.3.5.2 多倍图",[37,161887],{"style":144971,"src":161888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[24,161890,161891],{},"二倍图法，代码如下：",[146,161893,161895],{"className":145115,"code":161894,"language":145117,"meta":39,"style":39},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[152,161896,161897,161902],{"__ignoreMap":39},[155,161898,161899],{"class":157,"line":158},[155,161900,161901],{"class":161},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[155,161903,161904,161907],{"class":157,"line":46},[155,161905,161906],{"class":69863},"background-size",[155,161908,161909],{"class":171},": 50% 50%;\n",[19,161911,161913],{"id":161912},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[37,161915],{"style":144971,"src":161916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[28,161918,161919,161922,161925,161928],{},[31,161920,161921],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[31,161923,161924],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[31,161926,161927],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[31,161929,161930],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[19,161932,161934],{"id":161933},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[37,161936],{"style":144971,"src":161937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[20011,161939,161940],{},"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":39,"searchDepth":46,"depth":46,"links":161942},[161943,161944,161945],{"id":161756,"depth":46,"text":161757},{"id":161766,"depth":46,"text":161767},{"id":161779,"depth":46,"text":161780,"children":161946},[161947,161948,161949,161950,161951],{"id":161786,"depth":121,"text":161787},{"id":161793,"depth":121,"text":161794},{"id":161800,"depth":121,"text":161801},{"id":161818,"depth":121,"text":161819},{"id":161870,"depth":121,"text":161871},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":161748,"description":20020},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":161958,"title":161959,"body":161960,"description":20020,"extension":20021,"meta":162837,"navigation":216,"path":162838,"seo":162839,"stem":162840,"__hash__":162841},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":161961,"toc":162821},[161962,161965,161969,161976,161979,161986,161989,161994,161997,162001,162005,162012,162015,162018,162022,162025,162028,162031,162034,162037,162041,162044,162048,162050,162053,162056,162059,162062,162064,162067,162069,162099,162101,162131,162135,162138,162142,162145,162162,162165,162168,162244,162246,162249,162252,162255,162258,162260,162263,162266,162270,162292,162295,162298,162302,162305,162311,162314,162318,162321,162324,162328,162331,162334,162337,162341,162344,162347,162350,162353,162357,162360,162364,162371,162374,162377,162380,162383,162393,162396,162399,162406,162409,162413,162416,162419,162423,162426,162429,162432,162477,162480,162483,162486,162488,162617,162619,162657,162660,162663,162665,162783,162785,162819],[10,161963,161959],{"id":161964},"_20-移动端布局实战上篇",[20037,161966,161968],{"id":161967},"_201-移动端主流方案","20.1 移动端主流方案",[28,161970,161971],{},[31,161972,161973],{},[20234,161974,161975],{},"单独移动端页面（主流）",[37,161977],{"style":144971,"src":161978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[28,161980,161981],{"start":46},[31,161982,161983],{},[20234,161984,161985],{},"响应式兼容PC移动端",[37,161987],{"style":144971,"src":161988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[28,161990,161991],{"start":121},[31,161992,161993],{},"两种页面选型布局方式",[37,161995],{"style":144971,"src":161996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[20037,161998,162000],{"id":161999},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[14,162002,162004],{"id":162003},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[24,162006,162007,162008],{},"官网地址： ",[20318,162009,162010],{"href":162010,"rel":162011},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[43656],[37,162013],{"style":144971,"src":162014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[37,162016],{"style":144971,"src":162017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[14,162019,162021],{"id":162020},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[37,162023],{"style":144971,"src":162024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[37,162026],{"style":144971,"src":162027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[24,162029,162030],{},"去除高亮：",[24,162032,162033],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[24,162035,162036],{},"-webkit- tap-highlight-color: transparent;",[20037,162038,162040],{"id":162039},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[37,162042],{"style":144971,"src":162043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[20037,162045,162047],{"id":162046},"_204-流式布局案例","20.4 流式布局案例",[24,162049,20122],{},[24,162051,162052],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[24,162054,162055],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[24,162057,162058],{},"图片格式：",[37,162060],{"style":144971,"src":162061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[24,162063,154158],{},[37,162065],{"style":144971,"src":162066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[24,162068,158485],{},[146,162070,162071],{"className":145862,"code":152617,"language":145864,"meta":39,"style":39},[152,162072,162073],{"__ignoreMap":39},[155,162074,162075,162077,162079,162081,162083,162085,162087,162089,162091,162093,162095,162097],{"class":157,"line":158},[155,162076,20959],{"class":171},[155,162078,37],{"class":69863},[155,162080,73802],{"class":226},[155,162082,317],{"class":171},[155,162084,152632],{"class":732},[155,162086,73810],{"class":226},[155,162088,317],{"class":171},[155,162090,152639],{"class":732},[155,162092,152642],{"class":226},[155,162094,317],{"class":171},[155,162096,152647],{"class":732},[155,162098,69870],{"class":171},[24,162100,158574],{},[146,162102,162103],{"className":145862,"code":152617,"language":145864,"meta":39,"style":39},[152,162104,162105],{"__ignoreMap":39},[155,162106,162107,162109,162111,162113,162115,162117,162119,162121,162123,162125,162127,162129],{"class":157,"line":158},[155,162108,20959],{"class":171},[155,162110,37],{"class":69863},[155,162112,73802],{"class":226},[155,162114,317],{"class":171},[155,162116,152632],{"class":732},[155,162118,73810],{"class":226},[155,162120,317],{"class":171},[155,162122,152639],{"class":732},[155,162124,152642],{"class":226},[155,162126,317],{"class":171},[155,162128,152647],{"class":732},[155,162130,69870],{"class":171},[20037,162132,162134],{"id":162133},"_205-flex布局","20.5 flex布局",[37,162136],{"style":144971,"src":162137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[14,162139,162141],{"id":162140},"_2051-布局原理","20.5.1 布局原理",[24,162143,162144],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[21052,162146,162147,162150,162153,162156,162159],{},[31,162148,162149],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[31,162151,162152],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[31,162154,162155],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[31,162157,162158],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[31,162160,162161],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[24,162163,162164],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[24,162166,162167],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[146,162169,162171],{"className":145115,"code":162170,"language":145117,"meta":39,"style":39},"\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",[152,162172,162173,162178,162185,162195,162207,162218,162229,162240],{"__ignoreMap":39},[155,162174,162175],{"class":157,"line":158},[155,162176,162177],{"class":161},"\u002F* Flex 弹性布局 *\u002F\n",[155,162179,162180,162183],{"class":157,"line":46},[155,162181,162182],{"class":226},".container",[155,162184,35397],{"class":171},[155,162186,162187,162189,162191,162193],{"class":157,"line":121},[155,162188,146731],{"class":263},[155,162190,70000],{"class":171},[155,162192,70040],{"class":263},[155,162194,21206],{"class":171},[155,162196,162197,162200,162202,162205],{"class":157,"line":180},[155,162198,162199],{"class":263},"  flex-direction",[155,162201,70000],{"class":171},[155,162203,162204],{"class":263},"row",[155,162206,21206],{"class":171},[155,162208,162209,162212,162214,162216],{"class":157,"line":194},[155,162210,162211],{"class":263},"  justify-content",[155,162213,70000],{"class":171},[155,162215,70231],{"class":263},[155,162217,21206],{"class":171},[155,162219,162220,162223,162225,162227],{"class":157,"line":200},[155,162221,162222],{"class":263},"  align-items",[155,162224,70000],{"class":171},[155,162226,70155],{"class":263},[155,162228,21206],{"class":171},[155,162230,162231,162234,162236,162238],{"class":157,"line":213},[155,162232,162233],{"class":263},"  flex-wrap",[155,162235,70000],{"class":171},[155,162237,97173],{"class":263},[155,162239,21206],{"class":171},[155,162241,162242],{"class":157,"line":220},[155,162243,21475],{"class":171},[24,162245,89016],{},[24,162247,162248],{},".form-item .male-label {",[24,162250,162251],{},"   margin-right: 20px;",[24,162253,162254],{},"   display: inline-flex;",[24,162256,162257],{},"   align-items: center;",[24,162259,2711],{},[37,162261],{"style":144971,"src":162262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[37,162264],{"style":144971,"src":162265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[14,162267,162269],{"id":162268},"_2052-常见父项属性","20.5.2 常见父项属性",[28,162271,162272,162275,162278,162281,162284,162287,162290],{},[31,162273,162274],{},"flex-direction：设置主轴的方向",[31,162276,162277],{},"justify-content：设置主轴上的子元素排列方式",[31,162279,162280],{},"flex-wrap：设置子元素是否换行",[31,162282,162283],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[31,162285,162286],{},"align-items：设置侧轴上的子元素排列方式（单行）",[31,162288,162289],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[31,162291,162274],{},[37,162293],{"style":144971,"src":162294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[37,162296],{"style":144971,"src":162297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[28,162299,162300],{"start":46},[31,162301,162277],{},[37,162303],{"style":144971,"src":162304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[24,162306,162307,162310],{},[152,162308,162309],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[24,162312,162313],{},"跟着主轴走",[28,162315,162316],{"start":121},[31,162317,162280],{},[37,162319],{"style":144971,"src":162320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[24,162322,162323],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[28,162325,162326],{"start":180},[31,162327,162283],{},[37,162329],{"style":144971,"src":162330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[24,162332,162333],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[24,162335,162336],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[28,162338,162339],{"start":194},[31,162340,162286],{},[37,162342],{"style":144971,"src":162343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[24,162345,162346],{},"align-items与align-content之间的区别：",[24,162348,162349],{},"单找items，多找content",[37,162351],{"style":144971,"src":162352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[28,162354,162355],{"start":200},[31,162356,162289],{},[37,162358],{"style":144971,"src":162359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[14,162361,162363],{"id":162362},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[28,162365,162366],{},[31,162367,162368],{},[20234,162369,162370],{},"flex 属性",[24,162372,162373],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[37,162375],{"style":144971,"src":162376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[24,162378,162379],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[24,162381,162382],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[28,162384,162385],{"start":46},[31,162386,162387,33622,162390],{},[20234,162388,162389],{},"align-self",[20234,162391,162392],{},"控制子项自己在侧轴上的排列方式",[37,162394],{"style":144971,"src":162395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[24,162397,162398],{},"单个子盒子在父盒子侧轴上的排列方式",[28,162400,162401],{"start":121},[31,162402,162403,162405],{},[20234,162404,113860],{}," 属性定义项目的排列顺序",[37,162407],{"style":144971,"src":162408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[14,162410,162412],{"id":162411},"_2054-背景线性渐变","20.5.4 背景线性渐变",[37,162414],{"style":144971,"src":162415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[24,162417,162418],{},"必须要添加浏览器的私有前缀",[14,162420,162422],{"id":162421},"_2055-携程网首页案例","20.5.5 携程网首页案例",[24,162424,162425],{},"学到最重要的知识：",[24,162427,162428],{},"flex处理这样的布局思路",[37,162430],{"style":144971,"src":162431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[146,162433,162435],{"className":145115,"code":162434,"language":145117,"meta":39,"style":39},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[152,162436,162437,162443,162453,162463,162473],{"__ignoreMap":39},[155,162438,162439,162441],{"class":157,"line":158},[155,162440,162182],{"class":226},[155,162442,35397],{"class":171},[155,162444,162445,162447,162449,162451],{"class":157,"line":46},[155,162446,146731],{"class":263},[155,162448,70000],{"class":171},[155,162450,70040],{"class":263},[155,162452,21206],{"class":171},[155,162454,162455,162457,162459,162461],{"class":157,"line":121},[155,162456,162211],{"class":263},[155,162458,70000],{"class":171},[155,162460,70155],{"class":263},[155,162462,21206],{"class":171},[155,162464,162465,162467,162469,162471],{"class":157,"line":180},[155,162466,162222],{"class":263},[155,162468,70000],{"class":171},[155,162470,70155],{"class":263},[155,162472,21206],{"class":171},[155,162474,162475],{"class":157,"line":194},[155,162476,21475],{"class":171},[24,162478,162479],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[24,162481,162482],{},"使用属性选择器",[37,162484],{"style":144971,"src":162485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[24,162487,87452],{},[146,162489,162491],{"className":145862,"code":162490,"language":145864,"meta":39,"style":39},"\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",[152,162492,162493,162498,162512,162517,162537,162542,162561,162566,162585,162590,162609],{"__ignoreMap":39},[155,162494,162495],{"class":157,"line":158},[155,162496,162497],{"class":161},"\u003C!-- 携程网移动端案例结构 -->\n",[155,162499,162500,162502,162504,162506,162508,162510],{"class":157,"line":46},[155,162501,20959],{"class":171},[155,162503,70174],{"class":69863},[155,162505,72049],{"class":226},[155,162507,317],{"class":171},[155,162509,110886],{"class":732},[155,162511,69870],{"class":171},[155,162513,162514],{"class":157,"line":121},[155,162515,162516],{"class":161},"  \u003C!-- 搜索栏 -->\n",[155,162518,162519,162521,162523,162525,162527,162530,162533,162535],{"class":157,"line":180},[155,162520,70707],{"class":171},[155,162522,70174],{"class":69863},[155,162524,72049],{"class":226},[155,162526,317],{"class":171},[155,162528,162529],{"class":732},"\"search-index\"",[155,162531,162532],{"class":171},">...\u003C\u002F",[155,162534,70174],{"class":69863},[155,162536,69870],{"class":171},[155,162538,162539],{"class":157,"line":194},[155,162540,162541],{"class":161},"  \u003C!-- 焦点图 -->\n",[155,162543,162544,162546,162548,162550,162552,162555,162557,162559],{"class":157,"line":200},[155,162545,70707],{"class":171},[155,162547,70174],{"class":69863},[155,162549,72049],{"class":226},[155,162551,317],{"class":171},[155,162553,162554],{"class":732},"\"focus\"",[155,162556,162532],{"class":171},[155,162558,70174],{"class":69863},[155,162560,69870],{"class":171},[155,162562,162563],{"class":157,"line":213},[155,162564,162565],{"class":161},"  \u003C!-- 主导航 -->\n",[155,162567,162568,162570,162572,162574,162576,162579,162581,162583],{"class":157,"line":220},[155,162569,70707],{"class":171},[155,162571,70174],{"class":69863},[155,162573,72049],{"class":226},[155,162575,317],{"class":171},[155,162577,162578],{"class":732},"\"local-nav\"",[155,162580,162532],{"class":171},[155,162582,70174],{"class":69863},[155,162584,69870],{"class":171},[155,162586,162587],{"class":157,"line":245},[155,162588,162589],{"class":161},"  \u003C!-- 子导航 -->\n",[155,162591,162592,162594,162596,162598,162600,162603,162605,162607],{"class":157,"line":251},[155,162593,70707],{"class":171},[155,162595,70174],{"class":69863},[155,162597,72049],{"class":226},[155,162599,317],{"class":171},[155,162601,162602],{"class":732},"\"nav-common\"",[155,162604,162532],{"class":171},[155,162606,70174],{"class":69863},[155,162608,69870],{"class":171},[155,162610,162611,162613,162615],{"class":157,"line":257},[155,162612,70348],{"class":171},[155,162614,70174],{"class":69863},[155,162616,69870],{"class":171},[24,162618,89016],{},[146,162620,162621],{"className":145115,"code":155567,"language":145117,"meta":39,"style":39},[152,162622,162623,162637,162653],{"__ignoreMap":39},[155,162624,162625,162627,162629,162631,162633,162635],{"class":157,"line":158},[155,162626,72384],{"class":69863},[155,162628,4091],{"class":171},[155,162630,121670],{"class":226},[155,162632,317],{"class":167},[155,162634,81262],{"class":732},[155,162636,155584],{"class":171},[155,162638,162639,162641,162643,162645,162647,162649,162651],{"class":157,"line":46},[155,162640,89459],{"class":263},[155,162642,70000],{"class":171},[155,162644,329],{"class":263},[155,162646,70055],{"class":167},[155,162648,70084],{"class":263},[155,162650,148695],{"class":263},[155,162652,21206],{"class":171},[155,162654,162655],{"class":157,"line":121},[155,162656,21475],{"class":171},[24,162658,162659],{},"总代码和效果展示：",[37,162661],{"style":144971,"src":162662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[24,162664,87452],{},[146,162666,162667],{"className":145862,"code":162490,"language":145864,"meta":39,"style":39},[152,162668,162669,162673,162687,162691,162709,162713,162731,162735,162753,162757,162775],{"__ignoreMap":39},[155,162670,162671],{"class":157,"line":158},[155,162672,162497],{"class":161},[155,162674,162675,162677,162679,162681,162683,162685],{"class":157,"line":46},[155,162676,20959],{"class":171},[155,162678,70174],{"class":69863},[155,162680,72049],{"class":226},[155,162682,317],{"class":171},[155,162684,110886],{"class":732},[155,162686,69870],{"class":171},[155,162688,162689],{"class":157,"line":121},[155,162690,162516],{"class":161},[155,162692,162693,162695,162697,162699,162701,162703,162705,162707],{"class":157,"line":180},[155,162694,70707],{"class":171},[155,162696,70174],{"class":69863},[155,162698,72049],{"class":226},[155,162700,317],{"class":171},[155,162702,162529],{"class":732},[155,162704,162532],{"class":171},[155,162706,70174],{"class":69863},[155,162708,69870],{"class":171},[155,162710,162711],{"class":157,"line":194},[155,162712,162541],{"class":161},[155,162714,162715,162717,162719,162721,162723,162725,162727,162729],{"class":157,"line":200},[155,162716,70707],{"class":171},[155,162718,70174],{"class":69863},[155,162720,72049],{"class":226},[155,162722,317],{"class":171},[155,162724,162554],{"class":732},[155,162726,162532],{"class":171},[155,162728,70174],{"class":69863},[155,162730,69870],{"class":171},[155,162732,162733],{"class":157,"line":213},[155,162734,162565],{"class":161},[155,162736,162737,162739,162741,162743,162745,162747,162749,162751],{"class":157,"line":220},[155,162738,70707],{"class":171},[155,162740,70174],{"class":69863},[155,162742,72049],{"class":226},[155,162744,317],{"class":171},[155,162746,162578],{"class":732},[155,162748,162532],{"class":171},[155,162750,70174],{"class":69863},[155,162752,69870],{"class":171},[155,162754,162755],{"class":157,"line":245},[155,162756,162589],{"class":161},[155,162758,162759,162761,162763,162765,162767,162769,162771,162773],{"class":157,"line":251},[155,162760,70707],{"class":171},[155,162762,70174],{"class":69863},[155,162764,72049],{"class":226},[155,162766,317],{"class":171},[155,162768,162602],{"class":732},[155,162770,162532],{"class":171},[155,162772,70174],{"class":69863},[155,162774,69870],{"class":171},[155,162776,162777,162779,162781],{"class":157,"line":257},[155,162778,70348],{"class":171},[155,162780,70174],{"class":69863},[155,162782,69870],{"class":171},[24,162784,89016],{},[146,162786,162787],{"className":145862,"code":149219,"language":145864,"meta":39,"style":39},[152,162788,162789,162793,162807,162811],{"__ignoreMap":39},[155,162790,162791],{"class":157,"line":158},[155,162792,149226],{"class":161},[155,162794,162795,162797,162799,162801,162803,162805],{"class":157,"line":46},[155,162796,20959],{"class":171},[155,162798,70174],{"class":69863},[155,162800,72049],{"class":226},[155,162802,317],{"class":171},[155,162804,149239],{"class":732},[155,162806,69870],{"class":171},[155,162808,162809],{"class":157,"line":121},[155,162810,149246],{"class":171},[155,162812,162813,162815,162817],{"class":157,"line":180},[155,162814,70348],{"class":171},[155,162816,70174],{"class":69863},[155,162818,69870],{"class":171},[20011,162820,156516],{},{"title":39,"searchDepth":46,"depth":46,"links":162822},[162823,162824,162828,162829,162830],{"id":161967,"depth":46,"text":161968},{"id":161999,"depth":46,"text":162000,"children":162825},[162826,162827],{"id":162003,"depth":121,"text":162004},{"id":162020,"depth":121,"text":162021},{"id":162039,"depth":46,"text":162040},{"id":162046,"depth":46,"text":162047},{"id":162133,"depth":46,"text":162134,"children":162831},[162832,162833,162834,162835,162836],{"id":162140,"depth":121,"text":162141},{"id":162268,"depth":121,"text":162269},{"id":162362,"depth":121,"text":162363},{"id":162411,"depth":121,"text":162412},{"id":162421,"depth":121,"text":162422},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":161959,"description":20020},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":162843,"title":162844,"body":162845,"description":20020,"extension":20021,"meta":164072,"navigation":216,"path":164073,"seo":164074,"stem":164075,"__hash__":164076},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":162846,"toc":164050},[162847,162850,162854,162858,162861,162864,162868,162873,162876,162879,162882,162885,162888,162945,162948,162953,162956,162959,162963,162974,162978,162981,162984,162991,162996,163000,163003,163009,163012,163016,163019,163026,163029,163032,163039,163042,163049,163052,163055,163062,163065,163068,163070,163087,163091,163094,163097,163100,163104,163107,163110,163113,163116,163119,163122,163124,163127,163130,163192,163195,163305,163312,163318,163321,163324,163328,163331,163335,163340,163343,163350,163353,163359,163364,163367,163370,163373,163376,163379,163382,163385,163388,163444,163446,163472,163476,163479,163482,163485,163493,163496,163499,163503,163559,163562,163566,163572,163583,163586,163591,163594,163597,163603,163606,163609,163612,163615,163618,163621,163624,163627,163652,163658,163661,163664,163667,163670,163673,163676,163681,163684,163687,163690,163698,163701,163708,163711,163714,163716,163740,163742,163745,163748,163751,163754,163757,163760,163763,163797,163800,163803,163837,163844,163847,163850,163853,163856,163859,163862,163869,163872,163875,163878,163881,163888,163891,163894,163901,163904,163907,163911,163914,163917,163920,163923,163926,163929,163932,163935,163937,163961,163963,163987,163991,164002,164005,164008,164011,164014,164017,164020,164023,164026,164029,164032,164035,164038,164041,164044,164047],[10,162848,162844],{"id":162849},"_21-移动端布局实战下篇",[20037,162851,162853],{"id":162852},"_211-rem适配布局","21.1 rem适配布局",[14,162855,162857],{"id":162856},"_2111-rem单位","21.1.1 rem单位",[37,162859],{"style":144971,"src":162860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[24,162862,162863],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[14,162865,162867],{"id":162866},"_2112-媒体查询","21.1.2 媒体查询",[28,162869,162870],{},[31,162871,162872],{},"参数介绍",[37,162874],{"style":144971,"src":162875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[37,162877],{"style":144971,"src":162878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[37,162880],{"style":144971,"src":162881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[37,162883],{"style":144971,"src":162884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[37,162886],{"style":144971,"src":162887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[146,162889,162891],{"className":145115,"code":162890,"language":145117,"meta":39,"style":39},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[152,162892,162893,162898,162917,162924,162937,162941],{"__ignoreMap":39},[155,162894,162895],{"class":157,"line":158},[155,162896,162897],{"class":161},"\u002F* 媒体查询 *\u002F\n",[155,162899,162900,162903,162905,162908,162910,162913,162915],{"class":157,"line":46},[155,162901,162902],{"class":167},"@media",[155,162904,21561],{"class":171},[155,162906,162907],{"class":263},"max-width",[155,162909,70000],{"class":171},[155,162911,162912],{"class":263},"768",[155,162914,70055],{"class":167},[155,162916,32269],{"class":171},[155,162918,162919,162922],{"class":157,"line":121},[155,162920,162921],{"class":226},"  .container",[155,162923,35397],{"class":171},[155,162925,162926,162929,162931,162933,162935],{"class":157,"line":180},[155,162927,162928],{"class":263},"    width",[155,162930,70000],{"class":171},[155,162932,20389],{"class":263},[155,162934,2938],{"class":167},[155,162936,21206],{"class":171},[155,162938,162939],{"class":157,"line":194},[155,162940,145911],{"class":171},[155,162942,162943],{"class":157,"line":200},[155,162944,21475],{"class":171},[24,162946,162947],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[28,162949,162950],{"start":46},[31,162951,162952],{},"引入资源",[37,162954],{"style":144971,"src":162955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[24,162957,162958],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[14,162960,162962],{"id":162961},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[21052,162964,162965,162968,162971],{},[31,162966,162967],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[31,162969,162970],{},"媒体查询可以根据不同设备宽度来修改样式",[31,162972,162973],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[20037,162975,162977],{"id":162976},"_212-less基础","21.2 Less基础",[24,162979,162980],{},"css冗余度较高，不利于复用，没有很好的计算能力",[24,162982,162983],{},"Less可以解决该问题，它是css的扩展语言",[24,162985,162986,162987],{},"Less中文网址： ",[20318,162988,162989],{"href":162989,"rel":162990},"http:\u002F\u002Flesscss.cn\u002F",[43656],[24,162992,162993],{},[20234,162994,162995],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[14,162997,162999],{"id":162998},"_2121-less安装","21.2.1 less安装",[24,163001,163002],{},"如果使用vscode，则无需进行下方安装步骤",[24,163004,163005],{},[20318,163006,163007],{"href":163007,"rel":163008},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[43656],[37,163010],{"style":144971,"src":163011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[14,163013,163015],{"id":163014},"_2122-less使用","21.2.2 less使用",[24,163017,163018],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[28,163020,163021],{},[31,163022,163023],{},[20234,163024,163025],{},"Less 变量",[37,163027],{"style":144971,"src":163028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[37,163030],{"style":144971,"src":163031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[28,163033,163034],{"start":46},[31,163035,163036],{},[20234,163037,163038],{},"Less 编译",[37,163040],{"style":144971,"src":163041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[28,163043,163044],{"start":121},[31,163045,163046],{},[20234,163047,163048],{},"Less 嵌套",[37,163050],{"style":144971,"src":163051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[37,163053],{"style":144971,"src":163054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[28,163056,163057],{"start":180},[31,163058,163059],{},[20234,163060,163061],{},"Less 运算",[37,163063],{"style":144971,"src":163064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[24,163066,163067],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[24,163069,20122],{},[21052,163071,163072,163075,163078,163081,163084],{},[31,163073,163074],{},"乘号（*）和除号（\u002F）的写法",[31,163076,163077],{},"运算符中间左右有个空格隔开 1px + 5",[31,163079,163080],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[31,163082,163083],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[31,163085,163086],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[20037,163088,163090],{"id":163089},"_213-rem-适配方案","21.3 rem 适配方案",[24,163092,163093],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[24,163095,163096],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[37,163098],{"style":144971,"src":163099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[14,163101,163103],{"id":163102},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[24,163105,163106],{},"rem + 媒体查询 + less 技术",[37,163108],{"style":144971,"src":163109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[24,163111,163112],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[24,163114,163115],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[37,163117],{"style":144971,"src":163118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[24,163120,163121],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[24,163123,34460],{},[37,163125],{"style":144971,"src":163126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[24,163128,163129],{},"index.html:",[146,163131,163133],{"className":145115,"code":163132,"language":145117,"meta":39,"style":39},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[152,163134,163135,163140,163146,163162,163166,163172,163188],{"__ignoreMap":39},[155,163136,163137],{"class":157,"line":158},[155,163138,163139],{"class":161},"\u002F* rem 适配方案 *\u002F\n",[155,163141,163142,163144],{"class":157,"line":46},[155,163143,69198],{"class":69863},[155,163145,35397],{"class":171},[155,163147,163148,163150,163152,163155,163157,163159],{"class":157,"line":121},[155,163149,89189],{"class":263},[155,163151,70000],{"class":171},[155,163153,163154],{"class":263},"62.5",[155,163156,2938],{"class":167},[155,163158,148978],{"class":171},[155,163160,163161],{"class":161},"\u002F* 1rem = 10px *\u002F\n",[155,163163,163164],{"class":157,"line":180},[155,163165,21475],{"class":171},[155,163167,163168,163170],{"class":157,"line":194},[155,163169,148963],{"class":226},[155,163171,35397],{"class":171},[155,163173,163174,163176,163178,163180,163183,163185],{"class":157,"line":200},[155,163175,89131],{"class":263},[155,163177,70000],{"class":171},[155,163179,565],{"class":263},[155,163181,163182],{"class":167},"rem",[155,163184,148978],{"class":171},[155,163186,163187],{"class":161},"\u002F* 100px *\u002F\n",[155,163189,163190],{"class":157,"line":213},[155,163191,21475],{"class":171},[24,163193,163194],{},"common.less",[146,163196,163198],{"className":145115,"code":163197,"language":145117,"meta":39,"style":39},"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",[152,163199,163200,163206,163221,163225,163231,163245,163249,163253,163257,163263,163277,163281,163287,163301],{"__ignoreMap":39},[155,163201,163202,163204],{"class":157,"line":158},[155,163203,69198],{"class":69863},[155,163205,35397],{"class":171},[155,163207,163208,163210,163212,163214,163216,163218],{"class":157,"line":46},[155,163209,89189],{"class":263},[155,163211,70000],{"class":171},[155,163213,163154],{"class":263},[155,163215,2938],{"class":167},[155,163217,45856],{"class":171},[155,163219,163220],{"class":161},"\u002F* 10px *\u002F\n",[155,163222,163223],{"class":157,"line":121},[155,163224,21475],{"class":171},[155,163226,163227,163229],{"class":157,"line":180},[155,163228,70174],{"class":69863},[155,163230,35397],{"class":171},[155,163232,163233,163235,163237,163239,163241,163243],{"class":157,"line":194},[155,163234,89131],{"class":263},[155,163236,70000],{"class":171},[155,163238,565],{"class":263},[155,163240,163182],{"class":167},[155,163242,45856],{"class":171},[155,163244,163187],{"class":161},[155,163246,163247],{"class":157,"line":200},[155,163248,21475],{"class":171},[155,163250,163251],{"class":157,"line":213},[155,163252,154576],{"class":171},[155,163254,163255],{"class":157,"line":220},[155,163256,163139],{"class":161},[155,163258,163259,163261],{"class":157,"line":245},[155,163260,69198],{"class":69863},[155,163262,35397],{"class":171},[155,163264,163265,163267,163269,163271,163273,163275],{"class":157,"line":251},[155,163266,89189],{"class":263},[155,163268,70000],{"class":171},[155,163270,163154],{"class":263},[155,163272,2938],{"class":167},[155,163274,148978],{"class":171},[155,163276,163161],{"class":161},[155,163278,163279],{"class":157,"line":257},[155,163280,21475],{"class":171},[155,163282,163283,163285],{"class":157,"line":270},[155,163284,148963],{"class":226},[155,163286,35397],{"class":171},[155,163288,163289,163291,163293,163295,163297,163299],{"class":157,"line":276},[155,163290,89131],{"class":263},[155,163292,70000],{"class":171},[155,163294,565],{"class":263},[155,163296,163182],{"class":167},[155,163298,148978],{"class":171},[155,163300,163187],{"class":161},[155,163302,163303],{"class":157,"line":297},[155,163304,21475],{"class":171},[24,163306,163307,163308,163311],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[43344,163309,163310],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[146,163313,163316],{"className":163314,"code":163315,"language":25051},[25049],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[152,163317,163315],{"__ignoreMap":39},[24,163319,163320],{},"less保存时会自动变成.css文件",[24,163322,163323],{},"好好搞懂上述代码写法",[14,163325,163327],{"id":163326},"_2132-样式导入样式","21.3.2 样式导入样式",[37,163329],{"style":144971,"src":163330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[14,163332,163334],{"id":163333},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[28,163336,163337],{},[31,163338,163339],{},"准备工作",[37,163341],{"style":144971,"src":163342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[24,163344,163345,163346],{},"github地址：",[20318,163347,163348],{"href":163348,"rel":163349},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[43656],[24,163351,163352],{},"下载之后，将index.js文件拖到项目中就可以了",[24,163354,163355,163356],{},"js文件引入到index.html中使用的是",[152,163357,163358],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[28,163360,163361],{"start":46},[31,163362,163363],{},"vscode插件",[37,163365],{"style":144971,"src":163366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[24,163368,163369],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[24,163371,163372],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[37,163374],{"style":144971,"src":163375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[24,163377,163378],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[37,163380],{"style":144971,"src":163381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[24,163383,163384],{},"修改成75就可以，alt+z为快捷键",[24,163386,163387],{},"index.css：",[146,163389,163390],{"className":145115,"code":163132,"language":145117,"meta":39,"style":39},[152,163391,163392,163396,163402,163416,163420,163426,163440],{"__ignoreMap":39},[155,163393,163394],{"class":157,"line":158},[155,163395,163139],{"class":161},[155,163397,163398,163400],{"class":157,"line":46},[155,163399,69198],{"class":69863},[155,163401,35397],{"class":171},[155,163403,163404,163406,163408,163410,163412,163414],{"class":157,"line":121},[155,163405,89189],{"class":263},[155,163407,70000],{"class":171},[155,163409,163154],{"class":263},[155,163411,2938],{"class":167},[155,163413,148978],{"class":171},[155,163415,163161],{"class":161},[155,163417,163418],{"class":157,"line":180},[155,163419,21475],{"class":171},[155,163421,163422,163424],{"class":157,"line":194},[155,163423,148963],{"class":226},[155,163425,35397],{"class":171},[155,163427,163428,163430,163432,163434,163436,163438],{"class":157,"line":200},[155,163429,89131],{"class":263},[155,163431,70000],{"class":171},[155,163433,565],{"class":263},[155,163435,163182],{"class":167},[155,163437,148978],{"class":171},[155,163439,163187],{"class":161},[155,163441,163442],{"class":157,"line":213},[155,163443,21475],{"class":171},[24,163445,163129],{},[146,163447,163448],{"className":145115,"code":145519,"language":145117,"meta":39,"style":39},[152,163449,163450,163456,163468],{"__ignoreMap":39},[155,163451,163452,163454],{"class":157,"line":158},[155,163453,70363],{"class":69863},[155,163455,35397],{"class":171},[155,163457,163458,163460,163462,163464,163466],{"class":157,"line":46},[155,163459,89189],{"class":263},[155,163461,70000],{"class":171},[155,163463,439],{"class":263},[155,163465,70055],{"class":167},[155,163467,21206],{"class":171},[155,163469,163470],{"class":157,"line":121},[155,163471,21475],{"class":171},[20037,163473,163475],{"id":163474},"_214-响应式开发","21.4 响应式开发",[24,163477,163478],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[37,163480],{"style":144971,"src":163481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[24,163483,163484],{},"做法：",[21052,163486,163487,163490],{},[31,163488,163489],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[31,163491,163492],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[37,163494],{"style":144971,"src":163495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[24,163497,163498],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[14,163500,163502],{"id":163501},"_2141-简单代码示范","21.4.1 简单代码示范",[146,163504,163505],{"className":145115,"code":163132,"language":145117,"meta":39,"style":39},[152,163506,163507,163511,163517,163531,163535,163541,163555],{"__ignoreMap":39},[155,163508,163509],{"class":157,"line":158},[155,163510,163139],{"class":161},[155,163512,163513,163515],{"class":157,"line":46},[155,163514,69198],{"class":69863},[155,163516,35397],{"class":171},[155,163518,163519,163521,163523,163525,163527,163529],{"class":157,"line":121},[155,163520,89189],{"class":263},[155,163522,70000],{"class":171},[155,163524,163154],{"class":263},[155,163526,2938],{"class":167},[155,163528,148978],{"class":171},[155,163530,163161],{"class":161},[155,163532,163533],{"class":157,"line":180},[155,163534,21475],{"class":171},[155,163536,163537,163539],{"class":157,"line":194},[155,163538,148963],{"class":226},[155,163540,35397],{"class":171},[155,163542,163543,163545,163547,163549,163551,163553],{"class":157,"line":200},[155,163544,89131],{"class":263},[155,163546,70000],{"class":171},[155,163548,565],{"class":263},[155,163550,163182],{"class":167},[155,163552,148978],{"class":171},[155,163554,163187],{"class":161},[155,163556,163557],{"class":157,"line":213},[155,163558,21475],{"class":171},[24,163560,163561],{},"父盒子一般命名为container",[14,163563,163565],{"id":163564},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[24,163567,163568,163569],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[20234,163570,163571],{},"使得 Web 开发更加快捷",[21052,163573,163574],{},[31,163575,163576,163577],{},"官网：",[20234,163578,163579],{},[20318,163580,163581],{"href":163581,"rel":163582},"http:\u002F\u002Fgetbootstrap.com\u002F",[43656],[24,163584,163585],{},"可以直接去官网拿现成的东西",[28,163587,163588],{},[31,163589,163590],{},"Bootstrap的使用",[24,163592,163593],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[24,163595,163596],{},"Bootstrap 使用四步曲：",[24,163598,163599,163602],{},[20234,163600,163601],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[37,163604],{"style":144971,"src":163605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[24,163607,163608],{},"打开Bootstrap官网，然后下载",[37,163610],{"style":144971,"src":163611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[37,163613],{"style":144971,"src":163614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[24,163616,163617],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[24,163619,163620],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[24,163622,163623],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[37,163625],{"style":144971,"src":163626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[146,163628,163630],{"className":145115,"code":163629,"language":145117,"meta":39,"style":39},".center {\n  color: red;\n}\n",[152,163631,163632,163638,163648],{"__ignoreMap":39},[155,163633,163634,163636],{"class":157,"line":158},[155,163635,145406],{"class":226},[155,163637,35397],{"class":171},[155,163639,163640,163642,163644,163646],{"class":157,"line":46},[155,163641,89468],{"class":263},[155,163643,70000],{"class":171},[155,163645,75984],{"class":263},[155,163647,21206],{"class":171},[155,163649,163650],{"class":157,"line":121},[155,163651,21475],{"class":171},[24,163653,163654,163657],{},[152,163655,163656],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[37,163659],{"style":144971,"src":163660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[37,163662],{"style":144971,"src":163663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[37,163665],{"style":144971,"src":163666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[24,163668,163669],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[37,163671],{"style":144971,"src":163672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[24,163674,163675],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[28,163677,163678],{"start":46},[31,163679,163680],{},"布局容器",[37,163682],{"style":144971,"src":163683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[24,163685,163686],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[24,163688,163689],{},"container-fluid用于移动式布局比较方便",[28,163691,163692],{"start":121},[31,163693,163694,163695],{},"bootstrap ",[20234,163696,163697],{},"栅格系统原理",[37,163699],{"style":144971,"src":163700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[28,163702,163703],{"start":180},[31,163704,163705],{},[20234,163706,163707],{},"栅格选项参数",[37,163709],{"style":144971,"src":163710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[24,163712,163713],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[24,163715,34460],{},[146,163717,163718],{"className":145115,"code":163629,"language":145117,"meta":39,"style":39},[152,163719,163720,163726,163736],{"__ignoreMap":39},[155,163721,163722,163724],{"class":157,"line":158},[155,163723,145406],{"class":226},[155,163725,35397],{"class":171},[155,163727,163728,163730,163732,163734],{"class":157,"line":46},[155,163729,89468],{"class":263},[155,163731,70000],{"class":171},[155,163733,75984],{"class":263},[155,163735,21206],{"class":171},[155,163737,163738],{"class":157,"line":121},[155,163739,21475],{"class":171},[24,163741,154158],{},[37,163743],{"style":144971,"src":163744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[24,163746,163747],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[24,163749,163750],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[24,163752,163753],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[24,163755,163756],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[24,163758,163759],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[24,163761,163762],{},"汇总展示说明：",[146,163764,163765],{"className":145862,"code":149219,"language":145864,"meta":39,"style":39},[152,163766,163767,163771,163785,163789],{"__ignoreMap":39},[155,163768,163769],{"class":157,"line":158},[155,163770,149226],{"class":161},[155,163772,163773,163775,163777,163779,163781,163783],{"class":157,"line":46},[155,163774,20959],{"class":171},[155,163776,70174],{"class":69863},[155,163778,72049],{"class":226},[155,163780,317],{"class":171},[155,163782,149239],{"class":732},[155,163784,69870],{"class":171},[155,163786,163787],{"class":157,"line":121},[155,163788,149246],{"class":171},[155,163790,163791,163793,163795],{"class":157,"line":180},[155,163792,70348],{"class":171},[155,163794,70174],{"class":69863},[155,163796,69870],{"class":171},[37,163798],{"style":144971,"src":163799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[24,163801,163802],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[146,163804,163805],{"className":145862,"code":149219,"language":145864,"meta":39,"style":39},[152,163806,163807,163811,163825,163829],{"__ignoreMap":39},[155,163808,163809],{"class":157,"line":158},[155,163810,149226],{"class":161},[155,163812,163813,163815,163817,163819,163821,163823],{"class":157,"line":46},[155,163814,20959],{"class":171},[155,163816,70174],{"class":69863},[155,163818,72049],{"class":226},[155,163820,317],{"class":171},[155,163822,149239],{"class":732},[155,163824,69870],{"class":171},[155,163826,163827],{"class":157,"line":121},[155,163828,149246],{"class":171},[155,163830,163831,163833,163835],{"class":157,"line":180},[155,163832,70348],{"class":171},[155,163834,70174],{"class":69863},[155,163836,69870],{"class":171},[28,163838,163839],{"start":194},[31,163840,163841],{},[20234,163842,163843],{},"列嵌套",[37,163845],{"style":144971,"src":163846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[24,163848,163849],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[24,163851,163852],{},"没加row内部这样：",[37,163854],{"style":144971,"src":163855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[24,163857,163858],{},"加上row之后内部为：",[37,163860],{"style":144971,"src":163861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[28,163863,163864],{"start":200},[31,163865,163866],{},[20234,163867,163868],{},"列偏移",[37,163870],{"style":144971,"src":163871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[24,163873,163874],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[24,163876,163877],{},"要加偏移量，即偏移份数",[24,163879,163880],{},"偏移的份数=12-两个盒子的份数",[28,163882,163883],{"start":213},[31,163884,163885],{},[20234,163886,163887],{},"列排序",[37,163889],{"style":144971,"src":163890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[24,163892,163893],{},"pull拉左；push推右",[28,163895,163896],{"start":220},[31,163897,163898],{},[20234,163899,163900],{},"响应式工具",[37,163902],{"style":144971,"src":163903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[24,163905,163906],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[14,163908,163910],{"id":163909},"_2143-响应式小项目","21.4.3 响应式小项目",[24,163912,163913],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[24,163915,163916],{},"ul {",[24,163918,163919],{},"list-style: none;",[24,163921,163922],{},"margin:0;",[24,163924,163925],{},"padding:0; }",[37,163927],{"style":144971,"src":163928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[37,163930],{"style":144971,"src":163931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[24,163933,163934],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[24,163936,87452],{},[146,163938,163939],{"className":145115,"code":157785,"language":145117,"meta":39,"style":39},[152,163940,163941,163947,163957],{"__ignoreMap":39},[155,163942,163943,163945],{"class":157,"line":158},[155,163944,148963],{"class":226},[155,163946,35397],{"class":171},[155,163948,163949,163951,163953,163955],{"class":157,"line":46},[155,163950,149595],{"class":263},[155,163952,70000],{"class":171},[155,163954,43527],{"class":263},[155,163956,21206],{"class":171},[155,163958,163959],{"class":157,"line":121},[155,163960,21475],{"class":171},[24,163962,89016],{},[146,163964,163965],{"className":145115,"code":157785,"language":145117,"meta":39,"style":39},[152,163966,163967,163973,163983],{"__ignoreMap":39},[155,163968,163969,163971],{"class":157,"line":158},[155,163970,148963],{"class":226},[155,163972,35397],{"class":171},[155,163974,163975,163977,163979,163981],{"class":157,"line":46},[155,163976,149595],{"class":263},[155,163978,70000],{"class":171},[155,163980,43527],{"class":263},[155,163982,21206],{"class":171},[155,163984,163985],{"class":157,"line":121},[155,163986,21475],{"class":171},[20037,163988,163990],{"id":163989},"_215-swiper-插件使用","21.5 swiper 插件使用",[21052,163992,163993,163996,163999],{},[31,163994,163995],{},"下载需要的css和js文件html页面中 引入相关文件",[31,163997,163998],{},"官网找到类似案例，复制html结构，css样式 js 语法",[31,164000,164001],{},"根据需求定制修改模块",[37,164003],{"style":144971,"src":164004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[24,164006,164007],{},"解压后将这两部分放到项目中",[37,164009],{"style":144971,"src":164010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[24,164012,164013],{},"这个插件可以帮助我们实现轮播图效果",[24,164015,164016],{},"用法：",[37,164018],{"style":144971,"src":164019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[24,164021,164022],{},"找到自己喜欢的",[37,164024],{"style":144971,"src":164025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[24,164027,164028],{},"右键，查看网页源代码",[37,164030],{"style":144971,"src":164031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[24,164033,164034],{},"复制人家的结构内容",[24,164036,164037],{},"然后去看API文档：",[37,164039],{"style":144971,"src":164040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[24,164042,164043],{},"可以看看如何修改样式",[24,164045,164046],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[20011,164048,164049],{},"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":39,"searchDepth":46,"depth":46,"links":164051},[164052,164057,164061,164066,164071],{"id":162852,"depth":46,"text":162853,"children":164053},[164054,164055,164056],{"id":162856,"depth":121,"text":162857},{"id":162866,"depth":121,"text":162867},{"id":162961,"depth":121,"text":162962},{"id":162976,"depth":46,"text":162977,"children":164058},[164059,164060],{"id":162998,"depth":121,"text":162999},{"id":163014,"depth":121,"text":163015},{"id":163089,"depth":46,"text":163090,"children":164062},[164063,164064,164065],{"id":163102,"depth":121,"text":163103},{"id":163326,"depth":121,"text":163327},{"id":163333,"depth":121,"text":163334},{"id":163474,"depth":46,"text":163475,"children":164067},[164068,164069,164070],{"id":163501,"depth":121,"text":163502},{"id":163564,"depth":121,"text":163565},{"id":163909,"depth":121,"text":163910},{"id":163989,"depth":46,"text":163990},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":162844,"description":20020},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":164078,"title":164079,"body":164080,"description":20020,"extension":20021,"meta":164300,"navigation":216,"path":164301,"seo":164302,"stem":164303,"__hash__":164304},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":164081,"toc":164296},[164082,164085,164089,164092,164107,164112,164115,164120,164155,164160,164172,164177,164190,164195,164212,164217,164237,164242,164260,164263,164266,164269,164272,164276,164279,164282,164285,164288,164291,164294],[10,164083,164079],{"id":164084},"_22-代码提交与新型相对单位",[20037,164086,164088],{"id":164087},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[24,164090,164091],{},"法1：",[28,164093,164094,164101,164104],{},[31,164095,164096,164097],{},"登录网站注册：",[20318,164098,164099],{"href":164099,"rel":164100},"https:\u002F\u002Fgitee.com\u002F",[43656],[31,164102,164103],{},"码云创建新的仓库",[31,164105,164106],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[21052,164108,164109],{},[31,164110,164111],{},"在网站根目录右键-- Git Bash Here",[37,164113],{"style":144971,"src":164114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[21052,164116,164117],{},[31,164118,164119],{},"如果是第一次利用git提交，请配置好全局选项",[146,164121,164123],{"className":135859,"code":164122,"language":135861,"meta":39,"style":39},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[152,164124,164125,164141],{"__ignoreMap":39},[155,164126,164127,164130,164132,164135,164138],{"class":157,"line":158},[155,164128,164129],{"class":226},"git",[155,164131,138282],{"class":732},[155,164133,164134],{"class":263}," --global",[155,164136,164137],{"class":732}," user.name",[155,164139,164140],{"class":732}," \"你的名字\"\n",[155,164142,164143,164145,164147,164149,164152],{"class":157,"line":46},[155,164144,164129],{"class":226},[155,164146,138282],{"class":732},[155,164148,164134],{"class":263},[155,164150,164151],{"class":732}," user.email",[155,164153,164154],{"class":732}," \"你的邮箱\"\n",[21052,164156,164157],{},[31,164158,164159],{},"初始化仓库",[146,164161,164163],{"className":135859,"code":164162,"language":135861,"meta":39,"style":39},"git init\n",[152,164164,164165],{"__ignoreMap":39},[155,164166,164167,164169],{"class":157,"line":158},[155,164168,164129],{"class":226},[155,164170,164171],{"class":732}," init\n",[21052,164173,164174],{},[31,164175,164176],{},"把本地文件放到暂存区",[146,164178,164180],{"className":135859,"code":164179,"language":135861,"meta":39,"style":39},"git add .\n",[152,164181,164182],{"__ignoreMap":39},[155,164183,164184,164186,164188],{"class":157,"line":158},[155,164185,164129],{"class":226},[155,164187,25073],{"class":732},[155,164189,48530],{"class":732},[21052,164191,164192],{},[31,164193,164194],{},"把本地文件放到本地仓库里面",[146,164196,164198],{"className":135859,"code":164197,"language":135861,"meta":39,"style":39},"git commit -m \"first commit\"\n",[152,164199,164200],{"__ignoreMap":39},[155,164201,164202,164204,164207,164209],{"class":157,"line":158},[155,164203,164129],{"class":226},[155,164205,164206],{"class":732}," commit",[155,164208,119445],{"class":263},[155,164210,164211],{"class":732}," \"first commit\"\n",[21052,164213,164214],{},[31,164215,164216],{},"链接远程仓库",[146,164218,164220],{"className":135859,"code":164219,"language":135861,"meta":39,"style":39},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[152,164221,164222],{"__ignoreMap":39},[155,164223,164224,164226,164229,164231,164234],{"class":157,"line":158},[155,164225,164129],{"class":226},[155,164227,164228],{"class":732}," remote",[155,164230,25073],{"class":732},[155,164232,164233],{"class":732}," origin",[155,164235,164236],{"class":732}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[21052,164238,164239],{},[31,164240,164241],{},"把本地仓库的文件推送到远程仓库 push",[146,164243,164245],{"className":135859,"code":164244,"language":135861,"meta":39,"style":39},"git push -u origin master\n",[152,164246,164247],{"__ignoreMap":39},[155,164248,164249,164251,164253,164255,164257],{"class":157,"line":158},[155,164250,164129],{"class":226},[155,164252,48805],{"class":732},[155,164254,48079],{"class":263},[155,164256,164233],{"class":732},[155,164258,164259],{"class":732}," master\n",[37,164261],{"style":144971,"src":164262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[24,164264,164265],{},"上方方法暂未实现，后边学完git后在整",[24,164267,164268],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[37,164270],{"style":144971,"src":164271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[20037,164273,164275],{"id":164274},"_222-新型相对单位","22.2 新型相对单位",[37,164277],{"style":144971,"src":164278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[37,164280],{"style":144971,"src":164281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[24,164283,164284],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[24,164286,164287],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[37,164289],{"style":144971,"src":164290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[24,164292,164293],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[20011,164295,43749],{},{"title":39,"searchDepth":46,"depth":46,"links":164297},[164298,164299],{"id":164087,"depth":46,"text":164088},{"id":164274,"depth":46,"text":164275},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":164079,"description":20020},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":164306,"title":164307,"body":164308,"description":164312,"extension":20021,"meta":164313,"navigation":216,"path":164314,"seo":164315,"stem":164316,"__hash__":164317},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":164309,"toc":164310},[],{"title":39,"searchDepth":46,"depth":46,"links":164311},[],"自己正经开始学编程的第一门语言！",{"category":111402},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":164307,"description":164312},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":164319,"title":164320,"body":164321,"description":20020,"extension":20021,"meta":165468,"navigation":216,"path":165469,"seo":165470,"stem":165471,"__hash__":165472},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":164322,"toc":165444},[164323,164326,164330,164333,164336,164361,164364,164370,164374,164377,164404,164407,164447,164450,164462,164465,164471,164475,164479,164506,164523,164530,164534,164537,164563,164566,164570,164573,164613,164616,164633,164639,164643,164648,164692,164695,164713,164716,164784,164788,164795,164798,164813,164816,164825,164828,164839,164842,164851,164854,164871,164874,164889,164893,164897,164900,164902,164922,164926,164929,164932,164943,164946,164952,164956,164962,164989,164992,165004,165007,165018,165021,165027,165031,165037,165087,165090,165132,165135,165168,165171,165205,165209,165212,165232,165235,165271,165274,165287,165291,165295,165301,165304,165317,165321,165324,165330,165333,165337,165340,165343,165392,165396,165412,165418,165425,165431,165441],[10,164324,164320],{"id":164325},"_1-python环境与第一个程序",[20037,164327,164329],{"id":164328},"_11-什么是python","1.1 什么是Python",[24,164331,164332],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[24,164334,164335],{},"理解 Python 时抓住三个关键词：",[28,164337,164338,164341,164344],{},[31,164339,164340],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[31,164342,164343],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[31,164345,164346,164347,20293,164350,20293,164353,20293,164356,20293,164358,48174],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[152,164348,164349],{},"os",[152,164351,164352],{},"sys",[152,164354,164355],{},"json",[152,164357,76423],{},[152,164359,164360],{},"datetime",[24,164362,164363],{},"Python 程序的运行链路：",[146,164365,164368],{"className":164366,"code":164367,"language":25051,"meta":39},[25049],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[152,164369,164367],{"__ignoreMap":39},[20037,164371,164373],{"id":164372},"_12-python解释器","1.2 Python解释器",[24,164375,164376],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[146,164378,164380],{"className":43613,"code":164379,"language":43615,"meta":39,"style":39},"python --version\npython3 --version\npython\npython3\n",[152,164381,164382,164388,164394,164399],{"__ignoreMap":39},[155,164383,164384,164386],{"class":157,"line":158},[155,164385,150],{"class":226},[155,164387,46082],{"class":263},[155,164389,164390,164392],{"class":157,"line":46},[155,164391,119442],{"class":226},[155,164393,46082],{"class":263},[155,164395,164396],{"class":157,"line":121},[155,164397,164398],{"class":226},"python\n",[155,164400,164401],{"class":157,"line":180},[155,164402,164403],{"class":226},"python3\n",[24,164405,164406],{},"进入交互模式后，可以直接输入表达式：",[146,164408,164410],{"className":148,"code":164409,"language":150,"meta":39,"style":39},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[152,164411,164412,164423,164428,164442],{"__ignoreMap":39},[155,164413,164414,164417,164419,164421],{"class":157,"line":158},[155,164415,164416],{"class":167},">>>",[155,164418,1277],{"class":263},[155,164420,15186],{"class":167},[155,164422,17350],{"class":263},[155,164424,164425],{"class":157,"line":46},[155,164426,164427],{"class":263},"3\n",[155,164429,164430,164432,164435,164437,164440],{"class":157,"line":121},[155,164431,164416],{"class":167},[155,164433,164434],{"class":263}," print",[155,164436,230],{"class":171},[155,164438,164439],{"class":732},"\"hello python\"",[155,164441,363],{"class":171},[155,164443,164444],{"class":157,"line":180},[155,164445,164446],{"class":171},"hello python\n",[24,164448,164449],{},"退出交互模式：",[146,164451,164453],{"className":148,"code":164452,"language":150,"meta":39,"style":39},"exit()\n",[152,164454,164455],{"__ignoreMap":39},[155,164456,164457,164460],{"class":157,"line":158},[155,164458,164459],{"class":263},"exit",[155,164461,294],{"class":171},[24,164463,164464],{},"或使用快捷键：",[146,164466,164469],{"className":164467,"code":164468,"language":25051,"meta":39},[25049],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[152,164470,164468],{"__ignoreMap":39},[20037,164472,164474],{"id":164473},"_13-安装python","1.3 安装Python",[14,164476,164478],{"id":164477},"_131-windows安装","1.3.1 Windows安装",[28,164480,164481,164488,164491,164497,164503],{},[31,164482,164483,164484],{},"打开 Python 官网：",[20318,164485,164486],{"href":164486,"rel":164487},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[43656],[31,164489,164490],{},"下载 Windows Installer。",[31,164492,164493,164494,48174],{},"安装时勾选 ",[152,164495,164496],{},"Add Python to PATH",[31,164498,164499,164500,48174],{},"点击 ",[152,164501,164502],{},"Install Now",[31,164504,164505],{},"安装完成后打开命令提示符验证：",[146,164507,164509],{"className":43613,"code":164508,"language":43615,"meta":39,"style":39},"python --version\npip --version\n",[152,164510,164511,164517],{"__ignoreMap":39},[155,164512,164513,164515],{"class":157,"line":158},[155,164514,150],{"class":226},[155,164516,46082],{"class":263},[155,164518,164519,164521],{"class":157,"line":46},[155,164520,43622],{"class":226},[155,164522,46082],{"class":263},[24,164524,164525,164526,164529],{},"如果提示 ",[152,164527,164528],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[14,164531,164533],{"id":164532},"_132-macos安装","1.3.2 macOS安装",[24,164535,164536],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[146,164538,164540],{"className":43613,"code":164539,"language":43615,"meta":39,"style":39},"brew install python\npython3 --version\npip3 --version\n",[152,164541,164542,164551,164557],{"__ignoreMap":39},[155,164543,164544,164547,164549],{"class":157,"line":158},[155,164545,164546],{"class":226},"brew",[155,164548,43625],{"class":732},[155,164550,142881],{"class":732},[155,164552,164553,164555],{"class":157,"line":46},[155,164554,119442],{"class":226},[155,164556,46082],{"class":263},[155,164558,164559,164561],{"class":157,"line":121},[155,164560,138263],{"class":226},[155,164562,46082],{"class":263},[24,164564,164565],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[14,164567,164569],{"id":164568},"_133-linux安装","1.3.3 Linux安装",[24,164571,164572],{},"Ubuntu\u002FDebian：",[146,164574,164576],{"className":43613,"code":164575,"language":43615,"meta":39,"style":39},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[152,164577,164578,164586,164601,164607],{"__ignoreMap":39},[155,164579,164580,164582,164584],{"class":157,"line":158},[155,164581,44368],{"class":226},[155,164583,135880],{"class":732},[155,164585,46031],{"class":732},[155,164587,164588,164590,164592,164594,164596,164598],{"class":157,"line":46},[155,164589,44368],{"class":226},[155,164591,135880],{"class":732},[155,164593,43625],{"class":732},[155,164595,122966],{"class":732},[155,164597,119361],{"class":732},[155,164599,164600],{"class":732}," python3-venv\n",[155,164602,164603,164605],{"class":157,"line":121},[155,164604,119442],{"class":226},[155,164606,46082],{"class":263},[155,164608,164609,164611],{"class":157,"line":180},[155,164610,138263],{"class":226},[155,164612,46082],{"class":263},[24,164614,164615],{},"Fedora：",[146,164617,164619],{"className":43613,"code":164618,"language":43615,"meta":39,"style":39},"sudo dnf install python3 python3-pip\n",[152,164620,164621],{"__ignoreMap":39},[155,164622,164623,164625,164627,164629,164631],{"class":157,"line":158},[155,164624,44368],{"class":226},[155,164626,46104],{"class":732},[155,164628,43625],{"class":732},[155,164630,122966],{"class":732},[155,164632,138328],{"class":732},[24,164634,164635,164636,164638],{},"Linux 上通常使用 ",[152,164637,119442],{}," 命令，避免和系统旧版本 Python 冲突。",[20037,164640,164642],{"id":164641},"_14-pip包管理器","1.4 pip包管理器",[24,164644,164645,164647],{},[152,164646,43622],{}," 用来安装第三方库。",[146,164649,164651],{"className":43613,"code":164650,"language":43615,"meta":39,"style":39},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[152,164652,164653,164662,164671,164679,164685],{"__ignoreMap":39},[155,164654,164655,164657,164659],{"class":157,"line":158},[155,164656,43622],{"class":226},[155,164658,43625],{"class":732},[155,164660,164661],{"class":732}," requests\n",[155,164663,164664,164666,164669],{"class":157,"line":46},[155,164665,43622],{"class":226},[155,164667,164668],{"class":732}," uninstall",[155,164670,164661],{"class":732},[155,164672,164673,164675,164677],{"class":157,"line":121},[155,164674,43622],{"class":226},[155,164676,136137],{"class":732},[155,164678,164661],{"class":732},[155,164680,164681,164683],{"class":157,"line":180},[155,164682,43622],{"class":226},[155,164684,137518],{"class":732},[155,164686,164687,164689],{"class":157,"line":194},[155,164688,43622],{"class":226},[155,164690,164691],{"class":732}," freeze\n",[24,164693,164694],{},"国内网络较慢时可以临时使用镜像：",[146,164696,164698],{"className":43613,"code":164697,"language":43615,"meta":39,"style":39},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[152,164699,164700],{"__ignoreMap":39},[155,164701,164702,164704,164706,164709,164711],{"class":157,"line":158},[155,164703,43622],{"class":226},[155,164705,43625],{"class":732},[155,164707,164708],{"class":732}," requests",[155,164710,46219],{"class":263},[155,164712,138291],{"class":732},[24,164714,164715],{},"常见第三方库：",[20222,164717,164718,164727],{},[20225,164719,164720],{},[20228,164721,164722,164725],{},[20231,164723,164724],{},"库",[20231,164726,121259],{},[20269,164728,164729,164737,164744,164752,164760,164768,164776],{},[20228,164730,164731,164734],{},[20274,164732,164733],{},"requests",[20274,164735,164736],{},"网络请求",[20228,164738,164739,164741],{},[20274,164740,119189],{},[20274,164742,164743],{},"数值计算",[20228,164745,164746,164749],{},[20274,164747,164748],{},"pandas",[20274,164750,164751],{},"表格数据处理",[20228,164753,164754,164757],{},[20274,164755,164756],{},"matplotlib",[20274,164758,164759],{},"绘图",[20228,164761,164762,164765],{},[20274,164763,164764],{},"pyecharts",[20274,164766,164767],{},"ECharts 图表",[20228,164769,164770,164773],{},[20274,164771,164772],{},"flask",[20274,164774,164775],{},"Web 后端",[20228,164777,164778,164781],{},[20274,164779,164780],{},"pytest",[20274,164782,164783],{},"自动化测试",[20037,164785,164787],{"id":164786},"_15-虚拟环境","1.5 虚拟环境",[24,164789,164790,164791,164794],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[152,164792,164793],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[24,164796,164797],{},"创建虚拟环境：",[146,164799,164801],{"className":43613,"code":164800,"language":43615,"meta":39,"style":39},"python -m venv .venv\n",[152,164802,164803],{"__ignoreMap":39},[155,164804,164805,164807,164809,164811],{"class":157,"line":158},[155,164806,150],{"class":226},[155,164808,119445],{"class":263},[155,164810,119448],{"class":732},[155,164812,119451],{"class":732},[24,164814,164815],{},"Windows 激活：",[146,164817,164819],{"className":43613,"code":164818,"language":43615,"meta":39,"style":39},".venv\\Scripts\\activate\n",[152,164820,164821],{"__ignoreMap":39},[155,164822,164823],{"class":157,"line":158},[155,164824,164818],{"class":226},[24,164826,164827],{},"macOS\u002FLinux 激活：",[146,164829,164831],{"className":43613,"code":164830,"language":43615,"meta":39,"style":39},"source .venv\u002Fbin\u002Factivate\n",[152,164832,164833],{"__ignoreMap":39},[155,164834,164835,164837],{"class":157,"line":158},[155,164836,119456],{"class":263},[155,164838,119459],{"class":732},[24,164840,164841],{},"退出虚拟环境：",[146,164843,164845],{"className":43613,"code":164844,"language":43615,"meta":39,"style":39},"deactivate\n",[152,164846,164847],{"__ignoreMap":39},[155,164848,164849],{"class":157,"line":158},[155,164850,164844],{"class":226},[24,164852,164853],{},"保存依赖：",[146,164855,164857],{"className":43613,"code":164856,"language":43615,"meta":39,"style":39},"pip freeze > requirements.txt\n",[152,164858,164859],{"__ignoreMap":39},[155,164860,164861,164863,164866,164868],{"class":157,"line":158},[155,164862,43622],{"class":226},[155,164864,164865],{"class":732}," freeze",[155,164867,46011],{"class":167},[155,164869,164870],{"class":732}," requirements.txt\n",[24,164872,164873],{},"安装依赖：",[146,164875,164877],{"className":43613,"code":164876,"language":43615,"meta":39,"style":39},"pip install -r requirements.txt\n",[152,164878,164879],{"__ignoreMap":39},[155,164880,164881,164883,164885,164887],{"class":157,"line":158},[155,164882,43622],{"class":226},[155,164884,43625],{"class":732},[155,164886,138202],{"class":263},[155,164888,164870],{"class":732},[20037,164890,164892],{"id":164891},"_16-开发工具","1.6 开发工具",[14,164894,164896],{"id":164895},"_161-pycharm","1.6.1 PyCharm",[24,164898,164899],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[24,164901,140625],{},[28,164903,164904,164907,164910,164916,164919],{},[31,164905,164906],{},"New Project：创建项目。",[31,164908,164909],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[31,164911,164912,164913,144546],{},"New Python File：创建 ",[152,164914,164915],{},".py",[31,164917,164918],{},"Run：运行当前文件。",[31,164920,164921],{},"Debug：断点调试。",[14,164923,164925],{"id":164924},"_162-vs-code","1.6.2 VS Code",[24,164927,164928],{},"VS Code 轻量，适合后续多语言开发。",[24,164930,164931],{},"建议安装插件：",[28,164933,164934,164937,164940],{},[31,164935,164936],{},"Python。",[31,164938,164939],{},"Pylance。",[31,164941,164942],{},"Jupyter。",[24,164944,164945],{},"选择解释器：",[146,164947,164950],{"className":164948,"code":164949,"language":25051,"meta":39},[25049],"Ctrl + Shift + P -> Python: Select Interpreter\n",[152,164951,164949],{"__ignoreMap":39},[20037,164953,164955],{"id":164954},"_17-第一个python程序","1.7 第一个Python程序",[24,164957,164958,164959,44410],{},"创建文件 ",[152,164960,164961],{},"hello.py",[146,164963,164965],{"className":148,"code":164964,"language":150,"meta":39,"style":39},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[152,164966,164967,164978],{"__ignoreMap":39},[155,164968,164969,164971,164973,164976],{"class":157,"line":158},[155,164970,15451],{"class":263},[155,164972,230],{"class":171},[155,164974,164975],{"class":732},"\"Hello World\"",[155,164977,363],{"class":171},[155,164979,164980,164982,164984,164987],{"class":157,"line":46},[155,164981,15451],{"class":263},[155,164983,230],{"class":171},[155,164985,164986],{"class":732},"\"你好，Python\"",[155,164988,363],{"class":171},[24,164990,164991],{},"在终端运行：",[146,164993,164995],{"className":43613,"code":164994,"language":43615,"meta":39,"style":39},"python hello.py\n",[152,164996,164997],{"__ignoreMap":39},[155,164998,164999,165001],{"class":157,"line":158},[155,165000,150],{"class":226},[155,165002,165003],{"class":732}," hello.py\n",[24,165005,165006],{},"或：",[146,165008,165010],{"className":43613,"code":165009,"language":43615,"meta":39,"style":39},"python3 hello.py\n",[152,165011,165012],{"__ignoreMap":39},[155,165013,165014,165016],{"class":157,"line":158},[155,165015,119442],{"class":226},[155,165017,165003],{"class":732},[24,165019,165020],{},"输出：",[146,165022,165025],{"className":165023,"code":165024,"language":25051,"meta":39},[25049],"Hello World\n你好，Python\n",[152,165026,165024],{"__ignoreMap":39},[20037,165028,165030],{"id":165029},"_18-print函数","1.8 print函数",[24,165032,165033,165036],{},[152,165034,165035],{},"print()"," 用来输出内容。",[146,165038,165040],{"className":148,"code":165039,"language":150,"meta":39,"style":39},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[152,165041,165042,165052,165062,165072],{"__ignoreMap":39},[155,165043,165044,165046,165048,165050],{"class":157,"line":158},[155,165045,15451],{"class":263},[155,165047,230],{"class":171},[155,165049,25707],{"class":732},[155,165051,363],{"class":171},[155,165053,165054,165056,165058,165060],{"class":157,"line":46},[155,165055,15451],{"class":263},[155,165057,230],{"class":171},[155,165059,20389],{"class":263},[155,165061,363],{"class":171},[155,165063,165064,165066,165068,165070],{"class":157,"line":121},[155,165065,15451],{"class":263},[155,165067,230],{"class":171},[155,165069,20139],{"class":263},[155,165071,363],{"class":171},[155,165073,165074,165076,165078,165081,165083,165085],{"class":157,"line":180},[155,165075,15451],{"class":263},[155,165077,230],{"class":171},[155,165079,165080],{"class":732},"\"年龄:\"",[155,165082,7589],{"class":171},[155,165084,20709],{"class":263},[155,165086,363],{"class":171},[24,165088,165089],{},"多个内容用逗号隔开，默认中间加空格：",[146,165091,165093],{"className":148,"code":165092,"language":150,"meta":39,"style":39},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[152,165094,165095,165105,165115],{"__ignoreMap":39},[155,165096,165097,165100,165102],{"class":157,"line":158},[155,165098,165099],{"class":171},"name ",[155,165101,317],{"class":167},[155,165103,165104],{"class":732}," \"张三\"\n",[155,165106,165107,165110,165112],{"class":157,"line":46},[155,165108,165109],{"class":171},"age ",[155,165111,317],{"class":167},[155,165113,165114],{"class":263}," 18\n",[155,165116,165117,165119,165121,165124,165127,165129],{"class":157,"line":121},[155,165118,15451],{"class":263},[155,165120,230],{"class":171},[155,165122,165123],{"class":732},"\"姓名:\"",[155,165125,165126],{"class":171},", name, ",[155,165128,165080],{"class":732},[155,165130,165131],{"class":171},", age)\n",[24,165133,165134],{},"修改分隔符：",[146,165136,165138],{"className":148,"code":165137,"language":150,"meta":39,"style":39},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[152,165139,165140],{"__ignoreMap":39},[155,165141,165142,165144,165146,165149,165151,165153,165155,165157,165159,165162,165164,165166],{"class":157,"line":158},[155,165143,15451],{"class":263},[155,165145,230],{"class":171},[155,165147,165148],{"class":732},"\"2024\"",[155,165150,7589],{"class":171},[155,165152,72879],{"class":732},[155,165154,7589],{"class":171},[155,165156,72879],{"class":732},[155,165158,7589],{"class":171},[155,165160,165161],{"class":323},"sep",[155,165163,317],{"class":167},[155,165165,2053],{"class":732},[155,165167,363],{"class":171},[24,165169,165170],{},"修改结尾符：",[146,165172,165174],{"className":148,"code":165173,"language":150,"meta":39,"style":39},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[152,165175,165176,165194],{"__ignoreMap":39},[155,165177,165178,165180,165182,165184,165186,165188,165190,165192],{"class":157,"line":158},[155,165179,15451],{"class":263},[155,165181,230],{"class":171},[155,165183,25707],{"class":732},[155,165185,7589],{"class":171},[155,165187,15425],{"class":323},[155,165189,317],{"class":167},[155,165191,24225],{"class":732},[155,165193,363],{"class":171},[155,165195,165196,165198,165200,165203],{"class":157,"line":46},[155,165197,15451],{"class":263},[155,165199,230],{"class":171},[155,165201,165202],{"class":732},"\"python\"",[155,165204,363],{"class":171},[20037,165206,165208],{"id":165207},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[24,165210,165211],{},"交互运行适合临时验证：",[146,165213,165215],{"className":148,"code":165214,"language":150,"meta":39,"style":39},">>> 10 * 3\n30\n",[152,165216,165217,165227],{"__ignoreMap":39},[155,165218,165219,165221,165223,165225],{"class":157,"line":158},[155,165220,164416],{"class":167},[155,165222,21925],{"class":263},[155,165224,26381],{"class":167},[155,165226,138599],{"class":263},[155,165228,165229],{"class":157,"line":46},[155,165230,165231],{"class":263},"30\n",[24,165233,165234],{},"脚本运行适合保存程序：",[146,165236,165238],{"className":148,"code":165237,"language":150,"meta":39,"style":39},"price = 8\ncount = 5\nprint(price * count)\n",[152,165239,165240,165250,165259],{"__ignoreMap":39},[155,165241,165242,165245,165247],{"class":157,"line":158},[155,165243,165244],{"class":171},"price ",[155,165246,317],{"class":167},[155,165248,165249],{"class":263}," 8\n",[155,165251,165252,165255,165257],{"class":157,"line":46},[155,165253,165254],{"class":171},"count ",[155,165256,317],{"class":167},[155,165258,72990],{"class":263},[155,165260,165261,165263,165266,165268],{"class":157,"line":121},[155,165262,15451],{"class":263},[155,165264,165265],{"class":171},"(price ",[155,165267,1563],{"class":167},[155,165269,165270],{"class":171}," count)\n",[24,165272,165273],{},"实际学习中推荐：",[28,165275,165276,165279,165284],{},[31,165277,165278],{},"临时试一个语法，用交互模式。",[31,165280,165281,165282,144546],{},"写完整练习，用 ",[152,165283,164915],{},[31,165285,165286],{},"写项目，用独立目录和虚拟环境。",[20037,165288,165290],{"id":165289},"_110-常见错误","1.10 常见错误",[14,165292,165294],{"id":165293},"_1101-命令找不到","1.10.1 命令找不到",[146,165296,165299],{"className":165297,"code":165298,"language":25051,"meta":39},[25049],"python: command not found\n",[152,165300,165298],{"__ignoreMap":39},[24,165302,165303],{},"原因：",[28,165305,165306,165309,165312],{},[31,165307,165308],{},"没安装 Python。",[31,165310,165311],{},"PATH 没配置。",[31,165313,165314,165315,48174],{},"Linux\u002FmacOS 应该使用 ",[152,165316,119442],{},[14,165318,165320],{"id":165319},"_1102-文件名冲突","1.10.2 文件名冲突",[24,165322,165323],{},"不要把文件命名为：",[146,165325,165328],{"className":165326,"code":165327,"language":25051,"meta":39},[25049],"random.py\njson.py\ntime.py\nrequests.py\n",[152,165329,165327],{"__ignoreMap":39},[24,165331,165332],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[14,165334,165336],{"id":165335},"_1103-中文乱码","1.10.3 中文乱码",[24,165338,165339],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[24,165341,165342],{},"如果读写文件出现乱码，要明确指定编码：",[146,165344,165346],{"className":148,"code":165345,"language":150,"meta":39,"style":39},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[152,165347,165348,165382],{"__ignoreMap":39},[155,165349,165350,165352,165355,165357,165360,165362,165365,165367,165370,165372,165375,165377,165379],{"class":157,"line":158},[155,165351,126396],{"class":167},[155,165353,165354],{"class":263}," open",[155,165356,230],{"class":171},[155,165358,165359],{"class":732},"\"data.txt\"",[155,165361,7589],{"class":171},[155,165363,165364],{"class":732},"\"r\"",[155,165366,7589],{"class":171},[155,165368,165369],{"class":323},"encoding",[155,165371,317],{"class":167},[155,165373,165374],{"class":732},"\"utf-8\"",[155,165376,33541],{"class":171},[155,165378,907],{"class":167},[155,165380,165381],{"class":171}," f:\n",[155,165383,165384,165387,165389],{"class":157,"line":46},[155,165385,165386],{"class":171},"    content ",[155,165388,317],{"class":167},[155,165390,165391],{"class":171}," f.read()\n",[20037,165393,165395],{"id":165394},"_111-本章练习","1.11 本章练习",[28,165397,165398,165401,165407],{},[31,165399,165400],{},"安装 Python，并在终端输出版本号。",[31,165402,165403,165404,165406],{},"新建 ",[152,165405,164961],{},"，输出自己的姓名、年龄、学习目标。",[31,165408,122929,165409,165411],{},[152,165410,165035],{}," 输出下面格式：",[146,165413,165416],{"className":165414,"code":165415,"language":25051,"meta":39},[25049],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[152,165417,165415],{"__ignoreMap":39},[28,165419,165420],{"start":180},[31,165421,122929,165422,165424],{},[152,165423,165161],{}," 输出日期：",[146,165426,165429],{"className":165427,"code":165428,"language":25051,"meta":39},[25049],"2024-10-10\n",[152,165430,165428],{"__ignoreMap":39},[28,165432,165433],{"start":194},[31,165434,122929,165435,165437,165438,165440],{},[152,165436,15425],{}," 让两次 ",[152,165439,165035],{}," 输出在同一行。",[20011,165442,165443],{},"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":39,"searchDepth":46,"depth":46,"links":165445},[165446,165447,165448,165453,165454,165455,165459,165460,165461,165462,165467],{"id":164328,"depth":46,"text":164329},{"id":164372,"depth":46,"text":164373},{"id":164473,"depth":46,"text":164474,"children":165449},[165450,165451,165452],{"id":164477,"depth":121,"text":164478},{"id":164532,"depth":121,"text":164533},{"id":164568,"depth":121,"text":164569},{"id":164641,"depth":46,"text":164642},{"id":164786,"depth":46,"text":164787},{"id":164891,"depth":46,"text":164892,"children":165456},[165457,165458],{"id":164895,"depth":121,"text":164896},{"id":164924,"depth":121,"text":164925},{"id":164954,"depth":46,"text":164955},{"id":165029,"depth":46,"text":165030},{"id":165207,"depth":46,"text":165208},{"id":165289,"depth":46,"text":165290,"children":165463},[165464,165465,165466],{"id":165293,"depth":121,"text":165294},{"id":165319,"depth":121,"text":165320},{"id":165335,"depth":121,"text":165336},{"id":165394,"depth":46,"text":165395},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":164320,"description":20020},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":165474,"title":165475,"body":165476,"description":20020,"extension":20021,"meta":167880,"navigation":216,"path":167881,"seo":167882,"stem":167883,"__hash__":167884},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":165477,"toc":167865},[165478,165481,165485,165488,165491,165508,165511,165553,165556,165560,165563,165566,165603,165606,165640,165643,165735,165739,165753,165756,165783,165786,165790,165893,165900,165903,165920,165924,165931,166120,166123,166196,166200,166203,166287,166290,166322,166326,166530,166533,166537,166543,166645,166648,166904,166908,166911,166914,166928,166930,167116,167120,167482,167488,167492,167495,167619,167622,167801,167804,167808,167841,167845,167862],[10,165479,165475],{"id":165480},"_10-json与pyecharts折线图",[20037,165482,165484],{"id":165483},"_101-数据可视化","10.1 数据可视化",[24,165486,165487],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[24,165489,165490],{},"常见图表：",[28,165492,165493,165496,165499,165502,165505],{},[31,165494,165495],{},"折线图：看趋势。",[31,165497,165498],{},"柱状图：看分类对比。",[31,165500,165501],{},"饼图：看占比。",[31,165503,165504],{},"地图：看地域分布。",[31,165506,165507],{},"散点图：看两个变量之间的关系。",[24,165509,165510],{},"Python 可视化常用库：",[20222,165512,165513,165521],{},[20225,165514,165515],{},[20228,165516,165517,165519],{},[20231,165518,164724],{},[20231,165520,43531],{},[20269,165522,165523,165530,165538,165545],{},[20228,165524,165525,165527],{},[20274,165526,164756],{},[20274,165528,165529],{},"基础、经典、可定制",[20228,165531,165532,165535],{},[20274,165533,165534],{},"seaborn",[20274,165536,165537],{},"统计图表更美观",[20228,165539,165540,165542],{},[20274,165541,164764],{},[20274,165543,165544],{},"生成交互式网页图表",[20228,165546,165547,165550],{},[20274,165548,165549],{},"plotly",[20274,165551,165552],{},"交互图表能力强",[24,165554,165555],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[20037,165557,165559],{"id":165558},"_102-json回顾","10.2 JSON回顾",[24,165561,165562],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[24,165564,165565],{},"Python 字典：",[146,165567,165569],{"className":148,"code":165568,"language":150,"meta":39,"style":39},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[152,165570,165571,165579,165590,165599],{"__ignoreMap":39},[155,165572,165573,165575,165577],{"class":157,"line":158},[155,165574,120221],{"class":171},[155,165576,317],{"class":167},[155,165578,35397],{"class":171},[155,165580,165581,165584,165586,165588],{"class":157,"line":46},[155,165582,165583],{"class":732},"    \"name\"",[155,165585,70000],{"class":171},[155,165587,87832],{"class":732},[155,165589,990],{"class":171},[155,165591,165592,165595,165597],{"class":157,"line":121},[155,165593,165594],{"class":732},"    \"value\"",[155,165596,70000],{"class":171},[155,165598,116021],{"class":263},[155,165600,165601],{"class":157,"line":180},[155,165602,21475],{"class":171},[24,165604,165605],{},"JSON 字符串：",[146,165607,165610],{"className":165608,"code":165609,"language":164355,"meta":39,"style":39},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[152,165611,165612,165616,165627,165636],{"__ignoreMap":39},[155,165613,165614],{"class":157,"line":158},[155,165615,3008],{"class":171},[155,165617,165618,165621,165623,165625],{"class":157,"line":46},[155,165619,165620],{"class":263},"  \"name\"",[155,165622,70000],{"class":171},[155,165624,87832],{"class":732},[155,165626,990],{"class":171},[155,165628,165629,165632,165634],{"class":157,"line":121},[155,165630,165631],{"class":263},"  \"value\"",[155,165633,70000],{"class":171},[155,165635,116021],{"class":263},[155,165637,165638],{"class":157,"line":180},[155,165639,21475],{"class":171},[24,165641,165642],{},"Python 与 JSON 的转换：",[146,165644,165646],{"className":148,"code":165645,"language":150,"meta":39,"style":39},"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",[152,165647,165648,165655,165659,165684,165688,165707,165714,165718,165728],{"__ignoreMap":39},[155,165649,165650,165652],{"class":157,"line":158},[155,165651,168],{"class":167},[155,165653,165654],{"class":171}," json\n",[155,165656,165657],{"class":157,"line":46},[155,165658,217],{"emptyLinePlaceholder":216},[155,165660,165661,165663,165665,165667,165669,165671,165673,165675,165678,165680,165682],{"class":157,"line":121},[155,165662,120221],{"class":171},[155,165664,317],{"class":167},[155,165666,24314],{"class":171},[155,165668,81242],{"class":732},[155,165670,70000],{"class":171},[155,165672,87832],{"class":732},[155,165674,7589],{"class":171},[155,165676,165677],{"class":732},"\"value\"",[155,165679,70000],{"class":171},[155,165681,20389],{"class":263},[155,165683,21475],{"class":171},[155,165685,165686],{"class":157,"line":180},[155,165687,217],{"emptyLinePlaceholder":216},[155,165689,165690,165693,165695,165698,165701,165703,165705],{"class":157,"line":194},[155,165691,165692],{"class":171},"json_text ",[155,165694,317],{"class":167},[155,165696,165697],{"class":171}," json.dumps(data, ",[155,165699,165700],{"class":323},"ensure_ascii",[155,165702,317],{"class":167},[155,165704,3592],{"class":263},[155,165706,363],{"class":171},[155,165708,165709,165711],{"class":157,"line":200},[155,165710,15451],{"class":263},[155,165712,165713],{"class":171},"(json_text)\n",[155,165715,165716],{"class":157,"line":213},[155,165717,217],{"emptyLinePlaceholder":216},[155,165719,165720,165723,165725],{"class":157,"line":220},[155,165721,165722],{"class":171},"new_data ",[155,165724,317],{"class":167},[155,165726,165727],{"class":171}," json.loads(json_text)\n",[155,165729,165730,165732],{"class":157,"line":245},[155,165731,15451],{"class":263},[155,165733,165734],{"class":171},"(new_data)\n",[20037,165736,165738],{"id":165737},"_103-安装pyecharts","10.3 安装pyecharts",[146,165740,165742],{"className":43613,"code":165741,"language":43615,"meta":39,"style":39},"pip install pyecharts\n",[152,165743,165744],{"__ignoreMap":39},[155,165745,165746,165748,165750],{"class":157,"line":158},[155,165747,43622],{"class":226},[155,165749,43625],{"class":732},[155,165751,165752],{"class":732}," pyecharts\n",[24,165754,165755],{},"验证：",[146,165757,165759],{"className":148,"code":165758,"language":150,"meta":39,"style":39},"import pyecharts\n\nprint(pyecharts.__version__)\n",[152,165760,165761,165767,165771],{"__ignoreMap":39},[155,165762,165763,165765],{"class":157,"line":158},[155,165764,168],{"class":167},[155,165766,165752],{"class":171},[155,165768,165769],{"class":157,"line":46},[155,165770,217],{"emptyLinePlaceholder":216},[155,165772,165773,165775,165778,165781],{"class":157,"line":121},[155,165774,15451],{"class":263},[155,165776,165777],{"class":171},"(pyecharts.",[155,165779,165780],{"class":263},"__version__",[155,165782,363],{"class":171},[24,165784,165785],{},"如果使用虚拟环境，要先激活环境再安装。",[20037,165787,165789],{"id":165788},"_104-第一个折线图","10.4 第一个折线图",[146,165791,165793],{"className":148,"code":165792,"language":150,"meta":39,"style":39},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[152,165794,165795,165807,165811,165821,165851,165883],{"__ignoreMap":39},[155,165796,165797,165799,165802,165804],{"class":157,"line":158},[155,165798,183],{"class":167},[155,165800,165801],{"class":171}," pyecharts.charts ",[155,165803,168],{"class":167},[155,165805,165806],{"class":171}," Line\n",[155,165808,165809],{"class":157,"line":46},[155,165810,217],{"emptyLinePlaceholder":216},[155,165812,165813,165816,165818],{"class":157,"line":121},[155,165814,165815],{"class":171},"line ",[155,165817,317],{"class":167},[155,165819,165820],{"class":171}," Line()\n",[155,165822,165823,165826,165829,165831,165834,165836,165839,165841,165844,165846,165849],{"class":157,"line":180},[155,165824,165825],{"class":171},"line.add_xaxis([",[155,165827,165828],{"class":732},"\"周一\"",[155,165830,7589],{"class":171},[155,165832,165833],{"class":732},"\"周二\"",[155,165835,7589],{"class":171},[155,165837,165838],{"class":732},"\"周三\"",[155,165840,7589],{"class":171},[155,165842,165843],{"class":732},"\"周四\"",[155,165845,7589],{"class":171},[155,165847,165848],{"class":732},"\"周五\"",[155,165850,17676],{"class":171},[155,165852,165853,165856,165859,165861,165863,165865,165867,165869,165871,165873,165876,165878,165881],{"class":157,"line":194},[155,165854,165855],{"class":171},"line.add_yaxis(",[155,165857,165858],{"class":732},"\"销售额\"",[155,165860,96081],{"class":171},[155,165862,20389],{"class":263},[155,165864,7589],{"class":171},[155,165866,523],{"class":263},[155,165868,7589],{"class":171},[155,165870,20915],{"class":263},[155,165872,7589],{"class":171},[155,165874,165875],{"class":263},"150",[155,165877,7589],{"class":171},[155,165879,165880],{"class":263},"180",[155,165882,17676],{"class":171},[155,165884,165885,165888,165891],{"class":157,"line":200},[155,165886,165887],{"class":171},"line.render(",[155,165889,165890],{"class":732},"\"line.html\"",[155,165892,363],{"class":171},[24,165894,165895,165896,165899],{},"运行后会生成 ",[152,165897,165898],{},"line.html","，用浏览器打开即可看到图表。",[24,165901,165902],{},"核心步骤：",[28,165904,165905,165908,165911,165914,165917],{},[31,165906,165907],{},"导入图表类。",[31,165909,165910],{},"创建图表对象。",[31,165912,165913],{},"添加 x 轴数据。",[31,165915,165916],{},"添加 y 轴数据。",[31,165918,165919],{},"渲染为 HTML。",[20037,165921,165923],{"id":165922},"_105-全局配置","10.5 全局配置",[24,165925,165926,165927,165930],{},"常用配置在 ",[152,165928,165929],{},"pyecharts.options"," 中。",[146,165932,165934],{"className":148,"code":165933,"language":150,"meta":39,"style":39},"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",[152,165935,165936,165953,165963,165967,165975,165999,166027,166032,166051,166070,166088,166108,166112],{"__ignoreMap":39},[155,165937,165938,165940,165943,165945,165948,165950],{"class":157,"line":158},[155,165939,183],{"class":167},[155,165941,165942],{"class":171}," pyecharts ",[155,165944,168],{"class":167},[155,165946,165947],{"class":171}," options ",[155,165949,907],{"class":167},[155,165951,165952],{"class":171}," opts\n",[155,165954,165955,165957,165959,165961],{"class":157,"line":46},[155,165956,183],{"class":167},[155,165958,165801],{"class":171},[155,165960,168],{"class":167},[155,165962,165806],{"class":171},[155,165964,165965],{"class":157,"line":121},[155,165966,217],{"emptyLinePlaceholder":216},[155,165968,165969,165971,165973],{"class":157,"line":180},[155,165970,165815],{"class":171},[155,165972,317],{"class":167},[155,165974,165820],{"class":171},[155,165976,165977,165979,165981,165983,165985,165987,165989,165991,165993,165995,165997],{"class":157,"line":194},[155,165978,165825],{"class":171},[155,165980,165828],{"class":732},[155,165982,7589],{"class":171},[155,165984,165833],{"class":732},[155,165986,7589],{"class":171},[155,165988,165838],{"class":732},[155,165990,7589],{"class":171},[155,165992,165843],{"class":732},[155,165994,7589],{"class":171},[155,165996,165848],{"class":732},[155,165998,17676],{"class":171},[155,166000,166001,166003,166005,166007,166009,166011,166013,166015,166017,166019,166021,166023,166025],{"class":157,"line":200},[155,166002,165855],{"class":171},[155,166004,165858],{"class":732},[155,166006,96081],{"class":171},[155,166008,20389],{"class":263},[155,166010,7589],{"class":171},[155,166012,523],{"class":263},[155,166014,7589],{"class":171},[155,166016,20915],{"class":263},[155,166018,7589],{"class":171},[155,166020,165875],{"class":263},[155,166022,7589],{"class":171},[155,166024,165880],{"class":263},[155,166026,17676],{"class":171},[155,166028,166029],{"class":157,"line":213},[155,166030,166031],{"class":171},"line.set_global_opts(\n",[155,166033,166034,166037,166039,166042,166044,166046,166049],{"class":157,"line":220},[155,166035,166036],{"class":323},"    title_opts",[155,166038,317],{"class":167},[155,166040,166041],{"class":171},"opts.TitleOpts(",[155,166043,69970],{"class":323},[155,166045,317],{"class":167},[155,166047,166048],{"class":732},"\"一周销售额\"",[155,166050,7657],{"class":171},[155,166052,166053,166056,166058,166061,166063,166065,166068],{"class":157,"line":245},[155,166054,166055],{"class":323},"    xaxis_opts",[155,166057,317],{"class":167},[155,166059,166060],{"class":171},"opts.AxisOpts(",[155,166062,98373],{"class":323},[155,166064,317],{"class":167},[155,166066,166067],{"class":732},"\"日期\"",[155,166069,7657],{"class":171},[155,166071,166072,166075,166077,166079,166081,166083,166086],{"class":157,"line":251},[155,166073,166074],{"class":323},"    yaxis_opts",[155,166076,317],{"class":167},[155,166078,166060],{"class":171},[155,166080,98373],{"class":323},[155,166082,317],{"class":167},[155,166084,166085],{"class":732},"\"金额\"",[155,166087,7657],{"class":171},[155,166089,166090,166093,166095,166098,166101,166103,166106],{"class":157,"line":257},[155,166091,166092],{"class":323},"    tooltip_opts",[155,166094,317],{"class":167},[155,166096,166097],{"class":171},"opts.TooltipOpts(",[155,166099,166100],{"class":323},"trigger",[155,166102,317],{"class":167},[155,166104,166105],{"class":732},"\"axis\"",[155,166107,7657],{"class":171},[155,166109,166110],{"class":157,"line":270},[155,166111,363],{"class":171},[155,166113,166114,166116,166118],{"class":157,"line":276},[155,166115,165887],{"class":171},[155,166117,165890],{"class":732},[155,166119,363],{"class":171},[24,166121,166122],{},"常见全局配置：",[20222,166124,166125,166134],{},[20225,166126,166127],{},[20228,166128,166129,166132],{},[20231,166130,166131],{},"配置",[20231,166133,121259],{},[20269,166135,166136,166146,166156,166166,166176,166186],{},[20228,166137,166138,166143],{},[20274,166139,166140],{},[152,166141,166142],{},"TitleOpts",[20274,166144,166145],{},"标题",[20228,166147,166148,166153],{},[20274,166149,166150],{},[152,166151,166152],{},"LegendOpts",[20274,166154,166155],{},"图例",[20228,166157,166158,166163],{},[20274,166159,166160],{},[152,166161,166162],{},"TooltipOpts",[20274,166164,166165],{},"提示框",[20228,166167,166168,166173],{},[20274,166169,166170],{},[152,166171,166172],{},"AxisOpts",[20274,166174,166175],{},"坐标轴",[20228,166177,166178,166183],{},[20274,166179,166180],{},[152,166181,166182],{},"VisualMapOpts",[20274,166184,166185],{},"视觉映射",[20228,166187,166188,166193],{},[20274,166189,166190],{},[152,166191,166192],{},"DataZoomOpts",[20274,166194,166195],{},"区域缩放",[20037,166197,166199],{"id":166198},"_106-系列配置","10.6 系列配置",[24,166201,166202],{},"系列配置作用于某一组数据。",[146,166204,166206],{"className":148,"code":166205,"language":150,"meta":39,"style":39},"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",[152,166207,166208,166213,166224,166253,166264,166283],{"__ignoreMap":39},[155,166209,166210],{"class":157,"line":158},[155,166211,166212],{"class":171},"line.add_yaxis(\n",[155,166214,166215,166218,166220,166222],{"class":157,"line":46},[155,166216,166217],{"class":323},"    series_name",[155,166219,317],{"class":167},[155,166221,165858],{"class":732},[155,166223,990],{"class":171},[155,166225,166226,166229,166231,166233,166235,166237,166239,166241,166243,166245,166247,166249,166251],{"class":157,"line":121},[155,166227,166228],{"class":323},"    y_axis",[155,166230,317],{"class":167},[155,166232,4091],{"class":171},[155,166234,20389],{"class":263},[155,166236,7589],{"class":171},[155,166238,523],{"class":263},[155,166240,7589],{"class":171},[155,166242,20915],{"class":263},[155,166244,7589],{"class":171},[155,166246,165875],{"class":263},[155,166248,7589],{"class":171},[155,166250,165880],{"class":263},[155,166252,106399],{"class":171},[155,166254,166255,166258,166260,166262],{"class":157,"line":180},[155,166256,166257],{"class":323},"    is_smooth",[155,166259,317],{"class":167},[155,166261,1000],{"class":263},[155,166263,990],{"class":171},[155,166265,166266,166269,166271,166274,166277,166279,166281],{"class":157,"line":194},[155,166267,166268],{"class":323},"    label_opts",[155,166270,317],{"class":167},[155,166272,166273],{"class":171},"opts.LabelOpts(",[155,166275,166276],{"class":323},"is_show",[155,166278,317],{"class":167},[155,166280,1000],{"class":263},[155,166282,7657],{"class":171},[155,166284,166285],{"class":157,"line":200},[155,166286,363],{"class":171},[24,166288,166289],{},"常用参数：",[28,166291,166292,166298,166304,166310,166316],{},[31,166293,166294,166297],{},[152,166295,166296],{},"series_name","：系列名称。",[31,166299,166300,166303],{},[152,166301,166302],{},"y_axis","：y 轴数据。",[31,166305,166306,166309],{},[152,166307,166308],{},"is_smooth","：是否平滑曲线。",[31,166311,166312,166315],{},[152,166313,166314],{},"label_opts","：标签配置。",[31,166317,166318,166321],{},[152,166319,166320],{},"symbol_size","：标记点大小。",[20037,166323,166325],{"id":166324},"_107-多条折线","10.7 多条折线",[146,166327,166329],{"className":148,"code":166328,"language":150,"meta":39,"style":39},"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",[152,166330,166331,166345,166355,166359,166388,166392,166400,166405,166443,166480,166484,166501,166517,166521],{"__ignoreMap":39},[155,166332,166333,166335,166337,166339,166341,166343],{"class":157,"line":158},[155,166334,183],{"class":167},[155,166336,165942],{"class":171},[155,166338,168],{"class":167},[155,166340,165947],{"class":171},[155,166342,907],{"class":167},[155,166344,165952],{"class":171},[155,166346,166347,166349,166351,166353],{"class":157,"line":46},[155,166348,183],{"class":167},[155,166350,165801],{"class":171},[155,166352,168],{"class":167},[155,166354,165806],{"class":171},[155,166356,166357],{"class":157,"line":121},[155,166358,217],{"emptyLinePlaceholder":216},[155,166360,166361,166364,166366,166368,166370,166372,166374,166376,166378,166380,166382,166384,166386],{"class":157,"line":180},[155,166362,166363],{"class":171},"dates ",[155,166365,317],{"class":167},[155,166367,70789],{"class":171},[155,166369,165828],{"class":732},[155,166371,7589],{"class":171},[155,166373,165833],{"class":732},[155,166375,7589],{"class":171},[155,166377,165838],{"class":732},[155,166379,7589],{"class":171},[155,166381,165843],{"class":732},[155,166383,7589],{"class":171},[155,166385,165848],{"class":732},[155,166387,2845],{"class":171},[155,166389,166390],{"class":157,"line":194},[155,166391,217],{"emptyLinePlaceholder":216},[155,166393,166394,166396,166398],{"class":157,"line":200},[155,166395,165815],{"class":171},[155,166397,317],{"class":167},[155,166399,165820],{"class":171},[155,166401,166402],{"class":157,"line":213},[155,166403,166404],{"class":171},"line.add_xaxis(dates)\n",[155,166406,166407,166409,166412,166414,166416,166418,166421,166423,166425,166427,166429,166431,166433,166435,166437,166439,166441],{"class":157,"line":220},[155,166408,165855],{"class":171},[155,166410,166411],{"class":732},"\"线上销售\"",[155,166413,96081],{"class":171},[155,166415,20389],{"class":263},[155,166417,7589],{"class":171},[155,166419,166420],{"class":263},"130",[155,166422,7589],{"class":171},[155,166424,523],{"class":263},[155,166426,7589],{"class":171},[155,166428,11996],{"class":263},[155,166430,7589],{"class":171},[155,166432,21619],{"class":263},[155,166434,130765],{"class":171},[155,166436,166308],{"class":323},[155,166438,317],{"class":167},[155,166440,1000],{"class":263},[155,166442,363],{"class":171},[155,166444,166445,166447,166450,166452,166454,166456,166458,166460,166462,166464,166466,166468,166470,166472,166474,166476,166478],{"class":157,"line":245},[155,166446,165855],{"class":171},[155,166448,166449],{"class":732},"\"线下销售\"",[155,166451,96081],{"class":171},[155,166453,20672],{"class":263},[155,166455,7589],{"class":171},[155,166457,20915],{"class":263},[155,166459,7589],{"class":171},[155,166461,20389],{"class":263},[155,166463,7589],{"class":171},[155,166465,523],{"class":263},[155,166467,7589],{"class":171},[155,166469,165875],{"class":263},[155,166471,130765],{"class":171},[155,166473,166308],{"class":323},[155,166475,317],{"class":167},[155,166477,1000],{"class":263},[155,166479,363],{"class":171},[155,166481,166482],{"class":157,"line":251},[155,166483,166031],{"class":171},[155,166485,166486,166488,166490,166492,166494,166496,166499],{"class":157,"line":257},[155,166487,166036],{"class":323},[155,166489,317],{"class":167},[155,166491,166041],{"class":171},[155,166493,69970],{"class":323},[155,166495,317],{"class":167},[155,166497,166498],{"class":732},"\"线上线下销售趋势\"",[155,166500,7657],{"class":171},[155,166502,166503,166505,166507,166509,166511,166513,166515],{"class":157,"line":270},[155,166504,166092],{"class":323},[155,166506,317],{"class":167},[155,166508,166097],{"class":171},[155,166510,166100],{"class":323},[155,166512,317],{"class":167},[155,166514,166105],{"class":732},[155,166516,7657],{"class":171},[155,166518,166519],{"class":157,"line":276},[155,166520,363],{"class":171},[155,166522,166523,166525,166528],{"class":157,"line":297},[155,166524,165887],{"class":171},[155,166526,166527],{"class":732},"\"sales.html\"",[155,166529,363],{"class":171},[24,166531,166532],{},"多条折线适合比较不同指标或不同地区。",[20037,166534,166536],{"id":166535},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[24,166538,166539,166540,44410],{},"假设 ",[152,166541,166542],{},"sales.json",[146,166544,166546],{"className":165608,"code":166545,"language":164355,"meta":39,"style":39},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[152,166547,166548,166553,166585,166613,166641],{"__ignoreMap":39},[155,166549,166550],{"class":157,"line":158},[155,166551,166552],{"class":171},"[\n",[155,166554,166555,166558,166561,166563,166565,166567,166570,166572,166574,166576,166579,166581,166583],{"class":157,"line":46},[155,166556,166557],{"class":171},"  {",[155,166559,166560],{"class":263},"\"date\"",[155,166562,70000],{"class":171},[155,166564,165828],{"class":732},[155,166566,7589],{"class":171},[155,166568,166569],{"class":263},"\"online\"",[155,166571,70000],{"class":171},[155,166573,20389],{"class":263},[155,166575,7589],{"class":171},[155,166577,166578],{"class":263},"\"offline\"",[155,166580,70000],{"class":171},[155,166582,20672],{"class":263},[155,166584,24794],{"class":171},[155,166586,166587,166589,166591,166593,166595,166597,166599,166601,166603,166605,166607,166609,166611],{"class":157,"line":121},[155,166588,166557],{"class":171},[155,166590,166560],{"class":263},[155,166592,70000],{"class":171},[155,166594,165833],{"class":732},[155,166596,7589],{"class":171},[155,166598,166569],{"class":263},[155,166600,70000],{"class":171},[155,166602,166420],{"class":263},[155,166604,7589],{"class":171},[155,166606,166578],{"class":263},[155,166608,70000],{"class":171},[155,166610,20915],{"class":263},[155,166612,24794],{"class":171},[155,166614,166615,166617,166619,166621,166623,166625,166627,166629,166631,166633,166635,166637,166639],{"class":157,"line":180},[155,166616,166557],{"class":171},[155,166618,166560],{"class":263},[155,166620,70000],{"class":171},[155,166622,165838],{"class":732},[155,166624,7589],{"class":171},[155,166626,166569],{"class":263},[155,166628,70000],{"class":171},[155,166630,523],{"class":263},[155,166632,7589],{"class":171},[155,166634,166578],{"class":263},[155,166636,70000],{"class":171},[155,166638,20389],{"class":263},[155,166640,21475],{"class":171},[155,166642,166643],{"class":157,"line":194},[155,166644,2845],{"class":171},[24,166646,166647],{},"读取并绘图：",[146,166649,166651],{"className":148,"code":166650,"language":150,"meta":39,"style":39},"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",[152,166652,166653,166659,166673,166683,166687,166719,166732,166736,166744,166753,166762,166766,166778,166787,166796,166805,166809,166817,166821,166838,166855,166859,166876,166892,166896],{"__ignoreMap":39},[155,166654,166655,166657],{"class":157,"line":158},[155,166656,168],{"class":167},[155,166658,165654],{"class":171},[155,166660,166661,166663,166665,166667,166669,166671],{"class":157,"line":46},[155,166662,183],{"class":167},[155,166664,165942],{"class":171},[155,166666,168],{"class":167},[155,166668,165947],{"class":171},[155,166670,907],{"class":167},[155,166672,165952],{"class":171},[155,166674,166675,166677,166679,166681],{"class":157,"line":121},[155,166676,183],{"class":167},[155,166678,165801],{"class":171},[155,166680,168],{"class":167},[155,166682,165806],{"class":171},[155,166684,166685],{"class":157,"line":180},[155,166686,217],{"emptyLinePlaceholder":216},[155,166688,166689,166691,166693,166695,166698,166700,166702,166704,166706,166708,166710,166712,166714,166717],{"class":157,"line":194},[155,166690,126396],{"class":167},[155,166692,165354],{"class":263},[155,166694,230],{"class":171},[155,166696,166697],{"class":732},"\"sales.json\"",[155,166699,7589],{"class":171},[155,166701,165364],{"class":732},[155,166703,7589],{"class":171},[155,166705,165369],{"class":323},[155,166707,317],{"class":167},[155,166709,165374],{"class":732},[155,166711,33541],{"class":171},[155,166713,907],{"class":167},[155,166715,166716],{"class":323}," file",[155,166718,736],{"class":171},[155,166720,166721,166723,166725,166728,166730],{"class":157,"line":200},[155,166722,119984],{"class":171},[155,166724,317],{"class":167},[155,166726,166727],{"class":171}," json.load(",[155,166729,14974],{"class":323},[155,166731,363],{"class":171},[155,166733,166734],{"class":157,"line":213},[155,166735,217],{"emptyLinePlaceholder":216},[155,166737,166738,166740,166742],{"class":157,"line":220},[155,166739,166363],{"class":171},[155,166741,317],{"class":167},[155,166743,70401],{"class":171},[155,166745,166746,166749,166751],{"class":157,"line":245},[155,166747,166748],{"class":171},"online_sales ",[155,166750,317],{"class":167},[155,166752,70401],{"class":171},[155,166754,166755,166758,166760],{"class":157,"line":251},[155,166756,166757],{"class":171},"offline_sales ",[155,166759,317],{"class":167},[155,166761,70401],{"class":171},[155,166763,166764],{"class":157,"line":257},[155,166765,217],{"emptyLinePlaceholder":216},[155,166767,166768,166770,166773,166775],{"class":157,"line":270},[155,166769,1125],{"class":167},[155,166771,166772],{"class":171}," item ",[155,166774,1131],{"class":167},[155,166776,166777],{"class":171}," data:\n",[155,166779,166780,166783,166785],{"class":157,"line":276},[155,166781,166782],{"class":171},"    dates.append(item[",[155,166784,166560],{"class":732},[155,166786,17676],{"class":171},[155,166788,166789,166792,166794],{"class":157,"line":297},[155,166790,166791],{"class":171},"    online_sales.append(item[",[155,166793,166569],{"class":732},[155,166795,17676],{"class":171},[155,166797,166798,166801,166803],{"class":157,"line":302},[155,166799,166800],{"class":171},"    offline_sales.append(item[",[155,166802,166578],{"class":732},[155,166804,17676],{"class":171},[155,166806,166807],{"class":157,"line":308},[155,166808,217],{"emptyLinePlaceholder":216},[155,166810,166811,166813,166815],{"class":157,"line":366},[155,166812,165815],{"class":171},[155,166814,317],{"class":167},[155,166816,165820],{"class":171},[155,166818,166819],{"class":157,"line":379},[155,166820,166404],{"class":171},[155,166822,166823,166825,166827,166830,166832,166834,166836],{"class":157,"line":385},[155,166824,165855],{"class":171},[155,166826,166411],{"class":732},[155,166828,166829],{"class":171},", online_sales, ",[155,166831,166308],{"class":323},[155,166833,317],{"class":167},[155,166835,1000],{"class":263},[155,166837,363],{"class":171},[155,166839,166840,166842,166844,166847,166849,166851,166853],{"class":157,"line":415},[155,166841,165855],{"class":171},[155,166843,166449],{"class":732},[155,166845,166846],{"class":171},", offline_sales, ",[155,166848,166308],{"class":323},[155,166850,317],{"class":167},[155,166852,1000],{"class":263},[155,166854,363],{"class":171},[155,166856,166857],{"class":157,"line":452},[155,166858,166031],{"class":171},[155,166860,166861,166863,166865,166867,166869,166871,166874],{"class":157,"line":480},[155,166862,166036],{"class":323},[155,166864,317],{"class":167},[155,166866,166041],{"class":171},[155,166868,69970],{"class":323},[155,166870,317],{"class":167},[155,166872,166873],{"class":732},"\"销售趋势\"",[155,166875,7657],{"class":171},[155,166877,166878,166880,166882,166884,166886,166888,166890],{"class":157,"line":486},[155,166879,166092],{"class":323},[155,166881,317],{"class":167},[155,166883,166097],{"class":171},[155,166885,166100],{"class":323},[155,166887,317],{"class":167},[155,166889,166105],{"class":732},[155,166891,7657],{"class":171},[155,166893,166894],{"class":157,"line":499},[155,166895,363],{"class":171},[155,166897,166898,166900,166902],{"class":157,"line":505},[155,166899,165887],{"class":171},[155,166901,166527],{"class":732},[155,166903,363],{"class":171},[20037,166905,166907],{"id":166906},"_109-数据清洗","10.9 数据清洗",[24,166909,166910],{},"真实数据经常不整齐，需要清洗。",[24,166912,166913],{},"常见问题：",[28,166915,166916,166919,166922,166925],{},[31,166917,166918],{},"数字是字符串。",[31,166920,166921],{},"字段缺失。",[31,166923,166924],{},"空值。",[31,166926,166927],{},"日期格式不统一。",[24,166929,34960],{},[146,166931,166933],{"className":148,"code":166932,"language":150,"meta":39,"style":39},"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",[152,166934,166935,166944,166967,166987,167008,167012,167016,167024,167033,167037,167048,167062,167071,167076,167080,167088,167098,167102,167109],{"__ignoreMap":39},[155,166936,166937,166940,166942],{"class":157,"line":158},[155,166938,166939],{"class":171},"raw_data ",[155,166941,317],{"class":167},[155,166943,74010],{"class":171},[155,166945,166946,166949,166951,166953,166955,166957,166960,166962,166965],{"class":157,"line":46},[155,166947,166948],{"class":171},"    {",[155,166950,166560],{"class":732},[155,166952,70000],{"class":171},[155,166954,165828],{"class":732},[155,166956,7589],{"class":171},[155,166958,166959],{"class":732},"\"sales\"",[155,166961,70000],{"class":171},[155,166963,166964],{"class":732},"\"100\"",[155,166966,24794],{"class":171},[155,166968,166969,166971,166973,166975,166977,166979,166981,166983,166985],{"class":157,"line":121},[155,166970,166948],{"class":171},[155,166972,166560],{"class":732},[155,166974,70000],{"class":171},[155,166976,165833],{"class":732},[155,166978,7589],{"class":171},[155,166980,166959],{"class":732},[155,166982,70000],{"class":171},[155,166984,15430],{"class":732},[155,166986,24794],{"class":171},[155,166988,166989,166991,166993,166995,166997,166999,167001,167003,167006],{"class":157,"line":180},[155,166990,166948],{"class":171},[155,166992,166560],{"class":732},[155,166994,70000],{"class":171},[155,166996,165838],{"class":732},[155,166998,7589],{"class":171},[155,167000,166959],{"class":732},[155,167002,70000],{"class":171},[155,167004,167005],{"class":732},"\"120\"",[155,167007,24794],{"class":171},[155,167009,167010],{"class":157,"line":194},[155,167011,2845],{"class":171},[155,167013,167014],{"class":157,"line":200},[155,167015,217],{"emptyLinePlaceholder":216},[155,167017,167018,167020,167022],{"class":157,"line":213},[155,167019,166363],{"class":171},[155,167021,317],{"class":167},[155,167023,70401],{"class":171},[155,167025,167026,167029,167031],{"class":157,"line":220},[155,167027,167028],{"class":171},"sales ",[155,167030,317],{"class":167},[155,167032,70401],{"class":171},[155,167034,167035],{"class":157,"line":245},[155,167036,217],{"emptyLinePlaceholder":216},[155,167038,167039,167041,167043,167045],{"class":157,"line":251},[155,167040,1125],{"class":167},[155,167042,166772],{"class":171},[155,167044,1131],{"class":167},[155,167046,167047],{"class":171}," raw_data:\n",[155,167049,167050,167053,167055,167058,167060],{"class":157,"line":257},[155,167051,167052],{"class":171},"    value ",[155,167054,317],{"class":167},[155,167056,167057],{"class":171}," item.get(",[155,167059,166959],{"class":732},[155,167061,363],{"class":171},[155,167063,167064,167066,167068],{"class":157,"line":270},[155,167065,1142],{"class":167},[155,167067,8542],{"class":167},[155,167069,167070],{"class":171}," value:\n",[155,167072,167073],{"class":157,"line":276},[155,167074,167075],{"class":167},"        continue\n",[155,167077,167078],{"class":157,"line":297},[155,167079,217],{"emptyLinePlaceholder":216},[155,167081,167082,167084,167086],{"class":157,"line":302},[155,167083,166782],{"class":171},[155,167085,166560],{"class":732},[155,167087,17676],{"class":171},[155,167089,167090,167093,167095],{"class":157,"line":308},[155,167091,167092],{"class":171},"    sales.append(",[155,167094,15239],{"class":263},[155,167096,167097],{"class":171},"(value))\n",[155,167099,167100],{"class":157,"line":366},[155,167101,217],{"emptyLinePlaceholder":216},[155,167103,167104,167106],{"class":157,"line":379},[155,167105,15451],{"class":263},[155,167107,167108],{"class":171},"(dates)\n",[155,167110,167111,167113],{"class":157,"line":385},[155,167112,15451],{"class":263},[155,167114,167115],{"class":171},"(sales)\n",[20037,167117,167119],{"id":167118},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[146,167121,167123],{"className":148,"code":167122,"language":150,"meta":39,"style":39},"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",[152,167124,167125,167139,167149,167153,167161,167182,167204,167226,167248,167270,167274,167278,167300,167321,167325,167333,167337,167341,167351,167360,167370,167386,167390,167394,167411,167427,167443,167459,167469,167473],{"__ignoreMap":39},[155,167126,167127,167129,167131,167133,167135,167137],{"class":157,"line":158},[155,167128,183],{"class":167},[155,167130,165942],{"class":171},[155,167132,168],{"class":167},[155,167134,165947],{"class":171},[155,167136,907],{"class":167},[155,167138,165952],{"class":171},[155,167140,167141,167143,167145,167147],{"class":157,"line":46},[155,167142,183],{"class":167},[155,167144,165801],{"class":171},[155,167146,168],{"class":167},[155,167148,165806],{"class":171},[155,167150,167151],{"class":157,"line":121},[155,167152,217],{"emptyLinePlaceholder":216},[155,167154,167155,167157,167159],{"class":157,"line":180},[155,167156,167028],{"class":171},[155,167158,317],{"class":167},[155,167160,74010],{"class":171},[155,167162,167163,167165,167167,167169,167172,167174,167176,167178,167180],{"class":157,"line":194},[155,167164,166948],{"class":171},[155,167166,166560],{"class":732},[155,167168,70000],{"class":171},[155,167170,167171],{"class":732},"\"2024-10-01\"",[155,167173,7589],{"class":171},[155,167175,102647],{"class":732},[155,167177,70000],{"class":171},[155,167179,110586],{"class":263},[155,167181,24794],{"class":171},[155,167183,167184,167186,167188,167190,167193,167195,167197,167199,167202],{"class":157,"line":200},[155,167185,166948],{"class":171},[155,167187,166560],{"class":732},[155,167189,70000],{"class":171},[155,167191,167192],{"class":732},"\"2024-10-02\"",[155,167194,7589],{"class":171},[155,167196,102647],{"class":732},[155,167198,70000],{"class":171},[155,167200,167201],{"class":263},"1800",[155,167203,24794],{"class":171},[155,167205,167206,167208,167210,167212,167215,167217,167219,167221,167224],{"class":157,"line":213},[155,167207,166948],{"class":171},[155,167209,166560],{"class":732},[155,167211,70000],{"class":171},[155,167213,167214],{"class":732},"\"2024-10-03\"",[155,167216,7589],{"class":171},[155,167218,102647],{"class":732},[155,167220,70000],{"class":171},[155,167222,167223],{"class":263},"1500",[155,167225,24794],{"class":171},[155,167227,167228,167230,167232,167234,167237,167239,167241,167243,167246],{"class":157,"line":220},[155,167229,166948],{"class":171},[155,167231,166560],{"class":732},[155,167233,70000],{"class":171},[155,167235,167236],{"class":732},"\"2024-10-04\"",[155,167238,7589],{"class":171},[155,167240,102647],{"class":732},[155,167242,70000],{"class":171},[155,167244,167245],{"class":263},"2100",[155,167247,24794],{"class":171},[155,167249,167250,167252,167254,167256,167259,167261,167263,167265,167268],{"class":157,"line":245},[155,167251,166948],{"class":171},[155,167253,166560],{"class":732},[155,167255,70000],{"class":171},[155,167257,167258],{"class":732},"\"2024-10-05\"",[155,167260,7589],{"class":171},[155,167262,102647],{"class":732},[155,167264,70000],{"class":171},[155,167266,167267],{"class":263},"2600",[155,167269,24794],{"class":171},[155,167271,167272],{"class":157,"line":251},[155,167273,2845],{"class":171},[155,167275,167276],{"class":157,"line":257},[155,167277,217],{"emptyLinePlaceholder":216},[155,167279,167280,167282,167284,167287,167289,167291,167293,167295,167297],{"class":157,"line":270},[155,167281,166363],{"class":171},[155,167283,317],{"class":167},[155,167285,167286],{"class":171}," [item[",[155,167288,166560],{"class":732},[155,167290,24309],{"class":171},[155,167292,1125],{"class":167},[155,167294,166772],{"class":171},[155,167296,1131],{"class":167},[155,167298,167299],{"class":171}," sales]\n",[155,167301,167302,167305,167307,167309,167311,167313,167315,167317,167319],{"class":157,"line":276},[155,167303,167304],{"class":171},"amounts ",[155,167306,317],{"class":167},[155,167308,167286],{"class":171},[155,167310,102647],{"class":732},[155,167312,24309],{"class":171},[155,167314,1125],{"class":167},[155,167316,166772],{"class":171},[155,167318,1131],{"class":167},[155,167320,167299],{"class":171},[155,167322,167323],{"class":157,"line":297},[155,167324,217],{"emptyLinePlaceholder":216},[155,167326,167327,167329,167331],{"class":157,"line":302},[155,167328,165815],{"class":171},[155,167330,317],{"class":167},[155,167332,165820],{"class":171},[155,167334,167335],{"class":157,"line":308},[155,167336,166404],{"class":171},[155,167338,167339],{"class":157,"line":366},[155,167340,166212],{"class":171},[155,167342,167343,167345,167347,167349],{"class":157,"line":379},[155,167344,166217],{"class":323},[155,167346,317],{"class":167},[155,167348,165858],{"class":732},[155,167350,990],{"class":171},[155,167352,167353,167355,167357],{"class":157,"line":385},[155,167354,166228],{"class":323},[155,167356,317],{"class":167},[155,167358,167359],{"class":171},"amounts,\n",[155,167361,167362,167364,167366,167368],{"class":157,"line":415},[155,167363,166257],{"class":323},[155,167365,317],{"class":167},[155,167367,1000],{"class":263},[155,167369,990],{"class":171},[155,167371,167372,167374,167376,167378,167380,167382,167384],{"class":157,"line":452},[155,167373,166268],{"class":323},[155,167375,317],{"class":167},[155,167377,166273],{"class":171},[155,167379,166276],{"class":323},[155,167381,317],{"class":167},[155,167383,1000],{"class":263},[155,167385,7657],{"class":171},[155,167387,167388],{"class":157,"line":480},[155,167389,363],{"class":171},[155,167391,167392],{"class":157,"line":486},[155,167393,166031],{"class":171},[155,167395,167396,167398,167400,167402,167404,167406,167409],{"class":157,"line":499},[155,167397,166036],{"class":323},[155,167399,317],{"class":167},[155,167401,166041],{"class":171},[155,167403,69970],{"class":323},[155,167405,317],{"class":167},[155,167407,167408],{"class":732},"\"每日销售额\"",[155,167410,7657],{"class":171},[155,167412,167413,167415,167417,167419,167421,167423,167425],{"class":157,"line":505},[155,167414,166055],{"class":323},[155,167416,317],{"class":167},[155,167418,166060],{"class":171},[155,167420,98373],{"class":323},[155,167422,317],{"class":167},[155,167424,166067],{"class":732},[155,167426,7657],{"class":171},[155,167428,167429,167431,167433,167435,167437,167439,167441],{"class":157,"line":528},[155,167430,166074],{"class":323},[155,167432,317],{"class":167},[155,167434,166060],{"class":171},[155,167436,98373],{"class":323},[155,167438,317],{"class":167},[155,167440,166085],{"class":732},[155,167442,7657],{"class":171},[155,167444,167445,167447,167449,167451,167453,167455,167457],{"class":157,"line":549},[155,167446,166092],{"class":323},[155,167448,317],{"class":167},[155,167450,166097],{"class":171},[155,167452,166100],{"class":323},[155,167454,317],{"class":167},[155,167456,166105],{"class":732},[155,167458,7657],{"class":171},[155,167460,167461,167464,167466],{"class":157,"line":570},[155,167462,167463],{"class":323},"    datazoom_opts",[155,167465,317],{"class":167},[155,167467,167468],{"class":171},"[opts.DataZoomOpts()],\n",[155,167470,167471],{"class":157,"line":575},[155,167472,363],{"class":171},[155,167474,167475,167477,167480],{"class":157,"line":581},[155,167476,165887],{"class":171},[155,167478,167479],{"class":732},"\"daily_sales.html\"",[155,167481,363],{"class":171},[24,167483,167484,167487],{},[152,167485,167486],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[20037,167489,167491],{"id":167490},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[24,167493,167494],{},"如果数据结构如下：",[146,167496,167498],{"className":148,"code":167497,"language":150,"meta":39,"style":39},"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",[152,167499,167500,167508,167516,167538,167559,167564,167571,167591,167611,167615],{"__ignoreMap":39},[155,167501,167502,167504,167506],{"class":157,"line":158},[155,167503,120221],{"class":171},[155,167505,317],{"class":167},[155,167507,35397],{"class":171},[155,167509,167510,167513],{"class":157,"line":46},[155,167511,167512],{"class":732},"    \"北京\"",[155,167514,167515],{"class":171},": [\n",[155,167517,167518,167520,167522,167524,167527,167529,167532,167534,167536],{"class":157,"line":121},[155,167519,24781],{"class":171},[155,167521,166560],{"class":732},[155,167523,70000],{"class":171},[155,167525,167526],{"class":732},"\"2024-01-01\"",[155,167528,7589],{"class":171},[155,167530,167531],{"class":732},"\"confirm\"",[155,167533,70000],{"class":171},[155,167535,565],{"class":263},[155,167537,24794],{"class":171},[155,167539,167540,167542,167544,167546,167549,167551,167553,167555,167557],{"class":157,"line":180},[155,167541,24781],{"class":171},[155,167543,166560],{"class":732},[155,167545,70000],{"class":171},[155,167547,167548],{"class":732},"\"2024-01-02\"",[155,167550,7589],{"class":171},[155,167552,167531],{"class":732},[155,167554,70000],{"class":171},[155,167556,1231],{"class":263},[155,167558,24794],{"class":171},[155,167560,167561],{"class":157,"line":194},[155,167562,167563],{"class":171},"    ],\n",[155,167565,167566,167569],{"class":157,"line":200},[155,167567,167568],{"class":732},"    \"上海\"",[155,167570,167515],{"class":171},[155,167572,167573,167575,167577,167579,167581,167583,167585,167587,167589],{"class":157,"line":213},[155,167574,24781],{"class":171},[155,167576,166560],{"class":732},[155,167578,70000],{"class":171},[155,167580,167526],{"class":732},[155,167582,7589],{"class":171},[155,167584,167531],{"class":732},[155,167586,70000],{"class":171},[155,167588,1636],{"class":263},[155,167590,24794],{"class":171},[155,167592,167593,167595,167597,167599,167601,167603,167605,167607,167609],{"class":157,"line":220},[155,167594,24781],{"class":171},[155,167596,166560],{"class":732},[155,167598,70000],{"class":171},[155,167600,167548],{"class":732},[155,167602,7589],{"class":171},[155,167604,167531],{"class":732},[155,167606,70000],{"class":171},[155,167608,20589],{"class":263},[155,167610,24794],{"class":171},[155,167612,167613],{"class":157,"line":245},[155,167614,167563],{"class":171},[155,167616,167617],{"class":157,"line":251},[155,167618,21475],{"class":171},[24,167620,167621],{},"绘制多地区趋势：",[146,167623,167625],{"className":148,"code":167624,"language":150,"meta":39,"style":39},"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",[152,167626,167627,167641,167651,167655,167680,167684,167692,167696,167700,167712,167734,167747,167751,167755,167772,167788,167792],{"__ignoreMap":39},[155,167628,167629,167631,167633,167635,167637,167639],{"class":157,"line":158},[155,167630,183],{"class":167},[155,167632,165942],{"class":171},[155,167634,168],{"class":167},[155,167636,165947],{"class":171},[155,167638,907],{"class":167},[155,167640,165952],{"class":171},[155,167642,167643,167645,167647,167649],{"class":157,"line":46},[155,167644,183],{"class":167},[155,167646,165801],{"class":171},[155,167648,168],{"class":167},[155,167650,165806],{"class":171},[155,167652,167653],{"class":157,"line":121},[155,167654,217],{"emptyLinePlaceholder":216},[155,167656,167657,167659,167661,167663,167665,167667,167669,167671,167673,167676,167678],{"class":157,"line":180},[155,167658,166363],{"class":171},[155,167660,317],{"class":167},[155,167662,167286],{"class":171},[155,167664,166560],{"class":732},[155,167666,24309],{"class":171},[155,167668,1125],{"class":167},[155,167670,166772],{"class":171},[155,167672,1131],{"class":167},[155,167674,167675],{"class":171}," data[",[155,167677,87832],{"class":732},[155,167679,96090],{"class":171},[155,167681,167682],{"class":157,"line":194},[155,167683,217],{"emptyLinePlaceholder":216},[155,167685,167686,167688,167690],{"class":157,"line":200},[155,167687,165815],{"class":171},[155,167689,317],{"class":167},[155,167691,165820],{"class":171},[155,167693,167694],{"class":157,"line":213},[155,167695,166404],{"class":171},[155,167697,167698],{"class":157,"line":220},[155,167699,217],{"emptyLinePlaceholder":216},[155,167701,167702,167704,167707,167709],{"class":157,"line":245},[155,167703,1125],{"class":167},[155,167705,167706],{"class":171}," city, records ",[155,167708,1131],{"class":167},[155,167710,167711],{"class":171}," data.items():\n",[155,167713,167714,167717,167719,167721,167723,167725,167727,167729,167731],{"class":157,"line":251},[155,167715,167716],{"class":171},"    values ",[155,167718,317],{"class":167},[155,167720,167286],{"class":171},[155,167722,167531],{"class":732},[155,167724,24309],{"class":171},[155,167726,1125],{"class":167},[155,167728,166772],{"class":171},[155,167730,1131],{"class":167},[155,167732,167733],{"class":171}," records]\n",[155,167735,167736,167739,167741,167743,167745],{"class":157,"line":257},[155,167737,167738],{"class":171},"    line.add_yaxis(city, values, ",[155,167740,166308],{"class":323},[155,167742,317],{"class":167},[155,167744,1000],{"class":263},[155,167746,363],{"class":171},[155,167748,167749],{"class":157,"line":270},[155,167750,217],{"emptyLinePlaceholder":216},[155,167752,167753],{"class":157,"line":276},[155,167754,166031],{"class":171},[155,167756,167757,167759,167761,167763,167765,167767,167770],{"class":157,"line":297},[155,167758,166036],{"class":323},[155,167760,317],{"class":167},[155,167762,166041],{"class":171},[155,167764,69970],{"class":323},[155,167766,317],{"class":167},[155,167768,167769],{"class":732},"\"多地区趋势图\"",[155,167771,7657],{"class":171},[155,167773,167774,167776,167778,167780,167782,167784,167786],{"class":157,"line":302},[155,167775,166092],{"class":323},[155,167777,317],{"class":167},[155,167779,166097],{"class":171},[155,167781,166100],{"class":323},[155,167783,317],{"class":167},[155,167785,166105],{"class":732},[155,167787,7657],{"class":171},[155,167789,167790],{"class":157,"line":308},[155,167791,363],{"class":171},[155,167793,167794,167796,167799],{"class":157,"line":366},[155,167795,165887],{"class":171},[155,167797,167798],{"class":732},"\"trend.html\"",[155,167800,363],{"class":171},[24,167802,167803],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[20037,167805,167807],{"id":167806},"_1012-易错点","10.12 易错点",[28,167809,167810,167816,167822,167832,167838],{},[31,167811,167812,167815],{},[152,167813,167814],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[31,167817,167818,167821],{},[152,167819,167820],{},"render()"," 生成的是 HTML，不是图片。",[31,167823,167824,167825,167828,167829,48174],{},"JSON 字符串用 ",[152,167826,167827],{},"json.loads()","，JSON 文件用 ",[152,167830,167831],{},"json.load()",[31,167833,167834,167835,48174],{},"中文 JSON 保存时加 ",[152,167836,167837],{},"ensure_ascii=False",[31,167839,167840],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[20037,167842,167844],{"id":167843},"_1013-本章练习","10.13 本章练习",[28,167846,167847,167850,167853,167856,167859],{},[31,167848,167849],{},"安装 pyecharts 并生成第一个折线图。",[31,167851,167852],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[31,167854,167855],{},"绘制两条折线，对比线上和线下销售额。",[31,167857,167858],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[31,167860,167861],{},"对含有空值的销售数据进行清洗后再绘图。",[20011,167863,167864],{},"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":39,"searchDepth":46,"depth":46,"links":167866},[167867,167868,167869,167870,167871,167872,167873,167874,167875,167876,167877,167878,167879],{"id":165483,"depth":46,"text":165484},{"id":165558,"depth":46,"text":165559},{"id":165737,"depth":46,"text":165738},{"id":165788,"depth":46,"text":165789},{"id":165922,"depth":46,"text":165923},{"id":166198,"depth":46,"text":166199},{"id":166324,"depth":46,"text":166325},{"id":166535,"depth":46,"text":166536},{"id":166906,"depth":46,"text":166907},{"id":167118,"depth":46,"text":167119},{"id":167490,"depth":46,"text":167491},{"id":167806,"depth":46,"text":167807},{"id":167843,"depth":46,"text":167844},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":165475,"description":20020},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":167886,"title":167887,"body":167888,"description":20020,"extension":20021,"meta":170248,"navigation":216,"path":170249,"seo":170250,"stem":170251,"__hash__":170252},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":167889,"toc":170225},[167890,167893,167897,167900,167903,167979,167982,168073,168076,168080,168083,168127,168140,168144,168147,168214,168217,168221,168224,168308,168316,168320,168325,168466,168469,168480,168486,168492,168606,168610,168613,168616,168869,168872,168876,168879,168983,168986,168990,169141,169145,169152,169265,169269,169272,169378,169381,169385,169388,169419,169422,169527,169530,169534,169538,169548,169616,169620,169627,169691,169694,169698,169704,169800,169809,169813,170137,170146,170150,170178,170182,170222],[10,167891,167887],{"id":167892},"_11-面向对象基础",[20037,167894,167896],{"id":167895},"_111-什么是面向对象","11.1 什么是面向对象",[24,167898,167899],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[24,167901,167902],{},"面向过程：",[146,167904,167906],{"className":148,"code":167905,"language":150,"meta":39,"style":39},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[152,167907,167908,167917,167925,167929,167939,167970,167974],{"__ignoreMap":39},[155,167909,167910,167912,167914],{"class":157,"line":158},[155,167911,165099],{"class":171},[155,167913,317],{"class":167},[155,167915,167916],{"class":732}," \"小明\"\n",[155,167918,167919,167921,167923],{"class":157,"line":46},[155,167920,165109],{"class":171},[155,167922,317],{"class":167},[155,167924,165114],{"class":263},[155,167926,167927],{"class":157,"line":121},[155,167928,217],{"emptyLinePlaceholder":216},[155,167930,167931,167933,167936],{"class":157,"line":180},[155,167932,1484],{"class":167},[155,167934,167935],{"class":226}," introduce",[155,167937,167938],{"class":171},"(name, age):\n",[155,167940,167941,167943,167945,167947,167950,167952,167954,167956,167959,167961,167963,167965,167968],{"class":157,"line":194},[155,167942,822],{"class":263},[155,167944,230],{"class":171},[155,167946,17391],{"class":167},[155,167948,167949],{"class":732},"\"我叫",[155,167951,2705],{"class":263},[155,167953,98373],{"class":171},[155,167955,2711],{"class":263},[155,167957,167958],{"class":732},"，今年",[155,167960,2705],{"class":263},[155,167962,88784],{"class":171},[155,167964,2711],{"class":263},[155,167966,167967],{"class":732},"岁\"",[155,167969,363],{"class":171},[155,167971,167972],{"class":157,"line":200},[155,167973,217],{"emptyLinePlaceholder":216},[155,167975,167976],{"class":157,"line":213},[155,167977,167978],{"class":171},"introduce(name, age)\n",[24,167980,167981],{},"面向对象：",[146,167983,167985],{"className":148,"code":167984,"language":150,"meta":39,"style":39},"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",[152,167986,167987,167995,168003,168032,168036,168040,168050,168059,168068],{"__ignoreMap":39},[155,167988,167989,167991,167993],{"class":157,"line":158},[155,167990,223],{"class":167},[155,167992,27757],{"class":226},[155,167994,736],{"class":171},[155,167996,167997,167999,168001],{"class":157,"line":46},[155,167998,260],{"class":167},[155,168000,167935],{"class":226},[155,168002,267],{"class":171},[155,168004,168005,168007,168009,168011,168013,168016,168018,168020,168022,168024,168026,168028,168030],{"class":157,"line":121},[155,168006,2017],{"class":263},[155,168008,230],{"class":171},[155,168010,17391],{"class":167},[155,168012,167949],{"class":732},[155,168014,168015],{"class":263},"{self",[155,168017,98864],{"class":171},[155,168019,2711],{"class":263},[155,168021,167958],{"class":732},[155,168023,168015],{"class":263},[155,168025,98876],{"class":171},[155,168027,2711],{"class":263},[155,168029,167967],{"class":732},[155,168031,363],{"class":171},[155,168033,168034],{"class":157,"line":180},[155,168035,217],{"emptyLinePlaceholder":216},[155,168037,168038],{"class":157,"line":194},[155,168039,217],{"emptyLinePlaceholder":216},[155,168041,168042,168045,168047],{"class":157,"line":200},[155,168043,168044],{"class":171},"student ",[155,168046,317],{"class":167},[155,168048,168049],{"class":171}," Student()\n",[155,168051,168052,168055,168057],{"class":157,"line":213},[155,168053,168054],{"class":171},"student.name ",[155,168056,317],{"class":167},[155,168058,167916],{"class":732},[155,168060,168061,168064,168066],{"class":157,"line":220},[155,168062,168063],{"class":171},"student.age ",[155,168065,317],{"class":167},[155,168067,165114],{"class":263},[155,168069,168070],{"class":157,"line":245},[155,168071,168072],{"class":171},"student.introduce()\n",[24,168074,168075],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[20037,168077,168079],{"id":168078},"_112-类和对象","11.2 类和对象",[24,168081,168082],{},"类是模板，对象是根据模板创建出来的具体实例。",[146,168084,168086],{"className":148,"code":168085,"language":150,"meta":39,"style":39},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[152,168087,168088,168096,168101,168105,168109,168118],{"__ignoreMap":39},[155,168089,168090,168092,168094],{"class":157,"line":158},[155,168091,223],{"class":167},[155,168093,27757],{"class":226},[155,168095,736],{"class":171},[155,168097,168098],{"class":157,"line":46},[155,168099,168100],{"class":167},"    pass\n",[155,168102,168103],{"class":157,"line":121},[155,168104,217],{"emptyLinePlaceholder":216},[155,168106,168107],{"class":157,"line":180},[155,168108,217],{"emptyLinePlaceholder":216},[155,168110,168111,168114,168116],{"class":157,"line":194},[155,168112,168113],{"class":171},"student1 ",[155,168115,317],{"class":167},[155,168117,168049],{"class":171},[155,168119,168120,168123,168125],{"class":157,"line":200},[155,168121,168122],{"class":171},"student2 ",[155,168124,317],{"class":167},[155,168126,168049],{"class":171},[24,168128,168129,168132,168133,119581,168136,168139],{},[152,168130,168131],{},"Student"," 是类，",[152,168134,168135],{},"student1",[152,168137,168138],{},"student2"," 是对象。",[20037,168141,168143],{"id":168142},"_113-属性","11.3 属性",[24,168145,168146],{},"属性是对象保存的数据。",[146,168148,168150],{"className":148,"code":168149,"language":150,"meta":39,"style":39},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[152,168151,168152,168160,168164,168168,168172,168180,168188,168196,168200,168207],{"__ignoreMap":39},[155,168153,168154,168156,168158],{"class":157,"line":158},[155,168155,223],{"class":167},[155,168157,27757],{"class":226},[155,168159,736],{"class":171},[155,168161,168162],{"class":157,"line":46},[155,168163,168100],{"class":167},[155,168165,168166],{"class":157,"line":121},[155,168167,217],{"emptyLinePlaceholder":216},[155,168169,168170],{"class":157,"line":180},[155,168171,217],{"emptyLinePlaceholder":216},[155,168173,168174,168176,168178],{"class":157,"line":194},[155,168175,168044],{"class":171},[155,168177,317],{"class":167},[155,168179,168049],{"class":171},[155,168181,168182,168184,168186],{"class":157,"line":200},[155,168183,168054],{"class":171},[155,168185,317],{"class":167},[155,168187,167916],{"class":732},[155,168189,168190,168192,168194],{"class":157,"line":213},[155,168191,168063],{"class":171},[155,168193,317],{"class":167},[155,168195,165114],{"class":263},[155,168197,168198],{"class":157,"line":220},[155,168199,217],{"emptyLinePlaceholder":216},[155,168201,168202,168204],{"class":157,"line":245},[155,168203,15451],{"class":263},[155,168205,168206],{"class":171},"(student.name)\n",[155,168208,168209,168211],{"class":157,"line":251},[155,168210,15451],{"class":263},[155,168212,168213],{"class":171},"(student.age)\n",[24,168215,168216],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[20037,168218,168220],{"id":168219},"_114-方法","11.4 方法",[24,168222,168223],{},"类中的函数叫方法。",[146,168225,168226],{"className":148,"code":167984,"language":150,"meta":39,"style":39},[152,168227,168228,168236,168244,168272,168276,168280,168288,168296,168304],{"__ignoreMap":39},[155,168229,168230,168232,168234],{"class":157,"line":158},[155,168231,223],{"class":167},[155,168233,27757],{"class":226},[155,168235,736],{"class":171},[155,168237,168238,168240,168242],{"class":157,"line":46},[155,168239,260],{"class":167},[155,168241,167935],{"class":226},[155,168243,267],{"class":171},[155,168245,168246,168248,168250,168252,168254,168256,168258,168260,168262,168264,168266,168268,168270],{"class":157,"line":121},[155,168247,2017],{"class":263},[155,168249,230],{"class":171},[155,168251,17391],{"class":167},[155,168253,167949],{"class":732},[155,168255,168015],{"class":263},[155,168257,98864],{"class":171},[155,168259,2711],{"class":263},[155,168261,167958],{"class":732},[155,168263,168015],{"class":263},[155,168265,98876],{"class":171},[155,168267,2711],{"class":263},[155,168269,167967],{"class":732},[155,168271,363],{"class":171},[155,168273,168274],{"class":157,"line":180},[155,168275,217],{"emptyLinePlaceholder":216},[155,168277,168278],{"class":157,"line":194},[155,168279,217],{"emptyLinePlaceholder":216},[155,168281,168282,168284,168286],{"class":157,"line":200},[155,168283,168044],{"class":171},[155,168285,317],{"class":167},[155,168287,168049],{"class":171},[155,168289,168290,168292,168294],{"class":157,"line":213},[155,168291,168054],{"class":171},[155,168293,317],{"class":167},[155,168295,167916],{"class":732},[155,168297,168298,168300,168302],{"class":157,"line":220},[155,168299,168063],{"class":171},[155,168301,317],{"class":167},[155,168303,165114],{"class":263},[155,168305,168306],{"class":157,"line":245},[155,168307,168072],{"class":171},[24,168309,168310,168312,168313,168315],{},[152,168311,285],{}," 表示当前对象。调用方法时不需要手动传入 ",[152,168314,285],{},"，Python 会自动传。",[20037,168317,168319],{"id":168318},"_115-构造方法__init__","11.5 构造方法__init__",[24,168321,168322,168324],{},[152,168323,291],{}," 在对象创建时自动执行，用于初始化属性。",[146,168326,168328],{"className":148,"code":168327,"language":150,"meta":39,"style":39},"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",[152,168329,168330,168338,168347,168359,168371,168382,168386,168394,168432,168436,168440,168462],{"__ignoreMap":39},[155,168331,168332,168334,168336],{"class":157,"line":158},[155,168333,223],{"class":167},[155,168335,27757],{"class":226},[155,168337,736],{"class":171},[155,168339,168340,168342,168344],{"class":157,"line":46},[155,168341,260],{"class":167},[155,168343,264],{"class":263},[155,168345,168346],{"class":171},"(self, name, age, score):\n",[155,168348,168349,168351,168354,168356],{"class":157,"line":121},[155,168350,311],{"class":263},[155,168352,168353],{"class":171},".name ",[155,168355,317],{"class":167},[155,168357,168358],{"class":171}," name\n",[155,168360,168361,168363,168366,168368],{"class":157,"line":180},[155,168362,311],{"class":263},[155,168364,168365],{"class":171},".age ",[155,168367,317],{"class":167},[155,168369,168370],{"class":171}," age\n",[155,168372,168373,168375,168378,168380],{"class":157,"line":194},[155,168374,311],{"class":263},[155,168376,168377],{"class":171},".score ",[155,168379,317],{"class":167},[155,168381,21489],{"class":171},[155,168383,168384],{"class":157,"line":200},[155,168385,217],{"emptyLinePlaceholder":216},[155,168387,168388,168390,168392],{"class":157,"line":213},[155,168389,260],{"class":167},[155,168391,167935],{"class":226},[155,168393,267],{"class":171},[155,168395,168396,168398,168400,168402,168404,168406,168408,168410,168412,168414,168416,168418,168421,168423,168426,168428,168430],{"class":157,"line":220},[155,168397,2017],{"class":263},[155,168399,230],{"class":171},[155,168401,17391],{"class":167},[155,168403,167949],{"class":732},[155,168405,168015],{"class":263},[155,168407,98864],{"class":171},[155,168409,2711],{"class":263},[155,168411,167958],{"class":732},[155,168413,168015],{"class":263},[155,168415,98876],{"class":171},[155,168417,2711],{"class":263},[155,168419,168420],{"class":732},"岁，成绩",[155,168422,168015],{"class":263},[155,168424,168425],{"class":171},".score",[155,168427,2711],{"class":263},[155,168429,2033],{"class":732},[155,168431,363],{"class":171},[155,168433,168434],{"class":157,"line":245},[155,168435,217],{"emptyLinePlaceholder":216},[155,168437,168438],{"class":157,"line":251},[155,168439,217],{"emptyLinePlaceholder":216},[155,168441,168442,168444,168446,168449,168452,168454,168456,168458,168460],{"class":157,"line":257},[155,168443,168044],{"class":171},[155,168445,317],{"class":167},[155,168447,168448],{"class":171}," Student(",[155,168450,168451],{"class":732},"\"小明\"",[155,168453,7589],{"class":171},[155,168455,20709],{"class":263},[155,168457,7589],{"class":171},[155,168459,21034],{"class":263},[155,168461,363],{"class":171},[155,168463,168464],{"class":157,"line":270},[155,168465,168072],{"class":171},[24,168467,168468],{},"构造方法的好处：",[28,168470,168471,168474,168477],{},[31,168472,168473],{},"创建对象时必须提供必要数据。",[31,168475,168476],{},"属性初始化集中，不容易漏。",[31,168478,168479],{},"对象状态更完整。",[20037,168481,168483,168484],{"id":168482},"_116-str","11.6 ",[20234,168485,21215],{},[24,168487,168488,168489,48174],{},"直接打印对象时，默认输出不直观。可以定义 ",[152,168490,168491],{},"__str__",[146,168493,168495],{"className":148,"code":168494,"language":150,"meta":39,"style":39},"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",[152,168496,168497,168505,168514,168524,168534,168538,168547,168575,168579,168583,168599],{"__ignoreMap":39},[155,168498,168499,168501,168503],{"class":157,"line":158},[155,168500,223],{"class":167},[155,168502,27757],{"class":226},[155,168504,736],{"class":171},[155,168506,168507,168509,168511],{"class":157,"line":46},[155,168508,260],{"class":167},[155,168510,264],{"class":263},[155,168512,168513],{"class":171},"(self, name, age):\n",[155,168515,168516,168518,168520,168522],{"class":157,"line":121},[155,168517,311],{"class":263},[155,168519,168353],{"class":171},[155,168521,317],{"class":167},[155,168523,168358],{"class":171},[155,168525,168526,168528,168530,168532],{"class":157,"line":180},[155,168527,311],{"class":263},[155,168529,168365],{"class":171},[155,168531,317],{"class":167},[155,168533,168370],{"class":171},[155,168535,168536],{"class":157,"line":194},[155,168537,217],{"emptyLinePlaceholder":216},[155,168539,168540,168542,168545],{"class":157,"line":200},[155,168541,260],{"class":167},[155,168543,168544],{"class":263}," __str__",[155,168546,267],{"class":171},[155,168548,168549,168551,168554,168557,168559,168561,168563,168566,168568,168570,168572],{"class":157,"line":213},[155,168550,709],{"class":167},[155,168552,168553],{"class":167}," f",[155,168555,168556],{"class":732},"\"Student(name=",[155,168558,168015],{"class":263},[155,168560,98864],{"class":171},[155,168562,2711],{"class":263},[155,168564,168565],{"class":732},", age=",[155,168567,168015],{"class":263},[155,168569,98876],{"class":171},[155,168571,2711],{"class":263},[155,168573,168574],{"class":732},")\"\n",[155,168576,168577],{"class":157,"line":220},[155,168578,217],{"emptyLinePlaceholder":216},[155,168580,168581],{"class":157,"line":245},[155,168582,217],{"emptyLinePlaceholder":216},[155,168584,168585,168587,168589,168591,168593,168595,168597],{"class":157,"line":251},[155,168586,168044],{"class":171},[155,168588,317],{"class":167},[155,168590,168448],{"class":171},[155,168592,168451],{"class":732},[155,168594,7589],{"class":171},[155,168596,20709],{"class":263},[155,168598,363],{"class":171},[155,168600,168601,168603],{"class":157,"line":257},[155,168602,15451],{"class":263},[155,168604,168605],{"class":171},"(student)\n",[20037,168607,168609],{"id":168608},"_117-封装","11.7 封装",[24,168611,168612],{},"封装就是把数据和方法放到类中，并控制访问方式。",[24,168614,168615],{},"Python 中以双下划线开头的属性通常视为私有属性。",[146,168617,168619],{"className":148,"code":168618,"language":150,"meta":39,"style":39},"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",[152,168620,168621,168630,168639,168651,168663,168667,168676,168685,168689,168699,168712,168723,168728,168739,168743,168752,168764,168775,168779,168792,168803,168807,168818,168822,168826,168844,168853,168862],{"__ignoreMap":39},[155,168622,168623,168625,168628],{"class":157,"line":158},[155,168624,223],{"class":167},[155,168626,168627],{"class":226}," Account",[155,168629,736],{"class":171},[155,168631,168632,168634,168636],{"class":157,"line":46},[155,168633,260],{"class":167},[155,168635,264],{"class":263},[155,168637,168638],{"class":171},"(self, owner, balance):\n",[155,168640,168641,168643,168646,168648],{"class":157,"line":121},[155,168642,311],{"class":263},[155,168644,168645],{"class":171},".owner ",[155,168647,317],{"class":167},[155,168649,168650],{"class":171}," owner\n",[155,168652,168653,168655,168658,168660],{"class":157,"line":180},[155,168654,311],{"class":263},[155,168656,168657],{"class":171},".__balance ",[155,168659,317],{"class":167},[155,168661,168662],{"class":171}," balance\n",[155,168664,168665],{"class":157,"line":194},[155,168666,217],{"emptyLinePlaceholder":216},[155,168668,168669,168671,168674],{"class":157,"line":200},[155,168670,260],{"class":167},[155,168672,168673],{"class":226}," get_balance",[155,168675,267],{"class":171},[155,168677,168678,168680,168682],{"class":157,"line":213},[155,168679,709],{"class":167},[155,168681,8484],{"class":263},[155,168683,168684],{"class":171},".__balance\n",[155,168686,168687],{"class":157,"line":220},[155,168688,217],{"emptyLinePlaceholder":216},[155,168690,168691,168693,168696],{"class":157,"line":245},[155,168692,260],{"class":167},[155,168694,168695],{"class":226}," deposit",[155,168697,168698],{"class":171},"(self, money):\n",[155,168700,168701,168703,168706,168708,168710],{"class":157,"line":251},[155,168702,2803],{"class":167},[155,168704,168705],{"class":171}," money ",[155,168707,21498],{"class":167},[155,168709,1151],{"class":263},[155,168711,736],{"class":171},[155,168713,168714,168716,168718,168721],{"class":157,"line":257},[155,168715,4256],{"class":263},[155,168717,230],{"class":171},[155,168719,168720],{"class":732},"\"存款金额必须大于0\"",[155,168722,363],{"class":171},[155,168724,168725],{"class":157,"line":270},[155,168726,168727],{"class":167},"            return\n",[155,168729,168730,168732,168734,168736],{"class":157,"line":276},[155,168731,311],{"class":263},[155,168733,168657],{"class":171},[155,168735,2351],{"class":167},[155,168737,168738],{"class":171}," money\n",[155,168740,168741],{"class":157,"line":297},[155,168742,217],{"emptyLinePlaceholder":216},[155,168744,168745,168747,168750],{"class":157,"line":302},[155,168746,260],{"class":167},[155,168748,168749],{"class":226}," withdraw",[155,168751,168698],{"class":171},[155,168753,168754,168756,168758,168760,168762],{"class":157,"line":308},[155,168755,2803],{"class":167},[155,168757,168705],{"class":171},[155,168759,21498],{"class":167},[155,168761,1151],{"class":263},[155,168763,736],{"class":171},[155,168765,168766,168768,168770,168773],{"class":157,"line":366},[155,168767,4256],{"class":263},[155,168769,230],{"class":171},[155,168771,168772],{"class":732},"\"取款金额必须大于0\"",[155,168774,363],{"class":171},[155,168776,168777],{"class":157,"line":379},[155,168778,168727],{"class":167},[155,168780,168781,168783,168785,168787,168789],{"class":157,"line":385},[155,168782,2803],{"class":167},[155,168784,168705],{"class":171},[155,168786,1148],{"class":167},[155,168788,8484],{"class":263},[155,168790,168791],{"class":171},".__balance:\n",[155,168793,168794,168796,168798,168801],{"class":157,"line":415},[155,168795,4256],{"class":263},[155,168797,230],{"class":171},[155,168799,168800],{"class":732},"\"余额不足\"",[155,168802,363],{"class":171},[155,168804,168805],{"class":157,"line":452},[155,168806,168727],{"class":167},[155,168808,168809,168811,168813,168816],{"class":157,"line":480},[155,168810,311],{"class":263},[155,168812,168657],{"class":171},[155,168814,168815],{"class":167},"-=",[155,168817,168738],{"class":171},[155,168819,168820],{"class":157,"line":486},[155,168821,217],{"emptyLinePlaceholder":216},[155,168823,168824],{"class":157,"line":499},[155,168825,217],{"emptyLinePlaceholder":216},[155,168827,168828,168831,168833,168836,168838,168840,168842],{"class":157,"line":505},[155,168829,168830],{"class":171},"account ",[155,168832,317],{"class":167},[155,168834,168835],{"class":171}," Account(",[155,168837,168451],{"class":732},[155,168839,7589],{"class":171},[155,168841,26273],{"class":263},[155,168843,363],{"class":171},[155,168845,168846,168849,168851],{"class":157,"line":528},[155,168847,168848],{"class":171},"account.deposit(",[155,168850,21619],{"class":263},[155,168852,363],{"class":171},[155,168854,168855,168858,168860],{"class":157,"line":549},[155,168856,168857],{"class":171},"account.withdraw(",[155,168859,20389],{"class":263},[155,168861,363],{"class":171},[155,168863,168864,168866],{"class":157,"line":570},[155,168865,15451],{"class":263},[155,168867,168868],{"class":171},"(account.get_balance())\n",[24,168870,168871],{},"封装的意义是避免外部随意修改内部状态。",[20037,168873,168875],{"id":168874},"_118-继承","11.8 继承",[24,168877,168878],{},"继承可以让子类复用父类的属性和方法。",[146,168880,168882],{"className":148,"code":168881,"language":150,"meta":39,"style":39},"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",[152,168883,168884,168893,168902,168913,168917,168921,168935,168944,168955,168959,168963,168973,168978],{"__ignoreMap":39},[155,168885,168886,168888,168891],{"class":157,"line":158},[155,168887,223],{"class":167},[155,168889,168890],{"class":226}," Animal",[155,168892,736],{"class":171},[155,168894,168895,168897,168900],{"class":157,"line":46},[155,168896,260],{"class":167},[155,168898,168899],{"class":226}," eat",[155,168901,267],{"class":171},[155,168903,168904,168906,168908,168911],{"class":157,"line":121},[155,168905,2017],{"class":263},[155,168907,230],{"class":171},[155,168909,168910],{"class":732},"\"吃东西\"",[155,168912,363],{"class":171},[155,168914,168915],{"class":157,"line":180},[155,168916,217],{"emptyLinePlaceholder":216},[155,168918,168919],{"class":157,"line":194},[155,168920,217],{"emptyLinePlaceholder":216},[155,168922,168923,168925,168928,168930,168933],{"class":157,"line":200},[155,168924,223],{"class":167},[155,168926,168927],{"class":226}," Dog",[155,168929,230],{"class":171},[155,168931,168932],{"class":226},"Animal",[155,168934,242],{"class":171},[155,168936,168937,168939,168942],{"class":157,"line":213},[155,168938,260],{"class":167},[155,168940,168941],{"class":226}," bark",[155,168943,267],{"class":171},[155,168945,168946,168948,168950,168953],{"class":157,"line":220},[155,168947,2017],{"class":263},[155,168949,230],{"class":171},[155,168951,168952],{"class":732},"\"汪汪\"",[155,168954,363],{"class":171},[155,168956,168957],{"class":157,"line":245},[155,168958,217],{"emptyLinePlaceholder":216},[155,168960,168961],{"class":157,"line":251},[155,168962,217],{"emptyLinePlaceholder":216},[155,168964,168965,168968,168970],{"class":157,"line":257},[155,168966,168967],{"class":171},"dog ",[155,168969,317],{"class":167},[155,168971,168972],{"class":171}," Dog()\n",[155,168974,168975],{"class":157,"line":270},[155,168976,168977],{"class":171},"dog.eat()\n",[155,168979,168980],{"class":157,"line":276},[155,168981,168982],{"class":171},"dog.bark()\n",[24,168984,168985],{},"子类可以扩展新方法，也可以重写父类方法。",[20037,168987,168989],{"id":168988},"_119-方法重写","11.9 方法重写",[146,168991,168993],{"className":148,"code":168992,"language":150,"meta":39,"style":39},"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",[152,168994,168995,169003,169012,169023,169027,169031,169043,169051,169061,169065,169069,169082,169090,169101,169105,169109,169117,169127,169131,169136],{"__ignoreMap":39},[155,168996,168997,168999,169001],{"class":157,"line":158},[155,168998,223],{"class":167},[155,169000,168890],{"class":226},[155,169002,736],{"class":171},[155,169004,169005,169007,169010],{"class":157,"line":46},[155,169006,260],{"class":167},[155,169008,169009],{"class":226}," speak",[155,169011,267],{"class":171},[155,169013,169014,169016,169018,169021],{"class":157,"line":121},[155,169015,2017],{"class":263},[155,169017,230],{"class":171},[155,169019,169020],{"class":732},"\"动物叫\"",[155,169022,363],{"class":171},[155,169024,169025],{"class":157,"line":180},[155,169026,217],{"emptyLinePlaceholder":216},[155,169028,169029],{"class":157,"line":194},[155,169030,217],{"emptyLinePlaceholder":216},[155,169032,169033,169035,169037,169039,169041],{"class":157,"line":200},[155,169034,223],{"class":167},[155,169036,168927],{"class":226},[155,169038,230],{"class":171},[155,169040,168932],{"class":226},[155,169042,242],{"class":171},[155,169044,169045,169047,169049],{"class":157,"line":213},[155,169046,260],{"class":167},[155,169048,169009],{"class":226},[155,169050,267],{"class":171},[155,169052,169053,169055,169057,169059],{"class":157,"line":220},[155,169054,2017],{"class":263},[155,169056,230],{"class":171},[155,169058,168952],{"class":732},[155,169060,363],{"class":171},[155,169062,169063],{"class":157,"line":245},[155,169064,217],{"emptyLinePlaceholder":216},[155,169066,169067],{"class":157,"line":251},[155,169068,217],{"emptyLinePlaceholder":216},[155,169070,169071,169073,169076,169078,169080],{"class":157,"line":257},[155,169072,223],{"class":167},[155,169074,169075],{"class":226}," Cat",[155,169077,230],{"class":171},[155,169079,168932],{"class":226},[155,169081,242],{"class":171},[155,169083,169084,169086,169088],{"class":157,"line":270},[155,169085,260],{"class":167},[155,169087,169009],{"class":226},[155,169089,267],{"class":171},[155,169091,169092,169094,169096,169099],{"class":157,"line":276},[155,169093,2017],{"class":263},[155,169095,230],{"class":171},[155,169097,169098],{"class":732},"\"喵喵\"",[155,169100,363],{"class":171},[155,169102,169103],{"class":157,"line":297},[155,169104,217],{"emptyLinePlaceholder":216},[155,169106,169107],{"class":157,"line":302},[155,169108,217],{"emptyLinePlaceholder":216},[155,169110,169111,169113,169115],{"class":157,"line":308},[155,169112,168967],{"class":171},[155,169114,317],{"class":167},[155,169116,168972],{"class":171},[155,169118,169119,169122,169124],{"class":157,"line":366},[155,169120,169121],{"class":171},"cat ",[155,169123,317],{"class":167},[155,169125,169126],{"class":171}," Cat()\n",[155,169128,169129],{"class":157,"line":379},[155,169130,217],{"emptyLinePlaceholder":216},[155,169132,169133],{"class":157,"line":385},[155,169134,169135],{"class":171},"dog.speak()\n",[155,169137,169138],{"class":157,"line":415},[155,169139,169140],{"class":171},"cat.speak()\n",[20037,169142,169144],{"id":169143},"_1110-super","11.10 super",[24,169146,169147,169148,169151],{},"子类可以通过 ",[152,169149,169150],{},"super()"," 调用父类方法。",[146,169153,169155],{"className":148,"code":169154,"language":150,"meta":39,"style":39},"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",[152,169156,169157,169165,169174,169184,169188,169192,169204,169213,169224,169234,169238,169242,169258],{"__ignoreMap":39},[155,169158,169159,169161,169163],{"class":157,"line":158},[155,169160,223],{"class":167},[155,169162,35394],{"class":226},[155,169164,736],{"class":171},[155,169166,169167,169169,169171],{"class":157,"line":46},[155,169168,260],{"class":167},[155,169170,264],{"class":263},[155,169172,169173],{"class":171},"(self, name):\n",[155,169175,169176,169178,169180,169182],{"class":157,"line":121},[155,169177,311],{"class":263},[155,169179,168353],{"class":171},[155,169181,317],{"class":167},[155,169183,168358],{"class":171},[155,169185,169186],{"class":157,"line":180},[155,169187,217],{"emptyLinePlaceholder":216},[155,169189,169190],{"class":157,"line":194},[155,169191,217],{"emptyLinePlaceholder":216},[155,169193,169194,169196,169198,169200,169202],{"class":157,"line":200},[155,169195,223],{"class":167},[155,169197,27757],{"class":226},[155,169199,230],{"class":171},[155,169201,38839],{"class":226},[155,169203,242],{"class":171},[155,169205,169206,169208,169210],{"class":157,"line":213},[155,169207,260],{"class":167},[155,169209,264],{"class":263},[155,169211,169212],{"class":171},"(self, name, score):\n",[155,169214,169215,169217,169219,169221],{"class":157,"line":220},[155,169216,279],{"class":263},[155,169218,37054],{"class":171},[155,169220,291],{"class":263},[155,169222,169223],{"class":171},"(name)\n",[155,169225,169226,169228,169230,169232],{"class":157,"line":245},[155,169227,311],{"class":263},[155,169229,168377],{"class":171},[155,169231,317],{"class":167},[155,169233,21489],{"class":171},[155,169235,169236],{"class":157,"line":251},[155,169237,217],{"emptyLinePlaceholder":216},[155,169239,169240],{"class":157,"line":257},[155,169241,217],{"emptyLinePlaceholder":216},[155,169243,169244,169246,169248,169250,169252,169254,169256],{"class":157,"line":270},[155,169245,168044],{"class":171},[155,169247,317],{"class":167},[155,169249,168448],{"class":171},[155,169251,168451],{"class":732},[155,169253,7589],{"class":171},[155,169255,21034],{"class":263},[155,169257,363],{"class":171},[155,169259,169260,169262],{"class":157,"line":276},[155,169261,15451],{"class":263},[155,169263,169264],{"class":171},"(student.name, student.score)\n",[20037,169266,169268],{"id":169267},"_1111-多态","11.11 多态",[24,169270,169271],{},"多态指不同对象响应同一个方法，表现出不同结果。",[146,169273,169275],{"className":148,"code":169274,"language":150,"meta":39,"style":39},"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",[152,169276,169277,169285,169293,169303,169307,169311,169319,169327,169337,169341,169345,169355,169360,169364,169368,169373],{"__ignoreMap":39},[155,169278,169279,169281,169283],{"class":157,"line":158},[155,169280,223],{"class":167},[155,169282,168927],{"class":226},[155,169284,736],{"class":171},[155,169286,169287,169289,169291],{"class":157,"line":46},[155,169288,260],{"class":167},[155,169290,169009],{"class":226},[155,169292,267],{"class":171},[155,169294,169295,169297,169299,169301],{"class":157,"line":121},[155,169296,2017],{"class":263},[155,169298,230],{"class":171},[155,169300,168952],{"class":732},[155,169302,363],{"class":171},[155,169304,169305],{"class":157,"line":180},[155,169306,217],{"emptyLinePlaceholder":216},[155,169308,169309],{"class":157,"line":194},[155,169310,217],{"emptyLinePlaceholder":216},[155,169312,169313,169315,169317],{"class":157,"line":200},[155,169314,223],{"class":167},[155,169316,169075],{"class":226},[155,169318,736],{"class":171},[155,169320,169321,169323,169325],{"class":157,"line":213},[155,169322,260],{"class":167},[155,169324,169009],{"class":226},[155,169326,267],{"class":171},[155,169328,169329,169331,169333,169335],{"class":157,"line":220},[155,169330,2017],{"class":263},[155,169332,230],{"class":171},[155,169334,169098],{"class":732},[155,169336,363],{"class":171},[155,169338,169339],{"class":157,"line":245},[155,169340,217],{"emptyLinePlaceholder":216},[155,169342,169343],{"class":157,"line":251},[155,169344,217],{"emptyLinePlaceholder":216},[155,169346,169347,169349,169352],{"class":157,"line":257},[155,169348,1484],{"class":167},[155,169350,169351],{"class":226}," make_sound",[155,169353,169354],{"class":171},"(animal):\n",[155,169356,169357],{"class":157,"line":270},[155,169358,169359],{"class":171},"    animal.speak()\n",[155,169361,169362],{"class":157,"line":276},[155,169363,217],{"emptyLinePlaceholder":216},[155,169365,169366],{"class":157,"line":297},[155,169367,217],{"emptyLinePlaceholder":216},[155,169369,169370],{"class":157,"line":302},[155,169371,169372],{"class":171},"make_sound(Dog())\n",[155,169374,169375],{"class":157,"line":308},[155,169376,169377],{"class":171},"make_sound(Cat())\n",[24,169379,169380],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[20037,169382,169384],{"id":169383},"_1112-类属性和实例属性","11.12 类属性和实例属性",[24,169386,169387],{},"实例属性属于对象：",[146,169389,169391],{"className":148,"code":169390,"language":150,"meta":39,"style":39},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[152,169392,169393,169401,169409],{"__ignoreMap":39},[155,169394,169395,169397,169399],{"class":157,"line":158},[155,169396,223],{"class":167},[155,169398,27757],{"class":226},[155,169400,736],{"class":171},[155,169402,169403,169405,169407],{"class":157,"line":46},[155,169404,260],{"class":167},[155,169406,264],{"class":263},[155,169408,169173],{"class":171},[155,169410,169411,169413,169415,169417],{"class":157,"line":121},[155,169412,311],{"class":263},[155,169414,168353],{"class":171},[155,169416,317],{"class":167},[155,169418,168358],{"class":171},[24,169420,169421],{},"类属性属于类，所有对象共享：",[146,169423,169425],{"className":148,"code":169424,"language":150,"meta":39,"style":39},"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",[152,169426,169427,169435,169445,169449,169457,169467,169471,169475,169488,169502,169506,169513,169520],{"__ignoreMap":39},[155,169428,169429,169431,169433],{"class":157,"line":158},[155,169430,223],{"class":167},[155,169432,27757],{"class":226},[155,169434,736],{"class":171},[155,169436,169437,169440,169442],{"class":157,"line":46},[155,169438,169439],{"class":171},"    school ",[155,169441,317],{"class":167},[155,169443,169444],{"class":732}," \"黑马学校\"\n",[155,169446,169447],{"class":157,"line":121},[155,169448,217],{"emptyLinePlaceholder":216},[155,169450,169451,169453,169455],{"class":157,"line":180},[155,169452,260],{"class":167},[155,169454,264],{"class":263},[155,169456,169173],{"class":171},[155,169458,169459,169461,169463,169465],{"class":157,"line":194},[155,169460,311],{"class":263},[155,169462,168353],{"class":171},[155,169464,317],{"class":167},[155,169466,168358],{"class":171},[155,169468,169469],{"class":157,"line":200},[155,169470,217],{"emptyLinePlaceholder":216},[155,169472,169473],{"class":157,"line":213},[155,169474,217],{"emptyLinePlaceholder":216},[155,169476,169477,169480,169482,169484,169486],{"class":157,"line":220},[155,169478,169479],{"class":171},"s1 ",[155,169481,317],{"class":167},[155,169483,168448],{"class":171},[155,169485,168451],{"class":732},[155,169487,363],{"class":171},[155,169489,169490,169493,169495,169497,169500],{"class":157,"line":245},[155,169491,169492],{"class":171},"s2 ",[155,169494,317],{"class":167},[155,169496,168448],{"class":171},[155,169498,169499],{"class":732},"\"小红\"",[155,169501,363],{"class":171},[155,169503,169504],{"class":157,"line":251},[155,169505,217],{"emptyLinePlaceholder":216},[155,169507,169508,169510],{"class":157,"line":257},[155,169509,15451],{"class":263},[155,169511,169512],{"class":171},"(s1.school)\n",[155,169514,169515,169517],{"class":157,"line":270},[155,169516,15451],{"class":263},[155,169518,169519],{"class":171},"(s2.school)\n",[155,169521,169522,169524],{"class":157,"line":276},[155,169523,15451],{"class":263},[155,169525,169526],{"class":171},"(Student.school)\n",[24,169528,169529],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[20037,169531,169533],{"id":169532},"_1113-类方法和静态方法","11.13 类方法和静态方法",[14,169535,169537],{"id":169536},"_11131-类方法","11.13.1 类方法",[24,169539,169540,169541,169544,169545,48174],{},"类方法使用 ",[152,169542,169543],{},"@classmethod","，第一个参数通常是 ",[152,169546,169547],{},"cls",[146,169549,169551],{"className":148,"code":169550,"language":150,"meta":39,"style":39},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[152,169552,169553,169561,169569,169573,169581,169591,169601,169605,169609],{"__ignoreMap":39},[155,169554,169555,169557,169559],{"class":157,"line":158},[155,169556,223],{"class":167},[155,169558,27757],{"class":226},[155,169560,736],{"class":171},[155,169562,169563,169565,169567],{"class":157,"line":46},[155,169564,169439],{"class":171},[155,169566,317],{"class":167},[155,169568,169444],{"class":732},[155,169570,169571],{"class":157,"line":121},[155,169572,217],{"emptyLinePlaceholder":216},[155,169574,169575,169578],{"class":157,"line":180},[155,169576,169577],{"class":226},"    @",[155,169579,169580],{"class":263},"classmethod\n",[155,169582,169583,169585,169588],{"class":157,"line":194},[155,169584,260],{"class":167},[155,169586,169587],{"class":226}," get_school",[155,169589,169590],{"class":171},"(cls):\n",[155,169592,169593,169595,169598],{"class":157,"line":200},[155,169594,709],{"class":167},[155,169596,169597],{"class":263}," cls",[155,169599,169600],{"class":171},".school\n",[155,169602,169603],{"class":157,"line":213},[155,169604,217],{"emptyLinePlaceholder":216},[155,169606,169607],{"class":157,"line":220},[155,169608,217],{"emptyLinePlaceholder":216},[155,169610,169611,169613],{"class":157,"line":245},[155,169612,15451],{"class":263},[155,169614,169615],{"class":171},"(Student.get_school())\n",[14,169617,169619],{"id":169618},"_11132-静态方法","11.13.2 静态方法",[24,169621,169622,169623,169626],{},"静态方法使用 ",[152,169624,169625],{},"@staticmethod","，不需要访问实例和类。",[146,169628,169630],{"className":148,"code":169629,"language":150,"meta":39,"style":39},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[152,169631,169632,169641,169648,169657,169668,169672,169676],{"__ignoreMap":39},[155,169633,169634,169636,169639],{"class":157,"line":158},[155,169635,223],{"class":167},[155,169637,169638],{"class":226}," MathUtils",[155,169640,736],{"class":171},[155,169642,169643,169645],{"class":157,"line":46},[155,169644,169577],{"class":226},[155,169646,169647],{"class":263},"staticmethod\n",[155,169649,169650,169652,169654],{"class":157,"line":121},[155,169651,260],{"class":167},[155,169653,25073],{"class":226},[155,169655,169656],{"class":171},"(a, b):\n",[155,169658,169659,169661,169663,169665],{"class":157,"line":180},[155,169660,709],{"class":167},[155,169662,30697],{"class":171},[155,169664,1274],{"class":167},[155,169666,169667],{"class":171}," b\n",[155,169669,169670],{"class":157,"line":194},[155,169671,217],{"emptyLinePlaceholder":216},[155,169673,169674],{"class":157,"line":200},[155,169675,217],{"emptyLinePlaceholder":216},[155,169677,169678,169680,169683,169685,169687,169689],{"class":157,"line":213},[155,169679,15451],{"class":263},[155,169681,169682],{"class":171},"(MathUtils.add(",[155,169684,329],{"class":263},[155,169686,7589],{"class":171},[155,169688,360],{"class":263},[155,169690,1238],{"class":171},[24,169692,169693],{},"静态方法本质上是放在类命名空间里的普通函数。",[20037,169695,169697],{"id":169696},"_1114-dataclass","11.14 dataclass",[24,169699,169700,169703],{},[152,169701,169702],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[146,169705,169707],{"className":148,"code":169706,"language":150,"meta":39,"style":39},"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",[152,169708,169709,169721,169725,169729,169734,169742,169750,169758,169766,169770,169774,169794],{"__ignoreMap":39},[155,169710,169711,169713,169716,169718],{"class":157,"line":158},[155,169712,183],{"class":167},[155,169714,169715],{"class":171}," dataclasses ",[155,169717,168],{"class":167},[155,169719,169720],{"class":171}," dataclass\n",[155,169722,169723],{"class":157,"line":46},[155,169724,217],{"emptyLinePlaceholder":216},[155,169726,169727],{"class":157,"line":121},[155,169728,217],{"emptyLinePlaceholder":216},[155,169730,169731],{"class":157,"line":180},[155,169732,169733],{"class":226},"@dataclass\n",[155,169735,169736,169738,169740],{"class":157,"line":194},[155,169737,223],{"class":167},[155,169739,27757],{"class":226},[155,169741,736],{"class":171},[155,169743,169744,169747],{"class":157,"line":200},[155,169745,169746],{"class":171},"    name: ",[155,169748,169749],{"class":263},"str\n",[155,169751,169752,169755],{"class":157,"line":213},[155,169753,169754],{"class":171},"    age: ",[155,169756,169757],{"class":263},"int\n",[155,169759,169760,169763],{"class":157,"line":220},[155,169761,169762],{"class":171},"    score: ",[155,169764,169765],{"class":263},"float\n",[155,169767,169768],{"class":157,"line":245},[155,169769,217],{"emptyLinePlaceholder":216},[155,169771,169772],{"class":157,"line":251},[155,169773,217],{"emptyLinePlaceholder":216},[155,169775,169776,169778,169780,169782,169784,169786,169788,169790,169792],{"class":157,"line":257},[155,169777,168044],{"class":171},[155,169779,317],{"class":167},[155,169781,168448],{"class":171},[155,169783,168451],{"class":732},[155,169785,7589],{"class":171},[155,169787,20709],{"class":263},[155,169789,7589],{"class":171},[155,169791,21034],{"class":263},[155,169793,363],{"class":171},[155,169795,169796,169798],{"class":157,"line":270},[155,169797,15451],{"class":263},[155,169799,168605],{"class":171},[24,169801,169802,169803,20293,169805,169808],{},"它会自动生成 ",[152,169804,291],{},[152,169806,169807],{},"__repr__"," 等方法。适合数据模型类。",[20037,169810,169812],{"id":169811},"_1115-小案例学生类","11.15 小案例：学生类",[146,169814,169816],{"className":148,"code":169815,"language":150,"meta":39,"style":39},"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",[152,169817,169818,169826,169835,169847,169857,169867,169877,169881,169890,169903,169907,169916,169922,169934,169946,169958,169970,169974,169978,169984,169994,170003,170013,170021,170029,170038,170042,170046,170054,170090,170094,170098,170123,170130],{"__ignoreMap":39},[155,169819,169820,169822,169824],{"class":157,"line":158},[155,169821,223],{"class":167},[155,169823,27757],{"class":226},[155,169825,736],{"class":171},[155,169827,169828,169830,169832],{"class":157,"line":46},[155,169829,260],{"class":167},[155,169831,264],{"class":263},[155,169833,169834],{"class":171},"(self, student_id, name, age, score):\n",[155,169836,169837,169839,169842,169844],{"class":157,"line":121},[155,169838,311],{"class":263},[155,169840,169841],{"class":171},".student_id ",[155,169843,317],{"class":167},[155,169845,169846],{"class":171}," student_id\n",[155,169848,169849,169851,169853,169855],{"class":157,"line":180},[155,169850,311],{"class":263},[155,169852,168353],{"class":171},[155,169854,317],{"class":167},[155,169856,168358],{"class":171},[155,169858,169859,169861,169863,169865],{"class":157,"line":194},[155,169860,311],{"class":263},[155,169862,168365],{"class":171},[155,169864,317],{"class":167},[155,169866,168370],{"class":171},[155,169868,169869,169871,169873,169875],{"class":157,"line":200},[155,169870,311],{"class":263},[155,169872,168377],{"class":171},[155,169874,317],{"class":167},[155,169876,21489],{"class":171},[155,169878,169879],{"class":157,"line":213},[155,169880,217],{"emptyLinePlaceholder":216},[155,169882,169883,169885,169888],{"class":157,"line":220},[155,169884,260],{"class":167},[155,169886,169887],{"class":226}," is_passed",[155,169889,267],{"class":171},[155,169891,169892,169894,169896,169898,169900],{"class":157,"line":245},[155,169893,709],{"class":167},[155,169895,8484],{"class":263},[155,169897,168377],{"class":171},[155,169899,21607],{"class":167},[155,169901,169902],{"class":263}," 60\n",[155,169904,169905],{"class":157,"line":251},[155,169906,217],{"emptyLinePlaceholder":216},[155,169908,169909,169911,169914],{"class":157,"line":257},[155,169910,260],{"class":167},[155,169912,169913],{"class":226}," to_dict",[155,169915,267],{"class":171},[155,169917,169918,169920],{"class":157,"line":270},[155,169919,709],{"class":167},[155,169921,35397],{"class":171},[155,169923,169924,169927,169929,169931],{"class":157,"line":276},[155,169925,169926],{"class":732},"            \"student_id\"",[155,169928,70000],{"class":171},[155,169930,285],{"class":263},[155,169932,169933],{"class":171},".student_id,\n",[155,169935,169936,169939,169941,169943],{"class":157,"line":297},[155,169937,169938],{"class":732},"            \"name\"",[155,169940,70000],{"class":171},[155,169942,285],{"class":263},[155,169944,169945],{"class":171},".name,\n",[155,169947,169948,169951,169953,169955],{"class":157,"line":302},[155,169949,169950],{"class":732},"            \"age\"",[155,169952,70000],{"class":171},[155,169954,285],{"class":263},[155,169956,169957],{"class":171},".age,\n",[155,169959,169960,169963,169965,169967],{"class":157,"line":308},[155,169961,169962],{"class":732},"            \"score\"",[155,169964,70000],{"class":171},[155,169966,285],{"class":263},[155,169968,169969],{"class":171},".score,\n",[155,169971,169972],{"class":157,"line":366},[155,169973,22414],{"class":171},[155,169975,169976],{"class":157,"line":379},[155,169977,217],{"emptyLinePlaceholder":216},[155,169979,169980,169982],{"class":157,"line":385},[155,169981,169577],{"class":226},[155,169983,169580],{"class":263},[155,169985,169986,169988,169991],{"class":157,"line":415},[155,169987,260],{"class":167},[155,169989,169990],{"class":226}," from_dict",[155,169992,169993],{"class":171},"(cls, data):\n",[155,169995,169996,169998,170000],{"class":157,"line":452},[155,169997,709],{"class":167},[155,169999,169597],{"class":263},[155,170001,170002],{"class":171},"(\n",[155,170004,170005,170008,170011],{"class":157,"line":480},[155,170006,170007],{"class":171},"            data[",[155,170009,170010],{"class":732},"\"student_id\"",[155,170012,106399],{"class":171},[155,170014,170015,170017,170019],{"class":157,"line":486},[155,170016,170007],{"class":171},[155,170018,81242],{"class":732},[155,170020,106399],{"class":171},[155,170022,170023,170025,170027],{"class":157,"line":499},[155,170024,170007],{"class":171},[155,170026,87687],{"class":732},[155,170028,106399],{"class":171},[155,170030,170031,170033,170036],{"class":157,"line":505},[155,170032,170007],{"class":171},[155,170034,170035],{"class":732},"\"score\"",[155,170037,106399],{"class":171},[155,170039,170040],{"class":157,"line":528},[155,170041,7736],{"class":171},[155,170043,170044],{"class":157,"line":549},[155,170045,217],{"emptyLinePlaceholder":216},[155,170047,170048,170050,170052],{"class":157,"line":570},[155,170049,260],{"class":167},[155,170051,168544],{"class":263},[155,170053,267],{"class":171},[155,170055,170056,170058,170060,170062,170064,170067,170069,170072,170074,170076,170078,170080,170082,170084,170086,170088],{"class":157,"line":575},[155,170057,709],{"class":167},[155,170059,168553],{"class":167},[155,170061,2033],{"class":732},[155,170063,168015],{"class":263},[155,170065,170066],{"class":171},".student_id",[155,170068,2711],{"class":263},[155,170070,170071],{"class":263}," {self",[155,170073,98864],{"class":171},[155,170075,2711],{"class":263},[155,170077,170071],{"class":263},[155,170079,98876],{"class":171},[155,170081,2711],{"class":263},[155,170083,170071],{"class":263},[155,170085,168425],{"class":171},[155,170087,2711],{"class":263},[155,170089,17610],{"class":732},[155,170091,170092],{"class":157,"line":581},[155,170093,217],{"emptyLinePlaceholder":216},[155,170095,170096],{"class":157,"line":592},[155,170097,217],{"emptyLinePlaceholder":216},[155,170099,170100,170102,170104,170106,170109,170111,170113,170115,170117,170119,170121],{"class":157,"line":610},[155,170101,168044],{"class":171},[155,170103,317],{"class":167},[155,170105,168448],{"class":171},[155,170107,170108],{"class":732},"\"001\"",[155,170110,7589],{"class":171},[155,170112,168451],{"class":732},[155,170114,7589],{"class":171},[155,170116,20709],{"class":263},[155,170118,7589],{"class":171},[155,170120,21034],{"class":263},[155,170122,363],{"class":171},[155,170124,170125,170127],{"class":157,"line":622},[155,170126,15451],{"class":263},[155,170128,170129],{"class":171},"(student.is_passed())\n",[155,170131,170132,170134],{"class":157,"line":638},[155,170133,15451],{"class":263},[155,170135,170136],{"class":171},"(student.to_dict())\n",[24,170138,170139,119581,170142,170145],{},[152,170140,170141],{},"to_dict()",[152,170143,170144],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[20037,170147,170149],{"id":170148},"_1116-易错点","11.16 易错点",[28,170151,170152,170158,170164,170169,170172,170175],{},[31,170153,170154,170155,48174],{},"类名推荐使用大驼峰，如 ",[152,170156,170157],{},"StudentManager",[31,170159,170160,170161,170163],{},"方法第一个参数必须写 ",[152,170162,285],{},"，调用时不用传。",[31,170165,170166,170168],{},[152,170167,291],{}," 不是普通方法，它在创建对象时自动执行。",[31,170170,170171],{},"私有属性不是绝对安全，只是约定和名称改写。",[31,170173,170174],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[31,170176,170177],{},"类中方法太多时，说明职责可能过重。",[20037,170179,170181],{"id":170180},"_1117-本章练习","11.17 本章练习",[28,170183,170184,170190,170196,170201,170214],{},[31,170185,170186,170187,170189],{},"定义 ",[152,170188,168131],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[31,170191,170186,170192,170195],{},[152,170193,170194],{},"Account"," 类，实现存款、取款、查询余额。",[31,170197,170186,170198,170200],{},[152,170199,37019],{}," 类，计算圆的周长和面积。",[31,170202,170186,170203,20293,170206,170209,170210,170213],{},[152,170204,170205],{},"Dog",[152,170207,170208],{},"Cat"," 类，并用同一个函数调用它们的 ",[152,170211,170212],{},"speak()"," 方法。",[31,170215,122929,170216,170218,170219,48174],{},[152,170217,169702],{}," 定义一个商品类 ",[152,170220,170221],{},"Product",[20011,170223,170224],{},"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":39,"searchDepth":46,"depth":46,"links":170226},[170227,170228,170229,170230,170231,170232,170234,170235,170236,170237,170238,170239,170240,170244,170245,170246,170247],{"id":167895,"depth":46,"text":167896},{"id":168078,"depth":46,"text":168079},{"id":168142,"depth":46,"text":168143},{"id":168219,"depth":46,"text":168220},{"id":168318,"depth":46,"text":168319},{"id":168482,"depth":46,"text":170233},"11.6 str",{"id":168608,"depth":46,"text":168609},{"id":168874,"depth":46,"text":168875},{"id":168988,"depth":46,"text":168989},{"id":169143,"depth":46,"text":169144},{"id":169267,"depth":46,"text":169268},{"id":169383,"depth":46,"text":169384},{"id":169532,"depth":46,"text":169533,"children":170241},[170242,170243],{"id":169536,"depth":121,"text":169537},{"id":169618,"depth":121,"text":169619},{"id":169696,"depth":46,"text":169697},{"id":169811,"depth":46,"text":169812},{"id":170148,"depth":46,"text":170149},{"id":170180,"depth":46,"text":170181},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":167887,"description":20020},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":170254,"title":170255,"body":170256,"description":20020,"extension":20021,"meta":173569,"navigation":216,"path":173570,"seo":173571,"stem":173572,"__hash__":173573},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":170257,"toc":173545},[170258,170261,170265,170268,170271,170300,170303,170311,170315,170319,170322,170345,170348,170354,170358,171804,171807,171828,171832,171835,171847,171850,172034,172037,172163,172166,172170,172174,172310,172314,172400,172404,172486,172490,172527,172531,172720,172724,172727,172957,172961,172964,173145,173148,173152,173155,173161,173164,173190,173194,173197,173211,173214,173239,173242,173256,173259,173276,173279,173296,173299,173316,173320,173346,173350,173373,173377,173380,173382,173388,173390,173411,173414,173420,173426,173430,173433,173509,173512,173516,173542],[10,170259,170255],{"id":170260},"_12-综合案例与复习路线",[20037,170262,170264],{"id":170263},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[24,170266,170267],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[24,170269,170270],{},"一个合格的入门综合项目最好覆盖：",[28,170272,170273,170276,170279,170282,170285,170288,170291,170294,170297],{},[31,170274,170275],{},"输入输出。",[31,170277,170278],{},"判断和循环。",[31,170280,170281],{},"函数拆分。",[31,170283,170284],{},"列表、字典等容器。",[31,170286,170287],{},"文件持久化。",[31,170289,170290],{},"异常处理。",[31,170292,170293],{},"模块拆分。",[31,170295,170296],{},"可选：面向对象。",[31,170298,170299],{},"可选：数据可视化。",[24,170301,170302],{},"本章整理两个方向：",[28,170304,170305,170308],{},[31,170306,170307],{},"学生管理系统。",[31,170309,170310],{},"销售数据统计和可视化。",[20037,170312,170314],{"id":170313},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[14,170316,170318],{"id":170317},"_1221-需求","12.2.1 需求",[24,170320,170321],{},"实现一个命令行学生管理系统：",[28,170323,170324,170327,170330,170333,170336,170339,170342],{},[31,170325,170326],{},"添加学生。",[31,170328,170329],{},"删除学生。",[31,170331,170332],{},"修改学生。",[31,170334,170335],{},"查询学生。",[31,170337,170338],{},"显示所有学生。",[31,170340,170341],{},"保存到 JSON 文件。",[31,170343,170344],{},"程序启动时自动读取 JSON 文件。",[24,170346,170347],{},"学生字段：",[146,170349,170352],{"className":170350,"code":170351,"language":25051,"meta":39},[25049],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[152,170353,170351],{"__ignoreMap":39},[20037,170355,170357],{"id":170356},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[146,170359,170361],{"className":148,"code":170360,"language":150,"meta":39,"style":39},"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",[152,170362,170363,170369,170379,170383,170397,170401,170405,170414,170426,170432,170436,170442,170473,170483,170490,170501,170507,170511,170515,170525,170556,170582,170586,170590,170599,170610,170621,170632,170643,170654,170665,170676,170680,170684,170694,170706,170722,170729,170736,170740,170744,170754,170762,170769,170782,170792,170803,170807,170811,170820,170828,170834,170846,170854,170865,170869,170873,170882,170898,170902,170909,170920,170925,170929,170945,170960,170975,170979,170984,170992,171000,171008,171016,171020,171025,171036,171040,171044,171053,171068,171078,171082,171094,171105,171109,171113,171118,171122,171133,171137,171141,171150,171165,171173,171177,171189,171199,171203,171207,171222,171235,171248,171252,171265,171277,171289,171293,171297,171308,171312,171316,171325,171340,171348,171352,171364,171374,171378,171382,171387,171391,171395,171405,171411,171433,171452,171471,171490,171495,171499,171503,171512,171520,171531,171535,171539,171565,171575,171580,171584,171588,171596,171606,171610,171618,171623,171639,171643,171657,171662,171676,171681,171694,171699,171712,171717,171730,171735,171748,171759,171763,171769,171780,171784,171788,171800],{"__ignoreMap":39},[155,170364,170365,170367],{"class":157,"line":158},[155,170366,168],{"class":167},[155,170368,165654],{"class":171},[155,170370,170371,170373,170375,170377],{"class":157,"line":46},[155,170372,183],{"class":167},[155,170374,126874],{"class":171},[155,170376,168],{"class":167},[155,170378,126879],{"class":171},[155,170380,170381],{"class":157,"line":121},[155,170382,217],{"emptyLinePlaceholder":216},[155,170384,170385,170388,170390,170392,170395],{"class":157,"line":180},[155,170386,170387],{"class":263},"DATA_FILE",[155,170389,33391],{"class":167},[155,170391,127108],{"class":171},[155,170393,170394],{"class":732},"\"students.json\"",[155,170396,363],{"class":171},[155,170398,170399],{"class":157,"line":194},[155,170400,217],{"emptyLinePlaceholder":216},[155,170402,170403],{"class":157,"line":200},[155,170404,217],{"emptyLinePlaceholder":216},[155,170406,170407,170409,170412],{"class":157,"line":213},[155,170408,1484],{"class":167},[155,170410,170411],{"class":226}," load_students",[155,170413,1490],{"class":171},[155,170415,170416,170418,170420,170423],{"class":157,"line":220},[155,170417,1142],{"class":167},[155,170419,8542],{"class":167},[155,170421,170422],{"class":263}," DATA_FILE",[155,170424,170425],{"class":171},".exists():\n",[155,170427,170428,170430],{"class":157,"line":245},[155,170429,709],{"class":167},[155,170431,70401],{"class":171},[155,170433,170434],{"class":157,"line":251},[155,170435,217],{"emptyLinePlaceholder":216},[155,170437,170438,170440],{"class":157,"line":257},[155,170439,144347],{"class":167},[155,170441,736],{"class":171},[155,170443,170444,170447,170449,170451,170453,170455,170457,170459,170461,170463,170465,170467,170469,170471],{"class":157,"line":270},[155,170445,170446],{"class":167},"        with",[155,170448,165354],{"class":263},[155,170450,230],{"class":171},[155,170452,170387],{"class":263},[155,170454,7589],{"class":171},[155,170456,165364],{"class":732},[155,170458,7589],{"class":171},[155,170460,165369],{"class":323},[155,170462,317],{"class":167},[155,170464,165374],{"class":732},[155,170466,33541],{"class":171},[155,170468,907],{"class":167},[155,170470,166716],{"class":323},[155,170472,736],{"class":171},[155,170474,170475,170477,170479,170481],{"class":157,"line":276},[155,170476,35557],{"class":167},[155,170478,166727],{"class":171},[155,170480,14974],{"class":323},[155,170482,363],{"class":171},[155,170484,170485,170487],{"class":157,"line":297},[155,170486,144375],{"class":167},[155,170488,170489],{"class":171}," json.JSONDecodeError:\n",[155,170491,170492,170494,170496,170499],{"class":157,"line":302},[155,170493,2017],{"class":263},[155,170495,230],{"class":171},[155,170497,170498],{"class":732},"\"数据文件格式错误，已使用空数据启动\"",[155,170500,363],{"class":171},[155,170502,170503,170505],{"class":157,"line":308},[155,170504,709],{"class":167},[155,170506,70401],{"class":171},[155,170508,170509],{"class":157,"line":366},[155,170510,217],{"emptyLinePlaceholder":216},[155,170512,170513],{"class":157,"line":379},[155,170514,217],{"emptyLinePlaceholder":216},[155,170516,170517,170519,170522],{"class":157,"line":385},[155,170518,1484],{"class":167},[155,170520,170521],{"class":226}," save_students",[155,170523,170524],{"class":171},"(students):\n",[155,170526,170527,170529,170531,170533,170535,170537,170540,170542,170544,170546,170548,170550,170552,170554],{"class":157,"line":415},[155,170528,3783],{"class":167},[155,170530,165354],{"class":263},[155,170532,230],{"class":171},[155,170534,170387],{"class":263},[155,170536,7589],{"class":171},[155,170538,170539],{"class":732},"\"w\"",[155,170541,7589],{"class":171},[155,170543,165369],{"class":323},[155,170545,317],{"class":167},[155,170547,165374],{"class":732},[155,170549,33541],{"class":171},[155,170551,907],{"class":167},[155,170553,166716],{"class":323},[155,170555,736],{"class":171},[155,170557,170558,170561,170563,170565,170567,170569,170571,170573,170576,170578,170580],{"class":157,"line":452},[155,170559,170560],{"class":171},"        json.dump(students, ",[155,170562,14974],{"class":323},[155,170564,7589],{"class":171},[155,170566,165700],{"class":323},[155,170568,317],{"class":167},[155,170570,3592],{"class":263},[155,170572,7589],{"class":171},[155,170574,170575],{"class":323},"indent",[155,170577,317],{"class":167},[155,170579,360],{"class":263},[155,170581,363],{"class":171},[155,170583,170584],{"class":157,"line":480},[155,170585,217],{"emptyLinePlaceholder":216},[155,170587,170588],{"class":157,"line":486},[155,170589,217],{"emptyLinePlaceholder":216},[155,170591,170592,170594,170597],{"class":157,"line":499},[155,170593,1484],{"class":167},[155,170595,170596],{"class":226}," show_menu",[155,170598,1490],{"class":171},[155,170600,170601,170603,170605,170608],{"class":157,"line":505},[155,170602,822],{"class":263},[155,170604,230],{"class":171},[155,170606,170607],{"class":732},"\"====== 学生管理系统 ======\"",[155,170609,363],{"class":171},[155,170611,170612,170614,170616,170619],{"class":157,"line":528},[155,170613,822],{"class":263},[155,170615,230],{"class":171},[155,170617,170618],{"class":732},"\"1. 添加学生\"",[155,170620,363],{"class":171},[155,170622,170623,170625,170627,170630],{"class":157,"line":549},[155,170624,822],{"class":263},[155,170626,230],{"class":171},[155,170628,170629],{"class":732},"\"2. 删除学生\"",[155,170631,363],{"class":171},[155,170633,170634,170636,170638,170641],{"class":157,"line":570},[155,170635,822],{"class":263},[155,170637,230],{"class":171},[155,170639,170640],{"class":732},"\"3. 修改学生\"",[155,170642,363],{"class":171},[155,170644,170645,170647,170649,170652],{"class":157,"line":575},[155,170646,822],{"class":263},[155,170648,230],{"class":171},[155,170650,170651],{"class":732},"\"4. 查询学生\"",[155,170653,363],{"class":171},[155,170655,170656,170658,170660,170663],{"class":157,"line":581},[155,170657,822],{"class":263},[155,170659,230],{"class":171},[155,170661,170662],{"class":732},"\"5. 显示所有学生\"",[155,170664,363],{"class":171},[155,170666,170667,170669,170671,170674],{"class":157,"line":592},[155,170668,822],{"class":263},[155,170670,230],{"class":171},[155,170672,170673],{"class":732},"\"0. 退出系统\"",[155,170675,363],{"class":171},[155,170677,170678],{"class":157,"line":610},[155,170679,217],{"emptyLinePlaceholder":216},[155,170681,170682],{"class":157,"line":622},[155,170683,217],{"emptyLinePlaceholder":216},[155,170685,170686,170688,170691],{"class":157,"line":638},[155,170687,1484],{"class":167},[155,170689,170690],{"class":226}," find_student",[155,170692,170693],{"class":171},"(students, student_id):\n",[155,170695,170696,170698,170701,170703],{"class":157,"line":650},[155,170697,2000],{"class":167},[155,170699,170700],{"class":171}," student ",[155,170702,1131],{"class":167},[155,170704,170705],{"class":171}," students:\n",[155,170707,170708,170710,170713,170715,170717,170719],{"class":157,"line":662},[155,170709,2803],{"class":167},[155,170711,170712],{"class":171}," student[",[155,170714,170010],{"class":732},[155,170716,24309],{"class":171},[155,170718,729],{"class":167},[155,170720,170721],{"class":171}," student_id:\n",[155,170723,170724,170726],{"class":157,"line":678},[155,170725,35557],{"class":167},[155,170727,170728],{"class":171}," student\n",[155,170730,170731,170733],{"class":157,"line":694},[155,170732,1692],{"class":167},[155,170734,170735],{"class":263}," None\n",[155,170737,170738],{"class":157,"line":706},[155,170739,217],{"emptyLinePlaceholder":216},[155,170741,170742],{"class":157,"line":715},[155,170743,217],{"emptyLinePlaceholder":216},[155,170745,170746,170748,170751],{"class":157,"line":720},[155,170747,1484],{"class":167},[155,170749,170750],{"class":226}," input_int",[155,170752,170753],{"class":171},"(prompt):\n",[155,170755,170756,170758,170760],{"class":157,"line":739},[155,170757,22138],{"class":167},[155,170759,113855],{"class":263},[155,170761,736],{"class":171},[155,170763,170764,170767],{"class":157,"line":745},[155,170765,170766],{"class":167},"        try",[155,170768,736],{"class":171},[155,170770,170771,170773,170775,170777,170779],{"class":157,"line":773},[155,170772,35557],{"class":167},[155,170774,22269],{"class":263},[155,170776,230],{"class":171},[155,170778,72384],{"class":263},[155,170780,170781],{"class":171},"(prompt))\n",[155,170783,170784,170787,170790],{"class":157,"line":779},[155,170785,170786],{"class":167},"        except",[155,170788,170789],{"class":263}," ValueError",[155,170791,736],{"class":171},[155,170793,170794,170796,170798,170801],{"class":157,"line":785},[155,170795,4256],{"class":263},[155,170797,230],{"class":171},[155,170799,170800],{"class":732},"\"请输入整数\"",[155,170802,363],{"class":171},[155,170804,170805],{"class":157,"line":791},[155,170806,217],{"emptyLinePlaceholder":216},[155,170808,170809],{"class":157,"line":796},[155,170810,217],{"emptyLinePlaceholder":216},[155,170812,170813,170815,170818],{"class":157,"line":802},[155,170814,1484],{"class":167},[155,170816,170817],{"class":226}," input_float",[155,170819,170753],{"class":171},[155,170821,170822,170824,170826],{"class":157,"line":808},[155,170823,22138],{"class":167},[155,170825,113855],{"class":263},[155,170827,736],{"class":171},[155,170829,170830,170832],{"class":157,"line":819},[155,170831,170766],{"class":167},[155,170833,736],{"class":171},[155,170835,170836,170838,170840,170842,170844],{"class":157,"line":1832},[155,170837,35557],{"class":167},[155,170839,128360],{"class":263},[155,170841,230],{"class":171},[155,170843,72384],{"class":263},[155,170845,170781],{"class":171},[155,170847,170848,170850,170852],{"class":157,"line":1838},[155,170849,170786],{"class":167},[155,170851,170789],{"class":263},[155,170853,736],{"class":171},[155,170855,170856,170858,170860,170863],{"class":157,"line":1844},[155,170857,4256],{"class":263},[155,170859,230],{"class":171},[155,170861,170862],{"class":732},"\"请输入数字\"",[155,170864,363],{"class":171},[155,170866,170867],{"class":157,"line":1850},[155,170868,217],{"emptyLinePlaceholder":216},[155,170870,170871],{"class":157,"line":1861},[155,170872,217],{"emptyLinePlaceholder":216},[155,170874,170875,170877,170880],{"class":157,"line":1866},[155,170876,1484],{"class":167},[155,170878,170879],{"class":226}," add_student",[155,170881,170524],{"class":171},[155,170883,170884,170887,170889,170891,170893,170896],{"class":157,"line":1871},[155,170885,170886],{"class":171},"    student_id ",[155,170888,317],{"class":167},[155,170890,79168],{"class":263},[155,170892,230],{"class":171},[155,170894,170895],{"class":732},"\"请输入学号:\"",[155,170897,363],{"class":171},[155,170899,170900],{"class":157,"line":1877},[155,170901,217],{"emptyLinePlaceholder":216},[155,170903,170904,170906],{"class":157,"line":1883},[155,170905,1142],{"class":167},[155,170907,170908],{"class":171}," find_student(students, student_id):\n",[155,170910,170911,170913,170915,170918],{"class":157,"line":1894},[155,170912,2017],{"class":263},[155,170914,230],{"class":171},[155,170916,170917],{"class":732},"\"学号已存在\"",[155,170919,363],{"class":171},[155,170921,170922],{"class":157,"line":1900},[155,170923,170924],{"class":167},"        return\n",[155,170926,170927],{"class":157,"line":1911},[155,170928,217],{"emptyLinePlaceholder":216},[155,170930,170931,170934,170936,170938,170940,170943],{"class":157,"line":1917},[155,170932,170933],{"class":171},"    name ",[155,170935,317],{"class":167},[155,170937,79168],{"class":263},[155,170939,230],{"class":171},[155,170941,170942],{"class":732},"\"请输入姓名:\"",[155,170944,363],{"class":171},[155,170946,170947,170950,170952,170955,170958],{"class":157,"line":1927},[155,170948,170949],{"class":171},"    age ",[155,170951,317],{"class":167},[155,170953,170954],{"class":171}," input_int(",[155,170956,170957],{"class":732},"\"请输入年龄:\"",[155,170959,363],{"class":171},[155,170961,170962,170965,170967,170970,170973],{"class":157,"line":1933},[155,170963,170964],{"class":171},"    score ",[155,170966,317],{"class":167},[155,170968,170969],{"class":171}," input_float(",[155,170971,170972],{"class":732},"\"请输入成绩:\"",[155,170974,363],{"class":171},[155,170976,170977],{"class":157,"line":1943},[155,170978,217],{"emptyLinePlaceholder":216},[155,170980,170981],{"class":157,"line":1949},[155,170982,170983],{"class":171},"    students.append({\n",[155,170985,170986,170989],{"class":157,"line":1959},[155,170987,170988],{"class":732},"        \"student_id\"",[155,170990,170991],{"class":171},": student_id,\n",[155,170993,170994,170997],{"class":157,"line":1964},[155,170995,170996],{"class":732},"        \"name\"",[155,170998,170999],{"class":171},": name,\n",[155,171001,171002,171005],{"class":157,"line":1970},[155,171003,171004],{"class":732},"        \"age\"",[155,171006,171007],{"class":171},": age,\n",[155,171009,171010,171013],{"class":157,"line":1981},[155,171011,171012],{"class":732},"        \"score\"",[155,171014,171015],{"class":171},": score,\n",[155,171017,171018],{"class":157,"line":1986},[155,171019,3065],{"class":171},[155,171021,171022],{"class":157,"line":1991},[155,171023,171024],{"class":171},"    save_students(students)\n",[155,171026,171027,171029,171031,171034],{"class":157,"line":1997},[155,171028,822],{"class":263},[155,171030,230],{"class":171},[155,171032,171033],{"class":732},"\"添加成功\"",[155,171035,363],{"class":171},[155,171037,171038],{"class":157,"line":2014},[155,171039,217],{"emptyLinePlaceholder":216},[155,171041,171042],{"class":157,"line":2046},[155,171043,217],{"emptyLinePlaceholder":216},[155,171045,171046,171048,171051],{"class":157,"line":2062},[155,171047,1484],{"class":167},[155,171049,171050],{"class":226}," delete_student",[155,171052,170524],{"class":171},[155,171054,171055,171057,171059,171061,171063,171066],{"class":157,"line":2067},[155,171056,170886],{"class":171},[155,171058,317],{"class":167},[155,171060,79168],{"class":263},[155,171062,230],{"class":171},[155,171064,171065],{"class":732},"\"请输入要删除的学号:\"",[155,171067,363],{"class":171},[155,171069,171070,171073,171075],{"class":157,"line":2073},[155,171071,171072],{"class":171},"    student ",[155,171074,317],{"class":167},[155,171076,171077],{"class":171}," find_student(students, student_id)\n",[155,171079,171080],{"class":157,"line":2079},[155,171081,217],{"emptyLinePlaceholder":216},[155,171083,171084,171086,171088,171090,171092],{"class":157,"line":2089},[155,171085,1142],{"class":167},[155,171087,170700],{"class":171},[155,171089,8539],{"class":167},[155,171091,8545],{"class":263},[155,171093,736],{"class":171},[155,171095,171096,171098,171100,171103],{"class":157,"line":2095},[155,171097,2017],{"class":263},[155,171099,230],{"class":171},[155,171101,171102],{"class":732},"\"学生不存在\"",[155,171104,363],{"class":171},[155,171106,171107],{"class":157,"line":2106},[155,171108,170924],{"class":167},[155,171110,171111],{"class":157,"line":2112},[155,171112,217],{"emptyLinePlaceholder":216},[155,171114,171115],{"class":157,"line":2122},[155,171116,171117],{"class":171},"    students.remove(student)\n",[155,171119,171120],{"class":157,"line":2128},[155,171121,171024],{"class":171},[155,171123,171124,171126,171128,171131],{"class":157,"line":2138},[155,171125,822],{"class":263},[155,171127,230],{"class":171},[155,171129,171130],{"class":732},"\"删除成功\"",[155,171132,363],{"class":171},[155,171134,171135],{"class":157,"line":2144},[155,171136,217],{"emptyLinePlaceholder":216},[155,171138,171139],{"class":157,"line":2154},[155,171140,217],{"emptyLinePlaceholder":216},[155,171142,171143,171145,171148],{"class":157,"line":2160},[155,171144,1484],{"class":167},[155,171146,171147],{"class":226}," update_student",[155,171149,170524],{"class":171},[155,171151,171152,171154,171156,171158,171160,171163],{"class":157,"line":2170},[155,171153,170886],{"class":171},[155,171155,317],{"class":167},[155,171157,79168],{"class":263},[155,171159,230],{"class":171},[155,171161,171162],{"class":732},"\"请输入要修改的学号:\"",[155,171164,363],{"class":171},[155,171166,171167,171169,171171],{"class":157,"line":2176},[155,171168,171072],{"class":171},[155,171170,317],{"class":167},[155,171172,171077],{"class":171},[155,171174,171175],{"class":157,"line":2191},[155,171176,217],{"emptyLinePlaceholder":216},[155,171178,171179,171181,171183,171185,171187],{"class":157,"line":2197},[155,171180,1142],{"class":167},[155,171182,170700],{"class":171},[155,171184,8539],{"class":167},[155,171186,8545],{"class":263},[155,171188,736],{"class":171},[155,171190,171191,171193,171195,171197],{"class":157,"line":2208},[155,171192,2017],{"class":263},[155,171194,230],{"class":171},[155,171196,171102],{"class":732},[155,171198,363],{"class":171},[155,171200,171201],{"class":157,"line":2214},[155,171202,170924],{"class":167},[155,171204,171205],{"class":157,"line":2225},[155,171206,217],{"emptyLinePlaceholder":216},[155,171208,171209,171211,171213,171215,171217,171220],{"class":157,"line":2231},[155,171210,170933],{"class":171},[155,171212,317],{"class":167},[155,171214,79168],{"class":263},[155,171216,230],{"class":171},[155,171218,171219],{"class":732},"\"请输入新姓名:\"",[155,171221,363],{"class":171},[155,171223,171224,171226,171228,171230,171233],{"class":157,"line":2237},[155,171225,170949],{"class":171},[155,171227,317],{"class":167},[155,171229,170954],{"class":171},[155,171231,171232],{"class":732},"\"请输入新年龄:\"",[155,171234,363],{"class":171},[155,171236,171237,171239,171241,171243,171246],{"class":157,"line":2243},[155,171238,170964],{"class":171},[155,171240,317],{"class":167},[155,171242,170969],{"class":171},[155,171244,171245],{"class":732},"\"请输入新成绩:\"",[155,171247,363],{"class":171},[155,171249,171250],{"class":157,"line":2249},[155,171251,217],{"emptyLinePlaceholder":216},[155,171253,171254,171257,171259,171261,171263],{"class":157,"line":2260},[155,171255,171256],{"class":171},"    student[",[155,171258,81242],{"class":732},[155,171260,24309],{"class":171},[155,171262,317],{"class":167},[155,171264,168358],{"class":171},[155,171266,171267,171269,171271,171273,171275],{"class":157,"line":2266},[155,171268,171256],{"class":171},[155,171270,87687],{"class":732},[155,171272,24309],{"class":171},[155,171274,317],{"class":167},[155,171276,168370],{"class":171},[155,171278,171279,171281,171283,171285,171287],{"class":157,"line":2286},[155,171280,171256],{"class":171},[155,171282,170035],{"class":732},[155,171284,24309],{"class":171},[155,171286,317],{"class":167},[155,171288,21489],{"class":171},[155,171290,171291],{"class":157,"line":2292},[155,171292,217],{"emptyLinePlaceholder":216},[155,171294,171295],{"class":157,"line":2303},[155,171296,171024],{"class":171},[155,171298,171299,171301,171303,171306],{"class":157,"line":2309},[155,171300,822],{"class":263},[155,171302,230],{"class":171},[155,171304,171305],{"class":732},"\"修改成功\"",[155,171307,363],{"class":171},[155,171309,171310],{"class":157,"line":2315},[155,171311,217],{"emptyLinePlaceholder":216},[155,171313,171314],{"class":157,"line":2321},[155,171315,217],{"emptyLinePlaceholder":216},[155,171317,171318,171320,171323],{"class":157,"line":2327},[155,171319,1484],{"class":167},[155,171321,171322],{"class":226}," query_student",[155,171324,170524],{"class":171},[155,171326,171327,171329,171331,171333,171335,171338],{"class":157,"line":2333},[155,171328,170886],{"class":171},[155,171330,317],{"class":167},[155,171332,79168],{"class":263},[155,171334,230],{"class":171},[155,171336,171337],{"class":732},"\"请输入要查询的学号:\"",[155,171339,363],{"class":171},[155,171341,171342,171344,171346],{"class":157,"line":2339},[155,171343,171072],{"class":171},[155,171345,317],{"class":167},[155,171347,171077],{"class":171},[155,171349,171350],{"class":157,"line":2345},[155,171351,217],{"emptyLinePlaceholder":216},[155,171353,171354,171356,171358,171360,171362],{"class":157,"line":2366},[155,171355,1142],{"class":167},[155,171357,170700],{"class":171},[155,171359,8539],{"class":167},[155,171361,8545],{"class":263},[155,171363,736],{"class":171},[155,171365,171366,171368,171370,171372],{"class":157,"line":2372},[155,171367,2017],{"class":263},[155,171369,230],{"class":171},[155,171371,171102],{"class":732},[155,171373,363],{"class":171},[155,171375,171376],{"class":157,"line":2388},[155,171377,170924],{"class":167},[155,171379,171380],{"class":157,"line":2394},[155,171381,217],{"emptyLinePlaceholder":216},[155,171383,171384],{"class":157,"line":2408},[155,171385,171386],{"class":171},"    print_student(student)\n",[155,171388,171389],{"class":157,"line":2414},[155,171390,217],{"emptyLinePlaceholder":216},[155,171392,171393],{"class":157,"line":2429},[155,171394,217],{"emptyLinePlaceholder":216},[155,171396,171397,171399,171402],{"class":157,"line":2435},[155,171398,1484],{"class":167},[155,171400,171401],{"class":226}," print_student",[155,171403,171404],{"class":171},"(student):\n",[155,171406,171407,171409],{"class":157,"line":2444},[155,171408,822],{"class":263},[155,171410,170002],{"class":171},[155,171412,171413,171416,171418,171420,171423,171426,171428,171431],{"class":157,"line":2450},[155,171414,171415],{"class":167},"        f",[155,171417,2033],{"class":732},[155,171419,2705],{"class":263},[155,171421,171422],{"class":171},"student[",[155,171424,171425],{"class":732},"'student_id'",[155,171427,2813],{"class":171},[155,171429,171430],{"class":263},"}\\t",[155,171432,17610],{"class":732},[155,171434,171435,171437,171439,171441,171443,171446,171448,171450],{"class":157,"line":2459},[155,171436,171415],{"class":167},[155,171438,2033],{"class":732},[155,171440,2705],{"class":263},[155,171442,171422],{"class":171},[155,171444,171445],{"class":732},"'name'",[155,171447,2813],{"class":171},[155,171449,171430],{"class":263},[155,171451,17610],{"class":732},[155,171453,171454,171456,171458,171460,171462,171465,171467,171469],{"class":157,"line":2465},[155,171455,171415],{"class":167},[155,171457,2033],{"class":732},[155,171459,2705],{"class":263},[155,171461,171422],{"class":171},[155,171463,171464],{"class":732},"'age'",[155,171466,2813],{"class":171},[155,171468,171430],{"class":263},[155,171470,17610],{"class":732},[155,171472,171473,171475,171477,171479,171481,171484,171486,171488],{"class":157,"line":2471},[155,171474,171415],{"class":167},[155,171476,2033],{"class":732},[155,171478,2705],{"class":263},[155,171480,171422],{"class":171},[155,171482,171483],{"class":732},"'score'",[155,171485,2813],{"class":171},[155,171487,2711],{"class":263},[155,171489,17610],{"class":732},[155,171491,171492],{"class":157,"line":2480},[155,171493,171494],{"class":171},"    )\n",[155,171496,171497],{"class":157,"line":2486},[155,171498,217],{"emptyLinePlaceholder":216},[155,171500,171501],{"class":157,"line":2497},[155,171502,217],{"emptyLinePlaceholder":216},[155,171504,171505,171507,171510],{"class":157,"line":2503},[155,171506,1484],{"class":167},[155,171508,171509],{"class":226}," show_all_students",[155,171511,170524],{"class":171},[155,171513,171514,171516,171518],{"class":157,"line":2522},[155,171515,1142],{"class":167},[155,171517,8542],{"class":167},[155,171519,170705],{"class":171},[155,171521,171522,171524,171526,171529],{"class":157,"line":2528},[155,171523,2017],{"class":263},[155,171525,230],{"class":171},[155,171527,171528],{"class":732},"\"暂无学生\"",[155,171530,363],{"class":171},[155,171532,171533],{"class":157,"line":2539},[155,171534,170924],{"class":167},[155,171536,171537],{"class":157,"line":2545},[155,171538,217],{"emptyLinePlaceholder":216},[155,171540,171541,171543,171545,171548,171550,171553,171555,171558,171560,171563],{"class":157,"line":2565},[155,171542,822],{"class":263},[155,171544,230],{"class":171},[155,171546,171547],{"class":732},"\"学号",[155,171549,21146],{"class":263},[155,171551,171552],{"class":732},"姓名",[155,171554,21146],{"class":263},[155,171556,171557],{"class":732},"年龄",[155,171559,21146],{"class":263},[155,171561,171562],{"class":732},"成绩\"",[155,171564,363],{"class":171},[155,171566,171567,171569,171571,171573],{"class":157,"line":2581},[155,171568,2000],{"class":167},[155,171570,170700],{"class":171},[155,171572,1131],{"class":167},[155,171574,170705],{"class":171},[155,171576,171577],{"class":157,"line":2587},[155,171578,171579],{"class":171},"        print_student(student)\n",[155,171581,171582],{"class":157,"line":2601},[155,171583,217],{"emptyLinePlaceholder":216},[155,171585,171586],{"class":157,"line":2607},[155,171587,217],{"emptyLinePlaceholder":216},[155,171589,171590,171592,171594],{"class":157,"line":2613},[155,171591,1484],{"class":167},[155,171593,21861],{"class":226},[155,171595,1490],{"class":171},[155,171597,171598,171601,171603],{"class":157,"line":2624},[155,171599,171600],{"class":171},"    students ",[155,171602,317],{"class":167},[155,171604,171605],{"class":171}," load_students()\n",[155,171607,171608],{"class":157,"line":2630},[155,171609,217],{"emptyLinePlaceholder":216},[155,171611,171612,171614,171616],{"class":157,"line":2636},[155,171613,22138],{"class":167},[155,171615,113855],{"class":263},[155,171617,736],{"class":171},[155,171619,171620],{"class":157,"line":2646},[155,171621,171622],{"class":171},"        show_menu()\n",[155,171624,171625,171628,171630,171632,171634,171637],{"class":157,"line":2652},[155,171626,171627],{"class":171},"        choice ",[155,171629,317],{"class":167},[155,171631,79168],{"class":263},[155,171633,230],{"class":171},[155,171635,171636],{"class":732},"\"请输入操作:\"",[155,171638,363],{"class":171},[155,171640,171641],{"class":157,"line":2663},[155,171642,217],{"emptyLinePlaceholder":216},[155,171644,171645,171647,171650,171652,171655],{"class":157,"line":2669},[155,171646,2803],{"class":167},[155,171648,171649],{"class":171}," choice ",[155,171651,729],{"class":167},[155,171653,171654],{"class":732}," \"1\"",[155,171656,736],{"class":171},[155,171658,171659],{"class":157,"line":2679},[155,171660,171661],{"class":171},"            add_student(students)\n",[155,171663,171664,171667,171669,171671,171674],{"class":157,"line":2684},[155,171665,171666],{"class":167},"        elif",[155,171668,171649],{"class":171},[155,171670,729],{"class":167},[155,171672,171673],{"class":732}," \"2\"",[155,171675,736],{"class":171},[155,171677,171678],{"class":157,"line":2690},[155,171679,171680],{"class":171},"            delete_student(students)\n",[155,171682,171683,171685,171687,171689,171692],{"class":157,"line":2742},[155,171684,171666],{"class":167},[155,171686,171649],{"class":171},[155,171688,729],{"class":167},[155,171690,171691],{"class":732}," \"3\"",[155,171693,736],{"class":171},[155,171695,171696],{"class":157,"line":2789},[155,171697,171698],{"class":171},"            update_student(students)\n",[155,171700,171701,171703,171705,171707,171710],{"class":157,"line":2794},[155,171702,171666],{"class":167},[155,171704,171649],{"class":171},[155,171706,729],{"class":167},[155,171708,171709],{"class":732}," \"4\"",[155,171711,736],{"class":171},[155,171713,171714],{"class":157,"line":2800},[155,171715,171716],{"class":171},"            query_student(students)\n",[155,171718,171719,171721,171723,171725,171728],{"class":157,"line":2821},[155,171720,171666],{"class":167},[155,171722,171649],{"class":171},[155,171724,729],{"class":167},[155,171726,171727],{"class":732}," \"5\"",[155,171729,736],{"class":171},[155,171731,171732],{"class":157,"line":2827},[155,171733,171734],{"class":171},"            show_all_students(students)\n",[155,171736,171737,171739,171741,171743,171746],{"class":157,"line":2848},[155,171738,171666],{"class":167},[155,171740,171649],{"class":171},[155,171742,729],{"class":167},[155,171744,171745],{"class":732}," \"0\"",[155,171747,736],{"class":171},[155,171749,171750,171752,171754,171757],{"class":157,"line":2854},[155,171751,4256],{"class":263},[155,171753,230],{"class":171},[155,171755,171756],{"class":732},"\"退出系统\"",[155,171758,363],{"class":171},[155,171760,171761],{"class":157,"line":2860},[155,171762,133661],{"class":167},[155,171764,171765,171767],{"class":157,"line":2870},[155,171766,15343],{"class":167},[155,171768,736],{"class":171},[155,171770,171771,171773,171775,171778],{"class":157,"line":2875},[155,171772,4256],{"class":263},[155,171774,230],{"class":171},[155,171776,171777],{"class":732},"\"输入错误\"",[155,171779,363],{"class":171},[155,171781,171782],{"class":157,"line":2881},[155,171783,217],{"emptyLinePlaceholder":216},[155,171785,171786],{"class":157,"line":2897},[155,171787,217],{"emptyLinePlaceholder":216},[155,171789,171790,171792,171794,171796,171798],{"class":157,"line":2945},[155,171791,723],{"class":167},[155,171793,726],{"class":263},[155,171795,120122],{"class":167},[155,171797,120125],{"class":732},[155,171799,736],{"class":171},[155,171801,171802],{"class":157,"line":2951},[155,171803,120132],{"class":171},[24,171805,171806],{},"这个项目串联了：",[28,171808,171809,171812,171815,171818,171821,171823],{},[31,171810,171811],{},"菜单循环。",[31,171813,171814],{},"函数封装。",[31,171816,171817],{},"列表字典。",[31,171819,171820],{},"JSON 读写。",[31,171822,170290],{},[31,171824,171825,48174],{},[152,171826,171827],{},"if __name__ == \"__main__\"",[20037,171829,171831],{"id":171830},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[24,171833,171834],{},"可以进一步拆成两个类：",[28,171836,171837,171842],{},[31,171838,171839,171841],{},[152,171840,168131],{},"：表示单个学生。",[31,171843,171844,171846],{},[152,171845,170157],{},"：负责学生增删改查和文件保存。",[24,171848,171849],{},"示意代码：",[146,171851,171853],{"className":148,"code":171852,"language":150,"meta":39,"style":39},"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",[152,171854,171855,171865,171869,171873,171877,171885,171892,171898,171904,171910,171914,171922,171928,171938,171948,171958,171968,171972,171976,171982,171990,171998,172006,172014,172022,172030],{"__ignoreMap":39},[155,171856,171857,171859,171861,171863],{"class":157,"line":158},[155,171858,183],{"class":167},[155,171860,169715],{"class":171},[155,171862,168],{"class":167},[155,171864,169720],{"class":171},[155,171866,171867],{"class":157,"line":46},[155,171868,217],{"emptyLinePlaceholder":216},[155,171870,171871],{"class":157,"line":121},[155,171872,217],{"emptyLinePlaceholder":216},[155,171874,171875],{"class":157,"line":180},[155,171876,169733],{"class":226},[155,171878,171879,171881,171883],{"class":157,"line":194},[155,171880,223],{"class":167},[155,171882,27757],{"class":226},[155,171884,736],{"class":171},[155,171886,171887,171890],{"class":157,"line":200},[155,171888,171889],{"class":171},"    student_id: ",[155,171891,169749],{"class":263},[155,171893,171894,171896],{"class":157,"line":213},[155,171895,169746],{"class":171},[155,171897,169749],{"class":263},[155,171899,171900,171902],{"class":157,"line":220},[155,171901,169754],{"class":171},[155,171903,169757],{"class":263},[155,171905,171906,171908],{"class":157,"line":245},[155,171907,169762],{"class":171},[155,171909,169765],{"class":263},[155,171911,171912],{"class":157,"line":251},[155,171913,217],{"emptyLinePlaceholder":216},[155,171915,171916,171918,171920],{"class":157,"line":257},[155,171917,260],{"class":167},[155,171919,169913],{"class":226},[155,171921,267],{"class":171},[155,171923,171924,171926],{"class":157,"line":270},[155,171925,709],{"class":167},[155,171927,35397],{"class":171},[155,171929,171930,171932,171934,171936],{"class":157,"line":276},[155,171931,169926],{"class":732},[155,171933,70000],{"class":171},[155,171935,285],{"class":263},[155,171937,169933],{"class":171},[155,171939,171940,171942,171944,171946],{"class":157,"line":297},[155,171941,169938],{"class":732},[155,171943,70000],{"class":171},[155,171945,285],{"class":263},[155,171947,169945],{"class":171},[155,171949,171950,171952,171954,171956],{"class":157,"line":302},[155,171951,169950],{"class":732},[155,171953,70000],{"class":171},[155,171955,285],{"class":263},[155,171957,169957],{"class":171},[155,171959,171960,171962,171964,171966],{"class":157,"line":308},[155,171961,169962],{"class":732},[155,171963,70000],{"class":171},[155,171965,285],{"class":263},[155,171967,169969],{"class":171},[155,171969,171970],{"class":157,"line":366},[155,171971,22414],{"class":171},[155,171973,171974],{"class":157,"line":379},[155,171975,217],{"emptyLinePlaceholder":216},[155,171977,171978,171980],{"class":157,"line":385},[155,171979,169577],{"class":226},[155,171981,169580],{"class":263},[155,171983,171984,171986,171988],{"class":157,"line":415},[155,171985,260],{"class":167},[155,171987,169990],{"class":226},[155,171989,169993],{"class":171},[155,171991,171992,171994,171996],{"class":157,"line":452},[155,171993,709],{"class":167},[155,171995,169597],{"class":263},[155,171997,170002],{"class":171},[155,171999,172000,172002,172004],{"class":157,"line":480},[155,172001,170007],{"class":171},[155,172003,170010],{"class":732},[155,172005,106399],{"class":171},[155,172007,172008,172010,172012],{"class":157,"line":486},[155,172009,170007],{"class":171},[155,172011,81242],{"class":732},[155,172013,106399],{"class":171},[155,172015,172016,172018,172020],{"class":157,"line":499},[155,172017,170007],{"class":171},[155,172019,87687],{"class":732},[155,172021,106399],{"class":171},[155,172023,172024,172026,172028],{"class":157,"line":505},[155,172025,170007],{"class":171},[155,172027,170035],{"class":732},[155,172029,106399],{"class":171},[155,172031,172032],{"class":157,"line":528},[155,172033,7736],{"class":171},[24,172035,172036],{},"管理器示意：",[146,172038,172040],{"className":148,"code":172039,"language":150,"meta":39,"style":39},"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",[152,172041,172042,172051,172059,172070,172074,172084,172097,172108,172115,172121,172125,172134,172143,172149,172156],{"__ignoreMap":39},[155,172043,172044,172046,172049],{"class":157,"line":158},[155,172045,223],{"class":167},[155,172047,172048],{"class":226}," StudentManager",[155,172050,736],{"class":171},[155,172052,172053,172055,172057],{"class":157,"line":46},[155,172054,260],{"class":167},[155,172056,264],{"class":263},[155,172058,267],{"class":171},[155,172060,172061,172063,172066,172068],{"class":157,"line":121},[155,172062,311],{"class":263},[155,172064,172065],{"class":171},".students ",[155,172067,317],{"class":167},[155,172069,70401],{"class":171},[155,172071,172072],{"class":157,"line":180},[155,172073,217],{"emptyLinePlaceholder":216},[155,172075,172076,172078,172081],{"class":157,"line":194},[155,172077,260],{"class":167},[155,172079,172080],{"class":226}," find_by_id",[155,172082,172083],{"class":171},"(self, student_id):\n",[155,172085,172086,172088,172090,172092,172094],{"class":157,"line":200},[155,172087,2179],{"class":167},[155,172089,170700],{"class":171},[155,172091,1131],{"class":167},[155,172093,8484],{"class":263},[155,172095,172096],{"class":171},".students:\n",[155,172098,172099,172101,172104,172106],{"class":157,"line":213},[155,172100,8497],{"class":167},[155,172102,172103],{"class":171}," student.student_id ",[155,172105,729],{"class":167},[155,172107,170721],{"class":171},[155,172109,172110,172113],{"class":157,"line":220},[155,172111,172112],{"class":167},"                return",[155,172114,170728],{"class":171},[155,172116,172117,172119],{"class":157,"line":245},[155,172118,709],{"class":167},[155,172120,170735],{"class":263},[155,172122,172123],{"class":157,"line":251},[155,172124,217],{"emptyLinePlaceholder":216},[155,172126,172127,172129,172131],{"class":157,"line":257},[155,172128,260],{"class":167},[155,172130,25073],{"class":226},[155,172132,172133],{"class":171},"(self, student):\n",[155,172135,172136,172138,172140],{"class":157,"line":270},[155,172137,2803],{"class":167},[155,172139,8484],{"class":263},[155,172141,172142],{"class":171},".find_by_id(student.student_id):\n",[155,172144,172145,172147],{"class":157,"line":276},[155,172146,35557],{"class":167},[155,172148,144370],{"class":263},[155,172150,172151,172153],{"class":157,"line":297},[155,172152,311],{"class":263},[155,172154,172155],{"class":171},".students.append(student)\n",[155,172157,172158,172160],{"class":157,"line":302},[155,172159,709],{"class":167},[155,172161,172162],{"class":263}," True\n",[24,172164,172165],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[20037,172167,172169],{"id":172168},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[14,172171,172173],{"id":172172},"_1251-数据结构","12.5.1 数据结构",[146,172175,172177],{"className":148,"code":172176,"language":150,"meta":39,"style":39},"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",[152,172178,172179,172187,172218,172248,172277,172306],{"__ignoreMap":39},[155,172180,172181,172183,172185],{"class":157,"line":158},[155,172182,167028],{"class":171},[155,172184,317],{"class":167},[155,172186,74010],{"class":171},[155,172188,172189,172191,172193,172195,172197,172199,172202,172204,172207,172209,172211,172213,172216],{"class":157,"line":46},[155,172190,166948],{"class":171},[155,172192,166560],{"class":732},[155,172194,70000],{"class":171},[155,172196,167171],{"class":732},[155,172198,7589],{"class":171},[155,172200,172201],{"class":732},"\"category\"",[155,172203,70000],{"class":171},[155,172205,172206],{"class":732},"\"手机\"",[155,172208,7589],{"class":171},[155,172210,102647],{"class":732},[155,172212,70000],{"class":171},[155,172214,172215],{"class":263},"12000",[155,172217,24794],{"class":171},[155,172219,172220,172222,172224,172226,172228,172230,172232,172234,172237,172239,172241,172243,172246],{"class":157,"line":121},[155,172221,166948],{"class":171},[155,172223,166560],{"class":732},[155,172225,70000],{"class":171},[155,172227,167171],{"class":732},[155,172229,7589],{"class":171},[155,172231,172201],{"class":732},[155,172233,70000],{"class":171},[155,172235,172236],{"class":732},"\"电脑\"",[155,172238,7589],{"class":171},[155,172240,102647],{"class":732},[155,172242,70000],{"class":171},[155,172244,172245],{"class":263},"18000",[155,172247,24794],{"class":171},[155,172249,172250,172252,172254,172256,172258,172260,172262,172264,172266,172268,172270,172272,172275],{"class":157,"line":180},[155,172251,166948],{"class":171},[155,172253,166560],{"class":732},[155,172255,70000],{"class":171},[155,172257,167192],{"class":732},[155,172259,7589],{"class":171},[155,172261,172201],{"class":732},[155,172263,70000],{"class":171},[155,172265,172206],{"class":732},[155,172267,7589],{"class":171},[155,172269,102647],{"class":732},[155,172271,70000],{"class":171},[155,172273,172274],{"class":263},"15000",[155,172276,24794],{"class":171},[155,172278,172279,172281,172283,172285,172287,172289,172291,172293,172295,172297,172299,172301,172304],{"class":157,"line":194},[155,172280,166948],{"class":171},[155,172282,166560],{"class":732},[155,172284,70000],{"class":171},[155,172286,167192],{"class":732},[155,172288,7589],{"class":171},[155,172290,172201],{"class":732},[155,172292,70000],{"class":171},[155,172294,172236],{"class":732},[155,172296,7589],{"class":171},[155,172298,102647],{"class":732},[155,172300,70000],{"class":171},[155,172302,172303],{"class":263},"16000",[155,172305,24794],{"class":171},[155,172307,172308],{"class":157,"line":200},[155,172309,2845],{"class":171},[14,172311,172313],{"id":172312},"_1252-按日期统计","12.5.2 按日期统计",[146,172315,172317],{"className":148,"code":172316,"language":150,"meta":39,"style":39},"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",[152,172318,172319,172328,172332,172343,172357,172370,172389,172393],{"__ignoreMap":39},[155,172320,172321,172324,172326],{"class":157,"line":158},[155,172322,172323],{"class":171},"daily_total ",[155,172325,317],{"class":167},[155,172327,106431],{"class":171},[155,172329,172330],{"class":157,"line":46},[155,172331,217],{"emptyLinePlaceholder":216},[155,172333,172334,172336,172338,172340],{"class":157,"line":121},[155,172335,1125],{"class":167},[155,172337,166772],{"class":171},[155,172339,1131],{"class":167},[155,172341,172342],{"class":171}," sales:\n",[155,172344,172345,172348,172350,172353,172355],{"class":157,"line":180},[155,172346,172347],{"class":171},"    date ",[155,172349,317],{"class":167},[155,172351,172352],{"class":171}," item[",[155,172354,166560],{"class":732},[155,172356,2845],{"class":171},[155,172358,172359,172362,172364,172366,172368],{"class":157,"line":194},[155,172360,172361],{"class":171},"    amount ",[155,172363,317],{"class":167},[155,172365,172352],{"class":171},[155,172367,102647],{"class":732},[155,172369,2845],{"class":171},[155,172371,172372,172375,172377,172380,172382,172384,172386],{"class":157,"line":200},[155,172373,172374],{"class":171},"    daily_total[date] ",[155,172376,317],{"class":167},[155,172378,172379],{"class":171}," daily_total.get(date, ",[155,172381,1109],{"class":263},[155,172383,33541],{"class":171},[155,172385,1274],{"class":167},[155,172387,172388],{"class":171}," amount\n",[155,172390,172391],{"class":157,"line":213},[155,172392,217],{"emptyLinePlaceholder":216},[155,172394,172395,172397],{"class":157,"line":220},[155,172396,15451],{"class":263},[155,172398,172399],{"class":171},"(daily_total)\n",[14,172401,172403],{"id":172402},"_1253-按类别统计","12.5.3 按类别统计",[146,172405,172407],{"className":148,"code":172406,"language":150,"meta":39,"style":39},"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",[152,172408,172409,172418,172422,172432,172445,172457,172475,172479],{"__ignoreMap":39},[155,172410,172411,172414,172416],{"class":157,"line":158},[155,172412,172413],{"class":171},"category_total ",[155,172415,317],{"class":167},[155,172417,106431],{"class":171},[155,172419,172420],{"class":157,"line":46},[155,172421,217],{"emptyLinePlaceholder":216},[155,172423,172424,172426,172428,172430],{"class":157,"line":121},[155,172425,1125],{"class":167},[155,172427,166772],{"class":171},[155,172429,1131],{"class":167},[155,172431,172342],{"class":171},[155,172433,172434,172437,172439,172441,172443],{"class":157,"line":180},[155,172435,172436],{"class":171},"    category ",[155,172438,317],{"class":167},[155,172440,172352],{"class":171},[155,172442,172201],{"class":732},[155,172444,2845],{"class":171},[155,172446,172447,172449,172451,172453,172455],{"class":157,"line":194},[155,172448,172361],{"class":171},[155,172450,317],{"class":167},[155,172452,172352],{"class":171},[155,172454,102647],{"class":732},[155,172456,2845],{"class":171},[155,172458,172459,172462,172464,172467,172469,172471,172473],{"class":157,"line":200},[155,172460,172461],{"class":171},"    category_total[category] ",[155,172463,317],{"class":167},[155,172465,172466],{"class":171}," category_total.get(category, ",[155,172468,1109],{"class":263},[155,172470,33541],{"class":171},[155,172472,1274],{"class":167},[155,172474,172388],{"class":171},[155,172476,172477],{"class":157,"line":213},[155,172478,217],{"emptyLinePlaceholder":216},[155,172480,172481,172483],{"class":157,"line":220},[155,172482,15451],{"class":263},[155,172484,172485],{"class":171},"(category_total)\n",[14,172487,172489],{"id":172488},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[146,172491,172493],{"className":148,"code":172492,"language":150,"meta":39,"style":39},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[152,172494,172495,172520],{"__ignoreMap":39},[155,172496,172497,172500,172502,172504,172507,172510,172513,172516,172518],{"class":157,"line":158},[155,172498,172499],{"class":171},"top_date, top_amount ",[155,172501,317],{"class":167},[155,172503,25814],{"class":263},[155,172505,172506],{"class":171},"(daily_total.items(), ",[155,172508,172509],{"class":323},"key",[155,172511,172512],{"class":167},"=lambda",[155,172514,172515],{"class":171}," item: item[",[155,172517,329],{"class":263},[155,172519,17676],{"class":171},[155,172521,172522,172524],{"class":157,"line":46},[155,172523,15451],{"class":263},[155,172525,172526],{"class":171},"(top_date, top_amount)\n",[20037,172528,172530],{"id":172529},"_126-绘制柱状图","12.6 绘制柱状图",[146,172532,172534],{"className":148,"code":172533,"language":150,"meta":39,"style":39},"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",[152,172535,172536,172550,172561,172565,172573,172585,172597,172608,172612,172616,172626,172637,172651,172656,172673,172690,172706,172710],{"__ignoreMap":39},[155,172537,172538,172540,172542,172544,172546,172548],{"class":157,"line":158},[155,172539,183],{"class":167},[155,172541,165942],{"class":171},[155,172543,168],{"class":167},[155,172545,165947],{"class":171},[155,172547,907],{"class":167},[155,172549,165952],{"class":171},[155,172551,172552,172554,172556,172558],{"class":157,"line":46},[155,172553,183],{"class":167},[155,172555,165801],{"class":171},[155,172557,168],{"class":167},[155,172559,172560],{"class":171}," Bar\n",[155,172562,172563],{"class":157,"line":121},[155,172564,217],{"emptyLinePlaceholder":216},[155,172566,172567,172569,172571],{"class":157,"line":180},[155,172568,172413],{"class":171},[155,172570,317],{"class":167},[155,172572,35397],{"class":171},[155,172574,172575,172578,172580,172583],{"class":157,"line":194},[155,172576,172577],{"class":732},"    \"手机\"",[155,172579,70000],{"class":171},[155,172581,172582],{"class":263},"27000",[155,172584,990],{"class":171},[155,172586,172587,172590,172592,172595],{"class":157,"line":200},[155,172588,172589],{"class":732},"    \"电脑\"",[155,172591,70000],{"class":171},[155,172593,172594],{"class":263},"34000",[155,172596,990],{"class":171},[155,172598,172599,172602,172604,172606],{"class":157,"line":213},[155,172600,172601],{"class":732},"    \"耳机\"",[155,172603,70000],{"class":171},[155,172605,142962],{"class":263},[155,172607,990],{"class":171},[155,172609,172610],{"class":157,"line":220},[155,172611,21475],{"class":171},[155,172613,172614],{"class":157,"line":245},[155,172615,217],{"emptyLinePlaceholder":216},[155,172617,172618,172621,172623],{"class":157,"line":251},[155,172619,172620],{"class":171},"bar ",[155,172622,317],{"class":167},[155,172624,172625],{"class":171}," Bar()\n",[155,172627,172628,172631,172634],{"class":157,"line":257},[155,172629,172630],{"class":171},"bar.add_xaxis(",[155,172632,172633],{"class":263},"list",[155,172635,172636],{"class":171},"(category_total.keys()))\n",[155,172638,172639,172642,172644,172646,172648],{"class":157,"line":270},[155,172640,172641],{"class":171},"bar.add_yaxis(",[155,172643,165858],{"class":732},[155,172645,7589],{"class":171},[155,172647,172633],{"class":263},[155,172649,172650],{"class":171},"(category_total.values()))\n",[155,172652,172653],{"class":157,"line":276},[155,172654,172655],{"class":171},"bar.set_global_opts(\n",[155,172657,172658,172660,172662,172664,172666,172668,172671],{"class":157,"line":297},[155,172659,166036],{"class":323},[155,172661,317],{"class":167},[155,172663,166041],{"class":171},[155,172665,69970],{"class":323},[155,172667,317],{"class":167},[155,172669,172670],{"class":732},"\"品类销售额\"",[155,172672,7657],{"class":171},[155,172674,172675,172677,172679,172681,172683,172685,172688],{"class":157,"line":302},[155,172676,166055],{"class":323},[155,172678,317],{"class":167},[155,172680,166060],{"class":171},[155,172682,98373],{"class":323},[155,172684,317],{"class":167},[155,172686,172687],{"class":732},"\"品类\"",[155,172689,7657],{"class":171},[155,172691,172692,172694,172696,172698,172700,172702,172704],{"class":157,"line":308},[155,172693,166074],{"class":323},[155,172695,317],{"class":167},[155,172697,166060],{"class":171},[155,172699,98373],{"class":323},[155,172701,317],{"class":167},[155,172703,165858],{"class":732},[155,172705,7657],{"class":171},[155,172707,172708],{"class":157,"line":366},[155,172709,363],{"class":171},[155,172711,172712,172715,172718],{"class":157,"line":379},[155,172713,172714],{"class":171},"bar.render(",[155,172716,172717],{"class":732},"\"category_sales.html\"",[155,172719,363],{"class":171},[20037,172721,172723],{"id":172722},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[24,172725,172726],{},"时间线适合展示不同日期、月份、年份的数据变化。",[146,172728,172730],{"className":148,"code":172729,"language":150,"meta":39,"style":39},"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",[152,172731,172732,172746,172757,172761,172769,172793,172816,172841,172845,172849,172859,172863,172874,172883,172893,172907,172938,172943,172947],{"__ignoreMap":39},[155,172733,172734,172736,172738,172740,172742,172744],{"class":157,"line":158},[155,172735,183],{"class":167},[155,172737,165942],{"class":171},[155,172739,168],{"class":167},[155,172741,165947],{"class":171},[155,172743,907],{"class":167},[155,172745,165952],{"class":171},[155,172747,172748,172750,172752,172754],{"class":157,"line":46},[155,172749,183],{"class":167},[155,172751,165801],{"class":171},[155,172753,168],{"class":167},[155,172755,172756],{"class":171}," Bar, Timeline\n",[155,172758,172759],{"class":157,"line":121},[155,172760,217],{"emptyLinePlaceholder":216},[155,172762,172763,172765,172767],{"class":157,"line":180},[155,172764,120221],{"class":171},[155,172766,317],{"class":167},[155,172768,35397],{"class":171},[155,172770,172771,172774,172777,172779,172781,172783,172785,172787,172789,172791],{"class":157,"line":194},[155,172772,172773],{"class":732},"    \"2024-10-01\"",[155,172775,172776],{"class":171},": {",[155,172778,172206],{"class":732},[155,172780,70000],{"class":171},[155,172782,172215],{"class":263},[155,172784,7589],{"class":171},[155,172786,172236],{"class":732},[155,172788,70000],{"class":171},[155,172790,172245],{"class":263},[155,172792,24794],{"class":171},[155,172794,172795,172798,172800,172802,172804,172806,172808,172810,172812,172814],{"class":157,"line":200},[155,172796,172797],{"class":732},"    \"2024-10-02\"",[155,172799,172776],{"class":171},[155,172801,172206],{"class":732},[155,172803,70000],{"class":171},[155,172805,172274],{"class":263},[155,172807,7589],{"class":171},[155,172809,172236],{"class":732},[155,172811,70000],{"class":171},[155,172813,172303],{"class":263},[155,172815,24794],{"class":171},[155,172817,172818,172821,172823,172825,172827,172830,172832,172834,172836,172839],{"class":157,"line":213},[155,172819,172820],{"class":732},"    \"2024-10-03\"",[155,172822,172776],{"class":171},[155,172824,172206],{"class":732},[155,172826,70000],{"class":171},[155,172828,172829],{"class":263},"17000",[155,172831,7589],{"class":171},[155,172833,172236],{"class":732},[155,172835,70000],{"class":171},[155,172837,172838],{"class":263},"19000",[155,172840,24794],{"class":171},[155,172842,172843],{"class":157,"line":220},[155,172844,21475],{"class":171},[155,172846,172847],{"class":157,"line":245},[155,172848,217],{"emptyLinePlaceholder":216},[155,172850,172851,172854,172856],{"class":157,"line":251},[155,172852,172853],{"class":171},"timeline ",[155,172855,317],{"class":167},[155,172857,172858],{"class":171}," Timeline()\n",[155,172860,172861],{"class":157,"line":257},[155,172862,217],{"emptyLinePlaceholder":216},[155,172864,172865,172867,172870,172872],{"class":157,"line":270},[155,172866,1125],{"class":167},[155,172868,172869],{"class":171}," date, category_data ",[155,172871,1131],{"class":167},[155,172873,167711],{"class":171},[155,172875,172876,172879,172881],{"class":157,"line":276},[155,172877,172878],{"class":171},"    bar ",[155,172880,317],{"class":167},[155,172882,172625],{"class":171},[155,172884,172885,172888,172890],{"class":157,"line":297},[155,172886,172887],{"class":171},"    bar.add_xaxis(",[155,172889,172633],{"class":263},[155,172891,172892],{"class":171},"(category_data.keys()))\n",[155,172894,172895,172898,172900,172902,172904],{"class":157,"line":302},[155,172896,172897],{"class":171},"    bar.add_yaxis(",[155,172899,165858],{"class":732},[155,172901,7589],{"class":171},[155,172903,172633],{"class":263},[155,172905,172906],{"class":171},"(category_data.values()))\n",[155,172908,172909,172912,172915,172917,172919,172921,172923,172925,172927,172929,172931,172933,172936],{"class":157,"line":308},[155,172910,172911],{"class":171},"    bar.set_global_opts(",[155,172913,172914],{"class":323},"title_opts",[155,172916,317],{"class":167},[155,172918,166041],{"class":171},[155,172920,69970],{"class":323},[155,172922,317],{"class":167},[155,172924,17391],{"class":167},[155,172926,2033],{"class":732},[155,172928,2705],{"class":263},[155,172930,92489],{"class":171},[155,172932,2711],{"class":263},[155,172934,172935],{"class":732},"销售额\"",[155,172937,1238],{"class":171},[155,172939,172940],{"class":157,"line":366},[155,172941,172942],{"class":171},"    timeline.add(bar, date)\n",[155,172944,172945],{"class":157,"line":379},[155,172946,217],{"emptyLinePlaceholder":216},[155,172948,172949,172952,172955],{"class":157,"line":385},[155,172950,172951],{"class":171},"timeline.render(",[155,172953,172954],{"class":732},"\"timeline_sales.html\"",[155,172956,363],{"class":171},[20037,172958,172960],{"id":172959},"_128-绘制地图","12.8 绘制地图",[24,172962,172963],{},"地图适合展示地区数据。",[146,172965,172967],{"className":148,"code":172966,"language":150,"meta":39,"style":39},"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",[152,172968,172969,172983,172994,172998,173006,173019,173031,173044,173057,173061,173065,173075,173090,173095,173112,173131,173135],{"__ignoreMap":39},[155,172970,172971,172973,172975,172977,172979,172981],{"class":157,"line":158},[155,172972,183],{"class":167},[155,172974,165942],{"class":171},[155,172976,168],{"class":167},[155,172978,165947],{"class":171},[155,172980,907],{"class":167},[155,172982,165952],{"class":171},[155,172984,172985,172987,172989,172991],{"class":157,"line":46},[155,172986,183],{"class":167},[155,172988,165801],{"class":171},[155,172990,168],{"class":167},[155,172992,172993],{"class":171}," Map\n",[155,172995,172996],{"class":157,"line":121},[155,172997,217],{"emptyLinePlaceholder":216},[155,172999,173000,173002,173004],{"class":157,"line":180},[155,173001,120221],{"class":171},[155,173003,317],{"class":167},[155,173005,74010],{"class":171},[155,173007,173008,173011,173013,173015,173017],{"class":157,"line":194},[155,173009,173010],{"class":171},"    (",[155,173012,87832],{"class":732},[155,173014,7589],{"class":171},[155,173016,523],{"class":263},[155,173018,7657],{"class":171},[155,173020,173021,173023,173025,173027,173029],{"class":157,"line":200},[155,173022,173010],{"class":171},[155,173024,87852],{"class":732},[155,173026,7589],{"class":171},[155,173028,165875],{"class":263},[155,173030,7657],{"class":171},[155,173032,173033,173035,173038,173040,173042],{"class":157,"line":213},[155,173034,173010],{"class":171},[155,173036,173037],{"class":732},"\"广东\"",[155,173039,7589],{"class":171},[155,173041,21619],{"class":263},[155,173043,7657],{"class":171},[155,173045,173046,173048,173051,173053,173055],{"class":157,"line":220},[155,173047,173010],{"class":171},[155,173049,173050],{"class":732},"\"浙江\"",[155,173052,7589],{"class":171},[155,173054,165880],{"class":263},[155,173056,7657],{"class":171},[155,173058,173059],{"class":157,"line":245},[155,173060,2845],{"class":171},[155,173062,173063],{"class":157,"line":251},[155,173064,217],{"emptyLinePlaceholder":216},[155,173066,173067,173070,173072],{"class":157,"line":257},[155,173068,173069],{"class":171},"map_chart ",[155,173071,317],{"class":167},[155,173073,173074],{"class":171}," Map()\n",[155,173076,173077,173080,173082,173085,173088],{"class":157,"line":270},[155,173078,173079],{"class":171},"map_chart.add(",[155,173081,165858],{"class":732},[155,173083,173084],{"class":171},", data, ",[155,173086,173087],{"class":732},"\"china\"",[155,173089,363],{"class":171},[155,173091,173092],{"class":157,"line":276},[155,173093,173094],{"class":171},"map_chart.set_global_opts(\n",[155,173096,173097,173099,173101,173103,173105,173107,173110],{"class":157,"line":297},[155,173098,166036],{"class":323},[155,173100,317],{"class":167},[155,173102,166041],{"class":171},[155,173104,69970],{"class":323},[155,173106,317],{"class":167},[155,173108,173109],{"class":732},"\"地区销售额\"",[155,173111,7657],{"class":171},[155,173113,173114,173117,173119,173122,173125,173127,173129],{"class":157,"line":302},[155,173115,173116],{"class":323},"    visualmap_opts",[155,173118,317],{"class":167},[155,173120,173121],{"class":171},"opts.VisualMapOpts(",[155,173123,173124],{"class":323},"max_",[155,173126,317],{"class":167},[155,173128,21619],{"class":263},[155,173130,7657],{"class":171},[155,173132,173133],{"class":157,"line":308},[155,173134,363],{"class":171},[155,173136,173137,173140,173143],{"class":157,"line":366},[155,173138,173139],{"class":171},"map_chart.render(",[155,173141,173142],{"class":732},"\"map_sales.html\"",[155,173144,363],{"class":171},[24,173146,173147],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[20037,173149,173151],{"id":173150},"_129-项目拆分建议","12.9 项目拆分建议",[24,173153,173154],{},"当代码超过一个文件时，可以这样组织：",[146,173156,173159],{"className":173157,"code":173158,"language":25051,"meta":39},[25049],"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",[152,173160,173158],{"__ignoreMap":39},[24,173162,173163],{},"职责：",[28,173165,173166,173172,173178,173184],{},[31,173167,173168,173171],{},[152,173169,173170],{},"main.py","：程序入口。",[31,173173,173174,173177],{},[152,173175,173176],{},"file_utils.py","：读写 JSON。",[31,173179,173180,173183],{},[152,173181,173182],{},"sales_service.py","：统计销售数据。",[31,173185,173186,173189],{},[152,173187,173188],{},"chart_builder.py","：生成图表。",[20037,173191,173193],{"id":173192},"_1210-python基础复习清单","12.10 Python基础复习清单",[24,173195,173196],{},"语法基础：",[28,173198,173199,173202,173205,173208],{},[31,173200,173201],{},"会写变量、注释、输入输出。",[31,173203,173204],{},"会使用 int、float、str、bool。",[31,173206,173207],{},"会做类型转换。",[31,173209,173210],{},"会使用 f-string 格式化输出。",[24,173212,173213],{},"流程控制：",[28,173215,173216,173222,173228,173236],{},[31,173217,173218,173219,48174],{},"会写 ",[152,173220,173221],{},"if elif else",[31,173223,173218,173224,119581,173226,48174],{},[152,173225,127226],{},[152,173227,1125],{},[31,173229,173230,173231,119581,173233,48174],{},"理解 ",[152,173232,21940],{},[152,173234,173235],{},"continue",[31,173237,173238],{},"能写嵌套循环。",[24,173240,173241],{},"函数：",[28,173243,173244,173247,173250,173253],{},[31,173245,173246],{},"会定义和调用函数。",[31,173248,173249],{},"理解参数和返回值。",[31,173251,173252],{},"知道局部变量和全局变量。",[31,173254,173255],{},"会使用默认参数、关键字参数、不定长参数。",[24,173257,173258],{},"容器：",[28,173260,173261,173264,173267,173270,173273],{},[31,173262,173263],{},"会使用列表增删改查。",[31,173265,173266],{},"会遍历列表、字典。",[31,173268,173269],{},"会使用切片。",[31,173271,173272],{},"会用集合去重。",[31,173274,173275],{},"会处理列表嵌套字典。",[24,173277,173278],{},"文件和模块：",[28,173280,173281,173284,173287,173290,173293],{},[31,173282,173283],{},"会读写文本文件。",[31,173285,173286],{},"会读写 JSON。",[31,173288,173289],{},"会捕获常见异常。",[31,173291,173292],{},"会导入模块和第三方包。",[31,173294,173295],{},"会创建简单包结构。",[24,173297,173298],{},"项目能力：",[28,173300,173301,173304,173307,173310,173313],{},[31,173302,173303],{},"能把代码拆成函数。",[31,173305,173306],{},"能把数据保存到文件。",[31,173308,173309],{},"能处理用户输入错误。",[31,173311,173312],{},"能写一个完整菜单程序。",[31,173314,173315],{},"能用 pyecharts 生成图表。",[20037,173317,173319],{"id":173318},"_1211-推荐练习顺序","12.11 推荐练习顺序",[28,173321,173322,173325,173328,173331,173334,173337,173340,173343],{},[31,173323,173324],{},"猜数字游戏。",[31,173326,173327],{},"ATM 菜单程序。",[31,173329,173330],{},"学生成绩统计。",[31,173332,173333],{},"学生管理系统函数版。",[31,173335,173336],{},"学生管理系统文件持久化版。",[31,173338,173339],{},"学生管理系统面向对象版。",[31,173341,173342],{},"销售数据统计。",[31,173344,173345],{},"销售数据可视化。",[20037,173347,173349],{"id":173348},"_1212-常见学习误区","12.12 常见学习误区",[28,173351,173352,173355,173358,173361,173364,173367,173370],{},[31,173353,173354],{},"只看视频不敲代码。",[31,173356,173357],{},"一报错就复制错误去搜，不先读报错位置。",[31,173359,173360],{},"变量名随便写，后续自己看不懂。",[31,173362,173363],{},"所有代码都写在一个文件一个函数里。",[31,173365,173366],{},"不保存练习代码，复习时没有材料。",[31,173368,173369],{},"还没掌握列表字典就急着学框架。",[31,173371,173372],{},"不会读官方文档，只依赖教程。",[20037,173374,173376],{"id":173375},"_1213-如何读报错","12.13 如何读报错",[24,173378,173379],{},"报错通常从下往上看最后几行。",[24,173381,34960],{},[146,173383,173386],{"className":173384,"code":173385,"language":25051,"meta":39},[25049],"ValueError: invalid literal for int() with base 10: 'abc'\n",[152,173387,173385],{"__ignoreMap":39},[24,173389,44391],{},[28,173391,173392,173398,173408],{},[31,173393,173394,173395,48174],{},"异常类型是 ",[152,173396,173397],{},"ValueError",[31,173399,125908,173400,173403,173404,173407],{},[152,173401,173402],{},"int()"," 无法把 ",[152,173405,173406],{},"'abc'"," 转成整数。",[31,173409,173410],{},"应该检查输入内容或增加异常处理。",[24,173412,173413],{},"再看文件名和行号：",[146,173415,173418],{"className":173416,"code":173417,"language":25051,"meta":39},[25049],"File \"main.py\", line 10, in \u003Cmodule>\n",[152,173419,173417],{"__ignoreMap":39},[24,173421,173422,173423,173425],{},"表示错误发生在 ",[152,173424,173170],{}," 第 10 行。",[20037,173427,173429],{"id":173428},"_1214-后续学习方向","12.14 后续学习方向",[24,173431,173432],{},"Python 基础完成后，可以按兴趣选择方向：",[28,173434,173435,173447,173456,173468,173479,173488,173498],{},[31,173436,173437,173438,20293,173441,20293,173444,48174],{},"自动化办公：",[152,173439,173440],{},"openpyxl",[152,173442,173443],{},"python-docx",[152,173445,173446],{},"pdfplumber",[31,173448,173449,173450,20293,173452,20293,173454,48174],{},"数据分析：",[152,173451,119189],{},[152,173453,164748],{},[152,173455,164756],{},[31,173457,173458,173459,20293,173462,20293,173465,48174],{},"Web 后端：",[152,173460,173461],{},"Flask",[152,173463,173464],{},"FastAPI",[152,173466,173467],{},"Django",[31,173469,173470,173471,20293,173473,20293,173476,48174],{},"爬虫：",[152,173472,164733],{},[152,173474,173475],{},"BeautifulSoup",[152,173477,173478],{},"Scrapy",[31,173480,173481,173482,20293,173484,173487],{},"测试开发：",[152,173483,164780],{},[152,173485,173486],{},"selenium","、接口测试。",[31,173489,173490,173491,20293,173493,20293,173495,48174],{},"人工智能：",[152,173492,119189],{},[152,173494,164748],{},[152,173496,173497],{},"pytorch",[31,173499,173500,173501,20293,173503,20293,173506,48174],{},"运维脚本：",[152,173502,164349],{},[152,173504,173505],{},"subprocess",[152,173507,173508],{},"paramiko",[24,173510,173511],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[20037,173513,173515],{"id":173514},"_1215-结课练习","12.15 结课练习",[28,173517,173518,173521,173524,173527,173530,173533,173536,173539],{},[31,173519,173520],{},"完成函数版学生管理系统。",[31,173522,173523],{},"给学生管理系统增加 JSON 持久化。",[31,173525,173526],{},"给学生管理系统增加异常处理。",[31,173528,173529],{},"把学生管理系统改成面向对象版。",[31,173531,173532],{},"使用 pyecharts 绘制学生成绩柱状图。",[31,173534,173535],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[31,173537,173538],{},"按品类统计销售额并绘制柱状图。",[31,173540,173541],{},"写一份自己的 Python 学习路线图。",[20011,173543,173544],{},"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":39,"searchDepth":46,"depth":46,"links":173546},[173547,173548,173551,173552,173553,173559,173560,173561,173562,173563,173564,173565,173566,173567,173568],{"id":170263,"depth":46,"text":170264},{"id":170313,"depth":46,"text":170314,"children":173549},[173550],{"id":170317,"depth":121,"text":170318},{"id":170356,"depth":46,"text":170357},{"id":171830,"depth":46,"text":171831},{"id":172168,"depth":46,"text":172169,"children":173554},[173555,173556,173557,173558],{"id":172172,"depth":121,"text":172173},{"id":172312,"depth":121,"text":172313},{"id":172402,"depth":121,"text":172403},{"id":172488,"depth":121,"text":172489},{"id":172529,"depth":46,"text":172530},{"id":172722,"depth":46,"text":172723},{"id":172959,"depth":46,"text":172960},{"id":173150,"depth":46,"text":173151},{"id":173192,"depth":46,"text":173193},{"id":173318,"depth":46,"text":173319},{"id":173348,"depth":46,"text":173349},{"id":173375,"depth":46,"text":173376},{"id":173428,"depth":46,"text":173429},{"id":173514,"depth":46,"text":173515},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":170255,"description":20020},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":173575,"title":173576,"body":173577,"description":20020,"extension":20021,"meta":176046,"navigation":216,"path":176047,"seo":176048,"stem":176049,"__hash__":176050},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":173578,"toc":176021},[173579,173582,173586,173589,173592,173612,173615,173638,173641,173644,173666,173669,173691,173695,173698,173738,173741,173862,173866,173869,173909,173912,173936,173939,173943,173946,173960,173993,173996,174031,174034,174057,174060,174093,174096,174098,174104,174179,174182,174188,174205,174245,174249,174252,174298,174300,174338,174341,174376,174379,174414,174417,174449,174452,174471,174475,174479,174592,174594,174669,174673,174719,174722,174748,174757,174761,174764,174827,174835,174863,174867,174907,174972,174976,174979,175018,175021,175066,175069,175130,175134,175161,175164,175192,175195,175199,175203,175268,175271,175309,175312,175344,175348,175447,175451,175454,175527,175530,175578,175582,175588,175628,175631,175678,175681,175730,175734,175736,175750,175752,175933,175937,175964,175984,175991,175995,176012,176018],[10,173580,173576],{"id":173581},"_2-基础语法变量与字符串",[20037,173583,173585],{"id":173584},"_21-注释","2.1 注释",[24,173587,173588],{},"注释是给人看的说明文字，不会被 Python 执行。",[24,173590,173591],{},"单行注释：",[146,173593,173595],{"className":148,"code":173594,"language":150,"meta":39,"style":39},"# 这是单行注释\nprint(\"hello\")\n",[152,173596,173597,173602],{"__ignoreMap":39},[155,173598,173599],{"class":157,"line":158},[155,173600,173601],{"class":161},"# 这是单行注释\n",[155,173603,173604,173606,173608,173610],{"class":157,"line":46},[155,173605,15451],{"class":263},[155,173607,230],{"class":171},[155,173609,25707],{"class":732},[155,173611,363],{"class":171},[24,173613,173614],{},"多行说明常用三引号：",[146,173616,173618],{"className":148,"code":173617,"language":150,"meta":39,"style":39},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[152,173619,173620,173624,173629,173634],{"__ignoreMap":39},[155,173621,173622],{"class":157,"line":158},[155,173623,114261],{"class":732},[155,173625,173626],{"class":157,"line":46},[155,173627,173628],{"class":732},"这是多行说明。\n",[155,173630,173631],{"class":157,"line":121},[155,173632,173633],{"class":732},"常用于文件顶部说明、函数说明等。\n",[155,173635,173636],{"class":157,"line":180},[155,173637,114261],{"class":732},[24,173639,173640],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[24,173642,173643],{},"不好：",[146,173645,173647],{"className":148,"code":173646,"language":150,"meta":39,"style":39},"# age 加 1\nage = age + 1\n",[152,173648,173649,173654],{"__ignoreMap":39},[155,173650,173651],{"class":157,"line":158},[155,173652,173653],{"class":161},"# age 加 1\n",[155,173655,173656,173658,173660,173662,173664],{"class":157,"line":46},[155,173657,165109],{"class":171},[155,173659,317],{"class":167},[155,173661,35532],{"class":171},[155,173663,1274],{"class":167},[155,173665,74262],{"class":263},[24,173667,173668],{},"较好：",[146,173670,173672],{"className":148,"code":173671,"language":150,"meta":39,"style":39},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[152,173673,173674,173679],{"__ignoreMap":39},[155,173675,173676],{"class":157,"line":158},[155,173677,173678],{"class":161},"# 用户过完生日后，年龄增加一岁\n",[155,173680,173681,173683,173685,173687,173689],{"class":157,"line":46},[155,173682,165109],{"class":171},[155,173684,317],{"class":167},[155,173686,35532],{"class":171},[155,173688,1274],{"class":167},[155,173690,74262],{"class":263},[20037,173692,173694],{"id":173693},"_22-字面量","2.2 字面量",[24,173696,173697],{},"字面量就是代码中直接写出来的数据。",[146,173699,173701],{"className":148,"code":173700,"language":150,"meta":39,"style":39},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[152,173702,173703,173710,173717,173724,173731],{"__ignoreMap":39},[155,173704,173705,173707],{"class":157,"line":158},[155,173706,20389],{"class":263},[155,173708,173709],{"class":161},"          # 整数\n",[155,173711,173712,173714],{"class":157,"line":46},[155,173713,20139],{"class":263},[155,173715,173716],{"class":161},"         # 小数\n",[155,173718,173719,173721],{"class":157,"line":121},[155,173720,25707],{"class":732},[155,173722,173723],{"class":161},"      # 字符串\n",[155,173725,173726,173728],{"class":157,"line":180},[155,173727,1000],{"class":263},[155,173729,173730],{"class":161},"         # 布尔值\n",[155,173732,173733,173735],{"class":157,"line":194},[155,173734,114249],{"class":263},[155,173736,173737],{"class":161},"         # 空值\n",[24,173739,173740],{},"常见字面量类型：",[20222,173742,173743,173753],{},[20225,173744,173745],{},[20228,173746,173747,173749,173751],{},[20231,173748,43528],{},[20231,173750,47281],{},[20231,173752,45659],{},[20269,173754,173755,173766,173777,173788,173800,173812,173824,173837,173849],{},[20228,173756,173757,173759,173763],{},[20274,173758,15239],{},[20274,173760,173761],{},[152,173762,20389],{},[20274,173764,173765],{},"整数",[20228,173767,173768,173770,173774],{},[20274,173769,2833],{},[20274,173771,173772],{},[152,173773,20139],{},[20274,173775,173776],{},"浮点数",[20228,173778,173779,173781,173785],{},[20274,173780,21215],{},[20274,173782,173783],{},[152,173784,25707],{},[20274,173786,173787],{},"字符串",[20228,173789,173790,173792,173798],{},[20274,173791,21267],{},[20274,173793,173794,20293,173796],{},[152,173795,1000],{},[152,173797,3592],{},[20274,173799,84578],{},[20228,173801,173802,173805,173809],{},[20274,173803,173804],{},"NoneType",[20274,173806,173807],{},[152,173808,114249],{},[20274,173810,173811],{},"空值",[20228,173813,173814,173816,173821],{},[20274,173815,172633],{},[20274,173817,173818],{},[152,173819,173820],{},"[1, 2, 3]",[20274,173822,173823],{},"列表",[20228,173825,173826,173829,173834],{},[20274,173827,173828],{},"tuple",[20274,173830,173831],{},[152,173832,173833],{},"(1, 2, 3)",[20274,173835,173836],{},"元组",[20228,173838,173839,173841,173846],{},[20274,173840,133109],{},[20274,173842,173843],{},[152,173844,173845],{},"{\"name\": \"张三\"}",[20274,173847,173848],{},"字典",[20228,173850,173851,173854,173859],{},[20274,173852,173853],{},"set",[20274,173855,173856],{},[152,173857,173858],{},"{1, 2, 3}",[20274,173860,173861],{},"集合",[20037,173863,173865],{"id":173864},"_23-变量","2.3 变量",[24,173867,173868],{},"变量是保存数据的名字。",[146,173870,173872],{"className":148,"code":173871,"language":150,"meta":39,"style":39},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[152,173873,173874,173882,173890,173900],{"__ignoreMap":39},[155,173875,173876,173878,173880],{"class":157,"line":158},[155,173877,165099],{"class":171},[155,173879,317],{"class":167},[155,173881,167916],{"class":732},[155,173883,173884,173886,173888],{"class":157,"line":46},[155,173885,165109],{"class":171},[155,173887,317],{"class":167},[155,173889,165114],{"class":263},[155,173891,173892,173895,173897],{"class":157,"line":121},[155,173893,173894],{"class":171},"height ",[155,173896,317],{"class":167},[155,173898,173899],{"class":263}," 1.75\n",[155,173901,173902,173905,173907],{"class":157,"line":180},[155,173903,173904],{"class":171},"is_student ",[155,173906,317],{"class":167},[155,173908,172162],{"class":263},[24,173910,173911],{},"Python 的变量不需要提前声明类型：",[146,173913,173915],{"className":148,"code":173914,"language":150,"meta":39,"style":39},"score = 100\nscore = \"满分\"\n",[152,173916,173917,173927],{"__ignoreMap":39},[155,173918,173919,173922,173924],{"class":157,"line":158},[155,173920,173921],{"class":171},"score ",[155,173923,317],{"class":167},[155,173925,173926],{"class":263}," 100\n",[155,173928,173929,173931,173933],{"class":157,"line":46},[155,173930,173921],{"class":171},[155,173932,317],{"class":167},[155,173934,173935],{"class":732}," \"满分\"\n",[24,173937,173938],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[20037,173940,173942],{"id":173941},"_24-变量命名规则","2.4 变量命名规则",[24,173944,173945],{},"硬性规则：",[28,173947,173948,173951,173954,173957],{},[31,173949,173950],{},"只能由字母、数字、下划线组成。",[31,173952,173953],{},"不能以数字开头。",[31,173955,173956],{},"不能使用 Python 关键字。",[31,173958,173959],{},"区分大小写。",[146,173961,173963],{"className":148,"code":173962,"language":150,"meta":39,"style":39},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[152,173964,173965,173974,173983],{"__ignoreMap":39},[155,173966,173967,173970,173972],{"class":157,"line":158},[155,173968,173969],{"class":171},"user_name ",[155,173971,317],{"class":167},[155,173973,165104],{"class":732},[155,173975,173976,173979,173981],{"class":157,"line":46},[155,173977,173978],{"class":171},"age2 ",[155,173980,317],{"class":167},[155,173982,165114],{"class":263},[155,173984,173985,173988,173990],{"class":157,"line":121},[155,173986,173987],{"class":171},"_token ",[155,173989,317],{"class":167},[155,173991,173992],{"class":732}," \"abc\"\n",[24,173994,173995],{},"错误写法：",[146,173997,173999],{"className":148,"code":173998,"language":150,"meta":39,"style":39},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[152,174000,174001,174010,174022],{"__ignoreMap":39},[155,174002,174003,174006,174008],{"class":157,"line":158},[155,174004,174005],{"class":95966},"2age",[155,174007,33391],{"class":167},[155,174009,165114],{"class":263},[155,174011,174012,174014,174016,174018,174020],{"class":157,"line":46},[155,174013,150147],{"class":171},[155,174015,2039],{"class":167},[155,174017,165099],{"class":171},[155,174019,317],{"class":167},[155,174021,165104],{"class":732},[155,174023,174024,174026,174028],{"class":157,"line":121},[155,174025,223],{"class":167},[155,174027,33391],{"class":167},[155,174029,174030],{"class":732}," \"一班\"\n",[24,174032,174033],{},"查看关键字：",[146,174035,174037],{"className":148,"code":174036,"language":150,"meta":39,"style":39},"import keyword\n\nprint(keyword.kwlist)\n",[152,174038,174039,174046,174050],{"__ignoreMap":39},[155,174040,174041,174043],{"class":157,"line":158},[155,174042,168],{"class":167},[155,174044,174045],{"class":171}," keyword\n",[155,174047,174048],{"class":157,"line":46},[155,174049,217],{"emptyLinePlaceholder":216},[155,174051,174052,174054],{"class":157,"line":121},[155,174053,15451],{"class":263},[155,174055,174056],{"class":171},"(keyword.kwlist)\n",[24,174058,174059],{},"推荐命名风格：",[146,174061,174063],{"className":148,"code":174062,"language":150,"meta":39,"style":39},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[152,174064,174065,174074,174084],{"__ignoreMap":39},[155,174066,174067,174070,174072],{"class":157,"line":158},[155,174068,174069],{"class":171},"student_name ",[155,174071,317],{"class":167},[155,174073,167916],{"class":732},[155,174075,174076,174079,174081],{"class":157,"line":46},[155,174077,174078],{"class":171},"total_price ",[155,174080,317],{"class":167},[155,174082,174083],{"class":263}," 99.8\n",[155,174085,174086,174089,174091],{"class":157,"line":121},[155,174087,174088],{"class":171},"is_finished ",[155,174090,317],{"class":167},[155,174092,144370],{"class":263},[24,174094,174095],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[20037,174097,69295],{"id":69294},[24,174099,122929,174100,174103],{},[152,174101,174102],{},"type()"," 查看数据类型：",[146,174105,174107],{"className":148,"code":174106,"language":150,"meta":39,"style":39},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[152,174108,174109,174123,174137,174151,174165],{"__ignoreMap":39},[155,174110,174111,174113,174115,174117,174119,174121],{"class":157,"line":158},[155,174112,15451],{"class":263},[155,174114,230],{"class":171},[155,174116,121670],{"class":263},[155,174118,230],{"class":171},[155,174120,20389],{"class":263},[155,174122,1238],{"class":171},[155,174124,174125,174127,174129,174131,174133,174135],{"class":157,"line":46},[155,174126,15451],{"class":263},[155,174128,230],{"class":171},[155,174130,121670],{"class":263},[155,174132,230],{"class":171},[155,174134,20139],{"class":263},[155,174136,1238],{"class":171},[155,174138,174139,174141,174143,174145,174147,174149],{"class":157,"line":121},[155,174140,15451],{"class":263},[155,174142,230],{"class":171},[155,174144,121670],{"class":263},[155,174146,230],{"class":171},[155,174148,25707],{"class":732},[155,174150,1238],{"class":171},[155,174152,174153,174155,174157,174159,174161,174163],{"class":157,"line":180},[155,174154,15451],{"class":263},[155,174156,230],{"class":171},[155,174158,121670],{"class":263},[155,174160,230],{"class":171},[155,174162,1000],{"class":263},[155,174164,1238],{"class":171},[155,174166,174167,174169,174171,174173,174175,174177],{"class":157,"line":194},[155,174168,15451],{"class":263},[155,174170,230],{"class":171},[155,174172,121670],{"class":263},[155,174174,230],{"class":171},[155,174176,114249],{"class":263},[155,174178,1238],{"class":171},[24,174180,174181],{},"输出类似：",[146,174183,174186],{"className":174184,"code":174185,"language":25051,"meta":39},[25049],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[152,174187,174185],{"__ignoreMap":39},[24,174189,28874,174190,125846,174192,174194,174195,174197,174198,41292,174200,174197,174202,174204],{},[152,174191,21267],{},[152,174193,15239],{}," 的子类，",[152,174196,1000],{}," 可以当作 ",[152,174199,329],{},[152,174201,3592],{},[152,174203,1109],{},"，但业务代码中不要滥用。",[146,174206,174208],{"className":148,"code":174207,"language":150,"meta":39,"style":39},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[152,174209,174210,174228],{"__ignoreMap":39},[155,174211,174212,174214,174216,174218,174220,174222,174225],{"class":157,"line":158},[155,174213,15451],{"class":263},[155,174215,230],{"class":171},[155,174217,1000],{"class":263},[155,174219,15186],{"class":167},[155,174221,1277],{"class":263},[155,174223,174224],{"class":171},")   ",[155,174226,174227],{"class":161},"# 2\n",[155,174229,174230,174232,174234,174236,174238,174240,174242],{"class":157,"line":46},[155,174231,15451],{"class":263},[155,174233,230],{"class":171},[155,174235,3592],{"class":263},[155,174237,15186],{"class":167},[155,174239,1277],{"class":263},[155,174241,15433],{"class":171},[155,174243,174244],{"class":161},"# 1\n",[20037,174246,174248],{"id":174247},"_26-类型转换","2.6 类型转换",[24,174250,174251],{},"常用转换函数：",[146,174253,174255],{"className":148,"code":174254,"language":150,"meta":39,"style":39},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[152,174256,174257,174267,174278,174288],{"__ignoreMap":39},[155,174258,174259,174261,174263,174265],{"class":157,"line":158},[155,174260,15239],{"class":263},[155,174262,230],{"class":171},[155,174264,72879],{"class":732},[155,174266,363],{"class":171},[155,174268,174269,174271,174273,174276],{"class":157,"line":46},[155,174270,2833],{"class":263},[155,174272,230],{"class":171},[155,174274,174275],{"class":732},"\"3.14\"",[155,174277,363],{"class":171},[155,174279,174280,174282,174284,174286],{"class":157,"line":121},[155,174281,21215],{"class":263},[155,174283,230],{"class":171},[155,174285,20389],{"class":263},[155,174287,363],{"class":171},[155,174289,174290,174292,174294,174296],{"class":157,"line":180},[155,174291,21267],{"class":263},[155,174293,230],{"class":171},[155,174295,329],{"class":263},[155,174297,363],{"class":171},[24,174299,34960],{},[146,174301,174303],{"className":148,"code":174302,"language":150,"meta":39,"style":39},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[152,174304,174305,174314,174325],{"__ignoreMap":39},[155,174306,174307,174309,174311],{"class":157,"line":158},[155,174308,165109],{"class":171},[155,174310,317],{"class":167},[155,174312,174313],{"class":732}," \"18\"\n",[155,174315,174316,174318,174320,174322],{"class":157,"line":46},[155,174317,165109],{"class":171},[155,174319,317],{"class":167},[155,174321,22269],{"class":263},[155,174323,174324],{"class":171},"(age)\n",[155,174326,174327,174329,174332,174334,174336],{"class":157,"line":121},[155,174328,15451],{"class":263},[155,174330,174331],{"class":171},"(age ",[155,174333,1274],{"class":167},[155,174335,1277],{"class":263},[155,174337,363],{"class":171},[24,174339,174340],{},"输入得到的内容永远是字符串：",[146,174342,174344],{"className":148,"code":174343,"language":150,"meta":39,"style":39},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[152,174345,174346,174362],{"__ignoreMap":39},[155,174347,174348,174351,174353,174355,174357,174360],{"class":157,"line":158},[155,174349,174350],{"class":171},"num ",[155,174352,317],{"class":167},[155,174354,79168],{"class":263},[155,174356,230],{"class":171},[155,174358,174359],{"class":732},"\"请输入数字:\"",[155,174361,363],{"class":171},[155,174363,174364,174366,174368,174370,174373],{"class":157,"line":46},[155,174365,15451],{"class":263},[155,174367,230],{"class":171},[155,174369,121670],{"class":263},[155,174371,174372],{"class":171},"(num))  ",[155,174374,174375],{"class":161},"# str\n",[24,174377,174378],{},"如果要做数学运算，必须转换：",[146,174380,174382],{"className":148,"code":174381,"language":150,"meta":39,"style":39},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[152,174383,174384,174402],{"__ignoreMap":39},[155,174385,174386,174388,174390,174392,174394,174396,174398,174400],{"class":157,"line":158},[155,174387,174350],{"class":171},[155,174389,317],{"class":167},[155,174391,22269],{"class":263},[155,174393,230],{"class":171},[155,174395,72384],{"class":263},[155,174397,230],{"class":171},[155,174399,174359],{"class":732},[155,174401,1238],{"class":171},[155,174403,174404,174406,174408,174410,174412],{"class":157,"line":46},[155,174405,15451],{"class":263},[155,174407,15242],{"class":171},[155,174409,1274],{"class":167},[155,174411,21925],{"class":263},[155,174413,363],{"class":171},[24,174415,174416],{},"常见错误：",[146,174418,174420],{"className":148,"code":174419,"language":150,"meta":39,"style":39},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[152,174421,174422,174435],{"__ignoreMap":39},[155,174423,174424,174426,174428,174430,174432],{"class":157,"line":158},[155,174425,15239],{"class":263},[155,174427,230],{"class":171},[155,174429,174275],{"class":732},[155,174431,174224],{"class":171},[155,174433,174434],{"class":161},"# 错误\n",[155,174436,174437,174439,174441,174444,174447],{"class":157,"line":46},[155,174438,15239],{"class":263},[155,174440,230],{"class":171},[155,174442,174443],{"class":732},"\"abc\"",[155,174445,174446],{"class":171},")    ",[155,174448,174434],{"class":161},[24,174450,174451],{},"正确写法：",[146,174453,174455],{"className":148,"code":174454,"language":150,"meta":39,"style":39},"num = float(\"3.14\")\n",[152,174456,174457],{"__ignoreMap":39},[155,174458,174459,174461,174463,174465,174467,174469],{"class":157,"line":158},[155,174460,174350],{"class":171},[155,174462,317],{"class":167},[155,174464,128360],{"class":263},[155,174466,230],{"class":171},[155,174468,174275],{"class":732},[155,174470,363],{"class":171},[20037,174472,174474],{"id":174473},"_27-运算符","2.7 运算符",[14,174476,174478],{"id":174477},"_271-算术运算符","2.7.1 算术运算符",[20222,174480,174481,174492],{},[20225,174482,174483],{},[20228,174484,174485,174488,174490],{},[20231,174486,174487],{},"运算符",[20231,174489,45659],{},[20231,174491,47281],{},[20269,174493,174494,174508,174522,174536,174550,174564,174578],{},[20228,174495,174496,174500,174503],{},[20274,174497,174498],{},[152,174499,1274],{},[20274,174501,174502],{},"加法",[20274,174504,174505],{},[152,174506,174507],{},"1 + 2",[20228,174509,174510,174514,174517],{},[20274,174511,174512],{},[152,174513,2039],{},[20274,174515,174516],{},"减法",[20274,174518,174519],{},[152,174520,174521],{},"5 - 3",[20228,174523,174524,174528,174531],{},[20274,174525,174526],{},[152,174527,1563],{},[20274,174529,174530],{},"乘法",[20274,174532,174533],{},[152,174534,174535],{},"2 * 3",[20228,174537,174538,174542,174545],{},[20274,174539,174540],{},[152,174541,2028],{},[20274,174543,174544],{},"除法，结果是浮点数",[20274,174546,174547],{},[152,174548,174549],{},"5 \u002F 2",[20228,174551,174552,174556,174559],{},[20274,174553,174554],{},[152,174555,2929],{},[20274,174557,174558],{},"整除",[20274,174560,174561],{},[152,174562,174563],{},"5 \u002F\u002F 2",[20228,174565,174566,174570,174573],{},[20274,174567,174568],{},[152,174569,2938],{},[20274,174571,174572],{},"取余",[20274,174574,174575],{},[152,174576,174577],{},"5 % 2",[20228,174579,174580,174584,174587],{},[20274,174581,174582],{},[152,174583,17347],{},[20274,174585,174586],{},"幂运算",[20274,174588,174589],{},[152,174590,174591],{},"2 ** 3",[24,174593,34960],{},[146,174595,174597],{"className":148,"code":174596,"language":150,"meta":39,"style":39},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[152,174598,174599,174617,174634,174651],{"__ignoreMap":39},[155,174600,174601,174603,174605,174607,174610,174612,174614],{"class":157,"line":158},[155,174602,15451],{"class":263},[155,174604,230],{"class":171},[155,174606,350],{"class":263},[155,174608,174609],{"class":167}," \u002F",[155,174611,34580],{"class":263},[155,174613,174224],{"class":171},[155,174615,174616],{"class":161},"# 2.5\n",[155,174618,174619,174621,174623,174625,174628,174630,174632],{"class":157,"line":46},[155,174620,15451],{"class":263},[155,174622,230],{"class":171},[155,174624,350],{"class":263},[155,174626,174627],{"class":167}," \u002F\u002F",[155,174629,34580],{"class":263},[155,174631,15433],{"class":171},[155,174633,174227],{"class":161},[155,174635,174636,174638,174640,174642,174645,174647,174649],{"class":157,"line":121},[155,174637,15451],{"class":263},[155,174639,230],{"class":171},[155,174641,350],{"class":263},[155,174643,174644],{"class":167}," %",[155,174646,34580],{"class":263},[155,174648,174224],{"class":171},[155,174650,174244],{"class":161},[155,174652,174653,174655,174657,174659,174662,174664,174666],{"class":157,"line":180},[155,174654,15451],{"class":263},[155,174656,230],{"class":171},[155,174658,360],{"class":263},[155,174660,174661],{"class":167}," **",[155,174663,96633],{"class":263},[155,174665,15433],{"class":171},[155,174667,174668],{"class":161},"# 8\n",[14,174670,174672],{"id":174671},"_272-赋值运算符","2.7.2 赋值运算符",[146,174674,174676],{"className":148,"code":174675,"language":150,"meta":39,"style":39},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[152,174677,174678,174686,174694,174702,174710],{"__ignoreMap":39},[155,174679,174680,174682,174684],{"class":157,"line":158},[155,174681,174350],{"class":171},[155,174683,317],{"class":167},[155,174685,76991],{"class":263},[155,174687,174688,174690,174692],{"class":157,"line":46},[155,174689,174350],{"class":171},[155,174691,2351],{"class":167},[155,174693,72990],{"class":263},[155,174695,174696,174698,174700],{"class":157,"line":121},[155,174697,174350],{"class":171},[155,174699,168815],{"class":167},[155,174701,17350],{"class":263},[155,174703,174704,174706,174708],{"class":157,"line":180},[155,174705,174350],{"class":171},[155,174707,155711],{"class":167},[155,174709,138599],{"class":263},[155,174711,174712,174714,174717],{"class":157,"line":194},[155,174713,174350],{"class":171},[155,174715,174716],{"class":167},"\u002F=",[155,174718,17350],{"class":263},[24,174720,174721],{},"等价关系：",[146,174723,174725],{"className":148,"code":174724,"language":150,"meta":39,"style":39},"num += 1\nnum = num + 1\n",[152,174726,174727,174735],{"__ignoreMap":39},[155,174728,174729,174731,174733],{"class":157,"line":158},[155,174730,174350],{"class":171},[155,174732,2351],{"class":167},[155,174734,74262],{"class":263},[155,174736,174737,174739,174741,174744,174746],{"class":157,"line":46},[155,174738,174350],{"class":171},[155,174740,317],{"class":167},[155,174742,174743],{"class":171}," num ",[155,174745,1274],{"class":167},[155,174747,74262],{"class":263},[24,174749,174750,174751,119581,174754,48174],{},"Python 没有 ",[152,174752,174753],{},"num++",[152,174755,174756],{},"num--",[14,174758,174760],{"id":174759},"_273-比较运算符","2.7.3 比较运算符",[24,174762,174763],{},"比较运算结果是布尔值。",[146,174765,174767],{"className":148,"code":174766,"language":150,"meta":39,"style":39},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[152,174768,174769,174783,174798,174812],{"__ignoreMap":39},[155,174770,174771,174773,174775,174777,174779,174781],{"class":157,"line":158},[155,174772,15451],{"class":263},[155,174774,230],{"class":171},[155,174776,565],{"class":263},[155,174778,46011],{"class":167},[155,174780,22035],{"class":263},[155,174782,363],{"class":171},[155,174784,174785,174787,174789,174791,174794,174796],{"class":157,"line":46},[155,174786,15451],{"class":263},[155,174788,230],{"class":171},[155,174790,565],{"class":263},[155,174792,174793],{"class":167}," >=",[155,174795,21925],{"class":263},[155,174797,363],{"class":171},[155,174799,174800,174802,174804,174806,174808,174810],{"class":157,"line":121},[155,174801,15451],{"class":263},[155,174803,230],{"class":171},[155,174805,565],{"class":263},[155,174807,120122],{"class":167},[155,174809,21970],{"class":263},[155,174811,363],{"class":171},[155,174813,174814,174816,174818,174820,174823,174825],{"class":157,"line":180},[155,174815,15451],{"class":263},[155,174817,230],{"class":171},[155,174819,565],{"class":263},[155,174821,174822],{"class":167}," !=",[155,174824,21970],{"class":263},[155,174826,363],{"class":171},[24,174828,174829,174830,174832,174833,48174],{},"注意：判断相等用 ",[152,174831,729],{},"，赋值用 ",[152,174834,317],{},[146,174836,174838],{"className":148,"code":174837,"language":150,"meta":39,"style":39},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[152,174839,174840,174852],{"__ignoreMap":39},[155,174841,174842,174844,174846,174849],{"class":157,"line":158},[155,174843,165109],{"class":171},[155,174845,317],{"class":167},[155,174847,174848],{"class":263}," 18",[155,174850,174851],{"class":161},"       # 赋值\n",[155,174853,174854,174856,174858,174860],{"class":157,"line":46},[155,174855,165109],{"class":171},[155,174857,729],{"class":167},[155,174859,174848],{"class":263},[155,174861,174862],{"class":161},"      # 判断是否相等\n",[14,174864,174866],{"id":174865},"_274-逻辑运算符","2.7.4 逻辑运算符",[20222,174868,174869,174877],{},[20225,174870,174871],{},[20228,174872,174873,174875],{},[20231,174874,174487],{},[20231,174876,45659],{},[20269,174878,174879,174888,174897],{},[20228,174880,174881,174885],{},[20274,174882,174883],{},[152,174884,50245],{},[20274,174886,174887],{},"并且",[20228,174889,174890,174894],{},[20274,174891,174892],{},[152,174893,133653],{},[20274,174895,174896],{},"或者",[20228,174898,174899,174904],{},[20274,174900,174901],{},[152,174902,174903],{},"not",[20274,174905,174906],{},"取反",[146,174908,174910],{"className":148,"code":174909,"language":150,"meta":39,"style":39},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[152,174911,174912,174920,174929,174933,174948,174962],{"__ignoreMap":39},[155,174913,174914,174916,174918],{"class":157,"line":158},[155,174915,165109],{"class":171},[155,174917,317],{"class":167},[155,174919,106628],{"class":263},[155,174921,174922,174925,174927],{"class":157,"line":46},[155,174923,174924],{"class":171},"has_ticket ",[155,174926,317],{"class":167},[155,174928,172162],{"class":263},[155,174930,174931],{"class":157,"line":121},[155,174932,217],{"emptyLinePlaceholder":216},[155,174934,174935,174937,174939,174941,174943,174945],{"class":157,"line":180},[155,174936,15451],{"class":263},[155,174938,174331],{"class":171},[155,174940,21607],{"class":167},[155,174942,174848],{"class":263},[155,174944,138992],{"class":167},[155,174946,174947],{"class":171}," has_ticket)\n",[155,174949,174950,174952,174954,174956,174958,174960],{"class":157,"line":194},[155,174951,15451],{"class":263},[155,174953,174331],{"class":171},[155,174955,20959],{"class":167},[155,174957,174848],{"class":263},[155,174959,132764],{"class":167},[155,174961,174947],{"class":171},[155,174963,174964,174966,174968,174970],{"class":157,"line":200},[155,174965,15451],{"class":263},[155,174967,230],{"class":171},[155,174969,174903],{"class":167},[155,174971,174947],{"class":171},[20037,174973,174975],{"id":174974},"_28-字符串定义","2.8 字符串定义",[24,174977,174978],{},"三种常见写法：",[146,174980,174982],{"className":148,"code":174981,"language":150,"meta":39,"style":39},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[152,174983,174984,174994,175003,175013],{"__ignoreMap":39},[155,174985,174986,174989,174991],{"class":157,"line":158},[155,174987,174988],{"class":171},"name1 ",[155,174990,317],{"class":167},[155,174992,174993],{"class":732}," '小明'\n",[155,174995,174996,174999,175001],{"class":157,"line":46},[155,174997,174998],{"class":171},"name2 ",[155,175000,317],{"class":167},[155,175002,167916],{"class":732},[155,175004,175005,175008,175010],{"class":157,"line":121},[155,175006,175007],{"class":171},"text ",[155,175009,317],{"class":167},[155,175011,175012],{"class":732}," \"\"\"这是多行字符串\n",[155,175014,175015],{"class":157,"line":180},[155,175016,175017],{"class":732},"可以换行\"\"\"\n",[24,175019,175020],{},"字符串中包含引号：",[146,175022,175024],{"className":148,"code":175023,"language":150,"meta":39,"style":39},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[152,175025,175026,175036,175046],{"__ignoreMap":39},[155,175027,175028,175031,175033],{"class":157,"line":158},[155,175029,175030],{"class":171},"msg ",[155,175032,317],{"class":167},[155,175034,175035],{"class":732}," \"他说:'你好'\"\n",[155,175037,175038,175041,175043],{"class":157,"line":46},[155,175039,175040],{"class":171},"msg2 ",[155,175042,317],{"class":167},[155,175044,175045],{"class":732}," '他说:\"你好\"'\n",[155,175047,175048,175051,175053,175056,175059,175062,175064],{"class":157,"line":121},[155,175049,175050],{"class":171},"msg3 ",[155,175052,317],{"class":167},[155,175054,175055],{"class":732}," \"他说:",[155,175057,175058],{"class":263},"\\\"",[155,175060,175061],{"class":732},"你好",[155,175063,175058],{"class":263},[155,175065,17610],{"class":732},[24,175067,175068],{},"常见转义字符：",[20222,175070,175071,175080],{},[20225,175072,175073],{},[20228,175074,175075,175078],{},[20231,175076,175077],{},"写法",[20231,175079,119263],{},[20269,175081,175082,175092,175101,175111,175120],{},[20228,175083,175084,175089],{},[20274,175085,175086],{},[152,175087,175088],{},"\\n",[20274,175090,175091],{},"换行",[20228,175093,175094,175098],{},[20274,175095,175096],{},[152,175097,21146],{},[20274,175099,175100],{},"制表符",[20228,175102,175103,175108],{},[20274,175104,175105],{},[152,175106,175107],{},"\\\\",[20274,175109,175110],{},"反斜杠",[20228,175112,175113,175117],{},[20274,175114,175115],{},[152,175116,175058],{},[20274,175118,175119],{},"双引号",[20228,175121,175122,175127],{},[20274,175123,175124],{},[152,175125,175126],{},"\\'",[20274,175128,175129],{},"单引号",[20037,175131,175133],{"id":175132},"_29-字符串拼接","2.9 字符串拼接",[146,175135,175137],{"className":148,"code":175136,"language":150,"meta":39,"style":39},"name = \"小明\"\nprint(\"你好，\" + name)\n",[152,175138,175139,175147],{"__ignoreMap":39},[155,175140,175141,175143,175145],{"class":157,"line":158},[155,175142,165099],{"class":171},[155,175144,317],{"class":167},[155,175146,167916],{"class":732},[155,175148,175149,175151,175153,175156,175158],{"class":157,"line":46},[155,175150,15451],{"class":263},[155,175152,230],{"class":171},[155,175154,175155],{"class":732},"\"你好，\"",[155,175157,15186],{"class":167},[155,175159,175160],{"class":171}," name)\n",[24,175162,175163],{},"字符串只能和字符串拼接：",[146,175165,175167],{"className":148,"code":175166,"language":150,"meta":39,"style":39},"age = 18\nprint(\"年龄:\" + str(age))\n",[152,175168,175169,175177],{"__ignoreMap":39},[155,175170,175171,175173,175175],{"class":157,"line":158},[155,175172,165109],{"class":171},[155,175174,317],{"class":167},[155,175176,165114],{"class":263},[155,175178,175179,175181,175183,175185,175187,175189],{"class":157,"line":46},[155,175180,15451],{"class":263},[155,175182,230],{"class":171},[155,175184,165080],{"class":732},[155,175186,15186],{"class":167},[155,175188,92482],{"class":263},[155,175190,175191],{"class":171},"(age))\n",[24,175193,175194],{},"更推荐使用格式化字符串。",[20037,175196,175198],{"id":175197},"_210-字符串格式化","2.10 字符串格式化",[14,175200,175202],{"id":175201},"_2101-百分号格式化","2.10.1 百分号格式化",[146,175204,175206],{"className":148,"code":175205,"language":150,"meta":39,"style":39},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[152,175207,175208,175216,175224,175233,175237],{"__ignoreMap":39},[155,175209,175210,175212,175214],{"class":157,"line":158},[155,175211,165099],{"class":171},[155,175213,317],{"class":167},[155,175215,167916],{"class":732},[155,175217,175218,175220,175222],{"class":157,"line":46},[155,175219,165109],{"class":171},[155,175221,317],{"class":167},[155,175223,165114],{"class":263},[155,175225,175226,175228,175230],{"class":157,"line":121},[155,175227,173921],{"class":171},[155,175229,317],{"class":167},[155,175231,175232],{"class":263}," 95.5\n",[155,175234,175235],{"class":157,"line":180},[155,175236,217],{"emptyLinePlaceholder":216},[155,175238,175239,175241,175243,175246,175249,175252,175255,175258,175261,175263,175265],{"class":157,"line":194},[155,175240,15451],{"class":263},[155,175242,230],{"class":171},[155,175244,175245],{"class":732},"\"姓名:",[155,175247,175248],{"class":263},"%s",[155,175250,175251],{"class":732}," 年龄:",[155,175253,175254],{"class":263},"%d",[155,175256,175257],{"class":732}," 分数:",[155,175259,175260],{"class":263},"%.1f",[155,175262,2033],{"class":732},[155,175264,174644],{"class":167},[155,175266,175267],{"class":171}," (name, age, score))\n",[24,175269,175270],{},"常用占位符：",[20222,175272,175273,175282],{},[20225,175274,175275],{},[20228,175276,175277,175280],{},[20231,175278,175279],{},"占位符",[20231,175281,45659],{},[20269,175283,175284,175292,175300],{},[20228,175285,175286,175290],{},[20274,175287,175288],{},[152,175289,175248],{},[20274,175291,173787],{},[20228,175293,175294,175298],{},[20274,175295,175296],{},[152,175297,175254],{},[20274,175299,173765],{},[20228,175301,175302,175307],{},[20274,175303,175304],{},[152,175305,175306],{},"%f",[20274,175308,173776],{},[24,175310,175311],{},"精度控制：",[146,175313,175315],{"className":148,"code":175314,"language":150,"meta":39,"style":39},"price = 12.3456\nprint(\"%.2f\" % price)\n",[152,175316,175317,175326],{"__ignoreMap":39},[155,175318,175319,175321,175323],{"class":157,"line":158},[155,175320,165244],{"class":171},[155,175322,317],{"class":167},[155,175324,175325],{"class":263}," 12.3456\n",[155,175327,175328,175330,175332,175334,175337,175339,175341],{"class":157,"line":46},[155,175329,15451],{"class":263},[155,175331,230],{"class":171},[155,175333,2033],{"class":732},[155,175335,175336],{"class":263},"%.2f",[155,175338,2033],{"class":732},[155,175340,174644],{"class":167},[155,175342,175343],{"class":171}," price)\n",[14,175345,175347],{"id":175346},"_2102-format方法","2.10.2 format方法",[146,175349,175351],{"className":148,"code":175350,"language":150,"meta":39,"style":39},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[152,175352,175353,175361,175369,175373,175392,175412],{"__ignoreMap":39},[155,175354,175355,175357,175359],{"class":157,"line":158},[155,175356,165099],{"class":171},[155,175358,317],{"class":167},[155,175360,167916],{"class":732},[155,175362,175363,175365,175367],{"class":157,"line":46},[155,175364,165109],{"class":171},[155,175366,317],{"class":167},[155,175368,165114],{"class":263},[155,175370,175371],{"class":157,"line":121},[155,175372,217],{"emptyLinePlaceholder":216},[155,175374,175375,175377,175379,175381,175383,175385,175387,175389],{"class":157,"line":180},[155,175376,15451],{"class":263},[155,175378,230],{"class":171},[155,175380,175245],{"class":732},[155,175382,2025],{"class":263},[155,175384,175251],{"class":732},[155,175386,2025],{"class":263},[155,175388,2033],{"class":732},[155,175390,175391],{"class":171},".format(name, age))\n",[155,175393,175394,175396,175398,175400,175403,175405,175408,175410],{"class":157,"line":194},[155,175395,15451],{"class":263},[155,175397,230],{"class":171},[155,175399,175245],{"class":732},[155,175401,175402],{"class":263},"{0}",[155,175404,175251],{"class":732},[155,175406,175407],{"class":263},"{1}",[155,175409,2033],{"class":732},[155,175411,175391],{"class":171},[155,175413,175414,175416,175418,175420,175423,175425,175428,175430,175433,175435,175437,175440,175442,175444],{"class":157,"line":200},[155,175415,15451],{"class":263},[155,175417,230],{"class":171},[155,175419,175245],{"class":732},[155,175421,175422],{"class":263},"{name}",[155,175424,175251],{"class":732},[155,175426,175427],{"class":263},"{age}",[155,175429,2033],{"class":732},[155,175431,175432],{"class":171},".format(",[155,175434,98373],{"class":323},[155,175436,317],{"class":167},[155,175438,175439],{"class":171},"name, ",[155,175441,88784],{"class":323},[155,175443,317],{"class":167},[155,175445,175446],{"class":171},"age))\n",[14,175448,175450],{"id":175449},"_2103-f-string","2.10.3 f-string",[24,175452,175453],{},"推荐写法：",[146,175455,175457],{"className":148,"code":175456,"language":150,"meta":39,"style":39},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[152,175458,175459,175467,175475,175483,175487],{"__ignoreMap":39},[155,175460,175461,175463,175465],{"class":157,"line":158},[155,175462,165099],{"class":171},[155,175464,317],{"class":167},[155,175466,167916],{"class":732},[155,175468,175469,175471,175473],{"class":157,"line":46},[155,175470,165109],{"class":171},[155,175472,317],{"class":167},[155,175474,165114],{"class":263},[155,175476,175477,175479,175481],{"class":157,"line":121},[155,175478,173921],{"class":171},[155,175480,317],{"class":167},[155,175482,175232],{"class":263},[155,175484,175485],{"class":157,"line":180},[155,175486,217],{"emptyLinePlaceholder":216},[155,175488,175489,175491,175493,175495,175497,175499,175501,175503,175505,175507,175509,175511,175513,175515,175518,175521,175523,175525],{"class":157,"line":194},[155,175490,15451],{"class":263},[155,175492,230],{"class":171},[155,175494,17391],{"class":167},[155,175496,175245],{"class":732},[155,175498,2705],{"class":263},[155,175500,98373],{"class":171},[155,175502,2711],{"class":263},[155,175504,175251],{"class":732},[155,175506,2705],{"class":263},[155,175508,88784],{"class":171},[155,175510,2711],{"class":263},[155,175512,175257],{"class":732},[155,175514,2705],{"class":263},[155,175516,175517],{"class":171},"score",[155,175519,175520],{"class":167},":.1f",[155,175522,2711],{"class":263},[155,175524,2033],{"class":732},[155,175526,363],{"class":171},[24,175528,175529],{},"表达式也可以放进去：",[146,175531,175533],{"className":148,"code":175532,"language":150,"meta":39,"style":39},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[152,175534,175535,175543,175551],{"__ignoreMap":39},[155,175536,175537,175539,175541],{"class":157,"line":158},[155,175538,165244],{"class":171},[155,175540,317],{"class":167},[155,175542,165249],{"class":263},[155,175544,175545,175547,175549],{"class":157,"line":46},[155,175546,165254],{"class":171},[155,175548,317],{"class":167},[155,175550,72990],{"class":263},[155,175552,175553,175555,175557,175559,175562,175564,175566,175568,175571,175573,175576],{"class":157,"line":121},[155,175554,15451],{"class":263},[155,175556,230],{"class":171},[155,175558,17391],{"class":167},[155,175560,175561],{"class":732},"\"总价:",[155,175563,2705],{"class":263},[155,175565,165244],{"class":171},[155,175567,1563],{"class":167},[155,175569,175570],{"class":171}," count",[155,175572,2711],{"class":263},[155,175574,175575],{"class":732},"元\"",[155,175577,363],{"class":171},[20037,175579,175581],{"id":175580},"_211-input输入","2.11 input输入",[24,175583,175584,175587],{},[152,175585,175586],{},"input()"," 会暂停程序，等待用户输入。",[146,175589,175591],{"className":148,"code":175590,"language":150,"meta":39,"style":39},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[152,175592,175593,175607],{"__ignoreMap":39},[155,175594,175595,175597,175599,175601,175603,175605],{"class":157,"line":158},[155,175596,165099],{"class":171},[155,175598,317],{"class":167},[155,175600,79168],{"class":263},[155,175602,230],{"class":171},[155,175604,170942],{"class":732},[155,175606,363],{"class":171},[155,175608,175609,175611,175613,175615,175618,175620,175622,175624,175626],{"class":157,"line":46},[155,175610,15451],{"class":263},[155,175612,230],{"class":171},[155,175614,17391],{"class":167},[155,175616,175617],{"class":732},"\"你好，",[155,175619,2705],{"class":263},[155,175621,98373],{"class":171},[155,175623,2711],{"class":263},[155,175625,2033],{"class":732},[155,175627,363],{"class":171},[24,175629,175630],{},"输入整数：",[146,175632,175634],{"className":148,"code":175633,"language":150,"meta":39,"style":39},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[152,175635,175636,175654],{"__ignoreMap":39},[155,175637,175638,175640,175642,175644,175646,175648,175650,175652],{"class":157,"line":158},[155,175639,165109],{"class":171},[155,175641,317],{"class":167},[155,175643,22269],{"class":263},[155,175645,230],{"class":171},[155,175647,72384],{"class":263},[155,175649,230],{"class":171},[155,175651,170957],{"class":732},[155,175653,1238],{"class":171},[155,175655,175656,175658,175660,175662,175665,175667,175669,175671,175674,175676],{"class":157,"line":46},[155,175657,15451],{"class":263},[155,175659,230],{"class":171},[155,175661,17391],{"class":167},[155,175663,175664],{"class":732},"\"明年你",[155,175666,2705],{"class":263},[155,175668,165109],{"class":171},[155,175670,1274],{"class":167},[155,175672,175673],{"class":263}," 1}",[155,175675,167967],{"class":732},[155,175677,363],{"class":171},[24,175679,175680],{},"输入小数：",[146,175682,175684],{"className":148,"code":175683,"language":150,"meta":39,"style":39},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[152,175685,175686,175705],{"__ignoreMap":39},[155,175687,175688,175690,175692,175694,175696,175698,175700,175703],{"class":157,"line":158},[155,175689,173894],{"class":171},[155,175691,317],{"class":167},[155,175693,128360],{"class":263},[155,175695,230],{"class":171},[155,175697,72384],{"class":263},[155,175699,230],{"class":171},[155,175701,175702],{"class":732},"\"请输入身高:\"",[155,175704,1238],{"class":171},[155,175706,175707,175709,175711,175713,175716,175718,175720,175723,175725,175728],{"class":157,"line":46},[155,175708,15451],{"class":263},[155,175710,230],{"class":171},[155,175712,17391],{"class":167},[155,175714,175715],{"class":732},"\"身高:",[155,175717,2705],{"class":263},[155,175719,44773],{"class":171},[155,175721,175722],{"class":167},":.2f",[155,175724,2711],{"class":263},[155,175726,175727],{"class":732},"米\"",[155,175729,363],{"class":171},[20037,175731,175733],{"id":175732},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[24,175735,141855],{},[28,175737,175738,175741,175744,175747],{},[31,175739,175740],{},"输入商品单价。",[31,175742,175743],{},"输入购买数量。",[31,175745,175746],{},"输入折扣，例如 0.8 表示八折。",[31,175748,175749],{},"输出最终金额，保留两位小数。",[24,175751,29864],{},[146,175753,175755],{"className":148,"code":175754,"language":150,"meta":39,"style":39},"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",[152,175756,175757,175776,175795,175815,175819,175839,175843,175866,175887,175909],{"__ignoreMap":39},[155,175758,175759,175761,175763,175765,175767,175769,175771,175774],{"class":157,"line":158},[155,175760,165244],{"class":171},[155,175762,317],{"class":167},[155,175764,128360],{"class":263},[155,175766,230],{"class":171},[155,175768,72384],{"class":263},[155,175770,230],{"class":171},[155,175772,175773],{"class":732},"\"请输入商品单价:\"",[155,175775,1238],{"class":171},[155,175777,175778,175780,175782,175784,175786,175788,175790,175793],{"class":157,"line":46},[155,175779,165254],{"class":171},[155,175781,317],{"class":167},[155,175783,22269],{"class":263},[155,175785,230],{"class":171},[155,175787,72384],{"class":263},[155,175789,230],{"class":171},[155,175791,175792],{"class":732},"\"请输入购买数量:\"",[155,175794,1238],{"class":171},[155,175796,175797,175800,175802,175804,175806,175808,175810,175813],{"class":157,"line":121},[155,175798,175799],{"class":171},"discount ",[155,175801,317],{"class":167},[155,175803,128360],{"class":263},[155,175805,230],{"class":171},[155,175807,72384],{"class":263},[155,175809,230],{"class":171},[155,175811,175812],{"class":732},"\"请输入折扣:\"",[155,175814,1238],{"class":171},[155,175816,175817],{"class":157,"line":180},[155,175818,217],{"emptyLinePlaceholder":216},[155,175820,175821,175824,175826,175829,175831,175834,175836],{"class":157,"line":194},[155,175822,175823],{"class":171},"total ",[155,175825,317],{"class":167},[155,175827,175828],{"class":171}," price ",[155,175830,1563],{"class":167},[155,175832,175833],{"class":171}," count ",[155,175835,1563],{"class":167},[155,175837,175838],{"class":171}," discount\n",[155,175840,175841],{"class":157,"line":200},[155,175842,217],{"emptyLinePlaceholder":216},[155,175844,175845,175847,175849,175851,175854,175856,175858,175860,175862,175864],{"class":157,"line":213},[155,175846,15451],{"class":263},[155,175848,230],{"class":171},[155,175850,17391],{"class":167},[155,175852,175853],{"class":732},"\"商品单价:",[155,175855,2705],{"class":263},[155,175857,98378],{"class":171},[155,175859,175722],{"class":167},[155,175861,2711],{"class":263},[155,175863,2033],{"class":732},[155,175865,363],{"class":171},[155,175867,175868,175870,175872,175874,175877,175879,175881,175883,175885],{"class":157,"line":220},[155,175869,15451],{"class":263},[155,175871,230],{"class":171},[155,175873,17391],{"class":167},[155,175875,175876],{"class":732},"\"购买数量:",[155,175878,2705],{"class":263},[155,175880,102997],{"class":171},[155,175882,2711],{"class":263},[155,175884,2033],{"class":732},[155,175886,363],{"class":171},[155,175888,175889,175891,175893,175895,175898,175900,175903,175905,175907],{"class":157,"line":245},[155,175890,15451],{"class":263},[155,175892,230],{"class":171},[155,175894,17391],{"class":167},[155,175896,175897],{"class":732},"\"折扣:",[155,175899,2705],{"class":263},[155,175901,175902],{"class":171},"discount",[155,175904,2711],{"class":263},[155,175906,2033],{"class":732},[155,175908,363],{"class":171},[155,175910,175911,175913,175915,175917,175920,175922,175925,175927,175929,175931],{"class":157,"line":251},[155,175912,15451],{"class":263},[155,175914,230],{"class":171},[155,175916,17391],{"class":167},[155,175918,175919],{"class":732},"\"应付金额:",[155,175921,2705],{"class":263},[155,175923,175924],{"class":171},"total",[155,175926,175722],{"class":167},[155,175928,2711],{"class":263},[155,175930,175575],{"class":732},[155,175932,363],{"class":171},[20037,175934,175936],{"id":175935},"_213-易错点","2.13 易错点",[28,175938,175939,175944,175950,175958,175961],{},[31,175940,175941,175943],{},[152,175942,175586],{}," 的结果是字符串，做运算前要转换。",[31,175945,175946,175947,48174],{},"字符串拼接时，数字要先 ",[152,175948,175949],{},"str()",[31,175951,175952,175954,175955,175957],{},[152,175953,317],{}," 是赋值，",[152,175956,729],{}," 是比较。",[31,175959,175960],{},"Python 没有自增自减运算符。",[31,175962,175963],{},"浮点数计算可能有精度误差：",[146,175965,175967],{"className":148,"code":175966,"language":150,"meta":39,"style":39},"print(0.1 + 0.2)\n",[152,175968,175969],{"__ignoreMap":39},[155,175970,175971,175973,175975,175977,175979,175982],{"class":157,"line":158},[155,175972,15451],{"class":263},[155,175974,230],{"class":171},[155,175976,104773],{"class":263},[155,175978,15186],{"class":167},[155,175980,175981],{"class":263}," 0.2",[155,175983,363],{"class":171},[24,175985,175986,175987,175990],{},"金额计算如果要求严格，可以后续学习 ",[152,175988,175989],{},"decimal"," 模块。",[20037,175992,175994],{"id":175993},"_214-本章练习","2.14 本章练习",[28,175996,175997,176000,176003,176006,176009],{},[31,175998,175999],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[31,176001,176002],{},"输入圆的半径，计算面积，保留两位小数。",[31,176004,176005],{},"输入工资和奖金，计算总收入。",[31,176007,176008],{},"输入摄氏温度，转换为华氏温度。",[31,176010,176011],{},"写一个 BMI 计算程序：",[146,176013,176016],{"className":176014,"code":176015,"language":25051,"meta":39},[25049],"BMI = 体重kg \u002F 身高m ** 2\n",[152,176017,176015],{"__ignoreMap":39},[20011,176019,176020],{},"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":39,"searchDepth":46,"depth":46,"links":176022},[176023,176024,176025,176026,176027,176028,176029,176035,176036,176037,176042,176043,176044,176045],{"id":173584,"depth":46,"text":173585},{"id":173693,"depth":46,"text":173694},{"id":173864,"depth":46,"text":173865},{"id":173941,"depth":46,"text":173942},{"id":69294,"depth":46,"text":69295},{"id":174247,"depth":46,"text":174248},{"id":174473,"depth":46,"text":174474,"children":176030},[176031,176032,176033,176034],{"id":174477,"depth":121,"text":174478},{"id":174671,"depth":121,"text":174672},{"id":174759,"depth":121,"text":174760},{"id":174865,"depth":121,"text":174866},{"id":174974,"depth":46,"text":174975},{"id":175132,"depth":46,"text":175133},{"id":175197,"depth":46,"text":175198,"children":176038},[176039,176040,176041],{"id":175201,"depth":121,"text":175202},{"id":175346,"depth":121,"text":175347},{"id":175449,"depth":121,"text":175450},{"id":175580,"depth":46,"text":175581},{"id":175732,"depth":46,"text":175733},{"id":175935,"depth":46,"text":175936},{"id":175993,"depth":46,"text":175994},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":173576,"description":20020},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":176052,"title":176053,"body":176054,"description":20020,"extension":20021,"meta":177690,"navigation":216,"path":177691,"seo":177692,"stem":177693,"__hash__":177694},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":176055,"toc":177671},[176056,176059,176063,176066,176081,176084,176112,176116,176166,176168,176184,176187,176213,176216,176220,176287,176290,176306,176310,176313,176431,176434,176441,176490,176496,176500,176503,176616,176619,176623,176627,176630,176680,176684,176687,176737,176741,176744,176782,176786,176789,176835,176838,176873,176877,176882,176885,176931,176933,177000,177004,177010,177121,177130,177134,177136,177147,177149,177315,177319,177321,177335,177337,177551,177555,177574,177591,177594,177640,177644,177668],[10,176057,176053],{"id":176058},"_3-判断语句",[20037,176060,176062],{"id":176061},"_31-布尔值","3.1 布尔值",[24,176064,176065],{},"判断语句依赖布尔值：",[146,176067,176069],{"className":148,"code":176068,"language":150,"meta":39,"style":39},"True\nFalse\n",[152,176070,176071,176076],{"__ignoreMap":39},[155,176072,176073],{"class":157,"line":158},[155,176074,176075],{"class":263},"True\n",[155,176077,176078],{"class":157,"line":46},[155,176079,176080],{"class":263},"False\n",[24,176082,176083],{},"比较表达式会产生布尔值：",[146,176085,176087],{"className":148,"code":176086,"language":150,"meta":39,"style":39},"age = 18\nprint(age >= 18)  # True\n",[152,176088,176089,176097],{"__ignoreMap":39},[155,176090,176091,176093,176095],{"class":157,"line":158},[155,176092,165109],{"class":171},[155,176094,317],{"class":167},[155,176096,165114],{"class":263},[155,176098,176099,176101,176103,176105,176107,176109],{"class":157,"line":46},[155,176100,15451],{"class":263},[155,176102,174331],{"class":171},[155,176104,21607],{"class":167},[155,176106,174848],{"class":263},[155,176108,15433],{"class":171},[155,176110,176111],{"class":161},"# True\n",[20037,176113,176115],{"id":176114},"_32-if基础语法","3.2 if基础语法",[146,176117,176119],{"className":148,"code":176118,"language":150,"meta":39,"style":39},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[152,176120,176121,176139,176143,176155],{"__ignoreMap":39},[155,176122,176123,176125,176127,176129,176131,176133,176135,176137],{"class":157,"line":158},[155,176124,165109],{"class":171},[155,176126,317],{"class":167},[155,176128,22269],{"class":263},[155,176130,230],{"class":171},[155,176132,72384],{"class":263},[155,176134,230],{"class":171},[155,176136,170957],{"class":732},[155,176138,1238],{"class":171},[155,176140,176141],{"class":157,"line":46},[155,176142,217],{"emptyLinePlaceholder":216},[155,176144,176145,176147,176149,176151,176153],{"class":157,"line":121},[155,176146,723],{"class":167},[155,176148,35532],{"class":171},[155,176150,21607],{"class":167},[155,176152,174848],{"class":263},[155,176154,736],{"class":171},[155,176156,176157,176159,176161,176164],{"class":157,"line":180},[155,176158,822],{"class":263},[155,176160,230],{"class":171},[155,176162,176163],{"class":732},"\"可以进入网吧\"",[155,176165,363],{"class":171},[24,176167,28874],{},[28,176169,176170,176175,176178,176181],{},[31,176171,176172,176174],{},[152,176173,723],{}," 后面是条件表达式。",[31,176176,176177],{},"条件后面必须写冒号。",[31,176179,176180],{},"条件成立时执行缩进代码块。",[31,176182,176183],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[24,176185,176186],{},"错误示例：",[146,176188,176190],{"className":148,"code":176189,"language":150,"meta":39,"style":39},"if age >= 18\n    print(\"可以进入\")\n",[152,176191,176192,176202],{"__ignoreMap":39},[155,176193,176194,176196,176198,176200],{"class":157,"line":158},[155,176195,723],{"class":167},[155,176197,35532],{"class":171},[155,176199,21607],{"class":167},[155,176201,165114],{"class":263},[155,176203,176204,176206,176208,176211],{"class":157,"line":46},[155,176205,822],{"class":263},[155,176207,230],{"class":171},[155,176209,176210],{"class":732},"\"可以进入\"",[155,176212,363],{"class":171},[24,176214,176215],{},"缺少冒号。",[20037,176217,176219],{"id":176218},"_33-if-else","3.3 if else",[146,176221,176223],{"className":148,"code":176222,"language":150,"meta":39,"style":39},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[152,176224,176225,176243,176247,176259,176270,176276],{"__ignoreMap":39},[155,176226,176227,176229,176231,176233,176235,176237,176239,176241],{"class":157,"line":158},[155,176228,165109],{"class":171},[155,176230,317],{"class":167},[155,176232,22269],{"class":263},[155,176234,230],{"class":171},[155,176236,72384],{"class":263},[155,176238,230],{"class":171},[155,176240,170957],{"class":732},[155,176242,1238],{"class":171},[155,176244,176245],{"class":157,"line":46},[155,176246,217],{"emptyLinePlaceholder":216},[155,176248,176249,176251,176253,176255,176257],{"class":157,"line":121},[155,176250,723],{"class":167},[155,176252,35532],{"class":171},[155,176254,21607],{"class":167},[155,176256,174848],{"class":263},[155,176258,736],{"class":171},[155,176260,176261,176263,176265,176268],{"class":157,"line":180},[155,176262,822],{"class":263},[155,176264,230],{"class":171},[155,176266,176267],{"class":732},"\"成年人\"",[155,176269,363],{"class":171},[155,176271,176272,176274],{"class":157,"line":194},[155,176273,765],{"class":167},[155,176275,736],{"class":171},[155,176277,176278,176280,176282,176285],{"class":157,"line":200},[155,176279,822],{"class":263},[155,176281,230],{"class":171},[155,176283,176284],{"class":732},"\"未成年人\"",[155,176286,363],{"class":171},[24,176288,176289],{},"执行逻辑：",[28,176291,176292,176298,176303],{},[31,176293,176294,176295,176297],{},"条件成立，执行 ",[152,176296,723],{}," 代码块。",[31,176299,176300,176301,176297],{},"条件不成立，执行 ",[152,176302,765],{},[31,176304,176305],{},"两个代码块只会执行其中一个。",[20037,176307,176309],{"id":176308},"_34-if-elif-else","3.4 if elif else",[24,176311,176312],{},"多条件判断：",[146,176314,176316],{"className":148,"code":176315,"language":150,"meta":39,"style":39},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[152,176317,176318,176336,176340,176354,176365,176379,176390,176403,176414,176420],{"__ignoreMap":39},[155,176319,176320,176322,176324,176326,176328,176330,176332,176334],{"class":157,"line":158},[155,176321,173921],{"class":171},[155,176323,317],{"class":167},[155,176325,22269],{"class":263},[155,176327,230],{"class":171},[155,176329,72384],{"class":263},[155,176331,230],{"class":171},[155,176333,170972],{"class":732},[155,176335,1238],{"class":171},[155,176337,176338],{"class":157,"line":46},[155,176339,217],{"emptyLinePlaceholder":216},[155,176341,176342,176344,176347,176349,176352],{"class":157,"line":121},[155,176343,723],{"class":167},[155,176345,176346],{"class":171}," score ",[155,176348,21607],{"class":167},[155,176350,176351],{"class":263}," 90",[155,176353,736],{"class":171},[155,176355,176356,176358,176360,176363],{"class":157,"line":180},[155,176357,822],{"class":263},[155,176359,230],{"class":171},[155,176361,176362],{"class":732},"\"优秀\"",[155,176364,363],{"class":171},[155,176366,176367,176370,176372,176374,176377],{"class":157,"line":194},[155,176368,176369],{"class":167},"elif",[155,176371,176346],{"class":171},[155,176373,21607],{"class":167},[155,176375,176376],{"class":263}," 80",[155,176378,736],{"class":171},[155,176380,176381,176383,176385,176388],{"class":157,"line":200},[155,176382,822],{"class":263},[155,176384,230],{"class":171},[155,176386,176387],{"class":732},"\"良好\"",[155,176389,363],{"class":171},[155,176391,176392,176394,176396,176398,176401],{"class":157,"line":213},[155,176393,176369],{"class":167},[155,176395,176346],{"class":171},[155,176397,21607],{"class":167},[155,176399,176400],{"class":263}," 60",[155,176402,736],{"class":171},[155,176404,176405,176407,176409,176412],{"class":157,"line":220},[155,176406,822],{"class":263},[155,176408,230],{"class":171},[155,176410,176411],{"class":732},"\"及格\"",[155,176413,363],{"class":171},[155,176415,176416,176418],{"class":157,"line":245},[155,176417,765],{"class":167},[155,176419,736],{"class":171},[155,176421,176422,176424,176426,176429],{"class":157,"line":251},[155,176423,822],{"class":263},[155,176425,230],{"class":171},[155,176427,176428],{"class":732},"\"不及格\"",[155,176430,363],{"class":171},[24,176432,176433],{},"注意判断顺序很重要。",[24,176435,176436,176437,176440],{},"如果把 ",[152,176438,176439],{},"score >= 60"," 放在最前面：",[146,176442,176444],{"className":148,"code":176443,"language":150,"meta":39,"style":39},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[152,176445,176446,176458,176468,176480],{"__ignoreMap":39},[155,176447,176448,176450,176452,176454,176456],{"class":157,"line":158},[155,176449,723],{"class":167},[155,176451,176346],{"class":171},[155,176453,21607],{"class":167},[155,176455,176400],{"class":263},[155,176457,736],{"class":171},[155,176459,176460,176462,176464,176466],{"class":157,"line":46},[155,176461,822],{"class":263},[155,176463,230],{"class":171},[155,176465,176411],{"class":732},[155,176467,363],{"class":171},[155,176469,176470,176472,176474,176476,176478],{"class":157,"line":121},[155,176471,176369],{"class":167},[155,176473,176346],{"class":171},[155,176475,21607],{"class":167},[155,176477,176351],{"class":263},[155,176479,736],{"class":171},[155,176481,176482,176484,176486,176488],{"class":157,"line":180},[155,176483,822],{"class":263},[155,176485,230],{"class":171},[155,176487,176362],{"class":732},[155,176489,363],{"class":171},[24,176491,176492,176493,176495],{},"成绩 95 会先满足 ",[152,176494,176439],{},"，后面的优秀分支就不会执行。",[20037,176497,176499],{"id":176498},"_35-判断语句嵌套","3.5 判断语句嵌套",[24,176501,176502],{},"嵌套判断就是在一个判断内部再写判断。",[146,176504,176506],{"className":148,"code":176505,"language":150,"meta":39,"style":39},"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",[152,176507,176508,176526,176541,176545,176557,176571,176581,176588,176599,176605],{"__ignoreMap":39},[155,176509,176510,176512,176514,176516,176518,176520,176522,176524],{"class":157,"line":158},[155,176511,165109],{"class":171},[155,176513,317],{"class":167},[155,176515,22269],{"class":263},[155,176517,230],{"class":171},[155,176519,72384],{"class":263},[155,176521,230],{"class":171},[155,176523,170957],{"class":732},[155,176525,1238],{"class":171},[155,176527,176528,176530,176532,176534,176536,176539],{"class":157,"line":46},[155,176529,174924],{"class":171},[155,176531,317],{"class":167},[155,176533,79168],{"class":263},[155,176535,230],{"class":171},[155,176537,176538],{"class":732},"\"是否有票(y\u002Fn):\"",[155,176540,363],{"class":171},[155,176542,176543],{"class":157,"line":121},[155,176544,217],{"emptyLinePlaceholder":216},[155,176546,176547,176549,176551,176553,176555],{"class":157,"line":180},[155,176548,723],{"class":167},[155,176550,35532],{"class":171},[155,176552,21607],{"class":167},[155,176554,174848],{"class":263},[155,176556,736],{"class":171},[155,176558,176559,176561,176564,176566,176569],{"class":157,"line":194},[155,176560,1142],{"class":167},[155,176562,176563],{"class":171}," has_ticket ",[155,176565,729],{"class":167},[155,176567,176568],{"class":732}," \"y\"",[155,176570,736],{"class":171},[155,176572,176573,176575,176577,176579],{"class":157,"line":200},[155,176574,2017],{"class":263},[155,176576,230],{"class":171},[155,176578,176210],{"class":732},[155,176580,363],{"class":171},[155,176582,176583,176586],{"class":157,"line":213},[155,176584,176585],{"class":167},"    else",[155,176587,736],{"class":171},[155,176589,176590,176592,176594,176597],{"class":157,"line":220},[155,176591,2017],{"class":263},[155,176593,230],{"class":171},[155,176595,176596],{"class":732},"\"请先买票\"",[155,176598,363],{"class":171},[155,176600,176601,176603],{"class":157,"line":245},[155,176602,765],{"class":167},[155,176604,736],{"class":171},[155,176606,176607,176609,176611,176614],{"class":157,"line":251},[155,176608,822],{"class":263},[155,176610,230],{"class":171},[155,176612,176613],{"class":732},"\"未成年人禁止进入\"",[155,176615,363],{"class":171},[24,176617,176618],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[20037,176620,176622],{"id":176621},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[14,176624,176626],{"id":176625},"_361-and","3.6.1 and",[24,176628,176629],{},"两个条件都成立才成立。",[146,176631,176633],{"className":148,"code":176632,"language":150,"meta":39,"style":39},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[152,176634,176635,176643,176651,176655,176670],{"__ignoreMap":39},[155,176636,176637,176639,176641],{"class":157,"line":158},[155,176638,165109],{"class":171},[155,176640,317],{"class":167},[155,176642,106628],{"class":263},[155,176644,176645,176647,176649],{"class":157,"line":46},[155,176646,174924],{"class":171},[155,176648,317],{"class":167},[155,176650,172162],{"class":263},[155,176652,176653],{"class":157,"line":121},[155,176654,217],{"emptyLinePlaceholder":216},[155,176656,176657,176659,176661,176663,176665,176667],{"class":157,"line":180},[155,176658,723],{"class":167},[155,176660,35532],{"class":171},[155,176662,21607],{"class":167},[155,176664,174848],{"class":263},[155,176666,138992],{"class":167},[155,176668,176669],{"class":171}," has_ticket:\n",[155,176671,176672,176674,176676,176678],{"class":157,"line":194},[155,176673,822],{"class":263},[155,176675,230],{"class":171},[155,176677,176210],{"class":732},[155,176679,363],{"class":171},[14,176681,176683],{"id":176682},"_362-or","3.6.2 or",[24,176685,176686],{},"只要一个条件成立就成立。",[146,176688,176690],{"className":148,"code":176689,"language":150,"meta":39,"style":39},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[152,176691,176692,176701,176710,176714,176726],{"__ignoreMap":39},[155,176693,176694,176697,176699],{"class":157,"line":158},[155,176695,176696],{"class":171},"is_vip ",[155,176698,317],{"class":167},[155,176700,144370],{"class":263},[155,176702,176703,176706,176708],{"class":157,"line":46},[155,176704,176705],{"class":171},"coupon ",[155,176707,317],{"class":167},[155,176709,172162],{"class":263},[155,176711,176712],{"class":157,"line":121},[155,176713,217],{"emptyLinePlaceholder":216},[155,176715,176716,176718,176721,176723],{"class":157,"line":180},[155,176717,723],{"class":167},[155,176719,176720],{"class":171}," is_vip ",[155,176722,133653],{"class":167},[155,176724,176725],{"class":171}," coupon:\n",[155,176727,176728,176730,176732,176735],{"class":157,"line":194},[155,176729,822],{"class":263},[155,176731,230],{"class":171},[155,176733,176734],{"class":732},"\"可以享受优惠\"",[155,176736,363],{"class":171},[14,176738,176740],{"id":176739},"_363-not","3.6.3 not",[24,176742,176743],{},"取反。",[146,176745,176747],{"className":148,"code":176746,"language":150,"meta":39,"style":39},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[152,176748,176749,176758,176762,176771],{"__ignoreMap":39},[155,176750,176751,176754,176756],{"class":157,"line":158},[155,176752,176753],{"class":171},"is_closed ",[155,176755,317],{"class":167},[155,176757,144370],{"class":263},[155,176759,176760],{"class":157,"line":46},[155,176761,217],{"emptyLinePlaceholder":216},[155,176763,176764,176766,176768],{"class":157,"line":121},[155,176765,723],{"class":167},[155,176767,8542],{"class":167},[155,176769,176770],{"class":171}," is_closed:\n",[155,176772,176773,176775,176777,176780],{"class":157,"line":180},[155,176774,822],{"class":263},[155,176776,230],{"class":171},[155,176778,176779],{"class":732},"\"店铺营业中\"",[155,176781,363],{"class":171},[20037,176783,176785],{"id":176784},"_37-链式比较","3.7 链式比较",[24,176787,176788],{},"Python 支持链式比较：",[146,176790,176792],{"className":148,"code":176791,"language":150,"meta":39,"style":39},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[152,176793,176794,176803,176807,176824],{"__ignoreMap":39},[155,176795,176796,176798,176800],{"class":157,"line":158},[155,176797,173921],{"class":171},[155,176799,317],{"class":167},[155,176801,176802],{"class":263}," 85\n",[155,176804,176805],{"class":157,"line":46},[155,176806,217],{"emptyLinePlaceholder":216},[155,176808,176809,176811,176813,176816,176818,176820,176822],{"class":157,"line":121},[155,176810,723],{"class":167},[155,176812,1151],{"class":263},[155,176814,176815],{"class":167}," \u003C=",[155,176817,176346],{"class":171},[155,176819,21498],{"class":167},[155,176821,25617],{"class":263},[155,176823,736],{"class":171},[155,176825,176826,176828,176830,176833],{"class":157,"line":180},[155,176827,822],{"class":263},[155,176829,230],{"class":171},[155,176831,176832],{"class":732},"\"成绩合法\"",[155,176834,363],{"class":171},[24,176836,176837],{},"等价于：",[146,176839,176841],{"className":148,"code":176840,"language":150,"meta":39,"style":39},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[152,176842,176843,176863],{"__ignoreMap":39},[155,176844,176845,176847,176849,176851,176853,176855,176857,176859,176861],{"class":157,"line":158},[155,176846,723],{"class":167},[155,176848,176346],{"class":171},[155,176850,21607],{"class":167},[155,176852,1151],{"class":263},[155,176854,138992],{"class":167},[155,176856,176346],{"class":171},[155,176858,21498],{"class":167},[155,176860,25617],{"class":263},[155,176862,736],{"class":171},[155,176864,176865,176867,176869,176871],{"class":157,"line":46},[155,176866,822],{"class":263},[155,176868,230],{"class":171},[155,176870,176832],{"class":732},[155,176872,363],{"class":171},[20037,176874,176876],{"id":176875},"_38-真值和假值","3.8 真值和假值",[24,176878,135030,176879,176881],{},[152,176880,723],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[24,176883,176884],{},"假值：",[146,176886,176888],{"className":148,"code":176887,"language":150,"meta":39,"style":39},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[152,176889,176890,176894,176899,176903,176907,176912,176916,176920,176925],{"__ignoreMap":39},[155,176891,176892],{"class":157,"line":158},[155,176893,176080],{"class":263},[155,176895,176896],{"class":157,"line":46},[155,176897,176898],{"class":263},"None\n",[155,176900,176901],{"class":157,"line":121},[155,176902,2103],{"class":263},[155,176904,176905],{"class":157,"line":180},[155,176906,1891],{"class":263},[155,176908,176909],{"class":157,"line":194},[155,176910,176911],{"class":732},"\"\"\n",[155,176913,176914],{"class":157,"line":200},[155,176915,1908],{"class":171},[155,176917,176918],{"class":157,"line":213},[155,176919,294],{"class":171},[155,176921,176922],{"class":157,"line":220},[155,176923,176924],{"class":171},"{}\n",[155,176926,176927,176929],{"class":157,"line":245},[155,176928,173853],{"class":263},[155,176930,294],{"class":171},[24,176932,34960],{},[146,176934,176936],{"className":148,"code":176935,"language":150,"meta":39,"style":39},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[152,176937,176938,176952,176956,176963,176983,176989],{"__ignoreMap":39},[155,176939,176940,176942,176944,176946,176948,176950],{"class":157,"line":158},[155,176941,165099],{"class":171},[155,176943,317],{"class":167},[155,176945,79168],{"class":263},[155,176947,230],{"class":171},[155,176949,170942],{"class":732},[155,176951,363],{"class":171},[155,176953,176954],{"class":157,"line":46},[155,176955,217],{"emptyLinePlaceholder":216},[155,176957,176958,176960],{"class":157,"line":121},[155,176959,723],{"class":167},[155,176961,176962],{"class":171}," name:\n",[155,176964,176965,176967,176969,176971,176973,176975,176977,176979,176981],{"class":157,"line":180},[155,176966,822],{"class":263},[155,176968,230],{"class":171},[155,176970,17391],{"class":167},[155,176972,175617],{"class":732},[155,176974,2705],{"class":263},[155,176976,98373],{"class":171},[155,176978,2711],{"class":263},[155,176980,2033],{"class":732},[155,176982,363],{"class":171},[155,176984,176985,176987],{"class":157,"line":194},[155,176986,765],{"class":167},[155,176988,736],{"class":171},[155,176990,176991,176993,176995,176998],{"class":157,"line":200},[155,176992,822],{"class":263},[155,176994,230],{"class":171},[155,176996,176997],{"class":732},"\"姓名不能为空\"",[155,176999,363],{"class":171},[20037,177001,177003],{"id":177002},"_39-match语句","3.9 match语句",[24,177005,177006,177007,177009],{},"Python 3.10 开始支持 ",[152,177008,89828],{},"。它适合处理固定选项。",[146,177011,177013],{"className":148,"code":177012,"language":150,"meta":39,"style":39},"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",[152,177014,177015,177031,177035,177042,177052,177063,177072,177083,177092,177103,177110],{"__ignoreMap":39},[155,177016,177017,177020,177022,177024,177026,177029],{"class":157,"line":158},[155,177018,177019],{"class":171},"command ",[155,177021,317],{"class":167},[155,177023,79168],{"class":263},[155,177025,230],{"class":171},[155,177027,177028],{"class":732},"\"请输入命令:\"",[155,177030,363],{"class":171},[155,177032,177033],{"class":157,"line":46},[155,177034,217],{"emptyLinePlaceholder":216},[155,177036,177037,177039],{"class":157,"line":121},[155,177038,89828],{"class":167},[155,177040,177041],{"class":171}," command:\n",[155,177043,177044,177047,177050],{"class":157,"line":180},[155,177045,177046],{"class":167},"    case",[155,177048,177049],{"class":732}," \"start\"",[155,177051,736],{"class":171},[155,177053,177054,177056,177058,177061],{"class":157,"line":194},[155,177055,2017],{"class":263},[155,177057,230],{"class":171},[155,177059,177060],{"class":732},"\"启动\"",[155,177062,363],{"class":171},[155,177064,177065,177067,177070],{"class":157,"line":200},[155,177066,177046],{"class":167},[155,177068,177069],{"class":732}," \"stop\"",[155,177071,736],{"class":171},[155,177073,177074,177076,177078,177081],{"class":157,"line":213},[155,177075,2017],{"class":263},[155,177077,230],{"class":171},[155,177079,177080],{"class":732},"\"停止\"",[155,177082,363],{"class":171},[155,177084,177085,177087,177090],{"class":157,"line":220},[155,177086,177046],{"class":167},[155,177088,177089],{"class":732}," \"restart\"",[155,177091,736],{"class":171},[155,177093,177094,177096,177098,177101],{"class":157,"line":245},[155,177095,2017],{"class":263},[155,177097,230],{"class":171},[155,177099,177100],{"class":732},"\"重启\"",[155,177102,363],{"class":171},[155,177104,177105,177107],{"class":157,"line":251},[155,177106,177046],{"class":167},[155,177108,177109],{"class":171}," _:\n",[155,177111,177112,177114,177116,177119],{"class":157,"line":257},[155,177113,2017],{"class":263},[155,177115,230],{"class":171},[155,177117,177118],{"class":732},"\"未知命令\"",[155,177120,363],{"class":171},[24,177122,177123,177124,177126,177127,177129],{},"入门阶段掌握 ",[152,177125,173221],{}," 更重要，",[152,177128,89828],{}," 可以作为补充。",[20037,177131,177133],{"id":177132},"_310-小案例成绩等级","3.10 小案例：成绩等级",[24,177135,141855],{},[28,177137,177138,177141,177144],{},[31,177139,177140],{},"输入成绩。",[31,177142,177143],{},"判断成绩是否合法。",[31,177145,177146],{},"输出等级。",[24,177148,29864],{},[146,177150,177152],{"className":148,"code":177151,"language":150,"meta":39,"style":39},"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",[152,177153,177154,177172,177176,177194,177205,177217,177228,177240,177251,177264,177275,177287,177298,177304],{"__ignoreMap":39},[155,177155,177156,177158,177160,177162,177164,177166,177168,177170],{"class":157,"line":158},[155,177157,173921],{"class":171},[155,177159,317],{"class":167},[155,177161,128360],{"class":263},[155,177163,230],{"class":171},[155,177165,72384],{"class":263},[155,177167,230],{"class":171},[155,177169,170972],{"class":732},[155,177171,1238],{"class":171},[155,177173,177174],{"class":157,"line":46},[155,177175,217],{"emptyLinePlaceholder":216},[155,177177,177178,177180,177182,177184,177186,177188,177190,177192],{"class":157,"line":121},[155,177179,723],{"class":167},[155,177181,8542],{"class":167},[155,177183,1151],{"class":263},[155,177185,176815],{"class":167},[155,177187,176346],{"class":171},[155,177189,21498],{"class":167},[155,177191,25617],{"class":263},[155,177193,736],{"class":171},[155,177195,177196,177198,177200,177203],{"class":157,"line":180},[155,177197,822],{"class":263},[155,177199,230],{"class":171},[155,177201,177202],{"class":732},"\"成绩不合法\"",[155,177204,363],{"class":171},[155,177206,177207,177209,177211,177213,177215],{"class":157,"line":194},[155,177208,176369],{"class":167},[155,177210,176346],{"class":171},[155,177212,21607],{"class":167},[155,177214,176351],{"class":263},[155,177216,736],{"class":171},[155,177218,177219,177221,177223,177226],{"class":157,"line":200},[155,177220,822],{"class":263},[155,177222,230],{"class":171},[155,177224,177225],{"class":732},"\"等级:A\"",[155,177227,363],{"class":171},[155,177229,177230,177232,177234,177236,177238],{"class":157,"line":213},[155,177231,176369],{"class":167},[155,177233,176346],{"class":171},[155,177235,21607],{"class":167},[155,177237,176376],{"class":263},[155,177239,736],{"class":171},[155,177241,177242,177244,177246,177249],{"class":157,"line":220},[155,177243,822],{"class":263},[155,177245,230],{"class":171},[155,177247,177248],{"class":732},"\"等级:B\"",[155,177250,363],{"class":171},[155,177252,177253,177255,177257,177259,177262],{"class":157,"line":245},[155,177254,176369],{"class":167},[155,177256,176346],{"class":171},[155,177258,21607],{"class":167},[155,177260,177261],{"class":263}," 70",[155,177263,736],{"class":171},[155,177265,177266,177268,177270,177273],{"class":157,"line":251},[155,177267,822],{"class":263},[155,177269,230],{"class":171},[155,177271,177272],{"class":732},"\"等级:C\"",[155,177274,363],{"class":171},[155,177276,177277,177279,177281,177283,177285],{"class":157,"line":257},[155,177278,176369],{"class":167},[155,177280,176346],{"class":171},[155,177282,21607],{"class":167},[155,177284,176400],{"class":263},[155,177286,736],{"class":171},[155,177288,177289,177291,177293,177296],{"class":157,"line":270},[155,177290,822],{"class":263},[155,177292,230],{"class":171},[155,177294,177295],{"class":732},"\"等级:D\"",[155,177297,363],{"class":171},[155,177299,177300,177302],{"class":157,"line":276},[155,177301,765],{"class":167},[155,177303,736],{"class":171},[155,177305,177306,177308,177310,177313],{"class":157,"line":297},[155,177307,822],{"class":263},[155,177309,230],{"class":171},[155,177311,177312],{"class":732},"\"等级:E\"",[155,177314,363],{"class":171},[20037,177316,177318],{"id":177317},"_311-小案例会员折扣","3.11 小案例：会员折扣",[24,177320,141855],{},[28,177322,177323,177326,177329,177332],{},[31,177324,177325],{},"输入消费金额。",[31,177327,177328],{},"输入会员等级，普通、银卡、金卡。",[31,177330,177331],{},"普通不打折，银卡 9 折，金卡 8 折。",[31,177333,177334],{},"满 500 再减 50。",[24,177336,29864],{},[146,177338,177340],{"className":148,"code":177339,"language":150,"meta":39,"style":39},"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",[152,177341,177342,177362,177378,177382,177390,177394,177408,177418,177431,177440,177453,177461,177467,177478,177482,177496,177500,177514,177524,177528],{"__ignoreMap":39},[155,177343,177344,177347,177349,177351,177353,177355,177357,177360],{"class":157,"line":158},[155,177345,177346],{"class":171},"amount ",[155,177348,317],{"class":167},[155,177350,128360],{"class":263},[155,177352,230],{"class":171},[155,177354,72384],{"class":263},[155,177356,230],{"class":171},[155,177358,177359],{"class":732},"\"请输入消费金额:\"",[155,177361,1238],{"class":171},[155,177363,177364,177367,177369,177371,177373,177376],{"class":157,"line":46},[155,177365,177366],{"class":171},"level ",[155,177368,317],{"class":167},[155,177370,79168],{"class":263},[155,177372,230],{"class":171},[155,177374,177375],{"class":732},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[155,177377,363],{"class":171},[155,177379,177380],{"class":157,"line":121},[155,177381,217],{"emptyLinePlaceholder":216},[155,177383,177384,177386,177388],{"class":157,"line":180},[155,177385,175799],{"class":171},[155,177387,317],{"class":167},[155,177389,74262],{"class":263},[155,177391,177392],{"class":157,"line":194},[155,177393,217],{"emptyLinePlaceholder":216},[155,177395,177396,177398,177401,177403,177406],{"class":157,"line":200},[155,177397,723],{"class":167},[155,177399,177400],{"class":171}," level ",[155,177402,729],{"class":167},[155,177404,177405],{"class":732}," \"银卡\"",[155,177407,736],{"class":171},[155,177409,177410,177413,177415],{"class":157,"line":213},[155,177411,177412],{"class":171},"    discount ",[155,177414,317],{"class":167},[155,177416,177417],{"class":263}," 0.9\n",[155,177419,177420,177422,177424,177426,177429],{"class":157,"line":220},[155,177421,176369],{"class":167},[155,177423,177400],{"class":171},[155,177425,729],{"class":167},[155,177427,177428],{"class":732}," \"金卡\"",[155,177430,736],{"class":171},[155,177432,177433,177435,177437],{"class":157,"line":245},[155,177434,177412],{"class":171},[155,177436,317],{"class":167},[155,177438,177439],{"class":263}," 0.8\n",[155,177441,177442,177444,177446,177448,177451],{"class":157,"line":251},[155,177443,176369],{"class":167},[155,177445,177400],{"class":171},[155,177447,729],{"class":167},[155,177449,177450],{"class":732}," \"普通\"",[155,177452,736],{"class":171},[155,177454,177455,177457,177459],{"class":157,"line":257},[155,177456,177412],{"class":171},[155,177458,317],{"class":167},[155,177460,74262],{"class":263},[155,177462,177463,177465],{"class":157,"line":270},[155,177464,765],{"class":167},[155,177466,736],{"class":171},[155,177468,177469,177471,177473,177476],{"class":157,"line":276},[155,177470,822],{"class":263},[155,177472,230],{"class":171},[155,177474,177475],{"class":732},"\"会员等级输入错误，按普通会员计算\"",[155,177477,363],{"class":171},[155,177479,177480],{"class":157,"line":297},[155,177481,217],{"emptyLinePlaceholder":216},[155,177483,177484,177487,177489,177492,177494],{"class":157,"line":302},[155,177485,177486],{"class":171},"pay ",[155,177488,317],{"class":167},[155,177490,177491],{"class":171}," amount ",[155,177493,1563],{"class":167},[155,177495,175838],{"class":171},[155,177497,177498],{"class":157,"line":308},[155,177499,217],{"emptyLinePlaceholder":216},[155,177501,177502,177504,177507,177509,177512],{"class":157,"line":366},[155,177503,723],{"class":167},[155,177505,177506],{"class":171}," pay ",[155,177508,21607],{"class":167},[155,177510,177511],{"class":263}," 500",[155,177513,736],{"class":171},[155,177515,177516,177519,177521],{"class":157,"line":379},[155,177517,177518],{"class":171},"    pay ",[155,177520,168815],{"class":167},[155,177522,177523],{"class":263}," 50\n",[155,177525,177526],{"class":157,"line":385},[155,177527,217],{"emptyLinePlaceholder":216},[155,177529,177530,177532,177534,177536,177538,177540,177543,177545,177547,177549],{"class":157,"line":415},[155,177531,15451],{"class":263},[155,177533,230],{"class":171},[155,177535,17391],{"class":167},[155,177537,175919],{"class":732},[155,177539,2705],{"class":263},[155,177541,177542],{"class":171},"pay",[155,177544,175722],{"class":167},[155,177546,2711],{"class":263},[155,177548,175575],{"class":732},[155,177550,363],{"class":171},[20037,177552,177554],{"id":177553},"_312-易错点","3.12 易错点",[28,177556,177557,177560,177563,177566,177571],{},[31,177558,177559],{},"冒号不能漏。",[31,177561,177562],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[31,177564,177565],{},"多分支判断要注意顺序。",[31,177567,177568,177569,48174],{},"判断相等用 ",[152,177570,729],{},[31,177572,177573],{},"字符串比较区分大小写：",[146,177575,177577],{"className":148,"code":177576,"language":150,"meta":39,"style":39},"\"Y\" == \"y\"  # False\n",[152,177578,177579],{"__ignoreMap":39},[155,177580,177581,177584,177586,177588],{"class":157,"line":158},[155,177582,177583],{"class":732},"\"Y\"",[155,177585,120122],{"class":167},[155,177587,176568],{"class":732},[155,177589,177590],{"class":161},"  # False\n",[24,177592,177593],{},"可转换后再判断：",[146,177595,177597],{"className":148,"code":177596,"language":150,"meta":39,"style":39},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[152,177598,177599,177616,177629],{"__ignoreMap":39},[155,177600,177601,177604,177606,177608,177610,177613],{"class":157,"line":158},[155,177602,177603],{"class":171},"answer ",[155,177605,317],{"class":167},[155,177607,79168],{"class":263},[155,177609,230],{"class":171},[155,177611,177612],{"class":732},"\"是否继续(y\u002Fn):\"",[155,177614,177615],{"class":171},").lower()\n",[155,177617,177618,177620,177623,177625,177627],{"class":157,"line":46},[155,177619,723],{"class":167},[155,177621,177622],{"class":171}," answer ",[155,177624,729],{"class":167},[155,177626,176568],{"class":732},[155,177628,736],{"class":171},[155,177630,177631,177633,177635,177638],{"class":157,"line":121},[155,177632,822],{"class":263},[155,177634,230],{"class":171},[155,177636,177637],{"class":732},"\"继续\"",[155,177639,363],{"class":171},[20037,177641,177643],{"id":177642},"_313-本章练习","3.13 本章练习",[28,177645,177646,177649,177652,177655,177665],{},[31,177647,177648],{},"输入年龄，判断是否成年。",[31,177650,177651],{},"输入年份，判断是否为闰年。",[31,177653,177654],{},"输入三个数字，输出最大值。",[31,177656,177657,177658,177661,177662,177664],{},"写登录判断：用户名是 ",[152,177659,177660],{},"admin"," 且密码是 ",[152,177663,34909],{}," 才登录成功。",[31,177666,177667],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[20011,177669,177670],{},"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":39,"searchDepth":46,"depth":46,"links":177672},[177673,177674,177675,177676,177677,177678,177683,177684,177685,177686,177687,177688,177689],{"id":176061,"depth":46,"text":176062},{"id":176114,"depth":46,"text":176115},{"id":176218,"depth":46,"text":176219},{"id":176308,"depth":46,"text":176309},{"id":176498,"depth":46,"text":176499},{"id":176621,"depth":46,"text":176622,"children":177679},[177680,177681,177682],{"id":176625,"depth":121,"text":176626},{"id":176682,"depth":121,"text":176683},{"id":176739,"depth":121,"text":176740},{"id":176784,"depth":46,"text":176785},{"id":176875,"depth":46,"text":176876},{"id":177002,"depth":46,"text":177003},{"id":177132,"depth":46,"text":177133},{"id":177317,"depth":46,"text":177318},{"id":177553,"depth":46,"text":177554},{"id":177642,"depth":46,"text":177643},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":176053,"description":20020},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":177696,"title":177697,"body":177698,"description":20020,"extension":20021,"meta":179467,"navigation":216,"path":179468,"seo":179469,"stem":179470,"__hash__":179471},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":177699,"toc":179447},[177700,177703,177707,177713,177716,177733,177737,177739,177756,177758,177803,177805,177822,177826,177829,177895,177898,177916,177920,178081,178090,178094,178098,178103,178150,178152,178158,178162,178167,178214,178216,178222,178226,178231,178267,178270,178317,178321,178327,178385,178390,178421,178426,178430,178485,178488,178560,178563,178622,178626,178629,178704,178707,178711,178817,178820,178846,178850,178862,178931,178934,179026,179030,179032,179043,179045,179175,179179,179381,179389,179393,179423,179427,179444],[10,177701,177697],{"id":177702},"_4-循环语句",[20037,177704,177706],{"id":177705},"_41-为什么需要循环","4.1 为什么需要循环",[24,177708,177709,177710,177712],{},"如果要输出 1 到 100，不应该写 100 行 ",[152,177711,165035],{},"，而应该用循环。",[24,177714,177715],{},"循环适合处理重复任务：",[28,177717,177718,177721,177724,177727,177730],{},[31,177719,177720],{},"重复输出。",[31,177722,177723],{},"重复输入。",[31,177725,177726],{},"遍历数据。",[31,177728,177729],{},"持续执行菜单。",[31,177731,177732],{},"批量处理文件或数据。",[20037,177734,177736],{"id":177735},"_42-while循环","4.2 while循环",[24,177738,25045],{},[146,177740,177742],{"className":148,"code":177741,"language":150,"meta":39,"style":39},"while 条件:\n    循环体\n",[152,177743,177744,177751],{"__ignoreMap":39},[155,177745,177746,177748],{"class":157,"line":158},[155,177747,127226],{"class":167},[155,177749,177750],{"class":171}," 条件:\n",[155,177752,177753],{"class":157,"line":46},[155,177754,177755],{"class":171},"    循环体\n",[24,177757,34960],{},[146,177759,177761],{"className":148,"code":177760,"language":150,"meta":39,"style":39},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[152,177762,177763,177771,177775,177787,177794],{"__ignoreMap":39},[155,177764,177765,177767,177769],{"class":157,"line":158},[155,177766,118711],{"class":171},[155,177768,317],{"class":167},[155,177770,74262],{"class":263},[155,177772,177773],{"class":157,"line":46},[155,177774,217],{"emptyLinePlaceholder":216},[155,177776,177777,177779,177781,177783,177785],{"class":157,"line":121},[155,177778,127226],{"class":167},[155,177780,29287],{"class":171},[155,177782,21498],{"class":167},[155,177784,22035],{"class":263},[155,177786,736],{"class":171},[155,177788,177789,177791],{"class":157,"line":180},[155,177790,822],{"class":263},[155,177792,177793],{"class":171},"(i)\n",[155,177795,177796,177799,177801],{"class":157,"line":194},[155,177797,177798],{"class":171},"    i ",[155,177800,2351],{"class":167},[155,177802,74262],{"class":263},[24,177804,99492],{},[28,177806,177807,177813,177816,177819],{},[31,177808,177809,177810,48174],{},"判断条件 ",[152,177811,177812],{},"i \u003C= 5",[31,177814,177815],{},"条件成立，执行循环体。",[31,177817,177818],{},"执行完后回到条件判断。",[31,177820,177821],{},"条件不成立，退出循环。",[20037,177823,177825],{"id":177824},"_43-while累加","4.3 while累加",[24,177827,177828],{},"计算 1 到 100 的和：",[146,177830,177832],{"className":148,"code":177831,"language":150,"meta":39,"style":39},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[152,177833,177834,177842,177850,177854,177866,177876,177884,177888],{"__ignoreMap":39},[155,177835,177836,177838,177840],{"class":157,"line":158},[155,177837,118711],{"class":171},[155,177839,317],{"class":167},[155,177841,74262],{"class":263},[155,177843,177844,177846,177848],{"class":157,"line":46},[155,177845,175823],{"class":171},[155,177847,317],{"class":167},[155,177849,16959],{"class":263},[155,177851,177852],{"class":157,"line":121},[155,177853,217],{"emptyLinePlaceholder":216},[155,177855,177856,177858,177860,177862,177864],{"class":157,"line":180},[155,177857,127226],{"class":167},[155,177859,29287],{"class":171},[155,177861,21498],{"class":167},[155,177863,25617],{"class":263},[155,177865,736],{"class":171},[155,177867,177868,177871,177873],{"class":157,"line":194},[155,177869,177870],{"class":171},"    total ",[155,177872,2351],{"class":167},[155,177874,177875],{"class":171}," i\n",[155,177877,177878,177880,177882],{"class":157,"line":200},[155,177879,177798],{"class":171},[155,177881,2351],{"class":167},[155,177883,74262],{"class":263},[155,177885,177886],{"class":157,"line":213},[155,177887,217],{"emptyLinePlaceholder":216},[155,177889,177890,177892],{"class":157,"line":220},[155,177891,15451],{"class":263},[155,177893,177894],{"class":171},"(total)\n",[24,177896,177897],{},"核心思想：",[28,177899,177900,177905,177910],{},[31,177901,177902,177904],{},[152,177903,20513],{}," 控制循环次数。",[31,177906,177907,177909],{},[152,177908,175924],{}," 保存累加结果。",[31,177911,177912,177913,177915],{},"每轮循环都要更新 ",[152,177914,20513],{},"，否则可能死循环。",[20037,177917,177919],{"id":177918},"_44-while猜数字","4.4 while猜数字",[146,177921,177923],{"className":148,"code":177922,"language":150,"meta":39,"style":39},"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",[152,177924,177925,177931,177935,177952,177960,177964,177972,177992,178001,178005,178017,178028,178038,178049,178055,178077],{"__ignoreMap":39},[155,177926,177927,177929],{"class":157,"line":158},[155,177928,168],{"class":167},[155,177930,14948],{"class":171},[155,177932,177933],{"class":157,"line":46},[155,177934,217],{"emptyLinePlaceholder":216},[155,177936,177937,177939,177941,177944,177946,177948,177950],{"class":157,"line":121},[155,177938,177603],{"class":171},[155,177940,317],{"class":167},[155,177942,177943],{"class":171}," random.randint(",[155,177945,329],{"class":263},[155,177947,7589],{"class":171},[155,177949,20389],{"class":263},[155,177951,363],{"class":171},[155,177953,177954,177956,177958],{"class":157,"line":180},[155,177955,165254],{"class":171},[155,177957,317],{"class":167},[155,177959,16959],{"class":263},[155,177961,177962],{"class":157,"line":194},[155,177963,217],{"emptyLinePlaceholder":216},[155,177965,177966,177968,177970],{"class":157,"line":200},[155,177967,127226],{"class":167},[155,177969,113855],{"class":263},[155,177971,736],{"class":171},[155,177973,177974,177977,177979,177981,177983,177985,177987,177990],{"class":157,"line":213},[155,177975,177976],{"class":171},"    guess ",[155,177978,317],{"class":167},[155,177980,22269],{"class":263},[155,177982,230],{"class":171},[155,177984,72384],{"class":263},[155,177986,230],{"class":171},[155,177988,177989],{"class":732},"\"请输入1到100之间的数字:\"",[155,177991,1238],{"class":171},[155,177993,177994,177997,177999],{"class":157,"line":220},[155,177995,177996],{"class":171},"    count ",[155,177998,2351],{"class":167},[155,178000,74262],{"class":263},[155,178002,178003],{"class":157,"line":245},[155,178004,217],{"emptyLinePlaceholder":216},[155,178006,178007,178009,178012,178014],{"class":157,"line":251},[155,178008,1142],{"class":167},[155,178010,178011],{"class":171}," guess ",[155,178013,1148],{"class":167},[155,178015,178016],{"class":171}," answer:\n",[155,178018,178019,178021,178023,178026],{"class":157,"line":257},[155,178020,2017],{"class":263},[155,178022,230],{"class":171},[155,178024,178025],{"class":732},"\"猜大了\"",[155,178027,363],{"class":171},[155,178029,178030,178032,178034,178036],{"class":157,"line":270},[155,178031,8906],{"class":167},[155,178033,178011],{"class":171},[155,178035,20959],{"class":167},[155,178037,178016],{"class":171},[155,178039,178040,178042,178044,178047],{"class":157,"line":276},[155,178041,2017],{"class":263},[155,178043,230],{"class":171},[155,178045,178046],{"class":732},"\"猜小了\"",[155,178048,363],{"class":171},[155,178050,178051,178053],{"class":157,"line":297},[155,178052,176585],{"class":167},[155,178054,736],{"class":171},[155,178056,178057,178059,178061,178063,178066,178068,178070,178072,178075],{"class":157,"line":302},[155,178058,2017],{"class":263},[155,178060,230],{"class":171},[155,178062,17391],{"class":167},[155,178064,178065],{"class":732},"\"猜对了，一共猜了",[155,178067,2705],{"class":263},[155,178069,102997],{"class":171},[155,178071,2711],{"class":263},[155,178073,178074],{"class":732},"次\"",[155,178076,363],{"class":171},[155,178078,178079],{"class":157,"line":308},[155,178080,1158],{"class":167},[24,178082,178083,178086,178087,178089],{},[152,178084,178085],{},"while True"," 表示无限循环，通常配合 ",[152,178088,21940],{}," 使用。",[20037,178091,178093],{"id":178092},"_45-break和continue","4.5 break和continue",[14,178095,178097],{"id":178096},"_451-break","4.5.1 break",[24,178099,178100,178102],{},[152,178101,21940],{}," 直接结束整个循环。",[146,178104,178106],{"className":148,"code":178105,"language":150,"meta":39,"style":39},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[152,178107,178108,178128,178140,178144],{"__ignoreMap":39},[155,178109,178110,178112,178114,178116,178118,178120,178122,178124,178126],{"class":157,"line":158},[155,178111,1125],{"class":167},[155,178113,29287],{"class":171},[155,178115,1131],{"class":167},[155,178117,2008],{"class":263},[155,178119,230],{"class":171},[155,178121,329],{"class":263},[155,178123,7589],{"class":171},[155,178125,340],{"class":263},[155,178127,242],{"class":171},[155,178129,178130,178132,178134,178136,178138],{"class":157,"line":46},[155,178131,1142],{"class":167},[155,178133,29287],{"class":171},[155,178135,729],{"class":167},[155,178137,96633],{"class":263},[155,178139,736],{"class":171},[155,178141,178142],{"class":157,"line":121},[155,178143,1158],{"class":167},[155,178145,178146,178148],{"class":157,"line":180},[155,178147,822],{"class":263},[155,178149,177793],{"class":171},[24,178151,165020],{},[146,178153,178156],{"className":178154,"code":178155,"language":25051,"meta":39},[25049],"1\n2\n",[152,178157,178155],{"__ignoreMap":39},[14,178159,178161],{"id":178160},"_452-continue","4.5.2 continue",[24,178163,178164,178166],{},[152,178165,173235],{}," 跳过本轮剩余代码，进入下一轮循环。",[146,178168,178170],{"className":148,"code":178169,"language":150,"meta":39,"style":39},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[152,178171,178172,178192,178204,178208],{"__ignoreMap":39},[155,178173,178174,178176,178178,178180,178182,178184,178186,178188,178190],{"class":157,"line":158},[155,178175,1125],{"class":167},[155,178177,29287],{"class":171},[155,178179,1131],{"class":167},[155,178181,2008],{"class":263},[155,178183,230],{"class":171},[155,178185,329],{"class":263},[155,178187,7589],{"class":171},[155,178189,340],{"class":263},[155,178191,242],{"class":171},[155,178193,178194,178196,178198,178200,178202],{"class":157,"line":46},[155,178195,1142],{"class":167},[155,178197,29287],{"class":171},[155,178199,729],{"class":167},[155,178201,96633],{"class":263},[155,178203,736],{"class":171},[155,178205,178206],{"class":157,"line":121},[155,178207,167075],{"class":167},[155,178209,178210,178212],{"class":157,"line":180},[155,178211,822],{"class":263},[155,178213,177793],{"class":171},[24,178215,165020],{},[146,178217,178220],{"className":178218,"code":178219,"language":25051,"meta":39},[25049],"1\n2\n4\n5\n",[152,178221,178219],{"__ignoreMap":39},[20037,178223,178225],{"id":178224},"_46-for循环","4.6 for循环",[24,178227,178228,178230],{},[152,178229,1125],{}," 常用于遍历序列。",[146,178232,178234],{"className":148,"code":178233,"language":150,"meta":39,"style":39},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[152,178235,178236,178245,178249,178260],{"__ignoreMap":39},[155,178237,178238,178240,178242],{"class":157,"line":158},[155,178239,165099],{"class":171},[155,178241,317],{"class":167},[155,178243,178244],{"class":732}," \"python\"\n",[155,178246,178247],{"class":157,"line":46},[155,178248,217],{"emptyLinePlaceholder":216},[155,178250,178251,178253,178256,178258],{"class":157,"line":121},[155,178252,1125],{"class":167},[155,178254,178255],{"class":171}," ch ",[155,178257,1131],{"class":167},[155,178259,176962],{"class":171},[155,178261,178262,178264],{"class":157,"line":180},[155,178263,822],{"class":263},[155,178265,178266],{"class":171},"(ch)\n",[24,178268,178269],{},"遍历列表：",[146,178271,178273],{"className":148,"code":178272,"language":150,"meta":39,"style":39},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[152,178274,178275,178297,178301,178311],{"__ignoreMap":39},[155,178276,178277,178280,178282,178284,178286,178288,178290,178292,178295],{"class":157,"line":158},[155,178278,178279],{"class":171},"students ",[155,178281,317],{"class":167},[155,178283,70789],{"class":171},[155,178285,168451],{"class":732},[155,178287,7589],{"class":171},[155,178289,169499],{"class":732},[155,178291,7589],{"class":171},[155,178293,178294],{"class":732},"\"小刚\"",[155,178296,2845],{"class":171},[155,178298,178299],{"class":157,"line":46},[155,178300,217],{"emptyLinePlaceholder":216},[155,178302,178303,178305,178307,178309],{"class":157,"line":121},[155,178304,1125],{"class":167},[155,178306,170700],{"class":171},[155,178308,1131],{"class":167},[155,178310,170705],{"class":171},[155,178312,178313,178315],{"class":157,"line":180},[155,178314,822],{"class":263},[155,178316,168605],{"class":171},[20037,178318,178320],{"id":178319},"_47-range函数","4.7 range函数",[24,178322,178323,178326],{},[152,178324,178325],{},"range()"," 用于生成整数序列。",[146,178328,178330],{"className":148,"code":178329,"language":150,"meta":39,"style":39},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[152,178331,178332,178346,178364],{"__ignoreMap":39},[155,178333,178334,178336,178338,178340,178343],{"class":157,"line":158},[155,178335,3020],{"class":263},[155,178337,230],{"class":171},[155,178339,350],{"class":263},[155,178341,178342],{"class":171},")          ",[155,178344,178345],{"class":161},"# 0,1,2,3,4\n",[155,178347,178348,178350,178352,178354,178356,178358,178361],{"class":157,"line":46},[155,178349,3020],{"class":263},[155,178351,230],{"class":171},[155,178353,329],{"class":263},[155,178355,7589],{"class":171},[155,178357,350],{"class":263},[155,178359,178360],{"class":171},")       ",[155,178362,178363],{"class":161},"# 1,2,3,4\n",[155,178365,178366,178368,178370,178372,178374,178376,178378,178380,178382],{"class":157,"line":121},[155,178367,3020],{"class":263},[155,178369,230],{"class":171},[155,178371,329],{"class":263},[155,178373,7589],{"class":171},[155,178375,565],{"class":263},[155,178377,7589],{"class":171},[155,178379,360],{"class":263},[155,178381,174224],{"class":171},[155,178383,178384],{"class":161},"# 1,3,5,7,9\n",[24,178386,178387,178388,44410],{},"配合 ",[152,178389,1125],{},[146,178391,178393],{"className":148,"code":178392,"language":150,"meta":39,"style":39},"for i in range(1, 6):\n    print(i)\n",[152,178394,178395,178415],{"__ignoreMap":39},[155,178396,178397,178399,178401,178403,178405,178407,178409,178411,178413],{"class":157,"line":158},[155,178398,1125],{"class":167},[155,178400,29287],{"class":171},[155,178402,1131],{"class":167},[155,178404,2008],{"class":263},[155,178406,230],{"class":171},[155,178408,329],{"class":263},[155,178410,7589],{"class":171},[155,178412,340],{"class":263},[155,178414,242],{"class":171},[155,178416,178417,178419],{"class":157,"line":46},[155,178418,822],{"class":263},[155,178420,177793],{"class":171},[24,178422,28874,178423,178425],{},[152,178424,3020],{}," 的结束值不包含在内。",[20037,178427,178429],{"id":178428},"_48-for循环求和","4.8 for循环求和",[146,178431,178433],{"className":148,"code":178432,"language":150,"meta":39,"style":39},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[152,178434,178435,178443,178447,178467,178475,178479],{"__ignoreMap":39},[155,178436,178437,178439,178441],{"class":157,"line":158},[155,178438,175823],{"class":171},[155,178440,317],{"class":167},[155,178442,16959],{"class":263},[155,178444,178445],{"class":157,"line":46},[155,178446,217],{"emptyLinePlaceholder":216},[155,178448,178449,178451,178453,178455,178457,178459,178461,178463,178465],{"class":157,"line":121},[155,178450,1125],{"class":167},[155,178452,29287],{"class":171},[155,178454,1131],{"class":167},[155,178456,2008],{"class":263},[155,178458,230],{"class":171},[155,178460,329],{"class":263},[155,178462,7589],{"class":171},[155,178464,20413],{"class":263},[155,178466,242],{"class":171},[155,178468,178469,178471,178473],{"class":157,"line":180},[155,178470,177870],{"class":171},[155,178472,2351],{"class":167},[155,178474,177875],{"class":171},[155,178476,178477],{"class":157,"line":194},[155,178478,217],{"emptyLinePlaceholder":216},[155,178480,178481,178483],{"class":157,"line":200},[155,178482,15451],{"class":263},[155,178484,177894],{"class":171},[24,178486,178487],{},"求偶数和：",[146,178489,178491],{"className":148,"code":178490,"language":150,"meta":39,"style":39},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[152,178492,178493,178501,178505,178525,178541,178550,178554],{"__ignoreMap":39},[155,178494,178495,178497,178499],{"class":157,"line":158},[155,178496,175823],{"class":171},[155,178498,317],{"class":167},[155,178500,16959],{"class":263},[155,178502,178503],{"class":157,"line":46},[155,178504,217],{"emptyLinePlaceholder":216},[155,178506,178507,178509,178511,178513,178515,178517,178519,178521,178523],{"class":157,"line":121},[155,178508,1125],{"class":167},[155,178510,29287],{"class":171},[155,178512,1131],{"class":167},[155,178514,2008],{"class":263},[155,178516,230],{"class":171},[155,178518,329],{"class":263},[155,178520,7589],{"class":171},[155,178522,20413],{"class":263},[155,178524,242],{"class":171},[155,178526,178527,178529,178531,178533,178535,178537,178539],{"class":157,"line":180},[155,178528,1142],{"class":167},[155,178530,29287],{"class":171},[155,178532,2938],{"class":167},[155,178534,34580],{"class":263},[155,178536,120122],{"class":167},[155,178538,1151],{"class":263},[155,178540,736],{"class":171},[155,178542,178543,178546,178548],{"class":157,"line":194},[155,178544,178545],{"class":171},"        total ",[155,178547,2351],{"class":167},[155,178549,177875],{"class":171},[155,178551,178552],{"class":157,"line":200},[155,178553,217],{"emptyLinePlaceholder":216},[155,178555,178556,178558],{"class":157,"line":213},[155,178557,15451],{"class":263},[155,178559,177894],{"class":171},[24,178561,178562],{},"也可以：",[146,178564,178566],{"className":148,"code":178565,"language":150,"meta":39,"style":39},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[152,178567,178568,178576,178580,178604,178612,178616],{"__ignoreMap":39},[155,178569,178570,178572,178574],{"class":157,"line":158},[155,178571,175823],{"class":171},[155,178573,317],{"class":167},[155,178575,16959],{"class":263},[155,178577,178578],{"class":157,"line":46},[155,178579,217],{"emptyLinePlaceholder":216},[155,178581,178582,178584,178586,178588,178590,178592,178594,178596,178598,178600,178602],{"class":157,"line":121},[155,178583,1125],{"class":167},[155,178585,29287],{"class":171},[155,178587,1131],{"class":167},[155,178589,2008],{"class":263},[155,178591,230],{"class":171},[155,178593,360],{"class":263},[155,178595,7589],{"class":171},[155,178597,20413],{"class":263},[155,178599,7589],{"class":171},[155,178601,360],{"class":263},[155,178603,242],{"class":171},[155,178605,178606,178608,178610],{"class":157,"line":180},[155,178607,177870],{"class":171},[155,178609,2351],{"class":167},[155,178611,177875],{"class":171},[155,178613,178614],{"class":157,"line":194},[155,178615,217],{"emptyLinePlaceholder":216},[155,178617,178618,178620],{"class":157,"line":200},[155,178619,15451],{"class":263},[155,178621,177894],{"class":171},[20037,178623,178625],{"id":178624},"_49-循环嵌套","4.9 循环嵌套",[24,178627,178628],{},"嵌套循环就是循环里面再写循环。",[146,178630,178632],{"className":148,"code":178631,"language":150,"meta":39,"style":39},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[152,178633,178634,178654,178674],{"__ignoreMap":39},[155,178635,178636,178638,178640,178642,178644,178646,178648,178650,178652],{"class":157,"line":158},[155,178637,1125],{"class":167},[155,178639,29287],{"class":171},[155,178641,1131],{"class":167},[155,178643,2008],{"class":263},[155,178645,230],{"class":171},[155,178647,329],{"class":263},[155,178649,7589],{"class":171},[155,178651,1264],{"class":263},[155,178653,242],{"class":171},[155,178655,178656,178658,178660,178662,178664,178666,178668,178670,178672],{"class":157,"line":46},[155,178657,2000],{"class":167},[155,178659,29348],{"class":171},[155,178661,1131],{"class":167},[155,178663,2008],{"class":263},[155,178665,230],{"class":171},[155,178667,329],{"class":263},[155,178669,7589],{"class":171},[155,178671,1264],{"class":263},[155,178673,242],{"class":171},[155,178675,178676,178678,178680,178682,178685,178687,178689,178691,178694,178696,178698,178700,178702],{"class":157,"line":121},[155,178677,2017],{"class":263},[155,178679,230],{"class":171},[155,178681,17391],{"class":167},[155,178683,178684],{"class":732},"\"i=",[155,178686,2705],{"class":263},[155,178688,20513],{"class":171},[155,178690,2711],{"class":263},[155,178692,178693],{"class":732},", j=",[155,178695,2705],{"class":263},[155,178697,20537],{"class":171},[155,178699,2711],{"class":263},[155,178701,2033],{"class":732},[155,178703,363],{"class":171},[24,178705,178706],{},"外层循环执行一次，内层循环执行完整一轮。",[20037,178708,178710],{"id":178709},"_410-九九乘法表","4.10 九九乘法表",[146,178712,178714],{"className":148,"code":178713,"language":150,"meta":39,"style":39},"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",[152,178715,178716,178736,178759,178811],{"__ignoreMap":39},[155,178717,178718,178720,178722,178724,178726,178728,178730,178732,178734],{"class":157,"line":158},[155,178719,1125],{"class":167},[155,178721,29287],{"class":171},[155,178723,1131],{"class":167},[155,178725,2008],{"class":263},[155,178727,230],{"class":171},[155,178729,329],{"class":263},[155,178731,7589],{"class":171},[155,178733,565],{"class":263},[155,178735,242],{"class":171},[155,178737,178738,178740,178742,178744,178746,178748,178750,178753,178755,178757],{"class":157,"line":46},[155,178739,2000],{"class":167},[155,178741,29348],{"class":171},[155,178743,1131],{"class":167},[155,178745,2008],{"class":263},[155,178747,230],{"class":171},[155,178749,329],{"class":263},[155,178751,178752],{"class":171},", i ",[155,178754,1274],{"class":167},[155,178756,1277],{"class":263},[155,178758,242],{"class":171},[155,178760,178761,178763,178765,178767,178769,178771,178773,178775,178777,178779,178781,178783,178785,178787,178789,178791,178793,178795,178797,178799,178801,178803,178805,178807,178809],{"class":157,"line":121},[155,178762,2017],{"class":263},[155,178764,230],{"class":171},[155,178766,17391],{"class":167},[155,178768,2033],{"class":732},[155,178770,2705],{"class":263},[155,178772,20537],{"class":171},[155,178774,2711],{"class":263},[155,178776,1563],{"class":732},[155,178778,2705],{"class":263},[155,178780,20513],{"class":171},[155,178782,2711],{"class":263},[155,178784,317],{"class":732},[155,178786,2705],{"class":263},[155,178788,118711],{"class":171},[155,178790,1563],{"class":167},[155,178792,23281],{"class":171},[155,178794,2711],{"class":263},[155,178796,2033],{"class":732},[155,178798,7589],{"class":171},[155,178800,15425],{"class":323},[155,178802,317],{"class":167},[155,178804,2033],{"class":732},[155,178806,21146],{"class":263},[155,178808,2033],{"class":732},[155,178810,363],{"class":171},[155,178812,178813,178815],{"class":157,"line":180},[155,178814,822],{"class":263},[155,178816,294],{"class":171},[24,178818,178819],{},"关键点：",[28,178821,178822,178828,178834,178840],{},[31,178823,178824,178825,178827],{},"外层 ",[152,178826,20513],{}," 控制行。",[31,178829,178830,178831,178833],{},"内层 ",[152,178832,20537],{}," 控制列。",[31,178835,178836,178837,178839],{},"每行结束后用 ",[152,178838,165035],{}," 换行。",[31,178841,178842,178845],{},[152,178843,178844],{},"end=\"\\t\""," 让同一行的内容横向排列。",[20037,178847,178849],{"id":178848},"_411-循环else","4.11 循环else",[24,178851,178852,178853,178855,178856,178858,178859,178861],{},"Python 的循环可以带 ",[152,178854,765],{},"。当循环正常结束时执行 ",[152,178857,765],{},"，如果被 ",[152,178860,21940],{}," 打断，则不执行。",[146,178863,178865],{"className":148,"code":178864,"language":150,"meta":39,"style":39},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[152,178866,178867,178887,178899,178910,178914,178920],{"__ignoreMap":39},[155,178868,178869,178871,178873,178875,178877,178879,178881,178883,178885],{"class":157,"line":158},[155,178870,1125],{"class":167},[155,178872,29287],{"class":171},[155,178874,1131],{"class":167},[155,178876,2008],{"class":263},[155,178878,230],{"class":171},[155,178880,329],{"class":263},[155,178882,7589],{"class":171},[155,178884,340],{"class":263},[155,178886,242],{"class":171},[155,178888,178889,178891,178893,178895,178897],{"class":157,"line":46},[155,178890,1142],{"class":167},[155,178892,29287],{"class":171},[155,178894,729],{"class":167},[155,178896,21925],{"class":263},[155,178898,736],{"class":171},[155,178900,178901,178903,178905,178908],{"class":157,"line":121},[155,178902,2017],{"class":263},[155,178904,230],{"class":171},[155,178906,178907],{"class":732},"\"找到了\"",[155,178909,363],{"class":171},[155,178911,178912],{"class":157,"line":180},[155,178913,1158],{"class":167},[155,178915,178916,178918],{"class":157,"line":194},[155,178917,765],{"class":167},[155,178919,736],{"class":171},[155,178921,178922,178924,178926,178929],{"class":157,"line":200},[155,178923,822],{"class":263},[155,178925,230],{"class":171},[155,178927,178928],{"class":732},"\"没找到\"",[155,178930,363],{"class":171},[24,178932,178933],{},"常用于搜索。",[146,178935,178937],{"className":148,"code":178936,"language":150,"meta":39,"style":39},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[152,178938,178939,178960,178969,178973,178985,178996,179006,179010,179016],{"__ignoreMap":39},[155,178940,178941,178944,178946,178948,178950,178952,178954,178956,178958],{"class":157,"line":158},[155,178942,178943],{"class":171},"names ",[155,178945,317],{"class":167},[155,178947,70789],{"class":171},[155,178949,168451],{"class":732},[155,178951,7589],{"class":171},[155,178953,169499],{"class":732},[155,178955,7589],{"class":171},[155,178957,178294],{"class":732},[155,178959,2845],{"class":171},[155,178961,178962,178964,178966],{"class":157,"line":46},[155,178963,130141],{"class":171},[155,178965,317],{"class":167},[155,178967,178968],{"class":732}," \"小李\"\n",[155,178970,178971],{"class":157,"line":121},[155,178972,217],{"emptyLinePlaceholder":216},[155,178974,178975,178977,178980,178982],{"class":157,"line":180},[155,178976,1125],{"class":167},[155,178978,178979],{"class":171}," name ",[155,178981,1131],{"class":167},[155,178983,178984],{"class":171}," names:\n",[155,178986,178987,178989,178991,178993],{"class":157,"line":194},[155,178988,1142],{"class":167},[155,178990,178979],{"class":171},[155,178992,729],{"class":167},[155,178994,178995],{"class":171}," target:\n",[155,178997,178998,179000,179002,179004],{"class":157,"line":200},[155,178999,2017],{"class":263},[155,179001,230],{"class":171},[155,179003,178907],{"class":732},[155,179005,363],{"class":171},[155,179007,179008],{"class":157,"line":213},[155,179009,1158],{"class":167},[155,179011,179012,179014],{"class":157,"line":220},[155,179013,765],{"class":167},[155,179015,736],{"class":171},[155,179017,179018,179020,179022,179024],{"class":157,"line":245},[155,179019,822],{"class":263},[155,179021,230],{"class":171},[155,179023,178928],{"class":732},[155,179025,363],{"class":171},[20037,179027,179029],{"id":179028},"_412-小案例登录重试","4.12 小案例：登录重试",[24,179031,141855],{},[28,179033,179034,179037,179040],{},[31,179035,179036],{},"用户最多输入 3 次密码。",[31,179038,179039],{},"密码正确则登录成功。",[31,179041,179042],{},"3 次都错误则锁定账号。",[24,179044,29864],{},[146,179046,179048],{"className":148,"code":179047,"language":150,"meta":39,"style":39},"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",[152,179049,179050,179060,179064,179080,179096,179100,179112,179123,179127,179133,179158,179164],{"__ignoreMap":39},[155,179051,179052,179055,179057],{"class":157,"line":158},[155,179053,179054],{"class":171},"password ",[155,179056,317],{"class":167},[155,179058,179059],{"class":732}," \"123456\"\n",[155,179061,179062],{"class":157,"line":46},[155,179063,217],{"emptyLinePlaceholder":216},[155,179065,179066,179068,179070,179072,179074,179076,179078],{"class":157,"line":121},[155,179067,1125],{"class":167},[155,179069,29287],{"class":171},[155,179071,1131],{"class":167},[155,179073,2008],{"class":263},[155,179075,230],{"class":171},[155,179077,4444],{"class":263},[155,179079,242],{"class":171},[155,179081,179082,179085,179087,179089,179091,179094],{"class":157,"line":180},[155,179083,179084],{"class":171},"    user_password ",[155,179086,317],{"class":167},[155,179088,79168],{"class":263},[155,179090,230],{"class":171},[155,179092,179093],{"class":732},"\"请输入密码:\"",[155,179095,363],{"class":171},[155,179097,179098],{"class":157,"line":194},[155,179099,217],{"emptyLinePlaceholder":216},[155,179101,179102,179104,179107,179109],{"class":157,"line":200},[155,179103,1142],{"class":167},[155,179105,179106],{"class":171}," user_password ",[155,179108,729],{"class":167},[155,179110,179111],{"class":171}," password:\n",[155,179113,179114,179116,179118,179121],{"class":157,"line":213},[155,179115,2017],{"class":263},[155,179117,230],{"class":171},[155,179119,179120],{"class":732},"\"登录成功\"",[155,179122,363],{"class":171},[155,179124,179125],{"class":157,"line":220},[155,179126,1158],{"class":167},[155,179128,179129,179131],{"class":157,"line":245},[155,179130,176585],{"class":167},[155,179132,736],{"class":171},[155,179134,179135,179137,179139,179141,179144,179147,179149,179151,179153,179156],{"class":157,"line":251},[155,179136,2017],{"class":263},[155,179138,230],{"class":171},[155,179140,17391],{"class":167},[155,179142,179143],{"class":732},"\"密码错误，还剩",[155,179145,179146],{"class":263},"{2",[155,179148,70834],{"class":167},[155,179150,22907],{"class":171},[155,179152,2711],{"class":263},[155,179154,179155],{"class":732},"次机会\"",[155,179157,363],{"class":171},[155,179159,179160,179162],{"class":157,"line":257},[155,179161,765],{"class":167},[155,179163,736],{"class":171},[155,179165,179166,179168,179170,179173],{"class":157,"line":270},[155,179167,822],{"class":263},[155,179169,230],{"class":171},[155,179171,179172],{"class":732},"\"账号已锁定\"",[155,179174,363],{"class":171},[20037,179176,179178],{"id":179177},"_413-小案例菜单程序","4.13 小案例：菜单程序",[146,179180,179182],{"className":148,"code":179181,"language":150,"meta":39,"style":39},"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",[152,179183,179184,179192,179203,179214,179225,179236,179247,179251,179266,179270,179282,179293,179305,179316,179328,179339,179351,179361,179365,179371],{"__ignoreMap":39},[155,179185,179186,179188,179190],{"class":157,"line":158},[155,179187,127226],{"class":167},[155,179189,113855],{"class":263},[155,179191,736],{"class":171},[155,179193,179194,179196,179198,179201],{"class":157,"line":46},[155,179195,822],{"class":263},[155,179197,230],{"class":171},[155,179199,179200],{"class":732},"\"====== 菜单 ======\"",[155,179202,363],{"class":171},[155,179204,179205,179207,179209,179212],{"class":157,"line":121},[155,179206,822],{"class":263},[155,179208,230],{"class":171},[155,179210,179211],{"class":732},"\"1. 查询余额\"",[155,179213,363],{"class":171},[155,179215,179216,179218,179220,179223],{"class":157,"line":180},[155,179217,822],{"class":263},[155,179219,230],{"class":171},[155,179221,179222],{"class":732},"\"2. 存款\"",[155,179224,363],{"class":171},[155,179226,179227,179229,179231,179234],{"class":157,"line":194},[155,179228,822],{"class":263},[155,179230,230],{"class":171},[155,179232,179233],{"class":732},"\"3. 取款\"",[155,179235,363],{"class":171},[155,179237,179238,179240,179242,179245],{"class":157,"line":200},[155,179239,822],{"class":263},[155,179241,230],{"class":171},[155,179243,179244],{"class":732},"\"0. 退出\"",[155,179246,363],{"class":171},[155,179248,179249],{"class":157,"line":213},[155,179250,217],{"emptyLinePlaceholder":216},[155,179252,179253,179256,179258,179260,179262,179264],{"class":157,"line":220},[155,179254,179255],{"class":171},"    choice ",[155,179257,317],{"class":167},[155,179259,79168],{"class":263},[155,179261,230],{"class":171},[155,179263,171636],{"class":732},[155,179265,363],{"class":171},[155,179267,179268],{"class":157,"line":245},[155,179269,217],{"emptyLinePlaceholder":216},[155,179271,179272,179274,179276,179278,179280],{"class":157,"line":251},[155,179273,1142],{"class":167},[155,179275,171649],{"class":171},[155,179277,729],{"class":167},[155,179279,171654],{"class":732},[155,179281,736],{"class":171},[155,179283,179284,179286,179288,179291],{"class":157,"line":257},[155,179285,2017],{"class":263},[155,179287,230],{"class":171},[155,179289,179290],{"class":732},"\"余额为1000元\"",[155,179292,363],{"class":171},[155,179294,179295,179297,179299,179301,179303],{"class":157,"line":270},[155,179296,8906],{"class":167},[155,179298,171649],{"class":171},[155,179300,729],{"class":167},[155,179302,171673],{"class":732},[155,179304,736],{"class":171},[155,179306,179307,179309,179311,179314],{"class":157,"line":276},[155,179308,2017],{"class":263},[155,179310,230],{"class":171},[155,179312,179313],{"class":732},"\"存款功能\"",[155,179315,363],{"class":171},[155,179317,179318,179320,179322,179324,179326],{"class":157,"line":297},[155,179319,8906],{"class":167},[155,179321,171649],{"class":171},[155,179323,729],{"class":167},[155,179325,171691],{"class":732},[155,179327,736],{"class":171},[155,179329,179330,179332,179334,179337],{"class":157,"line":302},[155,179331,2017],{"class":263},[155,179333,230],{"class":171},[155,179335,179336],{"class":732},"\"取款功能\"",[155,179338,363],{"class":171},[155,179340,179341,179343,179345,179347,179349],{"class":157,"line":308},[155,179342,8906],{"class":167},[155,179344,171649],{"class":171},[155,179346,729],{"class":167},[155,179348,171745],{"class":732},[155,179350,736],{"class":171},[155,179352,179353,179355,179357,179359],{"class":157,"line":366},[155,179354,2017],{"class":263},[155,179356,230],{"class":171},[155,179358,171756],{"class":732},[155,179360,363],{"class":171},[155,179362,179363],{"class":157,"line":379},[155,179364,1158],{"class":167},[155,179366,179367,179369],{"class":157,"line":385},[155,179368,176585],{"class":167},[155,179370,736],{"class":171},[155,179372,179373,179375,179377,179379],{"class":157,"line":415},[155,179374,2017],{"class":263},[155,179376,230],{"class":171},[155,179378,171777],{"class":732},[155,179380,363],{"class":171},[24,179382,179383,179384,179386,179387,48174],{},"菜单类程序通常使用 ",[152,179385,178085],{},"，用户选择退出时 ",[152,179388,21940],{},[20037,179390,179392],{"id":179391},"_414-易错点","4.14 易错点",[28,179394,179395,179400,179406,179414,179420],{},[31,179396,179397,179399],{},[152,179398,127226],{}," 循环必须更新控制变量。",[31,179401,179402,179405],{},[152,179403,179404],{},"range(1, 10)"," 不包含 10。",[31,179407,179408,179410,179411,179413],{},[152,179409,21940],{}," 结束整个循环，",[152,179412,173235],{}," 只跳过本轮。",[31,179415,179416,179417,179419],{},"嵌套循环中，",[152,179418,21940],{}," 只跳出当前所在的一层循环。",[31,179421,179422],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[20037,179424,179426],{"id":179425},"_415-本章练习","4.15 本章练习",[28,179428,179429,179432,179435,179438,179441],{},[31,179430,179431],{},"输出 1 到 100。",[31,179433,179434],{},"计算 1 到 100 的偶数和。",[31,179436,179437],{},"输出 100 以内能被 3 和 5 同时整除的数。",[31,179439,179440],{},"编写猜数字游戏，限制最多猜 7 次。",[31,179442,179443],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[20011,179445,179446],{},"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":39,"searchDepth":46,"depth":46,"links":179448},[179449,179450,179451,179452,179453,179457,179458,179459,179460,179461,179462,179463,179464,179465,179466],{"id":177705,"depth":46,"text":177706},{"id":177735,"depth":46,"text":177736},{"id":177824,"depth":46,"text":177825},{"id":177918,"depth":46,"text":177919},{"id":178092,"depth":46,"text":178093,"children":179454},[179455,179456],{"id":178096,"depth":121,"text":178097},{"id":178160,"depth":121,"text":178161},{"id":178224,"depth":46,"text":178225},{"id":178319,"depth":46,"text":178320},{"id":178428,"depth":46,"text":178429},{"id":178624,"depth":46,"text":178625},{"id":178709,"depth":46,"text":178710},{"id":178848,"depth":46,"text":178849},{"id":179028,"depth":46,"text":179029},{"id":179177,"depth":46,"text":179178},{"id":179391,"depth":46,"text":179392},{"id":179425,"depth":46,"text":179426},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":177697,"description":20020},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":179473,"title":179474,"body":179475,"description":20020,"extension":20021,"meta":181480,"navigation":216,"path":181481,"seo":181482,"stem":181483,"__hash__":181484},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":179476,"toc":181460},[179477,179480,179484,179487,179490,179504,179507,179521,179525,179527,179546,179548,179595,179597,179611,179615,179689,179692,179696,179699,179758,179766,179769,179822,179825,179829,179834,179889,179897,179947,179951,179956,179964,180063,180069,180073,180078,180081,180092,180133,180146,180150,180153,180189,180192,180205,180208,180268,180272,180276,180279,180330,180334,180337,180384,180390,180456,180459,180463,180466,180582,180585,180589,180592,180698,180702,180705,180743,180746,180788,180791,180851,180854,180858,181322,181325,181329,181356,181362,181423,181427,181457],[10,179478,179474],{"id":179479},"_5-函数基础",[20037,179481,179483],{"id":179482},"_51-为什么需要函数","5.1 为什么需要函数",[24,179485,179486],{},"函数用于封装一段可以重复使用的代码。",[24,179488,179489],{},"不使用函数的问题：",[28,179491,179492,179495,179498,179501],{},[31,179493,179494],{},"重复代码多。",[31,179496,179497],{},"修改逻辑时容易漏改。",[31,179499,179500],{},"主流程不清晰。",[31,179502,179503],{},"程序越写越长，难以维护。",[24,179505,179506],{},"使用函数后的好处：",[28,179508,179509,179512,179515,179518],{},[31,179510,179511],{},"提高复用性。",[31,179513,179514],{},"提高可读性。",[31,179516,179517],{},"便于调试。",[31,179519,179520],{},"便于分工。",[20037,179522,179524],{"id":179523},"_52-函数定义","5.2 函数定义",[24,179526,25045],{},[146,179528,179530],{"className":148,"code":179529,"language":150,"meta":39,"style":39},"def 函数名():\n    函数体\n",[152,179531,179532,179541],{"__ignoreMap":39},[155,179533,179534,179536,179539],{"class":157,"line":158},[155,179535,1484],{"class":167},[155,179537,179538],{"class":226}," 函数名",[155,179540,1490],{"class":171},[155,179542,179543],{"class":157,"line":46},[155,179544,179545],{"class":171},"    函数体\n",[24,179547,34960],{},[146,179549,179551],{"className":148,"code":179550,"language":150,"meta":39,"style":39},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[152,179552,179553,179562,179572,179582,179586,179590],{"__ignoreMap":39},[155,179554,179555,179557,179560],{"class":157,"line":158},[155,179556,1484],{"class":167},[155,179558,179559],{"class":226}," say_hello",[155,179561,1490],{"class":171},[155,179563,179564,179566,179568,179570],{"class":157,"line":46},[155,179565,822],{"class":263},[155,179567,230],{"class":171},[155,179569,25707],{"class":732},[155,179571,363],{"class":171},[155,179573,179574,179576,179578,179580],{"class":157,"line":121},[155,179575,822],{"class":263},[155,179577,230],{"class":171},[155,179579,165202],{"class":732},[155,179581,363],{"class":171},[155,179583,179584],{"class":157,"line":180},[155,179585,217],{"emptyLinePlaceholder":216},[155,179587,179588],{"class":157,"line":194},[155,179589,217],{"emptyLinePlaceholder":216},[155,179591,179592],{"class":157,"line":200},[155,179593,179594],{"class":171},"say_hello()\n",[24,179596,28874],{},[28,179598,179599,179602,179605,179608],{},[31,179600,179601],{},"函数必须先定义，再调用。",[31,179603,179604],{},"函数名遵循变量命名规则。",[31,179606,179607],{},"函数体需要缩进。",[31,179609,179610],{},"函数不调用就不会执行。",[20037,179612,179614],{"id":179613},"_53-函数调用","5.3 函数调用",[146,179616,179618],{"className":148,"code":179617,"language":150,"meta":39,"style":39},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[152,179619,179620,179629,179640,179651,179662,179672,179676,179680,179685],{"__ignoreMap":39},[155,179621,179622,179624,179627],{"class":157,"line":158},[155,179623,1484],{"class":167},[155,179625,179626],{"class":226}," print_menu",[155,179628,1490],{"class":171},[155,179630,179631,179633,179635,179638],{"class":157,"line":46},[155,179632,822],{"class":263},[155,179634,230],{"class":171},[155,179636,179637],{"class":732},"\"1. 查询\"",[155,179639,363],{"class":171},[155,179641,179642,179644,179646,179649],{"class":157,"line":121},[155,179643,822],{"class":263},[155,179645,230],{"class":171},[155,179647,179648],{"class":732},"\"2. 添加\"",[155,179650,363],{"class":171},[155,179652,179653,179655,179657,179660],{"class":157,"line":180},[155,179654,822],{"class":263},[155,179656,230],{"class":171},[155,179658,179659],{"class":732},"\"3. 删除\"",[155,179661,363],{"class":171},[155,179663,179664,179666,179668,179670],{"class":157,"line":194},[155,179665,822],{"class":263},[155,179667,230],{"class":171},[155,179669,179244],{"class":732},[155,179671,363],{"class":171},[155,179673,179674],{"class":157,"line":200},[155,179675,217],{"emptyLinePlaceholder":216},[155,179677,179678],{"class":157,"line":213},[155,179679,217],{"emptyLinePlaceholder":216},[155,179681,179682],{"class":157,"line":220},[155,179683,179684],{"class":171},"print_menu()\n",[155,179686,179687],{"class":157,"line":245},[155,179688,179684],{"class":171},[24,179690,179691],{},"函数可以多次调用，每次调用都会执行函数体。",[20037,179693,179695],{"id":179694},"_54-参数","5.4 参数",[24,179697,179698],{},"参数用于向函数传递数据。",[146,179700,179702],{"className":148,"code":179701,"language":150,"meta":39,"style":39},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[152,179703,179704,179713,179733,179737,179741,179750],{"__ignoreMap":39},[155,179705,179706,179708,179710],{"class":157,"line":158},[155,179707,1484],{"class":167},[155,179709,179559],{"class":226},[155,179711,179712],{"class":171},"(name):\n",[155,179714,179715,179717,179719,179721,179723,179725,179727,179729,179731],{"class":157,"line":46},[155,179716,822],{"class":263},[155,179718,230],{"class":171},[155,179720,17391],{"class":167},[155,179722,175617],{"class":732},[155,179724,2705],{"class":263},[155,179726,98373],{"class":171},[155,179728,2711],{"class":263},[155,179730,2033],{"class":732},[155,179732,363],{"class":171},[155,179734,179735],{"class":157,"line":121},[155,179736,217],{"emptyLinePlaceholder":216},[155,179738,179739],{"class":157,"line":180},[155,179740,217],{"emptyLinePlaceholder":216},[155,179742,179743,179746,179748],{"class":157,"line":194},[155,179744,179745],{"class":171},"say_hello(",[155,179747,168451],{"class":732},[155,179749,363],{"class":171},[155,179751,179752,179754,179756],{"class":157,"line":200},[155,179753,179745],{"class":171},[155,179755,169499],{"class":732},[155,179757,363],{"class":171},[24,179759,179760,179762,179763,179765],{},[152,179761,98373],{}," 是形参，",[152,179764,168451],{}," 是实参。",[24,179767,179768],{},"多个参数：",[146,179770,179772],{"className":148,"code":179771,"language":150,"meta":39,"style":39},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[152,179773,179774,179782,179795,179801,179805,179809],{"__ignoreMap":39},[155,179775,179776,179778,179780],{"class":157,"line":158},[155,179777,1484],{"class":167},[155,179779,25073],{"class":226},[155,179781,169656],{"class":171},[155,179783,179784,179787,179789,179791,179793],{"class":157,"line":46},[155,179785,179786],{"class":171},"    result ",[155,179788,317],{"class":167},[155,179790,30697],{"class":171},[155,179792,1274],{"class":167},[155,179794,169667],{"class":171},[155,179796,179797,179799],{"class":157,"line":121},[155,179798,822],{"class":263},[155,179800,95148],{"class":171},[155,179802,179803],{"class":157,"line":180},[155,179804,217],{"emptyLinePlaceholder":216},[155,179806,179807],{"class":157,"line":194},[155,179808,217],{"emptyLinePlaceholder":216},[155,179810,179811,179814,179816,179818,179820],{"class":157,"line":200},[155,179812,179813],{"class":171},"add(",[155,179815,565],{"class":263},[155,179817,7589],{"class":171},[155,179819,3458],{"class":263},[155,179821,363],{"class":171},[24,179823,179824],{},"调用时参数数量必须匹配。",[20037,179826,179828],{"id":179827},"_55-返回值","5.5 返回值",[24,179830,179831,179833],{},[152,179832,36839],{}," 用于把函数内部的结果返回给调用者。",[146,179835,179837],{"className":148,"code":179836,"language":150,"meta":39,"style":39},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[152,179838,179839,179847,179857,179861,179865,179883],{"__ignoreMap":39},[155,179840,179841,179843,179845],{"class":157,"line":158},[155,179842,1484],{"class":167},[155,179844,25073],{"class":226},[155,179846,169656],{"class":171},[155,179848,179849,179851,179853,179855],{"class":157,"line":46},[155,179850,1692],{"class":167},[155,179852,30697],{"class":171},[155,179854,1274],{"class":167},[155,179856,169667],{"class":171},[155,179858,179859],{"class":157,"line":121},[155,179860,217],{"emptyLinePlaceholder":216},[155,179862,179863],{"class":157,"line":180},[155,179864,217],{"emptyLinePlaceholder":216},[155,179866,179867,179870,179872,179875,179877,179879,179881],{"class":157,"line":194},[155,179868,179869],{"class":171},"result ",[155,179871,317],{"class":167},[155,179873,179874],{"class":171}," add(",[155,179876,565],{"class":263},[155,179878,7589],{"class":171},[155,179880,3458],{"class":263},[155,179882,363],{"class":171},[155,179884,179885,179887],{"class":157,"line":200},[155,179886,15451],{"class":263},[155,179888,95148],{"class":171},[24,179890,179891,179892,179894,179895,48174],{},"如果函数没有写 ",[152,179893,36839],{},"，默认返回 ",[152,179896,114249],{},[146,179898,179900],{"className":148,"code":179899,"language":150,"meta":39,"style":39},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[152,179901,179902,179910,179920,179924,179928,179937],{"__ignoreMap":39},[155,179903,179904,179906,179908],{"class":157,"line":158},[155,179905,1484],{"class":167},[155,179907,179559],{"class":226},[155,179909,1490],{"class":171},[155,179911,179912,179914,179916,179918],{"class":157,"line":46},[155,179913,822],{"class":263},[155,179915,230],{"class":171},[155,179917,25707],{"class":732},[155,179919,363],{"class":171},[155,179921,179922],{"class":157,"line":121},[155,179923,217],{"emptyLinePlaceholder":216},[155,179925,179926],{"class":157,"line":180},[155,179927,217],{"emptyLinePlaceholder":216},[155,179929,179930,179932,179934],{"class":157,"line":194},[155,179931,179869],{"class":171},[155,179933,317],{"class":167},[155,179935,179936],{"class":171}," say_hello()\n",[155,179938,179939,179941,179944],{"class":157,"line":200},[155,179940,15451],{"class":263},[155,179942,179943],{"class":171},"(result)  ",[155,179945,179946],{"class":161},"# None\n",[20037,179948,179950],{"id":179949},"_56-return的作用","5.6 return的作用",[24,179952,179953,179955],{},[152,179954,36839],{}," 有两个作用：",[28,179957,179958,179961],{},[31,179959,179960],{},"返回结果。",[31,179962,179963],{},"结束函数。",[146,179965,179967],{"className":148,"code":179966,"language":150,"meta":39,"style":39},"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",[152,179968,179969,179979,179991,179998,180002,180014,180021,180025,180032,180036,180040,180051],{"__ignoreMap":39},[155,179970,179971,179973,179976],{"class":157,"line":158},[155,179972,1484],{"class":167},[155,179974,179975],{"class":226}," check_age",[155,179977,179978],{"class":171},"(age):\n",[155,179980,179981,179983,179985,179987,179989],{"class":157,"line":46},[155,179982,1142],{"class":167},[155,179984,35532],{"class":171},[155,179986,20959],{"class":167},[155,179988,1151],{"class":263},[155,179990,736],{"class":171},[155,179992,179993,179995],{"class":157,"line":121},[155,179994,709],{"class":167},[155,179996,179997],{"class":732}," \"年龄不合法\"\n",[155,179999,180000],{"class":157,"line":180},[155,180001,217],{"emptyLinePlaceholder":216},[155,180003,180004,180006,180008,180010,180012],{"class":157,"line":194},[155,180005,1142],{"class":167},[155,180007,35532],{"class":171},[155,180009,21607],{"class":167},[155,180011,174848],{"class":263},[155,180013,736],{"class":171},[155,180015,180016,180018],{"class":157,"line":200},[155,180017,709],{"class":167},[155,180019,180020],{"class":732}," \"成年人\"\n",[155,180022,180023],{"class":157,"line":213},[155,180024,217],{"emptyLinePlaceholder":216},[155,180026,180027,180029],{"class":157,"line":220},[155,180028,1692],{"class":167},[155,180030,180031],{"class":732}," \"未成年人\"\n",[155,180033,180034],{"class":157,"line":245},[155,180035,217],{"emptyLinePlaceholder":216},[155,180037,180038],{"class":157,"line":251},[155,180039,217],{"emptyLinePlaceholder":216},[155,180041,180042,180044,180047,180049],{"class":157,"line":257},[155,180043,15451],{"class":263},[155,180045,180046],{"class":171},"(check_age(",[155,180048,3458],{"class":263},[155,180050,1238],{"class":171},[155,180052,180053,180055,180057,180059,180061],{"class":157,"line":270},[155,180054,15451],{"class":263},[155,180056,180046],{"class":171},[155,180058,2039],{"class":167},[155,180060,329],{"class":263},[155,180062,1238],{"class":171},[24,180064,180065,180066,180068],{},"函数执行到 ",[152,180067,36839],{}," 后，后面的代码不会继续执行。",[20037,180070,180072],{"id":180071},"_57-none","5.7 None",[24,180074,180075,180077],{},[152,180076,114249],{}," 表示空值或没有结果。",[24,180079,180080],{},"常见使用场景：",[28,180082,180083,180086,180089],{},[31,180084,180085],{},"函数没有返回值。",[31,180087,180088],{},"变量暂时没有具体值。",[31,180090,180091],{},"表示查询不到结果。",[146,180093,180095],{"className":148,"code":180094,"language":150,"meta":39,"style":39},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[152,180096,180097,180105,180109,180122],{"__ignoreMap":39},[155,180098,180099,180101,180103],{"class":157,"line":158},[155,180100,179869],{"class":171},[155,180102,317],{"class":167},[155,180104,170735],{"class":263},[155,180106,180107],{"class":157,"line":46},[155,180108,217],{"emptyLinePlaceholder":216},[155,180110,180111,180113,180116,180118,180120],{"class":157,"line":121},[155,180112,723],{"class":167},[155,180114,180115],{"class":171}," result ",[155,180117,8539],{"class":167},[155,180119,8545],{"class":263},[155,180121,736],{"class":171},[155,180123,180124,180126,180128,180131],{"class":157,"line":180},[155,180125,822],{"class":263},[155,180127,230],{"class":171},[155,180129,180130],{"class":732},"\"没有数据\"",[155,180132,363],{"class":171},[24,180134,180135,180136,180138,180139,180142,180143,48174],{},"判断 ",[152,180137,114249],{}," 推荐使用 ",[152,180140,180141],{},"is None","，不要写成 ",[152,180144,180145],{},"== None",[20037,180147,180149],{"id":180148},"_58-函数文档字符串","5.8 函数文档字符串",[24,180151,180152],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[146,180154,180156],{"className":148,"code":180155,"language":150,"meta":39,"style":39},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[152,180157,180158,180168,180173],{"__ignoreMap":39},[155,180159,180160,180162,180165],{"class":157,"line":158},[155,180161,1484],{"class":167},[155,180163,180164],{"class":226}," calculate_bmi",[155,180166,180167],{"class":171},"(weight, height):\n",[155,180169,180170],{"class":157,"line":46},[155,180171,180172],{"class":732},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[155,180174,180175,180177,180180,180182,180185,180187],{"class":157,"line":121},[155,180176,1692],{"class":167},[155,180178,180179],{"class":171}," weight ",[155,180181,2028],{"class":167},[155,180183,180184],{"class":171}," height ",[155,180186,17347],{"class":167},[155,180188,17350],{"class":263},[24,180190,180191],{},"查看说明：",[146,180193,180195],{"className":148,"code":180194,"language":150,"meta":39,"style":39},"help(calculate_bmi)\n",[152,180196,180197],{"__ignoreMap":39},[155,180198,180199,180202],{"class":157,"line":158},[155,180200,180201],{"class":263},"help",[155,180203,180204],{"class":171},"(calculate_bmi)\n",[24,180206,180207],{},"较完整的写法：",[146,180209,180211],{"className":148,"code":180210,"language":150,"meta":39,"style":39},"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",[152,180212,180213,180221,180226,180231,180235,180240,180245,180250,180254],{"__ignoreMap":39},[155,180214,180215,180217,180219],{"class":157,"line":158},[155,180216,1484],{"class":167},[155,180218,180164],{"class":226},[155,180220,180167],{"class":171},[155,180222,180223],{"class":157,"line":46},[155,180224,180225],{"class":732},"    \"\"\"\n",[155,180227,180228],{"class":157,"line":121},[155,180229,180230],{"class":732},"    计算BMI。\n",[155,180232,180233],{"class":157,"line":180},[155,180234,217],{"emptyLinePlaceholder":216},[155,180236,180237],{"class":157,"line":194},[155,180238,180239],{"class":732},"    :param weight: 体重，单位kg\n",[155,180241,180242],{"class":157,"line":200},[155,180243,180244],{"class":732},"    :param height: 身高，单位m\n",[155,180246,180247],{"class":157,"line":213},[155,180248,180249],{"class":732},"    :return: BMI数值\n",[155,180251,180252],{"class":157,"line":220},[155,180253,180225],{"class":732},[155,180255,180256,180258,180260,180262,180264,180266],{"class":157,"line":245},[155,180257,1692],{"class":167},[155,180259,180179],{"class":171},[155,180261,2028],{"class":167},[155,180263,180184],{"class":171},[155,180265,17347],{"class":167},[155,180267,17350],{"class":263},[20037,180269,180271],{"id":180270},"_59-变量作用域","5.9 变量作用域",[14,180273,180275],{"id":180274},"_591-局部变量","5.9.1 局部变量",[24,180277,180278],{},"在函数内部定义的变量，只能在函数内部使用。",[146,180280,180282],{"className":148,"code":180281,"language":150,"meta":39,"style":39},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[152,180283,180284,180293,180301,180307,180311,180315,180320],{"__ignoreMap":39},[155,180285,180286,180288,180291],{"class":157,"line":158},[155,180287,1484],{"class":167},[155,180289,180290],{"class":226}," test",[155,180292,1490],{"class":171},[155,180294,180295,180297,180299],{"class":157,"line":46},[155,180296,15213],{"class":171},[155,180298,317],{"class":167},[155,180300,76991],{"class":263},[155,180302,180303,180305],{"class":157,"line":121},[155,180304,822],{"class":263},[155,180306,20106],{"class":171},[155,180308,180309],{"class":157,"line":180},[155,180310,217],{"emptyLinePlaceholder":216},[155,180312,180313],{"class":157,"line":194},[155,180314,217],{"emptyLinePlaceholder":216},[155,180316,180317],{"class":157,"line":200},[155,180318,180319],{"class":171},"test()\n",[155,180321,180322,180324,180327],{"class":157,"line":213},[155,180323,15451],{"class":263},[155,180325,180326],{"class":171},"(num)  ",[155,180328,180329],{"class":161},"# 报错\n",[14,180331,180333],{"id":180332},"_592-全局变量","5.9.2 全局变量",[24,180335,180336],{},"在函数外部定义的变量，可以在函数内部读取。",[146,180338,180340],{"className":148,"code":180339,"language":150,"meta":39,"style":39},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[152,180341,180342,180350,180354,180358,180366,180372,180376,180380],{"__ignoreMap":39},[155,180343,180344,180346,180348],{"class":157,"line":158},[155,180345,165099],{"class":171},[155,180347,317],{"class":167},[155,180349,167916],{"class":732},[155,180351,180352],{"class":157,"line":46},[155,180353,217],{"emptyLinePlaceholder":216},[155,180355,180356],{"class":157,"line":121},[155,180357,217],{"emptyLinePlaceholder":216},[155,180359,180360,180362,180364],{"class":157,"line":180},[155,180361,1484],{"class":167},[155,180363,179559],{"class":226},[155,180365,1490],{"class":171},[155,180367,180368,180370],{"class":157,"line":194},[155,180369,822],{"class":263},[155,180371,169223],{"class":171},[155,180373,180374],{"class":157,"line":200},[155,180375,217],{"emptyLinePlaceholder":216},[155,180377,180378],{"class":157,"line":213},[155,180379,217],{"emptyLinePlaceholder":216},[155,180381,180382],{"class":157,"line":220},[155,180383,179594],{"class":171},[24,180385,180386,180387,48174],{},"如果要在函数内部修改全局变量，需要 ",[152,180388,180389],{},"global",[146,180391,180393],{"className":148,"code":180392,"language":150,"meta":39,"style":39},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[152,180394,180395,180403,180407,180411,180420,180428,180436,180440,180444,180449],{"__ignoreMap":39},[155,180396,180397,180399,180401],{"class":157,"line":158},[155,180398,165254],{"class":171},[155,180400,317],{"class":167},[155,180402,16959],{"class":263},[155,180404,180405],{"class":157,"line":46},[155,180406,217],{"emptyLinePlaceholder":216},[155,180408,180409],{"class":157,"line":121},[155,180410,217],{"emptyLinePlaceholder":216},[155,180412,180413,180415,180418],{"class":157,"line":180},[155,180414,1484],{"class":167},[155,180416,180417],{"class":226}," add_count",[155,180419,1490],{"class":171},[155,180421,180422,180425],{"class":157,"line":194},[155,180423,180424],{"class":167},"    global",[155,180426,180427],{"class":171}," count\n",[155,180429,180430,180432,180434],{"class":157,"line":200},[155,180431,177996],{"class":171},[155,180433,2351],{"class":167},[155,180435,74262],{"class":263},[155,180437,180438],{"class":157,"line":213},[155,180439,217],{"emptyLinePlaceholder":216},[155,180441,180442],{"class":157,"line":220},[155,180443,217],{"emptyLinePlaceholder":216},[155,180445,180446],{"class":157,"line":245},[155,180447,180448],{"class":171},"add_count()\n",[155,180450,180451,180453],{"class":157,"line":251},[155,180452,15451],{"class":263},[155,180454,180455],{"class":171},"(count)\n",[24,180457,180458],{},"不建议大量使用全局变量，项目变大后很难维护。",[20037,180460,180462],{"id":180461},"_510-函数嵌套调用","5.10 函数嵌套调用",[24,180464,180465],{},"一个函数中可以调用另一个函数。",[146,180467,180469],{"className":148,"code":180468,"language":150,"meta":39,"style":39},"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",[152,180470,180471,180480,180494,180498,180502,180511,180516,180536,180557,180561,180565,180569],{"__ignoreMap":39},[155,180472,180473,180475,180478],{"class":157,"line":158},[155,180474,1484],{"class":167},[155,180476,180477],{"class":226}," print_line",[155,180479,1490],{"class":171},[155,180481,180482,180484,180486,180488,180490,180492],{"class":157,"line":46},[155,180483,822],{"class":263},[155,180485,230],{"class":171},[155,180487,2053],{"class":732},[155,180489,26381],{"class":167},[155,180491,97228],{"class":263},[155,180493,363],{"class":171},[155,180495,180496],{"class":157,"line":121},[155,180497,217],{"emptyLinePlaceholder":216},[155,180499,180500],{"class":157,"line":180},[155,180501,217],{"emptyLinePlaceholder":216},[155,180503,180504,180506,180509],{"class":157,"line":194},[155,180505,1484],{"class":167},[155,180507,180508],{"class":226}," print_info",[155,180510,167938],{"class":171},[155,180512,180513],{"class":157,"line":200},[155,180514,180515],{"class":171},"    print_line()\n",[155,180517,180518,180520,180522,180524,180526,180528,180530,180532,180534],{"class":157,"line":213},[155,180519,822],{"class":263},[155,180521,230],{"class":171},[155,180523,17391],{"class":167},[155,180525,175245],{"class":732},[155,180527,2705],{"class":263},[155,180529,98373],{"class":171},[155,180531,2711],{"class":263},[155,180533,2033],{"class":732},[155,180535,363],{"class":171},[155,180537,180538,180540,180542,180544,180547,180549,180551,180553,180555],{"class":157,"line":220},[155,180539,822],{"class":263},[155,180541,230],{"class":171},[155,180543,17391],{"class":167},[155,180545,180546],{"class":732},"\"年龄:",[155,180548,2705],{"class":263},[155,180550,88784],{"class":171},[155,180552,2711],{"class":263},[155,180554,2033],{"class":732},[155,180556,363],{"class":171},[155,180558,180559],{"class":157,"line":245},[155,180560,180515],{"class":171},[155,180562,180563],{"class":157,"line":251},[155,180564,217],{"emptyLinePlaceholder":216},[155,180566,180567],{"class":157,"line":257},[155,180568,217],{"emptyLinePlaceholder":216},[155,180570,180571,180574,180576,180578,180580],{"class":157,"line":270},[155,180572,180573],{"class":171},"print_info(",[155,180575,168451],{"class":732},[155,180577,7589],{"class":171},[155,180579,20709],{"class":263},[155,180581,363],{"class":171},[24,180583,180584],{},"这种方式可以把小功能组合成大功能。",[20037,180586,180588],{"id":180587},"_511-参数检查","5.11 参数检查",[24,180590,180591],{},"函数内部可以检查参数是否合法。",[146,180593,180595],{"className":148,"code":180594,"language":150,"meta":39,"style":39},"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",[152,180596,180597,180606,180618,180624,180634,180638,180642,180659,180663,180675,180686,180692],{"__ignoreMap":39},[155,180598,180599,180601,180604],{"class":157,"line":158},[155,180600,1484],{"class":167},[155,180602,180603],{"class":226}," divide",[155,180605,169656],{"class":171},[155,180607,180608,180610,180612,180614,180616],{"class":157,"line":46},[155,180609,1142],{"class":167},[155,180611,30710],{"class":171},[155,180613,729],{"class":167},[155,180615,1151],{"class":263},[155,180617,736],{"class":171},[155,180619,180620,180622],{"class":157,"line":121},[155,180621,709],{"class":167},[155,180623,170735],{"class":263},[155,180625,180626,180628,180630,180632],{"class":157,"line":180},[155,180627,1692],{"class":167},[155,180629,30697],{"class":171},[155,180631,2028],{"class":167},[155,180633,169667],{"class":171},[155,180635,180636],{"class":157,"line":194},[155,180637,217],{"emptyLinePlaceholder":216},[155,180639,180640],{"class":157,"line":200},[155,180641,217],{"emptyLinePlaceholder":216},[155,180643,180644,180646,180648,180651,180653,180655,180657],{"class":157,"line":213},[155,180645,179869],{"class":171},[155,180647,317],{"class":167},[155,180649,180650],{"class":171}," divide(",[155,180652,565],{"class":263},[155,180654,7589],{"class":171},[155,180656,1109],{"class":263},[155,180658,363],{"class":171},[155,180660,180661],{"class":157,"line":220},[155,180662,217],{"emptyLinePlaceholder":216},[155,180664,180665,180667,180669,180671,180673],{"class":157,"line":245},[155,180666,723],{"class":167},[155,180668,180115],{"class":171},[155,180670,8539],{"class":167},[155,180672,8545],{"class":263},[155,180674,736],{"class":171},[155,180676,180677,180679,180681,180684],{"class":157,"line":251},[155,180678,822],{"class":263},[155,180680,230],{"class":171},[155,180682,180683],{"class":732},"\"除数不能为0\"",[155,180685,363],{"class":171},[155,180687,180688,180690],{"class":157,"line":257},[155,180689,765],{"class":167},[155,180691,736],{"class":171},[155,180693,180694,180696],{"class":157,"line":270},[155,180695,822],{"class":263},[155,180697,95148],{"class":171},[20037,180699,180701],{"id":180700},"_512-类型提示","5.12 类型提示",[24,180703,180704],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[146,180706,180708],{"className":148,"code":180707,"language":150,"meta":39,"style":39},"def add(a: int, b: int) -> int:\n    return a + b\n",[152,180709,180710,180733],{"__ignoreMap":39},[155,180711,180712,180714,180716,180719,180721,180724,180726,180729,180731],{"class":157,"line":158},[155,180713,1484],{"class":167},[155,180715,25073],{"class":226},[155,180717,180718],{"class":171},"(a: ",[155,180720,15239],{"class":263},[155,180722,180723],{"class":171},", b: ",[155,180725,15239],{"class":263},[155,180727,180728],{"class":171},") -> ",[155,180730,15239],{"class":263},[155,180732,736],{"class":171},[155,180734,180735,180737,180739,180741],{"class":157,"line":46},[155,180736,1692],{"class":167},[155,180738,30697],{"class":171},[155,180740,1274],{"class":167},[155,180742,169667],{"class":171},[24,180744,180745],{},"字符串参数：",[146,180747,180749],{"className":148,"code":180748,"language":150,"meta":39,"style":39},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[152,180750,180751,180768],{"__ignoreMap":39},[155,180752,180753,180755,180757,180760,180762,180764,180766],{"class":157,"line":158},[155,180754,1484],{"class":167},[155,180756,179559],{"class":226},[155,180758,180759],{"class":171},"(name: ",[155,180761,21215],{"class":263},[155,180763,180728],{"class":171},[155,180765,114249],{"class":263},[155,180767,736],{"class":171},[155,180769,180770,180772,180774,180776,180778,180780,180782,180784,180786],{"class":157,"line":46},[155,180771,822],{"class":263},[155,180773,230],{"class":171},[155,180775,17391],{"class":167},[155,180777,175617],{"class":732},[155,180779,2705],{"class":263},[155,180781,98373],{"class":171},[155,180783,2711],{"class":263},[155,180785,2033],{"class":732},[155,180787,363],{"class":171},[24,180789,180790],{},"列表参数：",[146,180792,180794],{"className":148,"code":180793,"language":150,"meta":39,"style":39},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[152,180795,180796,180815,180823,180835,180844],{"__ignoreMap":39},[155,180797,180798,180800,180803,180806,180808,180811,180813],{"class":157,"line":158},[155,180799,1484],{"class":167},[155,180801,180802],{"class":226}," get_total",[155,180804,180805],{"class":171},"(numbers: list[",[155,180807,15239],{"class":263},[155,180809,180810],{"class":171},"]) -> ",[155,180812,15239],{"class":263},[155,180814,736],{"class":171},[155,180816,180817,180819,180821],{"class":157,"line":46},[155,180818,177870],{"class":171},[155,180820,317],{"class":167},[155,180822,16959],{"class":263},[155,180824,180825,180827,180830,180832],{"class":157,"line":121},[155,180826,2000],{"class":167},[155,180828,180829],{"class":171}," number ",[155,180831,1131],{"class":167},[155,180833,180834],{"class":171}," numbers:\n",[155,180836,180837,180839,180841],{"class":157,"line":180},[155,180838,178545],{"class":171},[155,180840,2351],{"class":167},[155,180842,180843],{"class":171}," number\n",[155,180845,180846,180848],{"class":157,"line":194},[155,180847,1692],{"class":167},[155,180849,180850],{"class":171}," total\n",[24,180852,180853],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[20037,180855,180857],{"id":180856},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[146,180859,180861],{"className":148,"code":180860,"language":150,"meta":39,"style":39},"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",[152,180862,180863,180873,180877,180881,180889,180900,180910,180920,180930,180940,180944,180948,180957,180979,180983,180987,180996,181002,181022,181034,181045,181049,181058,181069,181074,181078,181082,181091,181097,181116,181128,181138,181142,181153,181163,181167,181175,181186,181190,181194,181198,181206,181211,181225,181229,181241,181246,181258,181263,181275,181280,181292,181302,181306,181312],{"__ignoreMap":39},[155,180864,180865,180868,180870],{"class":157,"line":158},[155,180866,180867],{"class":171},"balance ",[155,180869,317],{"class":167},[155,180871,180872],{"class":263}," 1000\n",[155,180874,180875],{"class":157,"line":46},[155,180876,217],{"emptyLinePlaceholder":216},[155,180878,180879],{"class":157,"line":121},[155,180880,217],{"emptyLinePlaceholder":216},[155,180882,180883,180885,180887],{"class":157,"line":180},[155,180884,1484],{"class":167},[155,180886,170596],{"class":226},[155,180888,1490],{"class":171},[155,180890,180891,180893,180895,180898],{"class":157,"line":194},[155,180892,822],{"class":263},[155,180894,230],{"class":171},[155,180896,180897],{"class":732},"\"====== ATM ======\"",[155,180899,363],{"class":171},[155,180901,180902,180904,180906,180908],{"class":157,"line":200},[155,180903,822],{"class":263},[155,180905,230],{"class":171},[155,180907,179211],{"class":732},[155,180909,363],{"class":171},[155,180911,180912,180914,180916,180918],{"class":157,"line":213},[155,180913,822],{"class":263},[155,180915,230],{"class":171},[155,180917,179222],{"class":732},[155,180919,363],{"class":171},[155,180921,180922,180924,180926,180928],{"class":157,"line":220},[155,180923,822],{"class":263},[155,180925,230],{"class":171},[155,180927,179233],{"class":732},[155,180929,363],{"class":171},[155,180931,180932,180934,180936,180938],{"class":157,"line":245},[155,180933,822],{"class":263},[155,180935,230],{"class":171},[155,180937,179244],{"class":732},[155,180939,363],{"class":171},[155,180941,180942],{"class":157,"line":251},[155,180943,217],{"emptyLinePlaceholder":216},[155,180945,180946],{"class":157,"line":257},[155,180947,217],{"emptyLinePlaceholder":216},[155,180949,180950,180952,180955],{"class":157,"line":270},[155,180951,1484],{"class":167},[155,180953,180954],{"class":226}," show_balance",[155,180956,1490],{"class":171},[155,180958,180959,180961,180963,180965,180968,180970,180973,180975,180977],{"class":157,"line":276},[155,180960,822],{"class":263},[155,180962,230],{"class":171},[155,180964,17391],{"class":167},[155,180966,180967],{"class":732},"\"当前余额:",[155,180969,2705],{"class":263},[155,180971,180972],{"class":171},"balance",[155,180974,2711],{"class":263},[155,180976,175575],{"class":732},[155,180978,363],{"class":171},[155,180980,180981],{"class":157,"line":297},[155,180982,217],{"emptyLinePlaceholder":216},[155,180984,180985],{"class":157,"line":302},[155,180986,217],{"emptyLinePlaceholder":216},[155,180988,180989,180991,180994],{"class":157,"line":308},[155,180990,1484],{"class":167},[155,180992,180993],{"class":226}," save_money",[155,180995,1490],{"class":171},[155,180997,180998,181000],{"class":157,"line":366},[155,180999,180424],{"class":167},[155,181001,168662],{"class":171},[155,181003,181004,181007,181009,181011,181013,181015,181017,181020],{"class":157,"line":379},[155,181005,181006],{"class":171},"    money ",[155,181008,317],{"class":167},[155,181010,128360],{"class":263},[155,181012,230],{"class":171},[155,181014,72384],{"class":263},[155,181016,230],{"class":171},[155,181018,181019],{"class":732},"\"请输入存款金额:\"",[155,181021,1238],{"class":171},[155,181023,181024,181026,181028,181030,181032],{"class":157,"line":385},[155,181025,1142],{"class":167},[155,181027,168705],{"class":171},[155,181029,21498],{"class":167},[155,181031,1151],{"class":263},[155,181033,736],{"class":171},[155,181035,181036,181038,181040,181043],{"class":157,"line":415},[155,181037,2017],{"class":263},[155,181039,230],{"class":171},[155,181041,181042],{"class":732},"\"金额必须大于0\"",[155,181044,363],{"class":171},[155,181046,181047],{"class":157,"line":452},[155,181048,170924],{"class":167},[155,181050,181051,181054,181056],{"class":157,"line":480},[155,181052,181053],{"class":171},"    balance ",[155,181055,2351],{"class":167},[155,181057,168738],{"class":171},[155,181059,181060,181062,181064,181067],{"class":157,"line":486},[155,181061,822],{"class":263},[155,181063,230],{"class":171},[155,181065,181066],{"class":732},"\"存款成功\"",[155,181068,363],{"class":171},[155,181070,181071],{"class":157,"line":499},[155,181072,181073],{"class":171},"    show_balance()\n",[155,181075,181076],{"class":157,"line":505},[155,181077,217],{"emptyLinePlaceholder":216},[155,181079,181080],{"class":157,"line":528},[155,181081,217],{"emptyLinePlaceholder":216},[155,181083,181084,181086,181089],{"class":157,"line":549},[155,181085,1484],{"class":167},[155,181087,181088],{"class":226}," withdraw_money",[155,181090,1490],{"class":171},[155,181092,181093,181095],{"class":157,"line":570},[155,181094,180424],{"class":167},[155,181096,168662],{"class":171},[155,181098,181099,181101,181103,181105,181107,181109,181111,181114],{"class":157,"line":575},[155,181100,181006],{"class":171},[155,181102,317],{"class":167},[155,181104,128360],{"class":263},[155,181106,230],{"class":171},[155,181108,72384],{"class":263},[155,181110,230],{"class":171},[155,181112,181113],{"class":732},"\"请输入取款金额:\"",[155,181115,1238],{"class":171},[155,181117,181118,181120,181122,181124,181126],{"class":157,"line":581},[155,181119,1142],{"class":167},[155,181121,168705],{"class":171},[155,181123,21498],{"class":167},[155,181125,1151],{"class":263},[155,181127,736],{"class":171},[155,181129,181130,181132,181134,181136],{"class":157,"line":592},[155,181131,2017],{"class":263},[155,181133,230],{"class":171},[155,181135,181042],{"class":732},[155,181137,363],{"class":171},[155,181139,181140],{"class":157,"line":610},[155,181141,170924],{"class":167},[155,181143,181144,181146,181148,181150],{"class":157,"line":622},[155,181145,1142],{"class":167},[155,181147,168705],{"class":171},[155,181149,1148],{"class":167},[155,181151,181152],{"class":171}," balance:\n",[155,181154,181155,181157,181159,181161],{"class":157,"line":638},[155,181156,2017],{"class":263},[155,181158,230],{"class":171},[155,181160,168800],{"class":732},[155,181162,363],{"class":171},[155,181164,181165],{"class":157,"line":650},[155,181166,170924],{"class":167},[155,181168,181169,181171,181173],{"class":157,"line":662},[155,181170,181053],{"class":171},[155,181172,168815],{"class":167},[155,181174,168738],{"class":171},[155,181176,181177,181179,181181,181184],{"class":157,"line":678},[155,181178,822],{"class":263},[155,181180,230],{"class":171},[155,181182,181183],{"class":732},"\"取款成功\"",[155,181185,363],{"class":171},[155,181187,181188],{"class":157,"line":694},[155,181189,181073],{"class":171},[155,181191,181192],{"class":157,"line":706},[155,181193,217],{"emptyLinePlaceholder":216},[155,181195,181196],{"class":157,"line":715},[155,181197,217],{"emptyLinePlaceholder":216},[155,181199,181200,181202,181204],{"class":157,"line":720},[155,181201,127226],{"class":167},[155,181203,113855],{"class":263},[155,181205,736],{"class":171},[155,181207,181208],{"class":157,"line":739},[155,181209,181210],{"class":171},"    show_menu()\n",[155,181212,181213,181215,181217,181219,181221,181223],{"class":157,"line":745},[155,181214,179255],{"class":171},[155,181216,317],{"class":167},[155,181218,79168],{"class":263},[155,181220,230],{"class":171},[155,181222,171636],{"class":732},[155,181224,363],{"class":171},[155,181226,181227],{"class":157,"line":773},[155,181228,217],{"emptyLinePlaceholder":216},[155,181230,181231,181233,181235,181237,181239],{"class":157,"line":779},[155,181232,1142],{"class":167},[155,181234,171649],{"class":171},[155,181236,729],{"class":167},[155,181238,171654],{"class":732},[155,181240,736],{"class":171},[155,181242,181243],{"class":157,"line":785},[155,181244,181245],{"class":171},"        show_balance()\n",[155,181247,181248,181250,181252,181254,181256],{"class":157,"line":791},[155,181249,8906],{"class":167},[155,181251,171649],{"class":171},[155,181253,729],{"class":167},[155,181255,171673],{"class":732},[155,181257,736],{"class":171},[155,181259,181260],{"class":157,"line":796},[155,181261,181262],{"class":171},"        save_money()\n",[155,181264,181265,181267,181269,181271,181273],{"class":157,"line":802},[155,181266,8906],{"class":167},[155,181268,171649],{"class":171},[155,181270,729],{"class":167},[155,181272,171691],{"class":732},[155,181274,736],{"class":171},[155,181276,181277],{"class":157,"line":808},[155,181278,181279],{"class":171},"        withdraw_money()\n",[155,181281,181282,181284,181286,181288,181290],{"class":157,"line":819},[155,181283,8906],{"class":167},[155,181285,171649],{"class":171},[155,181287,729],{"class":167},[155,181289,171745],{"class":732},[155,181291,736],{"class":171},[155,181293,181294,181296,181298,181300],{"class":157,"line":1832},[155,181295,2017],{"class":263},[155,181297,230],{"class":171},[155,181299,171756],{"class":732},[155,181301,363],{"class":171},[155,181303,181304],{"class":157,"line":1838},[155,181305,1158],{"class":167},[155,181307,181308,181310],{"class":157,"line":1844},[155,181309,176585],{"class":167},[155,181311,736],{"class":171},[155,181313,181314,181316,181318,181320],{"class":157,"line":1850},[155,181315,2017],{"class":263},[155,181317,230],{"class":171},[155,181319,171777],{"class":732},[155,181321,363],{"class":171},[24,181323,181324],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[20037,181326,181328],{"id":181327},"_514-易错点","5.14 易错点",[28,181330,181331,181334,181337,181342,181347,181350],{},[31,181332,181333],{},"函数定义后必须调用才会执行。",[31,181335,181336],{},"函数名后面有括号才是调用。",[31,181338,181339,181341],{},[152,181340,36839],{}," 后面的代码不会执行。",[31,181343,181344,181345,48174],{},"没有返回值的函数默认返回 ",[152,181346,114249],{},[31,181348,181349],{},"局部变量不能在函数外部访问。",[31,181351,181352,181353,181355],{},"不要滥用 ",[152,181354,180389],{},"，更好的方式是让函数返回新值。",[24,181357,181358,181359,181361],{},"例如不用 ",[152,181360,180389],{}," 改写存款：",[146,181363,181365],{"className":148,"code":181364,"language":150,"meta":39,"style":39},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[152,181366,181367,181376,181387,181391,181395,181403,181416],{"__ignoreMap":39},[155,181368,181369,181371,181373],{"class":157,"line":158},[155,181370,1484],{"class":167},[155,181372,180993],{"class":226},[155,181374,181375],{"class":171},"(balance, money):\n",[155,181377,181378,181380,181383,181385],{"class":157,"line":46},[155,181379,1692],{"class":167},[155,181381,181382],{"class":171}," balance ",[155,181384,1274],{"class":167},[155,181386,168738],{"class":171},[155,181388,181389],{"class":157,"line":121},[155,181390,217],{"emptyLinePlaceholder":216},[155,181392,181393],{"class":157,"line":180},[155,181394,217],{"emptyLinePlaceholder":216},[155,181396,181397,181399,181401],{"class":157,"line":194},[155,181398,180867],{"class":171},[155,181400,317],{"class":167},[155,181402,180872],{"class":263},[155,181404,181405,181407,181409,181412,181414],{"class":157,"line":200},[155,181406,180867],{"class":171},[155,181408,317],{"class":167},[155,181410,181411],{"class":171}," save_money(balance, ",[155,181413,21619],{"class":263},[155,181415,363],{"class":171},[155,181417,181418,181420],{"class":157,"line":213},[155,181419,15451],{"class":263},[155,181421,181422],{"class":171},"(balance)\n",[20037,181424,181426],{"id":181425},"_515-本章练习","5.15 本章练习",[28,181428,181429,181436,181442,181448,181454],{},[31,181430,181431,181432,181435],{},"定义函数 ",[152,181433,181434],{},"print_student(name, age)","，输出学生信息。",[31,181437,181431,181438,181441],{},[152,181439,181440],{},"get_max(a, b, c)","，返回三个数中的最大值。",[31,181443,181431,181444,181447],{},[152,181445,181446],{},"is_even(num)","，判断一个数是否为偶数。",[31,181449,181431,181450,181453],{},[152,181451,181452],{},"calculate_bmi(weight, height)","，返回 BMI。",[31,181455,181456],{},"把第 4 章的菜单程序拆分成多个函数。",[20011,181458,181459],{},"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":39,"searchDepth":46,"depth":46,"links":181461},[181462,181463,181464,181465,181466,181467,181468,181469,181470,181474,181475,181476,181477,181478,181479],{"id":179482,"depth":46,"text":179483},{"id":179523,"depth":46,"text":179524},{"id":179613,"depth":46,"text":179614},{"id":179694,"depth":46,"text":179695},{"id":179827,"depth":46,"text":179828},{"id":179949,"depth":46,"text":179950},{"id":180071,"depth":46,"text":180072},{"id":180148,"depth":46,"text":180149},{"id":180270,"depth":46,"text":180271,"children":181471},[181472,181473],{"id":180274,"depth":121,"text":180275},{"id":180332,"depth":121,"text":180333},{"id":180461,"depth":46,"text":180462},{"id":180587,"depth":46,"text":180588},{"id":180700,"depth":46,"text":180701},{"id":180856,"depth":46,"text":180857},{"id":181327,"depth":46,"text":181328},{"id":181425,"depth":46,"text":181426},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":179474,"description":20020},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":181486,"title":181487,"body":181488,"description":20020,"extension":20021,"meta":184532,"navigation":216,"path":184533,"seo":184534,"stem":184535,"__hash__":184536},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":181489,"toc":184513},[181490,181493,181497,181500,181503,181607,181610,181614,181617,181697,181700,181704,181707,181767,181770,181806,181809,181824,181828,181901,181904,181959,181962,182032,182035,182119,182129,182187,182191,182236,182239,182265,182268,182374,182378,182381,182423,182426,182490,182493,182497,182500,182561,182564,182594,182597,182635,182639,182642,182651,182654,182778,182781,182822,182826,182829,182840,182880,182883,182898,182903,182906,182973,182976,183066,183070,183073,183121,183124,183151,183153,183183,183186,183206,183209,183240,183243,183276,183280,183283,183307,183310,183334,183337,183361,183365,183368,183498,183501,183581,183584,183659,183663,183666,183716,183719,183761,183764,183788,183790,183814,183817,183872,183875,183941,183945,183948,183951,183989,183992,184045,184048,184094,184097,184130,184133,184137,184456,184460,184489,184493,184510],[10,181491,181487],{"id":181492},"_6-数据容器",[20037,181494,181496],{"id":181495},"_61-什么是数据容器","6.1 什么是数据容器",[24,181498,181499],{},"数据容器用于一次保存多个数据。",[24,181501,181502],{},"常见容器：",[20222,181504,181505,181522],{},[20225,181506,181507],{},[20228,181508,181509,181511,181514,181517,181520],{},[20231,181510,45561],{},[20231,181512,181513],{},"是否有序",[20231,181515,181516],{},"是否可变",[20231,181518,181519],{},"是否允许重复",[20231,181521,47281],{},[20269,181523,181524,181542,181558,181573,181590],{},[20228,181525,181526,181529,181532,181535,181538],{},[20274,181527,181528],{},"list列表",[20274,181530,181531],{},"有序",[20274,181533,181534],{},"可变",[20274,181536,181537],{},"允许",[20274,181539,181540],{},[152,181541,173820],{},[20228,181543,181544,181547,181549,181552,181554],{},[20274,181545,181546],{},"tuple元组",[20274,181548,181531],{},[20274,181550,181551],{},"不可变",[20274,181553,181537],{},[20274,181555,181556],{},[152,181557,173833],{},[20228,181559,181560,181563,181565,181567,181569],{},[20274,181561,181562],{},"str字符串",[20274,181564,181531],{},[20274,181566,181551],{},[20274,181568,181537],{},[20274,181570,181571],{},[152,181572,174443],{},[20228,181574,181575,181578,181581,181583,181586],{},[20274,181576,181577],{},"set集合",[20274,181579,181580],{},"无序",[20274,181582,181534],{},[20274,181584,181585],{},"不允许",[20274,181587,181588],{},[152,181589,173858],{},[20228,181591,181592,181595,181597,181599,181602],{},[20274,181593,181594],{},"dict字典",[20274,181596,181531],{},[20274,181598,181534],{},[20274,181600,181601],{},"key不允许重复",[20274,181603,181604],{},[152,181605,181606],{},"{\"name\": \"小明\"}",[24,181608,181609],{},"Python 3.7 之后，字典保持插入顺序。",[20037,181611,181613],{"id":181612},"_62-列表list","6.2 列表list",[24,181615,181616],{},"列表用于保存一组有顺序的数据。",[146,181618,181620],{"className":148,"code":181619,"language":150,"meta":39,"style":39},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[152,181621,181622,181642,181667,181688],{"__ignoreMap":39},[155,181623,181624,181626,181628,181630,181632,181634,181636,181638,181640],{"class":157,"line":158},[155,181625,178943],{"class":171},[155,181627,317],{"class":167},[155,181629,70789],{"class":171},[155,181631,168451],{"class":732},[155,181633,7589],{"class":171},[155,181635,169499],{"class":732},[155,181637,7589],{"class":171},[155,181639,178294],{"class":732},[155,181641,2845],{"class":171},[155,181643,181644,181647,181649,181651,181653,181655,181657,181659,181661,181663,181665],{"class":157,"line":46},[155,181645,181646],{"class":171},"numbers ",[155,181648,317],{"class":167},[155,181650,70789],{"class":171},[155,181652,329],{"class":263},[155,181654,7589],{"class":171},[155,181656,360],{"class":263},[155,181658,7589],{"class":171},[155,181660,4444],{"class":263},[155,181662,7589],{"class":171},[155,181664,1264],{"class":263},[155,181666,2845],{"class":171},[155,181668,181669,181672,181674,181676,181678,181680,181682,181684,181686],{"class":157,"line":121},[155,181670,181671],{"class":171},"mixed ",[155,181673,317],{"class":167},[155,181675,70789],{"class":171},[155,181677,168451],{"class":732},[155,181679,7589],{"class":171},[155,181681,20709],{"class":263},[155,181683,7589],{"class":171},[155,181685,1000],{"class":263},[155,181687,2845],{"class":171},[155,181689,181690,181693,181695],{"class":157,"line":180},[155,181691,181692],{"class":171},"empty ",[155,181694,317],{"class":167},[155,181696,70401],{"class":171},[24,181698,181699],{},"推荐一个列表中保存同类数据，代码更清晰。",[20037,181701,181703],{"id":181702},"_63-列表索引","6.3 列表索引",[24,181705,181706],{},"正向索引从 0 开始：",[146,181708,181710],{"className":148,"code":181709,"language":150,"meta":39,"style":39},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[152,181711,181712,181732,181736,181747,181757],{"__ignoreMap":39},[155,181713,181714,181716,181718,181720,181722,181724,181726,181728,181730],{"class":157,"line":158},[155,181715,178943],{"class":171},[155,181717,317],{"class":167},[155,181719,70789],{"class":171},[155,181721,168451],{"class":732},[155,181723,7589],{"class":171},[155,181725,169499],{"class":732},[155,181727,7589],{"class":171},[155,181729,178294],{"class":732},[155,181731,2845],{"class":171},[155,181733,181734],{"class":157,"line":46},[155,181735,217],{"emptyLinePlaceholder":216},[155,181737,181738,181740,181743,181745],{"class":157,"line":121},[155,181739,15451],{"class":263},[155,181741,181742],{"class":171},"(names[",[155,181744,1109],{"class":263},[155,181746,17676],{"class":171},[155,181748,181749,181751,181753,181755],{"class":157,"line":180},[155,181750,15451],{"class":263},[155,181752,181742],{"class":171},[155,181754,329],{"class":263},[155,181756,17676],{"class":171},[155,181758,181759,181761,181763,181765],{"class":157,"line":194},[155,181760,15451],{"class":263},[155,181762,181742],{"class":171},[155,181764,360],{"class":263},[155,181766,17676],{"class":171},[24,181768,181769],{},"反向索引从 -1 开始：",[146,181771,181773],{"className":148,"code":181772,"language":150,"meta":39,"style":39},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[152,181774,181775,181791],{"__ignoreMap":39},[155,181776,181777,181779,181781,181783,181785,181788],{"class":157,"line":158},[155,181778,15451],{"class":263},[155,181780,181742],{"class":171},[155,181782,2039],{"class":167},[155,181784,329],{"class":263},[155,181786,181787],{"class":171},"])  ",[155,181789,181790],{"class":161},"# 小刚\n",[155,181792,181793,181795,181797,181799,181801,181803],{"class":157,"line":46},[155,181794,15451],{"class":263},[155,181796,181742],{"class":171},[155,181798,2039],{"class":167},[155,181800,360],{"class":263},[155,181802,181787],{"class":171},[155,181804,181805],{"class":161},"# 小红\n",[24,181807,181808],{},"索引越界会报错：",[146,181810,181812],{"className":148,"code":181811,"language":150,"meta":39,"style":39},"print(names[3])\n",[152,181813,181814],{"__ignoreMap":39},[155,181815,181816,181818,181820,181822],{"class":157,"line":158},[155,181817,15451],{"class":263},[155,181819,181742],{"class":171},[155,181821,4444],{"class":263},[155,181823,17676],{"class":171},[20037,181825,181827],{"id":181826},"_64-列表常用方法","6.4 列表常用方法",[146,181829,181831],{"className":148,"code":181830,"language":150,"meta":39,"style":39},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[152,181832,181833,181849,181853,181862,181876,181890,181894],{"__ignoreMap":39},[155,181834,181835,181837,181839,181841,181843,181845,181847],{"class":157,"line":158},[155,181836,178943],{"class":171},[155,181838,317],{"class":167},[155,181840,70789],{"class":171},[155,181842,168451],{"class":732},[155,181844,7589],{"class":171},[155,181846,169499],{"class":732},[155,181848,2845],{"class":171},[155,181850,181851],{"class":157,"line":46},[155,181852,217],{"emptyLinePlaceholder":216},[155,181854,181855,181858,181860],{"class":157,"line":121},[155,181856,181857],{"class":171},"names.append(",[155,181859,178294],{"class":732},[155,181861,363],{"class":171},[155,181863,181864,181867,181869,181871,181874],{"class":157,"line":180},[155,181865,181866],{"class":171},"names.insert(",[155,181868,329],{"class":263},[155,181870,7589],{"class":171},[155,181872,181873],{"class":732},"\"小李\"",[155,181875,363],{"class":171},[155,181877,181878,181881,181883,181885,181888],{"class":157,"line":194},[155,181879,181880],{"class":171},"names.extend([",[155,181882,28532],{"class":732},[155,181884,7589],{"class":171},[155,181886,181887],{"class":732},"\"小赵\"",[155,181889,17676],{"class":171},[155,181891,181892],{"class":157,"line":200},[155,181893,217],{"emptyLinePlaceholder":216},[155,181895,181896,181898],{"class":157,"line":213},[155,181897,15451],{"class":263},[155,181899,181900],{"class":171},"(names)\n",[24,181902,181903],{},"删除元素：",[146,181905,181907],{"className":148,"code":181906,"language":150,"meta":39,"style":39},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[152,181908,181909,181918,181928,181942,181954],{"__ignoreMap":39},[155,181910,181911,181914,181916],{"class":157,"line":158},[155,181912,181913],{"class":171},"names.remove(",[155,181915,169499],{"class":732},[155,181917,363],{"class":171},[155,181919,181920,181923,181925],{"class":157,"line":46},[155,181921,181922],{"class":171},"last ",[155,181924,317],{"class":167},[155,181926,181927],{"class":171}," names.pop()\n",[155,181929,181930,181933,181935,181938,181940],{"class":157,"line":121},[155,181931,181932],{"class":171},"first ",[155,181934,317],{"class":167},[155,181936,181937],{"class":171}," names.pop(",[155,181939,1109],{"class":263},[155,181941,363],{"class":171},[155,181943,181944,181947,181950,181952],{"class":157,"line":180},[155,181945,181946],{"class":167},"del",[155,181948,181949],{"class":171}," names[",[155,181951,1109],{"class":263},[155,181953,2845],{"class":171},[155,181955,181956],{"class":157,"line":194},[155,181957,181958],{"class":171},"names.clear()\n",[24,181960,181961],{},"查询和统计：",[146,181963,181965],{"className":148,"code":181964,"language":150,"meta":39,"style":39},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[152,181966,181967,181995,181999,182010,182021],{"__ignoreMap":39},[155,181968,181969,181971,181973,181975,181977,181979,181981,181983,181985,181987,181989,181991,181993],{"class":157,"line":158},[155,181970,181646],{"class":171},[155,181972,317],{"class":167},[155,181974,70789],{"class":171},[155,181976,329],{"class":263},[155,181978,7589],{"class":171},[155,181980,360],{"class":263},[155,181982,7589],{"class":171},[155,181984,4444],{"class":263},[155,181986,7589],{"class":171},[155,181988,360],{"class":263},[155,181990,7589],{"class":171},[155,181992,1264],{"class":263},[155,181994,2845],{"class":171},[155,181996,181997],{"class":157,"line":46},[155,181998,217],{"emptyLinePlaceholder":216},[155,182000,182001,182003,182006,182008],{"class":157,"line":121},[155,182002,15451],{"class":263},[155,182004,182005],{"class":171},"(numbers.index(",[155,182007,4444],{"class":263},[155,182009,1238],{"class":171},[155,182011,182012,182014,182017,182019],{"class":157,"line":180},[155,182013,15451],{"class":263},[155,182015,182016],{"class":171},"(numbers.count(",[155,182018,360],{"class":263},[155,182020,1238],{"class":171},[155,182022,182023,182025,182027,182029],{"class":157,"line":194},[155,182024,15451],{"class":263},[155,182026,230],{"class":171},[155,182028,1253],{"class":263},[155,182030,182031],{"class":171},"(numbers))\n",[24,182033,182034],{},"排序：",[146,182036,182038],{"className":148,"code":182037,"language":150,"meta":39,"style":39},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[152,182039,182040,182064,182068,182073,182080,182084,182098,182104,182108,182113],{"__ignoreMap":39},[155,182041,182042,182044,182046,182048,182050,182052,182054,182056,182058,182060,182062],{"class":157,"line":158},[155,182043,181646],{"class":171},[155,182045,317],{"class":167},[155,182047,70789],{"class":171},[155,182049,4444],{"class":263},[155,182051,7589],{"class":171},[155,182053,329],{"class":263},[155,182055,7589],{"class":171},[155,182057,350],{"class":263},[155,182059,7589],{"class":171},[155,182061,360],{"class":263},[155,182063,2845],{"class":171},[155,182065,182066],{"class":157,"line":46},[155,182067,217],{"emptyLinePlaceholder":216},[155,182069,182070],{"class":157,"line":121},[155,182071,182072],{"class":171},"numbers.sort()\n",[155,182074,182075,182077],{"class":157,"line":180},[155,182076,15451],{"class":263},[155,182078,182079],{"class":171},"(numbers)\n",[155,182081,182082],{"class":157,"line":194},[155,182083,217],{"emptyLinePlaceholder":216},[155,182085,182086,182089,182092,182094,182096],{"class":157,"line":200},[155,182087,182088],{"class":171},"numbers.sort(",[155,182090,182091],{"class":323},"reverse",[155,182093,317],{"class":167},[155,182095,1000],{"class":263},[155,182097,363],{"class":171},[155,182099,182100,182102],{"class":157,"line":213},[155,182101,15451],{"class":263},[155,182103,182079],{"class":171},[155,182105,182106],{"class":157,"line":220},[155,182107,217],{"emptyLinePlaceholder":216},[155,182109,182110],{"class":157,"line":245},[155,182111,182112],{"class":171},"numbers.reverse()\n",[155,182114,182115,182117],{"class":157,"line":251},[155,182116,15451],{"class":263},[155,182118,182079],{"class":171},[24,182120,182121,182124,182125,182128],{},[152,182122,182123],{},"sort()"," 会修改原列表，",[152,182126,182127],{},"sorted()"," 返回新列表。",[146,182130,182132],{"className":148,"code":182131,"language":150,"meta":39,"style":39},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[152,182133,182134,182158,182170,182174,182180],{"__ignoreMap":39},[155,182135,182136,182138,182140,182142,182144,182146,182148,182150,182152,182154,182156],{"class":157,"line":158},[155,182137,181646],{"class":171},[155,182139,317],{"class":167},[155,182141,70789],{"class":171},[155,182143,4444],{"class":263},[155,182145,7589],{"class":171},[155,182147,329],{"class":263},[155,182149,7589],{"class":171},[155,182151,350],{"class":263},[155,182153,7589],{"class":171},[155,182155,360],{"class":263},[155,182157,2845],{"class":171},[155,182159,182160,182163,182165,182168],{"class":157,"line":46},[155,182161,182162],{"class":171},"new_numbers ",[155,182164,317],{"class":167},[155,182166,182167],{"class":263}," sorted",[155,182169,182079],{"class":171},[155,182171,182172],{"class":157,"line":121},[155,182173,217],{"emptyLinePlaceholder":216},[155,182175,182176,182178],{"class":157,"line":180},[155,182177,15451],{"class":263},[155,182179,182079],{"class":171},[155,182181,182182,182184],{"class":157,"line":194},[155,182183,15451],{"class":263},[155,182185,182186],{"class":171},"(new_numbers)\n",[20037,182188,182190],{"id":182189},"_65-列表遍历","6.5 列表遍历",[146,182192,182194],{"className":148,"code":182193,"language":150,"meta":39,"style":39},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[152,182195,182196,182216,182220,182230],{"__ignoreMap":39},[155,182197,182198,182200,182202,182204,182206,182208,182210,182212,182214],{"class":157,"line":158},[155,182199,178943],{"class":171},[155,182201,317],{"class":167},[155,182203,70789],{"class":171},[155,182205,168451],{"class":732},[155,182207,7589],{"class":171},[155,182209,169499],{"class":732},[155,182211,7589],{"class":171},[155,182213,178294],{"class":732},[155,182215,2845],{"class":171},[155,182217,182218],{"class":157,"line":46},[155,182219,217],{"emptyLinePlaceholder":216},[155,182221,182222,182224,182226,182228],{"class":157,"line":121},[155,182223,1125],{"class":167},[155,182225,178979],{"class":171},[155,182227,1131],{"class":167},[155,182229,178984],{"class":171},[155,182231,182232,182234],{"class":157,"line":180},[155,182233,822],{"class":263},[155,182235,169223],{"class":171},[24,182237,182238],{},"需要索引时：",[146,182240,182242],{"className":148,"code":182241,"language":150,"meta":39,"style":39},"for index, name in enumerate(names):\n    print(index, name)\n",[152,182243,182244,182258],{"__ignoreMap":39},[155,182245,182246,182248,182251,182253,182255],{"class":157,"line":158},[155,182247,1125],{"class":167},[155,182249,182250],{"class":171}," index, name ",[155,182252,1131],{"class":167},[155,182254,1134],{"class":263},[155,182256,182257],{"class":171},"(names):\n",[155,182259,182260,182262],{"class":157,"line":46},[155,182261,822],{"class":263},[155,182263,182264],{"class":171},"(index, name)\n",[24,182266,182267],{},"统计总分：",[146,182269,182271],{"className":148,"code":182270,"language":150,"meta":39,"style":39},"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",[152,182272,182273,182298,182306,182310,182321,182329,182333,182350],{"__ignoreMap":39},[155,182274,182275,182278,182280,182282,182284,182286,182288,182290,182292,182294,182296],{"class":157,"line":158},[155,182276,182277],{"class":171},"scores ",[155,182279,317],{"class":167},[155,182281,70789],{"class":171},[155,182283,20915],{"class":263},[155,182285,7589],{"class":171},[155,182287,20792],{"class":263},[155,182289,7589],{"class":171},[155,182291,20333],{"class":263},[155,182293,7589],{"class":171},[155,182295,20624],{"class":263},[155,182297,2845],{"class":171},[155,182299,182300,182302,182304],{"class":157,"line":46},[155,182301,175823],{"class":171},[155,182303,317],{"class":167},[155,182305,16959],{"class":263},[155,182307,182308],{"class":157,"line":121},[155,182309,217],{"emptyLinePlaceholder":216},[155,182311,182312,182314,182316,182318],{"class":157,"line":180},[155,182313,1125],{"class":167},[155,182315,176346],{"class":171},[155,182317,1131],{"class":167},[155,182319,182320],{"class":171}," scores:\n",[155,182322,182323,182325,182327],{"class":157,"line":194},[155,182324,177870],{"class":171},[155,182326,2351],{"class":167},[155,182328,21489],{"class":171},[155,182330,182331],{"class":157,"line":200},[155,182332,217],{"emptyLinePlaceholder":216},[155,182334,182335,182338,182340,182343,182345,182347],{"class":157,"line":213},[155,182336,182337],{"class":171},"avg ",[155,182339,317],{"class":167},[155,182341,182342],{"class":171}," total ",[155,182344,2028],{"class":167},[155,182346,15218],{"class":263},[155,182348,182349],{"class":171},"(scores)\n",[155,182351,182352,182354,182356,182358,182361,182363,182366,182368,182370,182372],{"class":157,"line":220},[155,182353,15451],{"class":263},[155,182355,230],{"class":171},[155,182357,17391],{"class":167},[155,182359,182360],{"class":732},"\"平均分:",[155,182362,2705],{"class":263},[155,182364,182365],{"class":171},"avg",[155,182367,175722],{"class":167},[155,182369,2711],{"class":263},[155,182371,2033],{"class":732},[155,182373,363],{"class":171},[20037,182375,182377],{"id":182376},"_66-元组tuple","6.6 元组tuple",[24,182379,182380],{},"元组和列表类似，但不可修改。",[146,182382,182384],{"className":148,"code":182383,"language":150,"meta":39,"style":39},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[152,182385,182386,182403],{"__ignoreMap":39},[155,182387,182388,182391,182393,182395,182397,182399,182401],{"class":157,"line":158},[155,182389,182390],{"class":171},"point ",[155,182392,317],{"class":167},[155,182394,21561],{"class":171},[155,182396,565],{"class":263},[155,182398,7589],{"class":171},[155,182400,3458],{"class":263},[155,182402,363],{"class":171},[155,182404,182405,182407,182409,182411,182413,182415,182417,182419,182421],{"class":157,"line":46},[155,182406,134877],{"class":171},[155,182408,317],{"class":167},[155,182410,21561],{"class":171},[155,182412,168451],{"class":732},[155,182414,7589],{"class":171},[155,182416,20709],{"class":263},[155,182418,7589],{"class":171},[155,182420,87832],{"class":732},[155,182422,363],{"class":171},[24,182424,182425],{},"单元素元组必须加逗号：",[146,182427,182429],{"className":148,"code":182428,"language":150,"meta":39,"style":39},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[152,182430,182431,182445,182458,182462,182476],{"__ignoreMap":39},[155,182432,182433,182436,182438,182440,182442],{"class":157,"line":158},[155,182434,182435],{"class":171},"t1 ",[155,182437,317],{"class":167},[155,182439,21561],{"class":171},[155,182441,565],{"class":263},[155,182443,182444],{"class":171},",)\n",[155,182446,182447,182450,182452,182454,182456],{"class":157,"line":46},[155,182448,182449],{"class":171},"t2 ",[155,182451,317],{"class":167},[155,182453,21561],{"class":171},[155,182455,565],{"class":263},[155,182457,363],{"class":171},[155,182459,182460],{"class":157,"line":121},[155,182461,217],{"emptyLinePlaceholder":216},[155,182463,182464,182466,182468,182470,182473],{"class":157,"line":180},[155,182465,15451],{"class":263},[155,182467,230],{"class":171},[155,182469,121670],{"class":263},[155,182471,182472],{"class":171},"(t1))  ",[155,182474,182475],{"class":161},"# tuple\n",[155,182477,182478,182480,182482,182484,182487],{"class":157,"line":194},[155,182479,15451],{"class":263},[155,182481,230],{"class":171},[155,182483,121670],{"class":263},[155,182485,182486],{"class":171},"(t2))  ",[155,182488,182489],{"class":161},"# int\n",[24,182491,182492],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[20037,182494,182496],{"id":182495},"_67-字符串str","6.7 字符串str",[24,182498,182499],{},"字符串也是序列，可以索引、切片和遍历。",[146,182501,182503],{"className":148,"code":182502,"language":150,"meta":39,"style":39},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[152,182504,182505,182513,182517,182528,182540,182544,182555],{"__ignoreMap":39},[155,182506,182507,182509,182511],{"class":157,"line":158},[155,182508,175007],{"class":171},[155,182510,317],{"class":167},[155,182512,178244],{"class":732},[155,182514,182515],{"class":157,"line":46},[155,182516,217],{"emptyLinePlaceholder":216},[155,182518,182519,182521,182524,182526],{"class":157,"line":121},[155,182520,15451],{"class":263},[155,182522,182523],{"class":171},"(text[",[155,182525,1109],{"class":263},[155,182527,17676],{"class":171},[155,182529,182530,182532,182534,182536,182538],{"class":157,"line":180},[155,182531,15451],{"class":263},[155,182533,182523],{"class":171},[155,182535,2039],{"class":167},[155,182537,329],{"class":263},[155,182539,17676],{"class":171},[155,182541,182542],{"class":157,"line":194},[155,182543,217],{"emptyLinePlaceholder":216},[155,182545,182546,182548,182550,182552],{"class":157,"line":200},[155,182547,1125],{"class":167},[155,182549,178255],{"class":171},[155,182551,1131],{"class":167},[155,182553,182554],{"class":171}," text:\n",[155,182556,182557,182559],{"class":157,"line":213},[155,182558,822],{"class":263},[155,182560,178266],{"class":171},[24,182562,182563],{},"字符串不可变：",[146,182565,182567],{"className":148,"code":182566,"language":150,"meta":39,"style":39},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[152,182568,182569,182577],{"__ignoreMap":39},[155,182570,182571,182573,182575],{"class":157,"line":158},[155,182572,175007],{"class":171},[155,182574,317],{"class":167},[155,182576,178244],{"class":732},[155,182578,182579,182582,182584,182586,182588,182591],{"class":157,"line":46},[155,182580,182581],{"class":171},"text[",[155,182583,1109],{"class":263},[155,182585,24309],{"class":171},[155,182587,317],{"class":167},[155,182589,182590],{"class":732}," \"P\"",[155,182592,182593],{"class":161},"  # 报错\n",[24,182595,182596],{},"如果要得到新字符串：",[146,182598,182600],{"className":148,"code":182599,"language":150,"meta":39,"style":39},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[152,182601,182602,182610,182628],{"__ignoreMap":39},[155,182603,182604,182606,182608],{"class":157,"line":158},[155,182605,175007],{"class":171},[155,182607,317],{"class":167},[155,182609,178244],{"class":732},[155,182611,182612,182614,182616,182618,182620,182623,182625],{"class":157,"line":46},[155,182613,175007],{"class":171},[155,182615,317],{"class":167},[155,182617,182590],{"class":732},[155,182619,15186],{"class":167},[155,182621,182622],{"class":171}," text[",[155,182624,329],{"class":263},[155,182626,182627],{"class":171},":]\n",[155,182629,182630,182632],{"class":157,"line":121},[155,182631,15451],{"class":263},[155,182633,182634],{"class":171},"(text)\n",[20037,182636,182638],{"id":182637},"_68-切片","6.8 切片",[24,182640,182641],{},"切片用于从序列中取一部分。",[146,182643,182645],{"className":148,"code":182644,"language":150,"meta":39,"style":39},"序列[开始:结束:步长]\n",[152,182646,182647],{"__ignoreMap":39},[155,182648,182649],{"class":157,"line":158},[155,182650,182644],{"class":171},[24,182652,182653],{},"结束位置不包含。",[146,182655,182657],{"className":148,"code":182656,"language":150,"meta":39,"style":39},"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",[152,182658,182659,182696,182700,182719,182734,182748,182762],{"__ignoreMap":39},[155,182660,182661,182664,182666,182668,182670,182672,182674,182676,182678,182680,182682,182684,182686,182688,182690,182692,182694],{"class":157,"line":158},[155,182662,182663],{"class":171},"nums ",[155,182665,317],{"class":167},[155,182667,70789],{"class":171},[155,182669,1109],{"class":263},[155,182671,7589],{"class":171},[155,182673,329],{"class":263},[155,182675,7589],{"class":171},[155,182677,360],{"class":263},[155,182679,7589],{"class":171},[155,182681,4444],{"class":263},[155,182683,7589],{"class":171},[155,182685,1264],{"class":263},[155,182687,7589],{"class":171},[155,182689,350],{"class":263},[155,182691,7589],{"class":171},[155,182693,340],{"class":263},[155,182695,2845],{"class":171},[155,182697,182698],{"class":157,"line":46},[155,182699,217],{"emptyLinePlaceholder":216},[155,182701,182702,182704,182707,182709,182711,182713,182716],{"class":157,"line":121},[155,182703,15451],{"class":263},[155,182705,182706],{"class":171},"(nums[",[155,182708,329],{"class":263},[155,182710,3017],{"class":171},[155,182712,1264],{"class":263},[155,182714,182715],{"class":171},"])    ",[155,182717,182718],{"class":161},"# [1, 2, 3]\n",[155,182720,182721,182723,182726,182728,182731],{"class":157,"line":180},[155,182722,15451],{"class":263},[155,182724,182725],{"class":171},"(nums[:",[155,182727,4444],{"class":263},[155,182729,182730],{"class":171},"])     ",[155,182732,182733],{"class":161},"# [0, 1, 2]\n",[155,182735,182736,182738,182740,182742,182745],{"class":157,"line":194},[155,182737,15451],{"class":263},[155,182739,182706],{"class":171},[155,182741,4444],{"class":263},[155,182743,182744],{"class":171},":])     ",[155,182746,182747],{"class":161},"# [3, 4, 5, 6]\n",[155,182749,182750,182752,182755,182757,182759],{"class":157,"line":200},[155,182751,15451],{"class":263},[155,182753,182754],{"class":171},"(nums[::",[155,182756,360],{"class":263},[155,182758,182715],{"class":171},[155,182760,182761],{"class":161},"# [0, 2, 4, 6]\n",[155,182763,182764,182766,182768,182770,182772,182775],{"class":157,"line":213},[155,182765,15451],{"class":263},[155,182767,182754],{"class":171},[155,182769,2039],{"class":167},[155,182771,329],{"class":263},[155,182773,182774],{"class":171},"])   ",[155,182776,182777],{"class":161},"# 反转\n",[24,182779,182780],{},"字符串切片：",[146,182782,182784],{"className":148,"code":182783,"language":150,"meta":39,"style":39},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[152,182785,182786,182795,182809],{"__ignoreMap":39},[155,182787,182788,182790,182792],{"class":157,"line":158},[155,182789,175007],{"class":171},[155,182791,317],{"class":167},[155,182793,182794],{"class":732}," \"abcdef\"\n",[155,182796,182797,182799,182801,182803,182805,182807],{"class":157,"line":46},[155,182798,15451],{"class":263},[155,182800,182523],{"class":171},[155,182802,329],{"class":263},[155,182804,3017],{"class":171},[155,182806,1264],{"class":263},[155,182808,17676],{"class":171},[155,182810,182811,182813,182816,182818,182820],{"class":157,"line":121},[155,182812,15451],{"class":263},[155,182814,182815],{"class":171},"(text[::",[155,182817,2039],{"class":167},[155,182819,329],{"class":263},[155,182821,17676],{"class":171},[20037,182823,182825],{"id":182824},"_69-集合set","6.9 集合set",[24,182827,182828],{},"集合特点：",[28,182830,182831,182834,182837],{},[31,182832,182833],{},"无序。",[31,182835,182836],{},"元素不重复。",[31,182838,182839],{},"可以做交集、并集、差集。",[146,182841,182843],{"className":148,"code":182842,"language":150,"meta":39,"style":39},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[152,182844,182845,182873],{"__ignoreMap":39},[155,182846,182847,182849,182851,182853,182855,182857,182859,182861,182863,182865,182867,182869,182871],{"class":157,"line":158},[155,182848,182663],{"class":171},[155,182850,317],{"class":167},[155,182852,24314],{"class":171},[155,182854,329],{"class":263},[155,182856,7589],{"class":171},[155,182858,360],{"class":263},[155,182860,7589],{"class":171},[155,182862,4444],{"class":263},[155,182864,7589],{"class":171},[155,182866,4444],{"class":263},[155,182868,7589],{"class":171},[155,182870,1264],{"class":263},[155,182872,21475],{"class":171},[155,182874,182875,182877],{"class":157,"line":46},[155,182876,15451],{"class":263},[155,182878,182879],{"class":171},"(nums)\n",[24,182881,182882],{},"创建空集合：",[146,182884,182886],{"className":148,"code":182885,"language":150,"meta":39,"style":39},"s = set()\n",[152,182887,182888],{"__ignoreMap":39},[155,182889,182890,182892,182894,182896],{"class":157,"line":158},[155,182891,30408],{"class":171},[155,182893,317],{"class":167},[155,182895,138285],{"class":263},[155,182897,294],{"class":171},[24,182899,28874,182900,182902],{},[152,182901,2025],{}," 是空字典，不是空集合。",[24,182904,182905],{},"集合常用操作：",[146,182907,182909],{"className":148,"code":182908,"language":150,"meta":39,"style":39},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[152,182910,182911,182931,182935,182944,182953,182962],{"__ignoreMap":39},[155,182912,182913,182915,182917,182919,182921,182923,182925,182927,182929],{"class":157,"line":158},[155,182914,30408],{"class":171},[155,182916,317],{"class":167},[155,182918,24314],{"class":171},[155,182920,329],{"class":263},[155,182922,7589],{"class":171},[155,182924,360],{"class":263},[155,182926,7589],{"class":171},[155,182928,4444],{"class":263},[155,182930,21475],{"class":171},[155,182932,182933],{"class":157,"line":46},[155,182934,217],{"emptyLinePlaceholder":216},[155,182936,182937,182940,182942],{"class":157,"line":121},[155,182938,182939],{"class":171},"s.add(",[155,182941,1264],{"class":263},[155,182943,363],{"class":171},[155,182945,182946,182949,182951],{"class":157,"line":180},[155,182947,182948],{"class":171},"s.remove(",[155,182950,360],{"class":263},[155,182952,363],{"class":171},[155,182954,182955,182958,182960],{"class":157,"line":194},[155,182956,182957],{"class":171},"s.discard(",[155,182959,565],{"class":263},[155,182961,363],{"class":171},[155,182963,182964,182966,182968,182970],{"class":157,"line":200},[155,182965,15451],{"class":263},[155,182967,230],{"class":171},[155,182969,1253],{"class":263},[155,182971,182972],{"class":171},"(s))\n",[24,182974,182975],{},"交并差：",[146,182977,182979],{"className":148,"code":182978,"language":150,"meta":39,"style":39},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[152,182980,182981,183001,183021,183025,183040,183053],{"__ignoreMap":39},[155,182982,182983,182985,182987,182989,182991,182993,182995,182997,182999],{"class":157,"line":158},[155,182984,30747],{"class":171},[155,182986,317],{"class":167},[155,182988,24314],{"class":171},[155,182990,329],{"class":263},[155,182992,7589],{"class":171},[155,182994,360],{"class":263},[155,182996,7589],{"class":171},[155,182998,4444],{"class":263},[155,183000,21475],{"class":171},[155,183002,183003,183005,183007,183009,183011,183013,183015,183017,183019],{"class":157,"line":46},[155,183004,30773],{"class":171},[155,183006,317],{"class":167},[155,183008,24314],{"class":171},[155,183010,4444],{"class":263},[155,183012,7589],{"class":171},[155,183014,1264],{"class":263},[155,183016,7589],{"class":171},[155,183018,350],{"class":263},[155,183020,21475],{"class":171},[155,183022,183023],{"class":157,"line":121},[155,183024,217],{"emptyLinePlaceholder":216},[155,183026,183027,183029,183032,183034,183037],{"class":157,"line":180},[155,183028,15451],{"class":263},[155,183030,183031],{"class":171},"(a ",[155,183033,20428],{"class":167},[155,183035,183036],{"class":171}," b)  ",[155,183038,183039],{"class":161},"# 交集\n",[155,183041,183042,183044,183046,183048,183050],{"class":157,"line":194},[155,183043,15451],{"class":263},[155,183045,183031],{"class":171},[155,183047,20970],{"class":167},[155,183049,183036],{"class":171},[155,183051,183052],{"class":161},"# 并集\n",[155,183054,183055,183057,183059,183061,183063],{"class":157,"line":200},[155,183056,15451],{"class":263},[155,183058,183031],{"class":171},[155,183060,2039],{"class":167},[155,183062,183036],{"class":171},[155,183064,183065],{"class":161},"# 差集\n",[20037,183067,183069],{"id":183068},"_610-字典dict","6.10 字典dict",[24,183071,183072],{},"字典通过 key-value 保存数据。",[146,183074,183076],{"className":148,"code":183075,"language":150,"meta":39,"style":39},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[152,183077,183078,183086,183096,183107,183117],{"__ignoreMap":39},[155,183079,183080,183082,183084],{"class":157,"line":158},[155,183081,168044],{"class":171},[155,183083,317],{"class":167},[155,183085,35397],{"class":171},[155,183087,183088,183090,183092,183094],{"class":157,"line":46},[155,183089,165583],{"class":732},[155,183091,70000],{"class":171},[155,183093,168451],{"class":732},[155,183095,990],{"class":171},[155,183097,183098,183101,183103,183105],{"class":157,"line":121},[155,183099,183100],{"class":732},"    \"age\"",[155,183102,70000],{"class":171},[155,183104,20709],{"class":263},[155,183106,990],{"class":171},[155,183108,183109,183112,183114],{"class":157,"line":180},[155,183110,183111],{"class":732},"    \"score\"",[155,183113,70000],{"class":171},[155,183115,183116],{"class":263},"95\n",[155,183118,183119],{"class":157,"line":194},[155,183120,21475],{"class":171},[24,183122,183123],{},"获取值：",[146,183125,183127],{"className":148,"code":183126,"language":150,"meta":39,"style":39},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[152,183128,183129,183140],{"__ignoreMap":39},[155,183130,183131,183133,183136,183138],{"class":157,"line":158},[155,183132,15451],{"class":263},[155,183134,183135],{"class":171},"(student[",[155,183137,81242],{"class":732},[155,183139,17676],{"class":171},[155,183141,183142,183144,183147,183149],{"class":157,"line":46},[155,183143,15451],{"class":263},[155,183145,183146],{"class":171},"(student.get(",[155,183148,81242],{"class":732},[155,183150,1238],{"class":171},[24,183152,35213],{},[146,183154,183156],{"className":148,"code":183155,"language":150,"meta":39,"style":39},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[152,183157,183158,183171],{"__ignoreMap":39},[155,183159,183160,183162,183165,183168],{"class":157,"line":158},[155,183161,171422],{"class":171},[155,183163,183164],{"class":732},"\"address\"",[155,183166,183167],{"class":171},"]     ",[155,183169,183170],{"class":161},"# key不存在会报错\n",[155,183172,183173,183176,183178,183180],{"class":157,"line":46},[155,183174,183175],{"class":171},"student.get(",[155,183177,183164],{"class":732},[155,183179,33541],{"class":171},[155,183181,183182],{"class":161},"# key不存在返回None\n",[24,183184,183185],{},"设置默认值：",[146,183187,183189],{"className":148,"code":183188,"language":150,"meta":39,"style":39},"print(student.get(\"address\", \"未知\"))\n",[152,183190,183191],{"__ignoreMap":39},[155,183192,183193,183195,183197,183199,183201,183204],{"class":157,"line":158},[155,183194,15451],{"class":263},[155,183196,183146],{"class":171},[155,183198,183164],{"class":732},[155,183200,7589],{"class":171},[155,183202,183203],{"class":732},"\"未知\"",[155,183205,1238],{"class":171},[24,183207,183208],{},"新增和修改：",[146,183210,183212],{"className":148,"code":183211,"language":150,"meta":39,"style":39},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[152,183213,183214,183227],{"__ignoreMap":39},[155,183215,183216,183218,183220,183222,183224],{"class":157,"line":158},[155,183217,171422],{"class":171},[155,183219,87687],{"class":732},[155,183221,24309],{"class":171},[155,183223,317],{"class":167},[155,183225,183226],{"class":263}," 19\n",[155,183228,183229,183231,183233,183235,183237],{"class":157,"line":46},[155,183230,171422],{"class":171},[155,183232,183164],{"class":732},[155,183234,24309],{"class":171},[155,183236,317],{"class":167},[155,183238,183239],{"class":732}," \"北京\"\n",[24,183241,183242],{},"删除：",[146,183244,183246],{"className":148,"code":183245,"language":150,"meta":39,"style":39},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[152,183247,183248,183261,183271],{"__ignoreMap":39},[155,183249,183250,183252,183254,183257,183259],{"class":157,"line":158},[155,183251,173921],{"class":171},[155,183253,317],{"class":167},[155,183255,183256],{"class":171}," student.pop(",[155,183258,170035],{"class":732},[155,183260,363],{"class":171},[155,183262,183263,183265,183267,183269],{"class":157,"line":46},[155,183264,181946],{"class":167},[155,183266,170712],{"class":171},[155,183268,87687],{"class":732},[155,183270,2845],{"class":171},[155,183272,183273],{"class":157,"line":121},[155,183274,183275],{"class":171},"student.clear()\n",[20037,183277,183279],{"id":183278},"_611-字典遍历","6.11 字典遍历",[24,183281,183282],{},"遍历 key：",[146,183284,183286],{"className":148,"code":183285,"language":150,"meta":39,"style":39},"for key in student:\n    print(key, student[key])\n",[152,183287,183288,183300],{"__ignoreMap":39},[155,183289,183290,183292,183295,183297],{"class":157,"line":158},[155,183291,1125],{"class":167},[155,183293,183294],{"class":171}," key ",[155,183296,1131],{"class":167},[155,183298,183299],{"class":171}," student:\n",[155,183301,183302,183304],{"class":157,"line":46},[155,183303,822],{"class":263},[155,183305,183306],{"class":171},"(key, student[key])\n",[24,183308,183309],{},"遍历 value：",[146,183311,183313],{"className":148,"code":183312,"language":150,"meta":39,"style":39},"for value in student.values():\n    print(value)\n",[152,183314,183315,183327],{"__ignoreMap":39},[155,183316,183317,183319,183322,183324],{"class":157,"line":158},[155,183318,1125],{"class":167},[155,183320,183321],{"class":171}," value ",[155,183323,1131],{"class":167},[155,183325,183326],{"class":171}," student.values():\n",[155,183328,183329,183331],{"class":157,"line":46},[155,183330,822],{"class":263},[155,183332,183333],{"class":171},"(value)\n",[24,183335,183336],{},"遍历 key 和 value：",[146,183338,183340],{"className":148,"code":183339,"language":150,"meta":39,"style":39},"for key, value in student.items():\n    print(key, value)\n",[152,183341,183342,183354],{"__ignoreMap":39},[155,183343,183344,183346,183349,183351],{"class":157,"line":158},[155,183345,1125],{"class":167},[155,183347,183348],{"class":171}," key, value ",[155,183350,1131],{"class":167},[155,183352,183353],{"class":171}," student.items():\n",[155,183355,183356,183358],{"class":157,"line":46},[155,183357,822],{"class":263},[155,183359,183360],{"class":171},"(key, value)\n",[20037,183362,183364],{"id":183363},"_612-嵌套容器","6.12 嵌套容器",[24,183366,183367],{},"列表中保存字典，是项目中最常见的结构之一。",[146,183369,183371],{"className":148,"code":183370,"language":150,"meta":39,"style":39},"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",[152,183372,183373,183381,183409,183437,183465,183469,183473,183483],{"__ignoreMap":39},[155,183374,183375,183377,183379],{"class":157,"line":158},[155,183376,178279],{"class":171},[155,183378,317],{"class":167},[155,183380,74010],{"class":171},[155,183382,183383,183385,183387,183389,183391,183393,183395,183397,183399,183401,183403,183405,183407],{"class":157,"line":46},[155,183384,166948],{"class":171},[155,183386,81242],{"class":732},[155,183388,70000],{"class":171},[155,183390,168451],{"class":732},[155,183392,7589],{"class":171},[155,183394,87687],{"class":732},[155,183396,70000],{"class":171},[155,183398,20709],{"class":263},[155,183400,7589],{"class":171},[155,183402,170035],{"class":732},[155,183404,70000],{"class":171},[155,183406,21034],{"class":263},[155,183408,24794],{"class":171},[155,183410,183411,183413,183415,183417,183419,183421,183423,183425,183427,183429,183431,183433,183435],{"class":157,"line":121},[155,183412,166948],{"class":171},[155,183414,81242],{"class":732},[155,183416,70000],{"class":171},[155,183418,169499],{"class":732},[155,183420,7589],{"class":171},[155,183422,87687],{"class":732},[155,183424,70000],{"class":171},[155,183426,20684],{"class":263},[155,183428,7589],{"class":171},[155,183430,170035],{"class":732},[155,183432,70000],{"class":171},[155,183434,20866],{"class":263},[155,183436,24794],{"class":171},[155,183438,183439,183441,183443,183445,183447,183449,183451,183453,183455,183457,183459,183461,183463],{"class":157,"line":180},[155,183440,166948],{"class":171},[155,183442,81242],{"class":732},[155,183444,70000],{"class":171},[155,183446,178294],{"class":732},[155,183448,7589],{"class":171},[155,183450,87687],{"class":732},[155,183452,70000],{"class":171},[155,183454,20733],{"class":263},[155,183456,7589],{"class":171},[155,183458,170035],{"class":732},[155,183460,70000],{"class":171},[155,183462,20478],{"class":263},[155,183464,24794],{"class":171},[155,183466,183467],{"class":157,"line":194},[155,183468,2845],{"class":171},[155,183470,183471],{"class":157,"line":200},[155,183472,217],{"emptyLinePlaceholder":216},[155,183474,183475,183477,183479,183481],{"class":157,"line":213},[155,183476,1125],{"class":167},[155,183478,170700],{"class":171},[155,183480,1131],{"class":167},[155,183482,170705],{"class":171},[155,183484,183485,183487,183489,183491,183494,183496],{"class":157,"line":220},[155,183486,822],{"class":263},[155,183488,183135],{"class":171},[155,183490,81242],{"class":732},[155,183492,183493],{"class":171},"], student[",[155,183495,170035],{"class":732},[155,183497,17676],{"class":171},[24,183499,183500],{},"统计平均分：",[146,183502,183504],{"className":148,"code":183503,"language":150,"meta":39,"style":39},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[152,183505,183506,183514,183518,183528,183540,183544,183559],{"__ignoreMap":39},[155,183507,183508,183510,183512],{"class":157,"line":158},[155,183509,175823],{"class":171},[155,183511,317],{"class":167},[155,183513,16959],{"class":263},[155,183515,183516],{"class":157,"line":46},[155,183517,217],{"emptyLinePlaceholder":216},[155,183519,183520,183522,183524,183526],{"class":157,"line":121},[155,183521,1125],{"class":167},[155,183523,170700],{"class":171},[155,183525,1131],{"class":167},[155,183527,170705],{"class":171},[155,183529,183530,183532,183534,183536,183538],{"class":157,"line":180},[155,183531,177870],{"class":171},[155,183533,2351],{"class":167},[155,183535,170712],{"class":171},[155,183537,170035],{"class":732},[155,183539,2845],{"class":171},[155,183541,183542],{"class":157,"line":194},[155,183543,217],{"emptyLinePlaceholder":216},[155,183545,183546,183548,183550,183552,183554,183556],{"class":157,"line":200},[155,183547,182337],{"class":171},[155,183549,317],{"class":167},[155,183551,182342],{"class":171},[155,183553,2028],{"class":167},[155,183555,15218],{"class":263},[155,183557,183558],{"class":171},"(students)\n",[155,183560,183561,183563,183565,183567,183569,183571,183573,183575,183577,183579],{"class":157,"line":213},[155,183562,15451],{"class":263},[155,183564,230],{"class":171},[155,183566,17391],{"class":167},[155,183568,182360],{"class":732},[155,183570,2705],{"class":263},[155,183572,182365],{"class":171},[155,183574,175722],{"class":167},[155,183576,2711],{"class":263},[155,183578,2033],{"class":732},[155,183580,363],{"class":171},[24,183582,183583],{},"查找学生：",[146,183585,183587],{"className":148,"code":183586,"language":150,"meta":39,"style":39},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[152,183588,183589,183604,183608,183618,183632,183638,183642,183648],{"__ignoreMap":39},[155,183590,183591,183593,183595,183597,183599,183602],{"class":157,"line":158},[155,183592,130141],{"class":171},[155,183594,317],{"class":167},[155,183596,79168],{"class":263},[155,183598,230],{"class":171},[155,183600,183601],{"class":732},"\"请输入学生姓名:\"",[155,183603,363],{"class":171},[155,183605,183606],{"class":157,"line":46},[155,183607,217],{"emptyLinePlaceholder":216},[155,183609,183610,183612,183614,183616],{"class":157,"line":121},[155,183611,1125],{"class":167},[155,183613,170700],{"class":171},[155,183615,1131],{"class":167},[155,183617,170705],{"class":171},[155,183619,183620,183622,183624,183626,183628,183630],{"class":157,"line":180},[155,183621,1142],{"class":167},[155,183623,170712],{"class":171},[155,183625,81242],{"class":732},[155,183627,24309],{"class":171},[155,183629,729],{"class":167},[155,183631,178995],{"class":171},[155,183633,183634,183636],{"class":157,"line":194},[155,183635,2017],{"class":263},[155,183637,168605],{"class":171},[155,183639,183640],{"class":157,"line":200},[155,183641,1158],{"class":167},[155,183643,183644,183646],{"class":157,"line":213},[155,183645,765],{"class":167},[155,183647,736],{"class":171},[155,183649,183650,183652,183654,183657],{"class":157,"line":220},[155,183651,822],{"class":263},[155,183653,230],{"class":171},[155,183655,183656],{"class":732},"\"没有找到\"",[155,183658,363],{"class":171},[20037,183660,183662],{"id":183661},"_613-容器通用操作","6.13 容器通用操作",[24,183664,183665],{},"长度：",[146,183667,183669],{"className":148,"code":183668,"language":150,"meta":39,"style":39},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[152,183670,183671,183690,183700],{"__ignoreMap":39},[155,183672,183673,183675,183678,183680,183682,183684,183686,183688],{"class":157,"line":158},[155,183674,1253],{"class":263},[155,183676,183677],{"class":171},"([",[155,183679,329],{"class":263},[155,183681,7589],{"class":171},[155,183683,360],{"class":263},[155,183685,7589],{"class":171},[155,183687,4444],{"class":263},[155,183689,17676],{"class":171},[155,183691,183692,183694,183696,183698],{"class":157,"line":46},[155,183693,1253],{"class":263},[155,183695,230],{"class":171},[155,183697,174443],{"class":732},[155,183699,363],{"class":171},[155,183701,183702,183704,183707,183709,183711,183713],{"class":157,"line":121},[155,183703,1253],{"class":263},[155,183705,183706],{"class":171},"({",[155,183708,81242],{"class":732},[155,183710,70000],{"class":171},[155,183712,168451],{"class":732},[155,183714,183715],{"class":171},"})\n",[24,183717,183718],{},"最大最小：",[146,183720,183722],{"className":148,"code":183721,"language":150,"meta":39,"style":39},"max([1, 2, 3])\nmin([1, 2, 3])\n",[152,183723,183724,183742],{"__ignoreMap":39},[155,183725,183726,183728,183730,183732,183734,183736,183738,183740],{"class":157,"line":158},[155,183727,25878],{"class":263},[155,183729,183677],{"class":171},[155,183731,329],{"class":263},[155,183733,7589],{"class":171},[155,183735,360],{"class":263},[155,183737,7589],{"class":171},[155,183739,4444],{"class":263},[155,183741,17676],{"class":171},[155,183743,183744,183747,183749,183751,183753,183755,183757,183759],{"class":157,"line":46},[155,183745,183746],{"class":263},"min",[155,183748,183677],{"class":171},[155,183750,329],{"class":263},[155,183752,7589],{"class":171},[155,183754,360],{"class":263},[155,183756,7589],{"class":171},[155,183758,4444],{"class":263},[155,183760,17676],{"class":171},[24,183762,183763],{},"求和：",[146,183765,183767],{"className":148,"code":183766,"language":150,"meta":39,"style":39},"sum([1, 2, 3])\n",[152,183768,183769],{"__ignoreMap":39},[155,183770,183771,183774,183776,183778,183780,183782,183784,183786],{"class":157,"line":158},[155,183772,183773],{"class":263},"sum",[155,183775,183677],{"class":171},[155,183777,329],{"class":263},[155,183779,7589],{"class":171},[155,183781,360],{"class":263},[155,183783,7589],{"class":171},[155,183785,4444],{"class":263},[155,183787,17676],{"class":171},[24,183789,182034],{},[146,183791,183793],{"className":148,"code":183792,"language":150,"meta":39,"style":39},"sorted([3, 1, 2])\n",[152,183794,183795],{"__ignoreMap":39},[155,183796,183797,183800,183802,183804,183806,183808,183810,183812],{"class":157,"line":158},[155,183798,183799],{"class":263},"sorted",[155,183801,183677],{"class":171},[155,183803,4444],{"class":263},[155,183805,7589],{"class":171},[155,183807,329],{"class":263},[155,183809,7589],{"class":171},[155,183811,360],{"class":263},[155,183813,17676],{"class":171},[24,183815,183816],{},"类型转换：",[146,183818,183820],{"className":148,"code":183819,"language":150,"meta":39,"style":39},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[152,183821,183822,183832,183850],{"__ignoreMap":39},[155,183823,183824,183826,183828,183830],{"class":157,"line":158},[155,183825,172633],{"class":263},[155,183827,230],{"class":171},[155,183829,174443],{"class":732},[155,183831,363],{"class":171},[155,183833,183834,183836,183838,183840,183842,183844,183846,183848],{"class":157,"line":46},[155,183835,173828],{"class":263},[155,183837,183677],{"class":171},[155,183839,329],{"class":263},[155,183841,7589],{"class":171},[155,183843,360],{"class":263},[155,183845,7589],{"class":171},[155,183847,4444],{"class":263},[155,183849,17676],{"class":171},[155,183851,183852,183854,183856,183858,183860,183862,183864,183866,183868,183870],{"class":157,"line":121},[155,183853,173853],{"class":263},[155,183855,183677],{"class":171},[155,183857,329],{"class":263},[155,183859,7589],{"class":171},[155,183861,329],{"class":263},[155,183863,7589],{"class":171},[155,183865,360],{"class":263},[155,183867,7589],{"class":171},[155,183869,4444],{"class":263},[155,183871,17676],{"class":171},[24,183873,183874],{},"成员判断：",[146,183876,183878],{"className":148,"code":183877,"language":150,"meta":39,"style":39},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[152,183879,183880,183897,183921],{"__ignoreMap":39},[155,183881,183882,183884,183886,183889,183892,183895],{"class":157,"line":158},[155,183883,15451],{"class":263},[155,183885,230],{"class":171},[155,183887,183888],{"class":732},"\"a\"",[155,183890,183891],{"class":167}," in",[155,183893,183894],{"class":732}," \"abc\"",[155,183896,363],{"class":171},[155,183898,183899,183901,183903,183905,183907,183909,183911,183913,183915,183917,183919],{"class":157,"line":46},[155,183900,15451],{"class":263},[155,183902,230],{"class":171},[155,183904,329],{"class":263},[155,183906,183891],{"class":167},[155,183908,70789],{"class":171},[155,183910,329],{"class":263},[155,183912,7589],{"class":171},[155,183914,360],{"class":263},[155,183916,7589],{"class":171},[155,183918,4444],{"class":263},[155,183920,17676],{"class":171},[155,183922,183923,183925,183927,183929,183931,183933,183935,183937,183939],{"class":157,"line":121},[155,183924,15451],{"class":263},[155,183926,230],{"class":171},[155,183928,81242],{"class":732},[155,183930,183891],{"class":167},[155,183932,24314],{"class":171},[155,183934,81242],{"class":732},[155,183936,70000],{"class":171},[155,183938,168451],{"class":732},[155,183940,183715],{"class":171},[20037,183942,183944],{"id":183943},"_614-推导式","6.14 推导式",[24,183946,183947],{},"推导式用于快速生成容器。",[24,183949,183950],{},"列表推导式：",[146,183952,183954],{"className":148,"code":183953,"language":150,"meta":39,"style":39},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[152,183955,183956,183983],{"__ignoreMap":39},[155,183957,183958,183960,183962,183965,183967,183969,183971,183973,183975,183977,183979,183981],{"class":157,"line":158},[155,183959,182663],{"class":171},[155,183961,317],{"class":167},[155,183963,183964],{"class":171}," [i ",[155,183966,1125],{"class":167},[155,183968,29287],{"class":171},[155,183970,1131],{"class":167},[155,183972,2008],{"class":263},[155,183974,230],{"class":171},[155,183976,329],{"class":263},[155,183978,7589],{"class":171},[155,183980,340],{"class":263},[155,183982,115863],{"class":171},[155,183984,183985,183987],{"class":157,"line":46},[155,183986,15451],{"class":263},[155,183988,182879],{"class":171},[24,183990,183991],{},"带条件：",[146,183993,183995],{"className":148,"code":183994,"language":150,"meta":39,"style":39},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[152,183996,183997,184038],{"__ignoreMap":39},[155,183998,183999,184002,184004,184006,184008,184010,184012,184014,184016,184018,184020,184022,184024,184026,184028,184030,184032,184034,184036],{"class":157,"line":158},[155,184000,184001],{"class":171},"even_nums ",[155,184003,317],{"class":167},[155,184005,183964],{"class":171},[155,184007,1125],{"class":167},[155,184009,29287],{"class":171},[155,184011,1131],{"class":167},[155,184013,2008],{"class":263},[155,184015,230],{"class":171},[155,184017,329],{"class":263},[155,184019,7589],{"class":171},[155,184021,20413],{"class":263},[155,184023,33541],{"class":171},[155,184025,723],{"class":167},[155,184027,29287],{"class":171},[155,184029,2938],{"class":167},[155,184031,34580],{"class":263},[155,184033,120122],{"class":167},[155,184035,1151],{"class":263},[155,184037,2845],{"class":171},[155,184039,184040,184042],{"class":157,"line":46},[155,184041,15451],{"class":263},[155,184043,184044],{"class":171},"(even_nums)\n",[24,184046,184047],{},"字典推导式：",[146,184049,184051],{"className":148,"code":184050,"language":150,"meta":39,"style":39},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[152,184052,184053,184087],{"__ignoreMap":39},[155,184054,184055,184058,184060,184063,184065,184067,184070,184072,184074,184076,184078,184080,184082,184084],{"class":157,"line":158},[155,184056,184057],{"class":171},"squares ",[155,184059,317],{"class":167},[155,184061,184062],{"class":171}," {i: i ",[155,184064,17347],{"class":167},[155,184066,34580],{"class":263},[155,184068,184069],{"class":167}," for",[155,184071,29287],{"class":171},[155,184073,1131],{"class":167},[155,184075,2008],{"class":263},[155,184077,230],{"class":171},[155,184079,329],{"class":263},[155,184081,7589],{"class":171},[155,184083,340],{"class":263},[155,184085,184086],{"class":171},")}\n",[155,184088,184089,184091],{"class":157,"line":46},[155,184090,15451],{"class":263},[155,184092,184093],{"class":171},"(squares)\n",[24,184095,184096],{},"集合推导式：",[146,184098,184100],{"className":148,"code":184099,"language":150,"meta":39,"style":39},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[152,184101,184102,184123],{"__ignoreMap":39},[155,184103,184104,184107,184109,184112,184114,184116,184118,184121],{"class":157,"line":158},[155,184105,184106],{"class":171},"chars ",[155,184108,317],{"class":167},[155,184110,184111],{"class":171}," {ch ",[155,184113,1125],{"class":167},[155,184115,178255],{"class":171},[155,184117,1131],{"class":167},[155,184119,184120],{"class":732}," \"hello\"",[155,184122,21475],{"class":171},[155,184124,184125,184127],{"class":157,"line":46},[155,184126,15451],{"class":263},[155,184128,184129],{"class":171},"(chars)\n",[24,184131,184132],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[20037,184134,184136],{"id":184135},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[146,184138,184140],{"className":148,"code":184139,"language":150,"meta":39,"style":39},"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",[152,184141,184142,184150,184170,184190,184210,184230,184234,184238,184246,184260,184269,184273,184283,184295,184299,184319,184328,184332,184348,184353,184357,184371,184375,184397,184433],{"__ignoreMap":39},[155,184143,184144,184146,184148],{"class":157,"line":158},[155,184145,178279],{"class":171},[155,184147,317],{"class":167},[155,184149,74010],{"class":171},[155,184151,184152,184154,184156,184158,184160,184162,184164,184166,184168],{"class":157,"line":46},[155,184153,166948],{"class":171},[155,184155,81242],{"class":732},[155,184157,70000],{"class":171},[155,184159,168451],{"class":732},[155,184161,7589],{"class":171},[155,184163,170035],{"class":732},[155,184165,70000],{"class":171},[155,184167,21034],{"class":263},[155,184169,24794],{"class":171},[155,184171,184172,184174,184176,184178,184180,184182,184184,184186,184188],{"class":157,"line":121},[155,184173,166948],{"class":171},[155,184175,81242],{"class":732},[155,184177,70000],{"class":171},[155,184179,169499],{"class":732},[155,184181,7589],{"class":171},[155,184183,170035],{"class":732},[155,184185,70000],{"class":171},[155,184187,20866],{"class":263},[155,184189,24794],{"class":171},[155,184191,184192,184194,184196,184198,184200,184202,184204,184206,184208],{"class":157,"line":180},[155,184193,166948],{"class":171},[155,184195,81242],{"class":732},[155,184197,70000],{"class":171},[155,184199,178294],{"class":732},[155,184201,7589],{"class":171},[155,184203,170035],{"class":732},[155,184205,70000],{"class":171},[155,184207,20478],{"class":263},[155,184209,24794],{"class":171},[155,184211,184212,184214,184216,184218,184220,184222,184224,184226,184228],{"class":157,"line":194},[155,184213,166948],{"class":171},[155,184215,81242],{"class":732},[155,184217,70000],{"class":171},[155,184219,181873],{"class":732},[155,184221,7589],{"class":171},[155,184223,170035],{"class":732},[155,184225,70000],{"class":171},[155,184227,20935],{"class":263},[155,184229,24794],{"class":171},[155,184231,184232],{"class":157,"line":200},[155,184233,2845],{"class":171},[155,184235,184236],{"class":157,"line":213},[155,184237,217],{"emptyLinePlaceholder":216},[155,184239,184240,184242,184244],{"class":157,"line":220},[155,184241,175823],{"class":171},[155,184243,317],{"class":167},[155,184245,16959],{"class":263},[155,184247,184248,184251,184253,184256,184258],{"class":157,"line":245},[155,184249,184250],{"class":171},"max_student ",[155,184252,317],{"class":167},[155,184254,184255],{"class":171}," students[",[155,184257,1109],{"class":263},[155,184259,2845],{"class":171},[155,184261,184262,184265,184267],{"class":157,"line":251},[155,184263,184264],{"class":171},"passed ",[155,184266,317],{"class":167},[155,184268,70401],{"class":171},[155,184270,184271],{"class":157,"line":257},[155,184272,217],{"emptyLinePlaceholder":216},[155,184274,184275,184277,184279,184281],{"class":157,"line":270},[155,184276,1125],{"class":167},[155,184278,170700],{"class":171},[155,184280,1131],{"class":167},[155,184282,170705],{"class":171},[155,184284,184285,184287,184289,184291,184293],{"class":157,"line":276},[155,184286,177870],{"class":171},[155,184288,2351],{"class":167},[155,184290,170712],{"class":171},[155,184292,170035],{"class":732},[155,184294,2845],{"class":171},[155,184296,184297],{"class":157,"line":297},[155,184298,217],{"emptyLinePlaceholder":216},[155,184300,184301,184303,184305,184307,184309,184311,184314,184316],{"class":157,"line":302},[155,184302,1142],{"class":167},[155,184304,170712],{"class":171},[155,184306,170035],{"class":732},[155,184308,24309],{"class":171},[155,184310,1148],{"class":167},[155,184312,184313],{"class":171}," max_student[",[155,184315,170035],{"class":732},[155,184317,184318],{"class":171},"]:\n",[155,184320,184321,184324,184326],{"class":157,"line":308},[155,184322,184323],{"class":171},"        max_student ",[155,184325,317],{"class":167},[155,184327,170728],{"class":171},[155,184329,184330],{"class":157,"line":366},[155,184331,217],{"emptyLinePlaceholder":216},[155,184333,184334,184336,184338,184340,184342,184344,184346],{"class":157,"line":379},[155,184335,1142],{"class":167},[155,184337,170712],{"class":171},[155,184339,170035],{"class":732},[155,184341,24309],{"class":171},[155,184343,21607],{"class":167},[155,184345,176400],{"class":263},[155,184347,736],{"class":171},[155,184349,184350],{"class":157,"line":385},[155,184351,184352],{"class":171},"        passed.append(student)\n",[155,184354,184355],{"class":157,"line":415},[155,184356,217],{"emptyLinePlaceholder":216},[155,184358,184359,184361,184363,184365,184367,184369],{"class":157,"line":452},[155,184360,182337],{"class":171},[155,184362,317],{"class":167},[155,184364,182342],{"class":171},[155,184366,2028],{"class":167},[155,184368,15218],{"class":263},[155,184370,183558],{"class":171},[155,184372,184373],{"class":157,"line":480},[155,184374,217],{"emptyLinePlaceholder":216},[155,184376,184377,184379,184381,184383,184385,184387,184389,184391,184393,184395],{"class":157,"line":486},[155,184378,15451],{"class":263},[155,184380,230],{"class":171},[155,184382,17391],{"class":167},[155,184384,182360],{"class":732},[155,184386,2705],{"class":263},[155,184388,182365],{"class":171},[155,184390,175722],{"class":167},[155,184392,2711],{"class":263},[155,184394,2033],{"class":732},[155,184396,363],{"class":171},[155,184398,184399,184401,184403,184405,184408,184410,184413,184415,184417,184419,184421,184423,184425,184427,184429,184431],{"class":157,"line":499},[155,184400,15451],{"class":263},[155,184402,230],{"class":171},[155,184404,17391],{"class":167},[155,184406,184407],{"class":732},"\"最高分学生:",[155,184409,2705],{"class":263},[155,184411,184412],{"class":171},"max_student[",[155,184414,171445],{"class":732},[155,184416,2813],{"class":171},[155,184418,2711],{"class":263},[155,184420,24314],{"class":263},[155,184422,184412],{"class":171},[155,184424,171483],{"class":732},[155,184426,2813],{"class":171},[155,184428,2711],{"class":263},[155,184430,2033],{"class":732},[155,184432,363],{"class":171},[155,184434,184435,184437,184439,184441,184444,184447,184450,184452,184454],{"class":157,"line":505},[155,184436,15451],{"class":263},[155,184438,230],{"class":171},[155,184440,17391],{"class":167},[155,184442,184443],{"class":732},"\"及格人数:",[155,184445,184446],{"class":263},"{len",[155,184448,184449],{"class":171},"(passed)",[155,184451,2711],{"class":263},[155,184453,2033],{"class":732},[155,184455,363],{"class":171},[20037,184457,184459],{"id":184458},"_616-易错点","6.16 易错点",[28,184461,184462,184465,184468,184471,184477,184486],{},[31,184463,184464],{},"列表可变，元组和字符串不可变。",[31,184466,184467],{},"切片结束位置不包含。",[31,184469,184470],{},"字典通过 key 取值，不是通过索引。",[31,184472,184473,184474,48174],{},"空集合要用 ",[152,184475,184476],{},"set()",[31,184478,122929,184479,184482,184483,48174],{},[152,184480,184481],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[152,184484,184485],{},"get()",[31,184487,184488],{},"嵌套容器要先看清楚每一层是什么类型。",[20037,184490,184492],{"id":184491},"_617-本章练习","6.17 本章练习",[28,184494,184495,184498,184501,184504,184507],{},[31,184496,184497],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[31,184499,184500],{},"输入一句话，统计每个字符出现次数。",[31,184502,184503],{},"使用集合去除列表中的重复元素。",[31,184505,184506],{},"使用字典保存一个学生的信息，并实现修改成绩。",[31,184508,184509],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[20011,184511,184512],{},"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":39,"searchDepth":46,"depth":46,"links":184514},[184515,184516,184517,184518,184519,184520,184521,184522,184523,184524,184525,184526,184527,184528,184529,184530,184531],{"id":181495,"depth":46,"text":181496},{"id":181612,"depth":46,"text":181613},{"id":181702,"depth":46,"text":181703},{"id":181826,"depth":46,"text":181827},{"id":182189,"depth":46,"text":182190},{"id":182376,"depth":46,"text":182377},{"id":182495,"depth":46,"text":182496},{"id":182637,"depth":46,"text":182638},{"id":182824,"depth":46,"text":182825},{"id":183068,"depth":46,"text":183069},{"id":183278,"depth":46,"text":183279},{"id":183363,"depth":46,"text":183364},{"id":183661,"depth":46,"text":183662},{"id":183943,"depth":46,"text":183944},{"id":184135,"depth":46,"text":184136},{"id":184458,"depth":46,"text":184459},{"id":184491,"depth":46,"text":184492},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":181487,"description":20020},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":184538,"title":184539,"body":184540,"description":20020,"extension":20021,"meta":186712,"navigation":216,"path":186713,"seo":186714,"stem":186715,"__hash__":186716},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":184541,"toc":186687},[184542,184545,184549,184552,184632,184635,184656,184659,184663,184666,184728,184731,184748,184752,184755,184800,184802,184810,184814,184817,184899,184902,184905,184930,184933,184956,184960,184963,184965,185027,185030,185032,185083,185087,185091,185097,185202,185206,185212,185283,185287,185290,185358,185361,185441,185445,185451,185487,185490,185493,185603,185609,185613,185616,185688,185691,185695,185699,185704,185766,185770,185775,185843,185847,185852,185968,185972,185975,186055,186058,186062,186065,186169,186171,186186,186189,186193,186331,186339,186343,186345,186356,186358,186616,186620,186652,186656,186684],[10,184543,184539],{"id":184544},"_7-函数进阶",[20037,184546,184548],{"id":184547},"_71-多返回值","7.1 多返回值",[24,184550,184551],{},"Python 函数可以返回多个值，本质上返回的是元组。",[146,184553,184555],{"className":148,"code":184554,"language":150,"meta":39,"style":39},"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",[152,184556,184557,184566,184574,184582,184591,184598,184602,184606,184615,184621],{"__ignoreMap":39},[155,184558,184559,184561,184564],{"class":157,"line":158},[155,184560,1484],{"class":167},[155,184562,184563],{"class":226}," get_info",[155,184565,1490],{"class":171},[155,184567,184568,184570,184572],{"class":157,"line":46},[155,184569,170933],{"class":171},[155,184571,317],{"class":167},[155,184573,167916],{"class":732},[155,184575,184576,184578,184580],{"class":157,"line":121},[155,184577,170949],{"class":171},[155,184579,317],{"class":167},[155,184581,165114],{"class":263},[155,184583,184584,184586,184588],{"class":157,"line":180},[155,184585,170964],{"class":171},[155,184587,317],{"class":167},[155,184589,184590],{"class":263}," 95\n",[155,184592,184593,184595],{"class":157,"line":194},[155,184594,1692],{"class":167},[155,184596,184597],{"class":171}," name, age, score\n",[155,184599,184600],{"class":157,"line":200},[155,184601,217],{"emptyLinePlaceholder":216},[155,184603,184604],{"class":157,"line":213},[155,184605,217],{"emptyLinePlaceholder":216},[155,184607,184608,184610,184612],{"class":157,"line":220},[155,184609,179869],{"class":171},[155,184611,317],{"class":167},[155,184613,184614],{"class":171}," get_info()\n",[155,184616,184617,184619],{"class":157,"line":245},[155,184618,15451],{"class":263},[155,184620,95148],{"class":171},[155,184622,184623,184625,184627,184629],{"class":157,"line":251},[155,184624,15451],{"class":263},[155,184626,230],{"class":171},[155,184628,121670],{"class":263},[155,184630,184631],{"class":171},"(result))\n",[24,184633,184634],{},"可以直接解包：",[146,184636,184638],{"className":148,"code":184637,"language":150,"meta":39,"style":39},"name, age, score = get_info()\nprint(name, age, score)\n",[152,184639,184640,184649],{"__ignoreMap":39},[155,184641,184642,184645,184647],{"class":157,"line":158},[155,184643,184644],{"class":171},"name, age, score ",[155,184646,317],{"class":167},[155,184648,184614],{"class":171},[155,184650,184651,184653],{"class":157,"line":46},[155,184652,15451],{"class":263},[155,184654,184655],{"class":171},"(name, age, score)\n",[24,184657,184658],{},"返回多个值适合函数需要同时给出多个结果时使用。",[20037,184660,184662],{"id":184661},"_72-位置参数","7.2 位置参数",[24,184664,184665],{},"位置参数按顺序传递。",[146,184667,184669],{"className":148,"code":184668,"language":150,"meta":39,"style":39},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[152,184670,184671,184679,184707,184711,184715],{"__ignoreMap":39},[155,184672,184673,184675,184677],{"class":157,"line":158},[155,184674,1484],{"class":167},[155,184676,167935],{"class":226},[155,184678,167938],{"class":171},[155,184680,184681,184683,184685,184687,184689,184691,184693,184695,184697,184699,184701,184703,184705],{"class":157,"line":46},[155,184682,822],{"class":263},[155,184684,230],{"class":171},[155,184686,17391],{"class":167},[155,184688,167949],{"class":732},[155,184690,2705],{"class":263},[155,184692,98373],{"class":171},[155,184694,2711],{"class":263},[155,184696,167958],{"class":732},[155,184698,2705],{"class":263},[155,184700,88784],{"class":171},[155,184702,2711],{"class":263},[155,184704,167967],{"class":732},[155,184706,363],{"class":171},[155,184708,184709],{"class":157,"line":121},[155,184710,217],{"emptyLinePlaceholder":216},[155,184712,184713],{"class":157,"line":180},[155,184714,217],{"emptyLinePlaceholder":216},[155,184716,184717,184720,184722,184724,184726],{"class":157,"line":194},[155,184718,184719],{"class":171},"introduce(",[155,184721,168451],{"class":732},[155,184723,7589],{"class":171},[155,184725,20709],{"class":263},[155,184727,363],{"class":171},[24,184729,184730],{},"顺序错了就会得到错误含义：",[146,184732,184734],{"className":148,"code":184733,"language":150,"meta":39,"style":39},"introduce(18, \"小明\")\n",[152,184735,184736],{"__ignoreMap":39},[155,184737,184738,184740,184742,184744,184746],{"class":157,"line":158},[155,184739,184719],{"class":171},[155,184741,20709],{"class":263},[155,184743,7589],{"class":171},[155,184745,168451],{"class":732},[155,184747,363],{"class":171},[20037,184749,184751],{"id":184750},"_73-关键字参数","7.3 关键字参数",[24,184753,184754],{},"关键字参数按参数名传递。",[146,184756,184758],{"className":148,"code":184757,"language":150,"meta":39,"style":39},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[152,184759,184760,184780],{"__ignoreMap":39},[155,184761,184762,184764,184766,184768,184770,184772,184774,184776,184778],{"class":157,"line":158},[155,184763,184719],{"class":171},[155,184765,98373],{"class":323},[155,184767,317],{"class":167},[155,184769,168451],{"class":732},[155,184771,7589],{"class":171},[155,184773,88784],{"class":323},[155,184775,317],{"class":167},[155,184777,20709],{"class":263},[155,184779,363],{"class":171},[155,184781,184782,184784,184786,184788,184790,184792,184794,184796,184798],{"class":157,"line":46},[155,184783,184719],{"class":171},[155,184785,88784],{"class":323},[155,184787,317],{"class":167},[155,184789,20709],{"class":263},[155,184791,7589],{"class":171},[155,184793,98373],{"class":323},[155,184795,317],{"class":167},[155,184797,168451],{"class":732},[155,184799,363],{"class":171},[24,184801,136497],{},[28,184803,184804,184807],{},[31,184805,184806],{},"顺序不容易错。",[31,184808,184809],{},"调用时可读性更强。",[20037,184811,184813],{"id":184812},"_74-默认参数","7.4 默认参数",[24,184815,184816],{},"默认参数给参数设置默认值。",[146,184818,184820],{"className":148,"code":184819,"language":150,"meta":39,"style":39},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[152,184821,184822,184838,184868,184872,184876,184886],{"__ignoreMap":39},[155,184823,184824,184826,184828,184831,184833,184836],{"class":157,"line":158},[155,184825,1484],{"class":167},[155,184827,140656],{"class":226},[155,184829,184830],{"class":171},"(host, port",[155,184832,317],{"class":167},[155,184834,184835],{"class":263},"3306",[155,184837,242],{"class":171},[155,184839,184840,184842,184844,184846,184849,184851,184853,184855,184857,184859,184862,184864,184866],{"class":157,"line":46},[155,184841,822],{"class":263},[155,184843,230],{"class":171},[155,184845,17391],{"class":167},[155,184847,184848],{"class":732},"\"连接",[155,184850,2705],{"class":263},[155,184852,47184],{"class":171},[155,184854,2711],{"class":263},[155,184856,3017],{"class":732},[155,184858,2705],{"class":263},[155,184860,184861],{"class":171},"port",[155,184863,2711],{"class":263},[155,184865,2033],{"class":732},[155,184867,363],{"class":171},[155,184869,184870],{"class":157,"line":121},[155,184871,217],{"emptyLinePlaceholder":216},[155,184873,184874],{"class":157,"line":180},[155,184875,217],{"emptyLinePlaceholder":216},[155,184877,184878,184881,184884],{"class":157,"line":194},[155,184879,184880],{"class":171},"connect(",[155,184882,184883],{"class":732},"\"localhost\"",[155,184885,363],{"class":171},[155,184887,184888,184890,184892,184894,184897],{"class":157,"line":200},[155,184889,184880],{"class":171},[155,184891,184883],{"class":732},[155,184893,7589],{"class":171},[155,184895,184896],{"class":263},"6379",[155,184898,363],{"class":171},[24,184900,184901],{},"注意：默认参数必须放在非默认参数后面。",[24,184903,184904],{},"错误：",[146,184906,184908],{"className":148,"code":184907,"language":150,"meta":39,"style":39},"def connect(port=3306, host):\n    pass\n",[152,184909,184910,184926],{"__ignoreMap":39},[155,184911,184912,184914,184916,184919,184921,184923],{"class":157,"line":158},[155,184913,1484],{"class":167},[155,184915,140656],{"class":226},[155,184917,184918],{"class":171},"(port",[155,184920,317],{"class":167},[155,184922,184835],{"class":263},[155,184924,184925],{"class":171},", host):\n",[155,184927,184928],{"class":157,"line":46},[155,184929,168100],{"class":167},[24,184931,184932],{},"正确：",[146,184934,184936],{"className":148,"code":184935,"language":150,"meta":39,"style":39},"def connect(host, port=3306):\n    pass\n",[152,184937,184938,184952],{"__ignoreMap":39},[155,184939,184940,184942,184944,184946,184948,184950],{"class":157,"line":158},[155,184941,1484],{"class":167},[155,184943,140656],{"class":226},[155,184945,184830],{"class":171},[155,184947,317],{"class":167},[155,184949,184835],{"class":263},[155,184951,242],{"class":171},[155,184953,184954],{"class":157,"line":46},[155,184955,168100],{"class":167},[20037,184957,184959],{"id":184958},"_75-默认参数的坑","7.5 默认参数的坑",[24,184961,184962],{},"不要使用可变对象作为默认参数。",[24,184964,176186],{},[146,184966,184968],{"className":148,"code":184967,"language":150,"meta":39,"style":39},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[152,184969,184970,184985,184990,184997,185001,185005,185016],{"__ignoreMap":39},[155,184971,184972,184974,184977,184980,184982],{"class":157,"line":158},[155,184973,1484],{"class":167},[155,184975,184976],{"class":226}," add_item",[155,184978,184979],{"class":171},"(item, items",[155,184981,317],{"class":167},[155,184983,184984],{"class":171},"[]):\n",[155,184986,184987],{"class":157,"line":46},[155,184988,184989],{"class":171},"    items.append(item)\n",[155,184991,184992,184994],{"class":157,"line":121},[155,184993,1692],{"class":167},[155,184995,184996],{"class":171}," items\n",[155,184998,184999],{"class":157,"line":180},[155,185000,217],{"emptyLinePlaceholder":216},[155,185002,185003],{"class":157,"line":194},[155,185004,217],{"emptyLinePlaceholder":216},[155,185006,185007,185009,185012,185014],{"class":157,"line":200},[155,185008,15451],{"class":263},[155,185010,185011],{"class":171},"(add_item(",[155,185013,183888],{"class":732},[155,185015,1238],{"class":171},[155,185017,185018,185020,185022,185025],{"class":157,"line":213},[155,185019,15451],{"class":263},[155,185021,185011],{"class":171},[155,185023,185024],{"class":732},"\"b\"",[155,185026,1238],{"class":171},[24,185028,185029],{},"第二次调用会复用第一次的列表。",[24,185031,174451],{},[146,185033,185035],{"className":148,"code":185034,"language":150,"meta":39,"style":39},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[152,185036,185037,185051,185064,185073,185077],{"__ignoreMap":39},[155,185038,185039,185041,185043,185045,185047,185049],{"class":157,"line":158},[155,185040,1484],{"class":167},[155,185042,184976],{"class":226},[155,185044,184979],{"class":171},[155,185046,317],{"class":167},[155,185048,114249],{"class":263},[155,185050,242],{"class":171},[155,185052,185053,185055,185058,185060,185062],{"class":157,"line":46},[155,185054,1142],{"class":167},[155,185056,185057],{"class":171}," items ",[155,185059,8539],{"class":167},[155,185061,8545],{"class":263},[155,185063,736],{"class":171},[155,185065,185066,185069,185071],{"class":157,"line":121},[155,185067,185068],{"class":171},"        items ",[155,185070,317],{"class":167},[155,185072,70401],{"class":171},[155,185074,185075],{"class":157,"line":180},[155,185076,184989],{"class":171},[155,185078,185079,185081],{"class":157,"line":194},[155,185080,1692],{"class":167},[155,185082,184996],{"class":171},[20037,185084,185086],{"id":185085},"_76-不定长参数","7.6 不定长参数",[14,185088,185090],{"id":185089},"_761-args","7.6.1 *args",[24,185092,185093,185096],{},[152,185094,185095],{},"*args"," 接收任意数量的位置参数，得到元组。",[146,185098,185100],{"className":148,"code":185099,"language":150,"meta":39,"style":39},"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",[152,185101,185102,185115,185123,185134,185143,185149,185153,185157,185176],{"__ignoreMap":39},[155,185103,185104,185106,185108,185110,185112],{"class":157,"line":158},[155,185105,1484],{"class":167},[155,185107,25073],{"class":226},[155,185109,230],{"class":171},[155,185111,1563],{"class":167},[155,185113,185114],{"class":171},"args):\n",[155,185116,185117,185119,185121],{"class":157,"line":46},[155,185118,177870],{"class":171},[155,185120,317],{"class":167},[155,185122,16959],{"class":263},[155,185124,185125,185127,185129,185131],{"class":157,"line":121},[155,185126,2000],{"class":167},[155,185128,174743],{"class":171},[155,185130,1131],{"class":167},[155,185132,185133],{"class":171}," args:\n",[155,185135,185136,185138,185140],{"class":157,"line":180},[155,185137,178545],{"class":171},[155,185139,2351],{"class":167},[155,185141,185142],{"class":171}," num\n",[155,185144,185145,185147],{"class":157,"line":194},[155,185146,1692],{"class":167},[155,185148,180850],{"class":171},[155,185150,185151],{"class":157,"line":200},[155,185152,217],{"emptyLinePlaceholder":216},[155,185154,185155],{"class":157,"line":213},[155,185156,217],{"emptyLinePlaceholder":216},[155,185158,185159,185161,185164,185166,185168,185170,185172,185174],{"class":157,"line":220},[155,185160,15451],{"class":263},[155,185162,185163],{"class":171},"(add(",[155,185165,329],{"class":263},[155,185167,7589],{"class":171},[155,185169,360],{"class":263},[155,185171,7589],{"class":171},[155,185173,4444],{"class":263},[155,185175,1238],{"class":171},[155,185177,185178,185180,185182,185184,185186,185188,185190,185192,185194,185196,185198,185200],{"class":157,"line":245},[155,185179,15451],{"class":263},[155,185181,185163],{"class":171},[155,185183,329],{"class":263},[155,185185,7589],{"class":171},[155,185187,360],{"class":263},[155,185189,7589],{"class":171},[155,185191,4444],{"class":263},[155,185193,7589],{"class":171},[155,185195,1264],{"class":263},[155,185197,7589],{"class":171},[155,185199,350],{"class":263},[155,185201,1238],{"class":171},[14,185203,185205],{"id":185204},"_762-kwargs","7.6.2 **kwargs",[24,185207,185208,185211],{},[152,185209,185210],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[146,185213,185215],{"className":148,"code":185214,"language":150,"meta":39,"style":39},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[152,185216,185217,185230,185241,185247,185251,185255],{"__ignoreMap":39},[155,185218,185219,185221,185223,185225,185227],{"class":157,"line":158},[155,185220,1484],{"class":167},[155,185222,180508],{"class":226},[155,185224,230],{"class":171},[155,185226,17347],{"class":167},[155,185228,185229],{"class":171},"kwargs):\n",[155,185231,185232,185234,185236,185238],{"class":157,"line":46},[155,185233,2000],{"class":167},[155,185235,183348],{"class":171},[155,185237,1131],{"class":167},[155,185239,185240],{"class":171}," kwargs.items():\n",[155,185242,185243,185245],{"class":157,"line":121},[155,185244,2017],{"class":263},[155,185246,183360],{"class":171},[155,185248,185249],{"class":157,"line":180},[155,185250,217],{"emptyLinePlaceholder":216},[155,185252,185253],{"class":157,"line":194},[155,185254,217],{"emptyLinePlaceholder":216},[155,185256,185257,185259,185261,185263,185265,185267,185269,185271,185273,185275,185277,185279,185281],{"class":157,"line":200},[155,185258,180573],{"class":171},[155,185260,98373],{"class":323},[155,185262,317],{"class":167},[155,185264,168451],{"class":732},[155,185266,7589],{"class":171},[155,185268,88784],{"class":323},[155,185270,317],{"class":167},[155,185272,20709],{"class":263},[155,185274,7589],{"class":171},[155,185276,88835],{"class":323},[155,185278,317],{"class":167},[155,185280,87832],{"class":732},[155,185282,363],{"class":171},[20037,185284,185286],{"id":185285},"_77-参数解包","7.7 参数解包",[24,185288,185289],{},"列表或元组解包为位置参数：",[146,185291,185293],{"className":148,"code":185292,"language":150,"meta":39,"style":39},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[152,185294,185295,185304,185319,185323,185327,185347],{"__ignoreMap":39},[155,185296,185297,185299,185301],{"class":157,"line":158},[155,185298,1484],{"class":167},[155,185300,25073],{"class":226},[155,185302,185303],{"class":171},"(a, b, c):\n",[155,185305,185306,185308,185310,185312,185314,185316],{"class":157,"line":46},[155,185307,1692],{"class":167},[155,185309,30697],{"class":171},[155,185311,1274],{"class":167},[155,185313,30710],{"class":171},[155,185315,1274],{"class":167},[155,185317,185318],{"class":171}," c\n",[155,185320,185321],{"class":157,"line":121},[155,185322,217],{"emptyLinePlaceholder":216},[155,185324,185325],{"class":157,"line":180},[155,185326,217],{"emptyLinePlaceholder":216},[155,185328,185329,185331,185333,185335,185337,185339,185341,185343,185345],{"class":157,"line":194},[155,185330,182663],{"class":171},[155,185332,317],{"class":167},[155,185334,70789],{"class":171},[155,185336,329],{"class":263},[155,185338,7589],{"class":171},[155,185340,360],{"class":263},[155,185342,7589],{"class":171},[155,185344,4444],{"class":263},[155,185346,2845],{"class":171},[155,185348,185349,185351,185353,185355],{"class":157,"line":200},[155,185350,15451],{"class":263},[155,185352,185163],{"class":171},[155,185354,1563],{"class":167},[155,185356,185357],{"class":171},"nums))\n",[24,185359,185360],{},"字典解包为关键字参数：",[146,185362,185364],{"className":148,"code":185363,"language":150,"meta":39,"style":39},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[152,185365,185366,185374,185400,185404,185408,185432],{"__ignoreMap":39},[155,185367,185368,185370,185372],{"class":157,"line":158},[155,185369,1484],{"class":167},[155,185371,167935],{"class":226},[155,185373,167938],{"class":171},[155,185375,185376,185378,185380,185382,185384,185386,185388,185390,185392,185394,185396,185398],{"class":157,"line":46},[155,185377,822],{"class":263},[155,185379,230],{"class":171},[155,185381,17391],{"class":167},[155,185383,2033],{"class":732},[155,185385,2705],{"class":263},[155,185387,98373],{"class":171},[155,185389,2711],{"class":263},[155,185391,24314],{"class":263},[155,185393,88784],{"class":171},[155,185395,2711],{"class":263},[155,185397,2033],{"class":732},[155,185399,363],{"class":171},[155,185401,185402],{"class":157,"line":121},[155,185403,217],{"emptyLinePlaceholder":216},[155,185405,185406],{"class":157,"line":180},[155,185407,217],{"emptyLinePlaceholder":216},[155,185409,185410,185412,185414,185416,185418,185420,185422,185424,185426,185428,185430],{"class":157,"line":194},[155,185411,134877],{"class":171},[155,185413,317],{"class":167},[155,185415,24314],{"class":171},[155,185417,81242],{"class":732},[155,185419,70000],{"class":171},[155,185421,168451],{"class":732},[155,185423,7589],{"class":171},[155,185425,87687],{"class":732},[155,185427,70000],{"class":171},[155,185429,20709],{"class":263},[155,185431,21475],{"class":171},[155,185433,185434,185436,185438],{"class":157,"line":200},[155,185435,184719],{"class":171},[155,185437,17347],{"class":167},[155,185439,185440],{"class":171},"info)\n",[20037,185442,185444],{"id":185443},"_78-匿名函数lambda","7.8 匿名函数lambda",[24,185446,185447,185450],{},[152,185448,185449],{},"lambda"," 用于定义简单匿名函数。",[146,185452,185454],{"className":148,"code":185453,"language":150,"meta":39,"style":39},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[152,185455,185456,185473],{"__ignoreMap":39},[155,185457,185458,185461,185463,185466,185469,185471],{"class":157,"line":158},[155,185459,185460],{"class":171},"add ",[155,185462,317],{"class":167},[155,185464,185465],{"class":167}," lambda",[155,185467,185468],{"class":171}," a, b: a ",[155,185470,1274],{"class":167},[155,185472,169667],{"class":171},[155,185474,185475,185477,185479,185481,185483,185485],{"class":157,"line":46},[155,185476,15451],{"class":263},[155,185478,185163],{"class":171},[155,185480,329],{"class":263},[155,185482,7589],{"class":171},[155,185484,360],{"class":263},[155,185486,1238],{"class":171},[24,185488,185489],{},"常和排序、过滤等函数一起使用。",[24,185491,185492],{},"按分数排序：",[146,185494,185496],{"className":148,"code":185495,"language":150,"meta":39,"style":39},"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",[152,185497,185498,185506,185526,185546,185566,185570,185574,185597],{"__ignoreMap":39},[155,185499,185500,185502,185504],{"class":157,"line":158},[155,185501,178279],{"class":171},[155,185503,317],{"class":167},[155,185505,74010],{"class":171},[155,185507,185508,185510,185512,185514,185516,185518,185520,185522,185524],{"class":157,"line":46},[155,185509,166948],{"class":171},[155,185511,81242],{"class":732},[155,185513,70000],{"class":171},[155,185515,168451],{"class":732},[155,185517,7589],{"class":171},[155,185519,170035],{"class":732},[155,185521,70000],{"class":171},[155,185523,21034],{"class":263},[155,185525,24794],{"class":171},[155,185527,185528,185530,185532,185534,185536,185538,185540,185542,185544],{"class":157,"line":121},[155,185529,166948],{"class":171},[155,185531,81242],{"class":732},[155,185533,70000],{"class":171},[155,185535,169499],{"class":732},[155,185537,7589],{"class":171},[155,185539,170035],{"class":732},[155,185541,70000],{"class":171},[155,185543,20866],{"class":263},[155,185545,24794],{"class":171},[155,185547,185548,185550,185552,185554,185556,185558,185560,185562,185564],{"class":157,"line":180},[155,185549,166948],{"class":171},[155,185551,81242],{"class":732},[155,185553,70000],{"class":171},[155,185555,178294],{"class":732},[155,185557,7589],{"class":171},[155,185559,170035],{"class":732},[155,185561,70000],{"class":171},[155,185563,20478],{"class":263},[155,185565,24794],{"class":171},[155,185567,185568],{"class":157,"line":194},[155,185569,2845],{"class":171},[155,185571,185572],{"class":157,"line":200},[155,185573,217],{"emptyLinePlaceholder":216},[155,185575,185576,185579,185581,185583,185585,185587,185589,185591,185593,185595],{"class":157,"line":213},[155,185577,185578],{"class":171},"students.sort(",[155,185580,172509],{"class":323},[155,185582,172512],{"class":167},[155,185584,172515],{"class":171},[155,185586,170035],{"class":732},[155,185588,130765],{"class":171},[155,185590,182091],{"class":323},[155,185592,317],{"class":167},[155,185594,1000],{"class":263},[155,185596,363],{"class":171},[155,185598,185599,185601],{"class":157,"line":220},[155,185600,15451],{"class":263},[155,185602,183558],{"class":171},[24,185604,185605,185606,185608],{},"如果逻辑复杂，不要硬写 ",[152,185607,185449],{},"，定义普通函数更清晰。",[20037,185610,185612],{"id":185611},"_79-函数作为参数","7.9 函数作为参数",[24,185614,185615],{},"函数可以作为参数传给另一个函数。",[146,185617,185619],{"className":148,"code":185618,"language":150,"meta":39,"style":39},"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",[152,185620,185621,185629,185639,185643,185647,185657,185664,185668,185672],{"__ignoreMap":39},[155,185622,185623,185625,185627],{"class":157,"line":158},[155,185624,1484],{"class":167},[155,185626,25073],{"class":226},[155,185628,169656],{"class":171},[155,185630,185631,185633,185635,185637],{"class":157,"line":46},[155,185632,1692],{"class":167},[155,185634,30697],{"class":171},[155,185636,1274],{"class":167},[155,185638,169667],{"class":171},[155,185640,185641],{"class":157,"line":121},[155,185642,217],{"emptyLinePlaceholder":216},[155,185644,185645],{"class":157,"line":180},[155,185646,217],{"emptyLinePlaceholder":216},[155,185648,185649,185651,185654],{"class":157,"line":194},[155,185650,1484],{"class":167},[155,185652,185653],{"class":226}," calculate",[155,185655,185656],{"class":171},"(a, b, func):\n",[155,185658,185659,185661],{"class":157,"line":200},[155,185660,1692],{"class":167},[155,185662,185663],{"class":171}," func(a, b)\n",[155,185665,185666],{"class":157,"line":213},[155,185667,217],{"emptyLinePlaceholder":216},[155,185669,185670],{"class":157,"line":220},[155,185671,217],{"emptyLinePlaceholder":216},[155,185673,185674,185676,185679,185681,185683,185685],{"class":157,"line":245},[155,185675,15451],{"class":263},[155,185677,185678],{"class":171},"(calculate(",[155,185680,565],{"class":263},[155,185682,7589],{"class":171},[155,185684,3458],{"class":263},[155,185686,185687],{"class":171},", add))\n",[24,185689,185690],{},"这种思想在排序、回调、框架中经常出现。",[20037,185692,185694],{"id":185693},"_710-mapfiltersorted","7.10 map、filter、sorted",[14,185696,185698],{"id":185697},"_7101-map","7.10.1 map",[24,185700,185701,185703],{},[152,185702,92607],{}," 对每个元素执行函数。",[146,185705,185707],{"className":148,"code":185706,"language":150,"meta":39,"style":39},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[152,185708,185709,185733,185756],{"__ignoreMap":39},[155,185710,185711,185713,185715,185717,185719,185721,185723,185725,185727,185729,185731],{"class":157,"line":158},[155,185712,182663],{"class":171},[155,185714,317],{"class":167},[155,185716,70789],{"class":171},[155,185718,329],{"class":263},[155,185720,7589],{"class":171},[155,185722,360],{"class":263},[155,185724,7589],{"class":171},[155,185726,4444],{"class":263},[155,185728,7589],{"class":171},[155,185730,1264],{"class":263},[155,185732,2845],{"class":171},[155,185734,185735,185737,185739,185742,185744,185746,185749,185751,185753],{"class":157,"line":46},[155,185736,179869],{"class":171},[155,185738,317],{"class":167},[155,185740,185741],{"class":263}," map",[155,185743,230],{"class":171},[155,185745,185449],{"class":167},[155,185747,185748],{"class":171}," x: x ",[155,185750,1563],{"class":167},[155,185752,34580],{"class":263},[155,185754,185755],{"class":171},", nums)\n",[155,185757,185758,185760,185762,185764],{"class":157,"line":121},[155,185759,15451],{"class":263},[155,185761,230],{"class":171},[155,185763,172633],{"class":263},[155,185765,184631],{"class":171},[14,185767,185769],{"id":185768},"_7102-filter","7.10.2 filter",[24,185771,185772,185774],{},[152,185773,98614],{}," 保留满足条件的元素。",[146,185776,185778],{"className":148,"code":185777,"language":150,"meta":39,"style":39},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[152,185779,185780,185808,185833],{"__ignoreMap":39},[155,185781,185782,185784,185786,185788,185790,185792,185794,185796,185798,185800,185802,185804,185806],{"class":157,"line":158},[155,185783,182663],{"class":171},[155,185785,317],{"class":167},[155,185787,70789],{"class":171},[155,185789,329],{"class":263},[155,185791,7589],{"class":171},[155,185793,360],{"class":263},[155,185795,7589],{"class":171},[155,185797,4444],{"class":263},[155,185799,7589],{"class":171},[155,185801,1264],{"class":263},[155,185803,7589],{"class":171},[155,185805,350],{"class":263},[155,185807,2845],{"class":171},[155,185809,185810,185812,185814,185817,185819,185821,185823,185825,185827,185829,185831],{"class":157,"line":46},[155,185811,179869],{"class":171},[155,185813,317],{"class":167},[155,185815,185816],{"class":263}," filter",[155,185818,230],{"class":171},[155,185820,185449],{"class":167},[155,185822,185748],{"class":171},[155,185824,2938],{"class":167},[155,185826,34580],{"class":263},[155,185828,120122],{"class":167},[155,185830,1151],{"class":263},[155,185832,185755],{"class":171},[155,185834,185835,185837,185839,185841],{"class":157,"line":121},[155,185836,15451],{"class":263},[155,185838,230],{"class":171},[155,185840,172633],{"class":263},[155,185842,184631],{"class":171},[14,185844,185846],{"id":185845},"_7103-sorted","7.10.3 sorted",[24,185848,185849,185851],{},[152,185850,183799],{}," 返回排序后的新列表。",[146,185853,185855],{"className":148,"code":185854,"language":150,"meta":39,"style":39},"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",[152,185856,185857,185865,185885,185905,185925,185929,185933,185962],{"__ignoreMap":39},[155,185858,185859,185861,185863],{"class":157,"line":158},[155,185860,178279],{"class":171},[155,185862,317],{"class":167},[155,185864,74010],{"class":171},[155,185866,185867,185869,185871,185873,185875,185877,185879,185881,185883],{"class":157,"line":46},[155,185868,166948],{"class":171},[155,185870,81242],{"class":732},[155,185872,70000],{"class":171},[155,185874,168451],{"class":732},[155,185876,7589],{"class":171},[155,185878,170035],{"class":732},[155,185880,70000],{"class":171},[155,185882,21034],{"class":263},[155,185884,24794],{"class":171},[155,185886,185887,185889,185891,185893,185895,185897,185899,185901,185903],{"class":157,"line":121},[155,185888,166948],{"class":171},[155,185890,81242],{"class":732},[155,185892,70000],{"class":171},[155,185894,169499],{"class":732},[155,185896,7589],{"class":171},[155,185898,170035],{"class":732},[155,185900,70000],{"class":171},[155,185902,20866],{"class":263},[155,185904,24794],{"class":171},[155,185906,185907,185909,185911,185913,185915,185917,185919,185921,185923],{"class":157,"line":180},[155,185908,166948],{"class":171},[155,185910,81242],{"class":732},[155,185912,70000],{"class":171},[155,185914,178294],{"class":732},[155,185916,7589],{"class":171},[155,185918,170035],{"class":732},[155,185920,70000],{"class":171},[155,185922,20478],{"class":263},[155,185924,24794],{"class":171},[155,185926,185927],{"class":157,"line":194},[155,185928,2845],{"class":171},[155,185930,185931],{"class":157,"line":200},[155,185932,217],{"emptyLinePlaceholder":216},[155,185934,185935,185937,185939,185941,185944,185946,185948,185950,185952,185954,185956,185958,185960],{"class":157,"line":213},[155,185936,179869],{"class":171},[155,185938,317],{"class":167},[155,185940,182167],{"class":263},[155,185942,185943],{"class":171},"(students, ",[155,185945,172509],{"class":323},[155,185947,172512],{"class":167},[155,185949,172515],{"class":171},[155,185951,170035],{"class":732},[155,185953,130765],{"class":171},[155,185955,182091],{"class":323},[155,185957,317],{"class":167},[155,185959,1000],{"class":263},[155,185961,363],{"class":171},[155,185963,185964,185966],{"class":157,"line":220},[155,185965,15451],{"class":263},[155,185967,95148],{"class":171},[20037,185969,185971],{"id":185970},"_711-闭包入门","7.11 闭包入门",[24,185973,185974],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[146,185976,185978],{"className":148,"code":185977,"language":150,"meta":39,"style":39},"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",[152,185979,185980,185990,186000,186011,186015,186022,186026,186030,186044],{"__ignoreMap":39},[155,185981,185982,185984,185987],{"class":157,"line":158},[155,185983,1484],{"class":167},[155,185985,185986],{"class":226}," outer",[155,185988,185989],{"class":171},"(base):\n",[155,185991,185992,185994,185997],{"class":157,"line":46},[155,185993,260],{"class":167},[155,185995,185996],{"class":226}," inner",[155,185998,185999],{"class":171},"(num):\n",[155,186001,186002,186004,186007,186009],{"class":157,"line":121},[155,186003,709],{"class":167},[155,186005,186006],{"class":171}," base ",[155,186008,1274],{"class":167},[155,186010,185142],{"class":171},[155,186012,186013],{"class":157,"line":180},[155,186014,217],{"emptyLinePlaceholder":216},[155,186016,186017,186019],{"class":157,"line":194},[155,186018,1692],{"class":167},[155,186020,186021],{"class":171}," inner\n",[155,186023,186024],{"class":157,"line":200},[155,186025,217],{"emptyLinePlaceholder":216},[155,186027,186028],{"class":157,"line":213},[155,186029,217],{"emptyLinePlaceholder":216},[155,186031,186032,186035,186037,186040,186042],{"class":157,"line":220},[155,186033,186034],{"class":171},"add_10 ",[155,186036,317],{"class":167},[155,186038,186039],{"class":171}," outer(",[155,186041,565],{"class":263},[155,186043,363],{"class":171},[155,186045,186046,186048,186051,186053],{"class":157,"line":245},[155,186047,15451],{"class":263},[155,186049,186050],{"class":171},"(add_10(",[155,186052,350],{"class":263},[155,186054,1238],{"class":171},[24,186056,186057],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[20037,186059,186061],{"id":186060},"_712-装饰器入门","7.12 装饰器入门",[24,186063,186064],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[146,186066,186068],{"className":148,"code":186067,"language":150,"meta":39,"style":39},"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",[152,186069,186070,186079,186088,186099,186104,186115,186119,186126,186130,186134,186139,186147,186157,186161,186165],{"__ignoreMap":39},[155,186071,186072,186074,186076],{"class":157,"line":158},[155,186073,1484],{"class":167},[155,186075,105754],{"class":226},[155,186077,186078],{"class":171},"(func):\n",[155,186080,186081,186083,186086],{"class":157,"line":46},[155,186082,260],{"class":167},[155,186084,186085],{"class":226}," wrapper",[155,186087,1490],{"class":171},[155,186089,186090,186092,186094,186097],{"class":157,"line":121},[155,186091,2017],{"class":263},[155,186093,230],{"class":171},[155,186095,186096],{"class":732},"\"函数开始执行\"",[155,186098,363],{"class":171},[155,186100,186101],{"class":157,"line":180},[155,186102,186103],{"class":171},"        func()\n",[155,186105,186106,186108,186110,186113],{"class":157,"line":194},[155,186107,2017],{"class":263},[155,186109,230],{"class":171},[155,186111,186112],{"class":732},"\"函数执行结束\"",[155,186114,363],{"class":171},[155,186116,186117],{"class":157,"line":200},[155,186118,217],{"emptyLinePlaceholder":216},[155,186120,186121,186123],{"class":157,"line":213},[155,186122,1692],{"class":167},[155,186124,186125],{"class":171}," wrapper\n",[155,186127,186128],{"class":157,"line":220},[155,186129,217],{"emptyLinePlaceholder":216},[155,186131,186132],{"class":157,"line":245},[155,186133,217],{"emptyLinePlaceholder":216},[155,186135,186136],{"class":157,"line":251},[155,186137,186138],{"class":226},"@log\n",[155,186140,186141,186143,186145],{"class":157,"line":257},[155,186142,1484],{"class":167},[155,186144,179559],{"class":226},[155,186146,1490],{"class":171},[155,186148,186149,186151,186153,186155],{"class":157,"line":270},[155,186150,822],{"class":263},[155,186152,230],{"class":171},[155,186154,25707],{"class":732},[155,186156,363],{"class":171},[155,186158,186159],{"class":157,"line":276},[155,186160,217],{"emptyLinePlaceholder":216},[155,186162,186163],{"class":157,"line":297},[155,186164,217],{"emptyLinePlaceholder":216},[155,186166,186167],{"class":157,"line":302},[155,186168,179594],{"class":171},[24,186170,176837],{},[146,186172,186174],{"className":148,"code":186173,"language":150,"meta":39,"style":39},"say_hello = log(say_hello)\n",[152,186175,186176],{"__ignoreMap":39},[155,186177,186178,186181,186183],{"class":157,"line":158},[155,186179,186180],{"class":171},"say_hello ",[155,186182,317],{"class":167},[155,186184,186185],{"class":171}," log(say_hello)\n",[24,186187,186188],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[20037,186190,186192],{"id":186191},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[146,186194,186196],{"className":148,"code":186195,"language":150,"meta":39,"style":39},"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",[152,186197,186198,186206,186223,186233,186252,186262,186269,186273,186279,186283,186287,186291,186299,186309,186313,186317],{"__ignoreMap":39},[155,186199,186200,186202,186204],{"class":157,"line":158},[155,186201,1484],{"class":167},[155,186203,105754],{"class":226},[155,186205,186078],{"class":171},[155,186207,186208,186210,186212,186214,186216,186219,186221],{"class":157,"line":46},[155,186209,260],{"class":167},[155,186211,186085],{"class":226},[155,186213,230],{"class":171},[155,186215,1563],{"class":167},[155,186217,186218],{"class":171},"args, ",[155,186220,17347],{"class":167},[155,186222,185229],{"class":171},[155,186224,186225,186227,186229,186231],{"class":157,"line":121},[155,186226,2017],{"class":263},[155,186228,230],{"class":171},[155,186230,186096],{"class":732},[155,186232,363],{"class":171},[155,186234,186235,186238,186240,186243,186245,186247,186249],{"class":157,"line":180},[155,186236,186237],{"class":171},"        result ",[155,186239,317],{"class":167},[155,186241,186242],{"class":171}," func(",[155,186244,1563],{"class":167},[155,186246,186218],{"class":171},[155,186248,17347],{"class":167},[155,186250,186251],{"class":171},"kwargs)\n",[155,186253,186254,186256,186258,186260],{"class":157,"line":194},[155,186255,2017],{"class":263},[155,186257,230],{"class":171},[155,186259,186112],{"class":732},[155,186261,363],{"class":171},[155,186263,186264,186266],{"class":157,"line":200},[155,186265,709],{"class":167},[155,186267,186268],{"class":171}," result\n",[155,186270,186271],{"class":157,"line":213},[155,186272,217],{"emptyLinePlaceholder":216},[155,186274,186275,186277],{"class":157,"line":220},[155,186276,1692],{"class":167},[155,186278,186125],{"class":171},[155,186280,186281],{"class":157,"line":245},[155,186282,217],{"emptyLinePlaceholder":216},[155,186284,186285],{"class":157,"line":251},[155,186286,217],{"emptyLinePlaceholder":216},[155,186288,186289],{"class":157,"line":257},[155,186290,186138],{"class":226},[155,186292,186293,186295,186297],{"class":157,"line":270},[155,186294,1484],{"class":167},[155,186296,25073],{"class":226},[155,186298,169656],{"class":171},[155,186300,186301,186303,186305,186307],{"class":157,"line":276},[155,186302,1692],{"class":167},[155,186304,30697],{"class":171},[155,186306,1274],{"class":167},[155,186308,169667],{"class":171},[155,186310,186311],{"class":157,"line":297},[155,186312,217],{"emptyLinePlaceholder":216},[155,186314,186315],{"class":157,"line":302},[155,186316,217],{"emptyLinePlaceholder":216},[155,186318,186319,186321,186323,186325,186327,186329],{"class":157,"line":308},[155,186320,15451],{"class":263},[155,186322,185163],{"class":171},[155,186324,565],{"class":263},[155,186326,7589],{"class":171},[155,186328,3458],{"class":263},[155,186330,1238],{"class":171},[24,186332,186333,186334,119581,186336,186338],{},"这个写法使用 ",[152,186335,185095],{},[152,186337,185210],{}," 接收原函数的所有参数。",[20037,186340,186342],{"id":186341},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[24,186344,141855],{},[28,186346,186347,186350,186353],{},[31,186348,186349],{},"给定一组学生数据。",[31,186351,186352],{},"封装函数，根据传入规则筛选学生。",[31,186354,186355],{},"筛选及格、优秀、未成年学生。",[24,186357,29864],{},[146,186359,186361],{"className":148,"code":186360,"language":150,"meta":39,"style":39},"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",[152,186362,186363,186371,186399,186427,186455,186459,186463,186467,186477,186485,186495,186502,186507,186513,186517,186521,186545,186568,186591,186595,186602,186609],{"__ignoreMap":39},[155,186364,186365,186367,186369],{"class":157,"line":158},[155,186366,178279],{"class":171},[155,186368,317],{"class":167},[155,186370,74010],{"class":171},[155,186372,186373,186375,186377,186379,186381,186383,186385,186387,186389,186391,186393,186395,186397],{"class":157,"line":46},[155,186374,166948],{"class":171},[155,186376,81242],{"class":732},[155,186378,70000],{"class":171},[155,186380,168451],{"class":732},[155,186382,7589],{"class":171},[155,186384,87687],{"class":732},[155,186386,70000],{"class":171},[155,186388,20709],{"class":263},[155,186390,7589],{"class":171},[155,186392,170035],{"class":732},[155,186394,70000],{"class":171},[155,186396,21034],{"class":263},[155,186398,24794],{"class":171},[155,186400,186401,186403,186405,186407,186409,186411,186413,186415,186417,186419,186421,186423,186425],{"class":157,"line":121},[155,186402,166948],{"class":171},[155,186404,81242],{"class":732},[155,186406,70000],{"class":171},[155,186408,169499],{"class":732},[155,186410,7589],{"class":171},[155,186412,87687],{"class":732},[155,186414,70000],{"class":171},[155,186416,20684],{"class":263},[155,186418,7589],{"class":171},[155,186420,170035],{"class":732},[155,186422,70000],{"class":171},[155,186424,20866],{"class":263},[155,186426,24794],{"class":171},[155,186428,186429,186431,186433,186435,186437,186439,186441,186443,186445,186447,186449,186451,186453],{"class":157,"line":180},[155,186430,166948],{"class":171},[155,186432,81242],{"class":732},[155,186434,70000],{"class":171},[155,186436,178294],{"class":732},[155,186438,7589],{"class":171},[155,186440,87687],{"class":732},[155,186442,70000],{"class":171},[155,186444,20733],{"class":263},[155,186446,7589],{"class":171},[155,186448,170035],{"class":732},[155,186450,70000],{"class":171},[155,186452,20935],{"class":263},[155,186454,24794],{"class":171},[155,186456,186457],{"class":157,"line":194},[155,186458,2845],{"class":171},[155,186460,186461],{"class":157,"line":200},[155,186462,217],{"emptyLinePlaceholder":216},[155,186464,186465],{"class":157,"line":213},[155,186466,217],{"emptyLinePlaceholder":216},[155,186468,186469,186471,186474],{"class":157,"line":220},[155,186470,1484],{"class":167},[155,186472,186473],{"class":226}," filter_students",[155,186475,186476],{"class":171},"(students, condition):\n",[155,186478,186479,186481,186483],{"class":157,"line":245},[155,186480,179786],{"class":171},[155,186482,317],{"class":167},[155,186484,70401],{"class":171},[155,186486,186487,186489,186491,186493],{"class":157,"line":251},[155,186488,2000],{"class":167},[155,186490,170700],{"class":171},[155,186492,1131],{"class":167},[155,186494,170705],{"class":171},[155,186496,186497,186499],{"class":157,"line":257},[155,186498,2803],{"class":167},[155,186500,186501],{"class":171}," condition(student):\n",[155,186503,186504],{"class":157,"line":270},[155,186505,186506],{"class":171},"            result.append(student)\n",[155,186508,186509,186511],{"class":157,"line":276},[155,186510,1692],{"class":167},[155,186512,186268],{"class":171},[155,186514,186515],{"class":157,"line":297},[155,186516,217],{"emptyLinePlaceholder":216},[155,186518,186519],{"class":157,"line":302},[155,186520,217],{"emptyLinePlaceholder":216},[155,186522,186523,186525,186527,186530,186532,186535,186537,186539,186541,186543],{"class":157,"line":308},[155,186524,184264],{"class":171},[155,186526,317],{"class":167},[155,186528,186529],{"class":171}," filter_students(students, ",[155,186531,185449],{"class":167},[155,186533,186534],{"class":171}," s: s[",[155,186536,170035],{"class":732},[155,186538,24309],{"class":171},[155,186540,21607],{"class":167},[155,186542,176400],{"class":263},[155,186544,363],{"class":171},[155,186546,186547,186550,186552,186554,186556,186558,186560,186562,186564,186566],{"class":157,"line":366},[155,186548,186549],{"class":171},"excellent ",[155,186551,317],{"class":167},[155,186553,186529],{"class":171},[155,186555,185449],{"class":167},[155,186557,186534],{"class":171},[155,186559,170035],{"class":732},[155,186561,24309],{"class":171},[155,186563,21607],{"class":167},[155,186565,176351],{"class":263},[155,186567,363],{"class":171},[155,186569,186570,186573,186575,186577,186579,186581,186583,186585,186587,186589],{"class":157,"line":379},[155,186571,186572],{"class":171},"under_age ",[155,186574,317],{"class":167},[155,186576,186529],{"class":171},[155,186578,185449],{"class":167},[155,186580,186534],{"class":171},[155,186582,87687],{"class":732},[155,186584,24309],{"class":171},[155,186586,20959],{"class":167},[155,186588,174848],{"class":263},[155,186590,363],{"class":171},[155,186592,186593],{"class":157,"line":385},[155,186594,217],{"emptyLinePlaceholder":216},[155,186596,186597,186599],{"class":157,"line":415},[155,186598,15451],{"class":263},[155,186600,186601],{"class":171},"(passed)\n",[155,186603,186604,186606],{"class":157,"line":452},[155,186605,15451],{"class":263},[155,186607,186608],{"class":171},"(excellent)\n",[155,186610,186611,186613],{"class":157,"line":480},[155,186612,15451],{"class":263},[155,186614,186615],{"class":171},"(under_age)\n",[20037,186617,186619],{"id":186618},"_715-易错点","7.15 易错点",[28,186621,186622,186625,186633,186638,186649],{},[31,186623,186624],{},"默认参数不要写可变对象。",[31,186626,186627,186629,186630,186632],{},[152,186628,185095],{}," 是元组，",[152,186631,185210],{}," 是字典。",[31,186634,186635,186637],{},[152,186636,185449],{}," 只适合简单表达式。",[31,186639,186640,119581,186642,186644,186645,186648],{},[152,186641,92607],{},[152,186643,98614],{}," 的结果是迭代器，常用 ",[152,186646,186647],{},"list()"," 转换查看。",[31,186650,186651],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[20037,186653,186655],{"id":186654},"_716-本章练习","7.16 本章练习",[28,186657,186658,186665,186671,186676,186681],{},[31,186659,186660,186661,186664],{},"写函数 ",[152,186662,186663],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[31,186666,186660,186667,186670],{},[152,186668,186669],{},"print_user(**kwargs)","，输出用户所有字段。",[31,186672,122929,186673,186675],{},[152,186674,185449],{}," 对学生列表按年龄排序。",[31,186677,122929,186678,186680],{},[152,186679,98614],{}," 找出成绩不及格的学生。",[31,186682,186683],{},"写一个装饰器，统计函数执行前后的提示信息。",[20011,186685,186686],{},"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":39,"searchDepth":46,"depth":46,"links":186688},[186689,186690,186691,186692,186693,186694,186698,186699,186700,186701,186706,186707,186708,186709,186710,186711],{"id":184547,"depth":46,"text":184548},{"id":184661,"depth":46,"text":184662},{"id":184750,"depth":46,"text":184751},{"id":184812,"depth":46,"text":184813},{"id":184958,"depth":46,"text":184959},{"id":185085,"depth":46,"text":185086,"children":186695},[186696,186697],{"id":185089,"depth":121,"text":185090},{"id":185204,"depth":121,"text":185205},{"id":185285,"depth":46,"text":185286},{"id":185443,"depth":46,"text":185444},{"id":185611,"depth":46,"text":185612},{"id":185693,"depth":46,"text":185694,"children":186702},[186703,186704,186705],{"id":185697,"depth":121,"text":185698},{"id":185768,"depth":121,"text":185769},{"id":185845,"depth":121,"text":185846},{"id":185970,"depth":46,"text":185971},{"id":186060,"depth":46,"text":186061},{"id":186191,"depth":46,"text":186192},{"id":186341,"depth":46,"text":186342},{"id":186618,"depth":46,"text":186619},{"id":186654,"depth":46,"text":186655},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":184539,"description":20020},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":186718,"title":186719,"body":186720,"description":20020,"extension":20021,"meta":189239,"navigation":216,"path":189240,"seo":189241,"stem":189242,"__hash__":189243},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":186721,"toc":189214},[186722,186725,186729,186732,186735,186766,186770,186774,186777,186804,186808,186811,186862,186865,186880,186883,186918,186922,186924,186948,186951,187011,187015,187019,187022,187079,187082,187102,187106,187109,187172,187176,187179,187235,187242,187266,187270,187273,187336,187340,187345,187396,187399,187403,187408,187475,187478,187560,187564,187569,187620,187623,187627,187630,187633,187641,187644,187690,187693,187739,187743,187749,187793,187796,187842,187845,187885,187888,187949,187953,187956,188046,188049,188191,188194,188261,188265,188268,188271,188412,188415,188493,188496,188672,188676,188678,188689,188691,188890,188894,189138,189142,189176,189180,189211],[10,186723,186719],{"id":186724},"_8-文件操作",[20037,186726,186728],{"id":186727},"_81-文件操作的意义","8.1 文件操作的意义",[24,186730,186731],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[24,186733,186734],{},"常见文件类型：",[28,186736,186737,186743,186749,186755,186761],{},[31,186738,186739,186742],{},[152,186740,186741],{},".txt","：普通文本。",[31,186744,186745,186748],{},[152,186746,186747],{},".csv","：表格文本。",[31,186750,186751,186754],{},[152,186752,186753],{},".json","：结构化数据。",[31,186756,186757,186760],{},[152,186758,186759],{},".log","：日志文件。",[31,186762,186763,186765],{},[152,186764,164915],{},"：Python 源代码。",[20037,186767,186769],{"id":186768},"_82-路径","8.2 路径",[14,186771,186773],{"id":186772},"_821-相对路径","8.2.1 相对路径",[24,186775,186776],{},"相对当前运行目录：",[146,186778,186780],{"className":148,"code":186779,"language":150,"meta":39,"style":39},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[152,186781,186782],{"__ignoreMap":39},[155,186783,186784,186786,186788,186790,186792,186794,186796,186798,186800,186802],{"class":157,"line":158},[155,186785,105478],{"class":263},[155,186787,230],{"class":171},[155,186789,165359],{"class":732},[155,186791,7589],{"class":171},[155,186793,165364],{"class":732},[155,186795,7589],{"class":171},[155,186797,165369],{"class":323},[155,186799,317],{"class":167},[155,186801,165374],{"class":732},[155,186803,363],{"class":171},[14,186805,186807],{"id":186806},"_822-绝对路径","8.2.2 绝对路径",[24,186809,186810],{},"从根目录或盘符开始：",[146,186812,186814],{"className":148,"code":186813,"language":150,"meta":39,"style":39},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[152,186815,186816,186839],{"__ignoreMap":39},[155,186817,186818,186820,186822,186825,186827,186829,186831,186833,186835,186837],{"class":157,"line":158},[155,186819,105478],{"class":263},[155,186821,230],{"class":171},[155,186823,186824],{"class":732},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[155,186826,7589],{"class":171},[155,186828,165364],{"class":732},[155,186830,7589],{"class":171},[155,186832,165369],{"class":323},[155,186834,317],{"class":167},[155,186836,165374],{"class":732},[155,186838,363],{"class":171},[155,186840,186841,186843,186845,186848,186850,186852,186854,186856,186858,186860],{"class":157,"line":46},[155,186842,105478],{"class":263},[155,186844,230],{"class":171},[155,186846,186847],{"class":732},"\"D:\u002Fdata\u002Fdata.txt\"",[155,186849,7589],{"class":171},[155,186851,165364],{"class":732},[155,186853,7589],{"class":171},[155,186855,165369],{"class":323},[155,186857,317],{"class":167},[155,186859,165374],{"class":732},[155,186861,363],{"class":171},[24,186863,186864],{},"Windows 路径建议写成：",[146,186866,186868],{"className":148,"code":186867,"language":150,"meta":39,"style":39},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[152,186869,186870],{"__ignoreMap":39},[155,186871,186872,186875,186877],{"class":157,"line":158},[155,186873,186874],{"class":171},"path ",[155,186876,317],{"class":167},[155,186878,186879],{"class":732}," \"D:\u002Fdata\u002Fdata.txt\"\n",[24,186881,186882],{},"或原始字符串：",[146,186884,186886],{"className":148,"code":186885,"language":150,"meta":39,"style":39},"path = r\"D:\\data\\data.txt\"\n",[152,186887,186888],{"__ignoreMap":39},[155,186889,186890,186892,186894,186896,186898,186901,186904,186907,186909,186911,186913,186916],{"class":157,"line":158},[155,186891,186874],{"class":171},[155,186893,317],{"class":167},[155,186895,36914],{"class":167},[155,186897,2033],{"class":732},[155,186899,186900],{"class":17606},"D:",[155,186902,186903],{"class":263},"\\d",[155,186905,186906],{"class":17606},"ata",[155,186908,186903],{"class":263},[155,186910,186906],{"class":17606},[155,186912,236],{"class":263},[155,186914,186915],{"class":17606},"txt",[155,186917,17610],{"class":732},[20037,186919,186921],{"id":186920},"_83-open函数","8.3 open函数",[24,186923,25045],{},[146,186925,186927],{"className":148,"code":186926,"language":150,"meta":39,"style":39},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[152,186928,186929],{"__ignoreMap":39},[155,186930,186931,186933,186935,186937,186940,186942,186944,186946],{"class":157,"line":158},[155,186932,14974],{"class":323},[155,186934,33391],{"class":167},[155,186936,165354],{"class":263},[155,186938,186939],{"class":171},"(文件路径, 打开模式, ",[155,186941,165369],{"class":323},[155,186943,317],{"class":167},[155,186945,165374],{"class":732},[155,186947,363],{"class":171},[24,186949,186950],{},"常见模式：",[20222,186952,186953,186962],{},[20225,186954,186955],{},[20228,186956,186957,186960],{},[20231,186958,186959],{},"模式",[20231,186961,45659],{},[20269,186963,186964,186973,186982,186991,187001],{},[20228,186965,186966,186970],{},[20274,186967,186968],{},[152,186969,17599],{},[20274,186971,186972],{},"只读，文件不存在会报错",[20228,186974,186975,186979],{},[20274,186976,186977],{},[152,186978,20851],{},[20274,186980,186981],{},"只写，文件不存在会创建，存在会清空",[20228,186983,186984,186988],{},[20274,186985,186986],{},[152,186987,20318],{},[20274,186989,186990],{},"追加，文件不存在会创建",[20228,186992,186993,186998],{},[20274,186994,186995],{},[152,186996,186997],{},"rb",[20274,186999,187000],{},"二进制只读",[20228,187002,187003,187008],{},[20274,187004,187005],{},[152,187006,187007],{},"wb",[20274,187009,187010],{},"二进制只写",[20037,187012,187014],{"id":187013},"_84-读取文件","8.4 读取文件",[14,187016,187018],{"id":187017},"_841-read","8.4.1 read",[24,187020,187021],{},"一次读取全部内容：",[146,187023,187025],{"className":148,"code":187024,"language":150,"meta":39,"style":39},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[152,187026,187027,187053,187065,187072],{"__ignoreMap":39},[155,187028,187029,187031,187033,187035,187037,187039,187041,187043,187045,187047,187049,187051],{"class":157,"line":158},[155,187030,14974],{"class":323},[155,187032,33391],{"class":167},[155,187034,165354],{"class":263},[155,187036,230],{"class":171},[155,187038,165359],{"class":732},[155,187040,7589],{"class":171},[155,187042,165364],{"class":732},[155,187044,7589],{"class":171},[155,187046,165369],{"class":323},[155,187048,317],{"class":167},[155,187050,165374],{"class":732},[155,187052,363],{"class":171},[155,187054,187055,187058,187060,187062],{"class":157,"line":46},[155,187056,187057],{"class":171},"content ",[155,187059,317],{"class":167},[155,187061,166716],{"class":323},[155,187063,187064],{"class":171},".read()\n",[155,187066,187067,187069],{"class":157,"line":121},[155,187068,15451],{"class":263},[155,187070,187071],{"class":171},"(content)\n",[155,187073,187074,187076],{"class":157,"line":180},[155,187075,14974],{"class":323},[155,187077,187078],{"class":171},".close()\n",[24,187080,187081],{},"可以指定读取字符数：",[146,187083,187085],{"className":148,"code":187084,"language":150,"meta":39,"style":39},"content = file.read(10)\n",[152,187086,187087],{"__ignoreMap":39},[155,187088,187089,187091,187093,187095,187098,187100],{"class":157,"line":158},[155,187090,187057],{"class":171},[155,187092,317],{"class":167},[155,187094,166716],{"class":323},[155,187096,187097],{"class":171},".read(",[155,187099,565],{"class":263},[155,187101,363],{"class":171},[14,187103,187105],{"id":187104},"_842-readline","8.4.2 readline",[24,187107,187108],{},"一次读取一行：",[146,187110,187112],{"className":148,"code":187111,"language":150,"meta":39,"style":39},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[152,187113,187114,187140,187144,187155,187162,187166],{"__ignoreMap":39},[155,187115,187116,187118,187120,187122,187124,187126,187128,187130,187132,187134,187136,187138],{"class":157,"line":158},[155,187117,14974],{"class":323},[155,187119,33391],{"class":167},[155,187121,165354],{"class":263},[155,187123,230],{"class":171},[155,187125,165359],{"class":732},[155,187127,7589],{"class":171},[155,187129,165364],{"class":732},[155,187131,7589],{"class":171},[155,187133,165369],{"class":323},[155,187135,317],{"class":167},[155,187137,165374],{"class":732},[155,187139,363],{"class":171},[155,187141,187142],{"class":157,"line":46},[155,187143,217],{"emptyLinePlaceholder":216},[155,187145,187146,187148,187150,187152],{"class":157,"line":121},[155,187147,165815],{"class":171},[155,187149,317],{"class":167},[155,187151,166716],{"class":323},[155,187153,187154],{"class":171},".readline()\n",[155,187156,187157,187159],{"class":157,"line":180},[155,187158,15451],{"class":263},[155,187160,187161],{"class":171},"(line)\n",[155,187163,187164],{"class":157,"line":194},[155,187165,217],{"emptyLinePlaceholder":216},[155,187167,187168,187170],{"class":157,"line":200},[155,187169,14974],{"class":323},[155,187171,187078],{"class":171},[14,187173,187175],{"id":187174},"_843-readlines","8.4.3 readlines",[24,187177,187178],{},"读取所有行，返回列表：",[146,187180,187182],{"className":148,"code":187181,"language":150,"meta":39,"style":39},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[152,187183,187184,187210,187222,187229],{"__ignoreMap":39},[155,187185,187186,187188,187190,187192,187194,187196,187198,187200,187202,187204,187206,187208],{"class":157,"line":158},[155,187187,14974],{"class":323},[155,187189,33391],{"class":167},[155,187191,165354],{"class":263},[155,187193,230],{"class":171},[155,187195,165359],{"class":732},[155,187197,7589],{"class":171},[155,187199,165364],{"class":732},[155,187201,7589],{"class":171},[155,187203,165369],{"class":323},[155,187205,317],{"class":167},[155,187207,165374],{"class":732},[155,187209,363],{"class":171},[155,187211,187212,187215,187217,187219],{"class":157,"line":46},[155,187213,187214],{"class":171},"lines ",[155,187216,317],{"class":167},[155,187218,166716],{"class":323},[155,187220,187221],{"class":171},".readlines()\n",[155,187223,187224,187226],{"class":157,"line":121},[155,187225,15451],{"class":263},[155,187227,187228],{"class":171},"(lines)\n",[155,187230,187231,187233],{"class":157,"line":180},[155,187232,14974],{"class":323},[155,187234,187078],{"class":171},[24,187236,187237,187238,187241],{},"每一行通常带有换行符，可以用 ",[152,187239,187240],{},"strip()"," 去掉：",[146,187243,187245],{"className":148,"code":187244,"language":150,"meta":39,"style":39},"for line in lines:\n    print(line.strip())\n",[152,187246,187247,187259],{"__ignoreMap":39},[155,187248,187249,187251,187254,187256],{"class":157,"line":158},[155,187250,1125],{"class":167},[155,187252,187253],{"class":171}," line ",[155,187255,1131],{"class":167},[155,187257,187258],{"class":171}," lines:\n",[155,187260,187261,187263],{"class":157,"line":46},[155,187262,822],{"class":263},[155,187264,187265],{"class":171},"(line.strip())\n",[14,187267,187269],{"id":187268},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[24,187271,187272],{},"推荐读取大文件时使用：",[146,187274,187276],{"className":148,"code":187275,"language":150,"meta":39,"style":39},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[152,187277,187278,187304,187308,187320,187326,187330],{"__ignoreMap":39},[155,187279,187280,187282,187284,187286,187288,187290,187292,187294,187296,187298,187300,187302],{"class":157,"line":158},[155,187281,14974],{"class":323},[155,187283,33391],{"class":167},[155,187285,165354],{"class":263},[155,187287,230],{"class":171},[155,187289,165359],{"class":732},[155,187291,7589],{"class":171},[155,187293,165364],{"class":732},[155,187295,7589],{"class":171},[155,187297,165369],{"class":323},[155,187299,317],{"class":167},[155,187301,165374],{"class":732},[155,187303,363],{"class":171},[155,187305,187306],{"class":157,"line":46},[155,187307,217],{"emptyLinePlaceholder":216},[155,187309,187310,187312,187314,187316,187318],{"class":157,"line":121},[155,187311,1125],{"class":167},[155,187313,187253],{"class":171},[155,187315,1131],{"class":167},[155,187317,166716],{"class":323},[155,187319,736],{"class":171},[155,187321,187322,187324],{"class":157,"line":180},[155,187323,822],{"class":263},[155,187325,187265],{"class":171},[155,187327,187328],{"class":157,"line":194},[155,187329,217],{"emptyLinePlaceholder":216},[155,187331,187332,187334],{"class":157,"line":200},[155,187333,14974],{"class":323},[155,187335,187078],{"class":171},[20037,187337,187339],{"id":187338},"_85-with语句","8.5 with语句",[24,187341,187342,187344],{},[152,187343,126396],{}," 会自动关闭文件，推荐使用。",[146,187346,187348],{"className":148,"code":187347,"language":150,"meta":39,"style":39},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[152,187349,187350,187380,187390],{"__ignoreMap":39},[155,187351,187352,187354,187356,187358,187360,187362,187364,187366,187368,187370,187372,187374,187376,187378],{"class":157,"line":158},[155,187353,126396],{"class":167},[155,187355,165354],{"class":263},[155,187357,230],{"class":171},[155,187359,165359],{"class":732},[155,187361,7589],{"class":171},[155,187363,165364],{"class":732},[155,187365,7589],{"class":171},[155,187367,165369],{"class":323},[155,187369,317],{"class":167},[155,187371,165374],{"class":732},[155,187373,33541],{"class":171},[155,187375,907],{"class":167},[155,187377,166716],{"class":323},[155,187379,736],{"class":171},[155,187381,187382,187384,187386,187388],{"class":157,"line":46},[155,187383,165386],{"class":171},[155,187385,317],{"class":167},[155,187387,166716],{"class":323},[155,187389,187064],{"class":171},[155,187391,187392,187394],{"class":157,"line":121},[155,187393,822],{"class":263},[155,187395,187071],{"class":171},[24,187397,187398],{},"等价于打开文件、读取、最后关闭，但更安全。",[20037,187400,187402],{"id":187401},"_86-写入文件","8.6 写入文件",[24,187404,187405,187407],{},[152,187406,20851],{}," 模式会清空原文件。",[146,187409,187411],{"className":148,"code":187410,"language":150,"meta":39,"style":39},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[152,187412,187413,187443,187460],{"__ignoreMap":39},[155,187414,187415,187417,187419,187421,187423,187425,187427,187429,187431,187433,187435,187437,187439,187441],{"class":157,"line":158},[155,187416,126396],{"class":167},[155,187418,165354],{"class":263},[155,187420,230],{"class":171},[155,187422,165359],{"class":732},[155,187424,7589],{"class":171},[155,187426,170539],{"class":732},[155,187428,7589],{"class":171},[155,187430,165369],{"class":323},[155,187432,317],{"class":167},[155,187434,165374],{"class":732},[155,187436,33541],{"class":171},[155,187438,907],{"class":167},[155,187440,166716],{"class":323},[155,187442,736],{"class":171},[155,187444,187445,187448,187451,187454,187456,187458],{"class":157,"line":46},[155,187446,187447],{"class":323},"    file",[155,187449,187450],{"class":171},".write(",[155,187452,187453],{"class":732},"\"hello",[155,187455,175088],{"class":263},[155,187457,2033],{"class":732},[155,187459,363],{"class":171},[155,187461,187462,187464,187466,187469,187471,187473],{"class":157,"line":121},[155,187463,187447],{"class":323},[155,187465,187450],{"class":171},[155,187467,187468],{"class":732},"\"python",[155,187470,175088],{"class":263},[155,187472,2033],{"class":732},[155,187474,363],{"class":171},[24,187476,187477],{},"写入多行：",[146,187479,187481],{"className":148,"code":187480,"language":150,"meta":39,"style":39},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[152,187482,187483,187518,187522,187553],{"__ignoreMap":39},[155,187484,187485,187487,187489,187491,187494,187496,187498,187500,187503,187505,187507,187509,187512,187514,187516],{"class":157,"line":158},[155,187486,187214],{"class":171},[155,187488,317],{"class":167},[155,187490,70789],{"class":171},[155,187492,187493],{"class":732},"\"小明,18",[155,187495,175088],{"class":263},[155,187497,2033],{"class":732},[155,187499,7589],{"class":171},[155,187501,187502],{"class":732},"\"小红,17",[155,187504,175088],{"class":263},[155,187506,2033],{"class":732},[155,187508,7589],{"class":171},[155,187510,187511],{"class":732},"\"小刚,19",[155,187513,175088],{"class":263},[155,187515,2033],{"class":732},[155,187517,2845],{"class":171},[155,187519,187520],{"class":157,"line":46},[155,187521,217],{"emptyLinePlaceholder":216},[155,187523,187524,187526,187528,187530,187533,187535,187537,187539,187541,187543,187545,187547,187549,187551],{"class":157,"line":121},[155,187525,126396],{"class":167},[155,187527,165354],{"class":263},[155,187529,230],{"class":171},[155,187531,187532],{"class":732},"\"students.txt\"",[155,187534,7589],{"class":171},[155,187536,170539],{"class":732},[155,187538,7589],{"class":171},[155,187540,165369],{"class":323},[155,187542,317],{"class":167},[155,187544,165374],{"class":732},[155,187546,33541],{"class":171},[155,187548,907],{"class":167},[155,187550,166716],{"class":323},[155,187552,736],{"class":171},[155,187554,187555,187557],{"class":157,"line":180},[155,187556,187447],{"class":323},[155,187558,187559],{"class":171},".writelines(lines)\n",[20037,187561,187563],{"id":187562},"_87-追加文件","8.7 追加文件",[24,187565,187566,187568],{},[152,187567,20318],{}," 模式不会清空原内容，而是在末尾追加。",[146,187570,187572],{"className":148,"code":187571,"language":150,"meta":39,"style":39},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[152,187573,187574,187605],{"__ignoreMap":39},[155,187575,187576,187578,187580,187582,187585,187587,187589,187591,187593,187595,187597,187599,187601,187603],{"class":157,"line":158},[155,187577,126396],{"class":167},[155,187579,165354],{"class":263},[155,187581,230],{"class":171},[155,187583,187584],{"class":732},"\"log.txt\"",[155,187586,7589],{"class":171},[155,187588,183888],{"class":732},[155,187590,7589],{"class":171},[155,187592,165369],{"class":323},[155,187594,317],{"class":167},[155,187596,165374],{"class":732},[155,187598,33541],{"class":171},[155,187600,907],{"class":167},[155,187602,166716],{"class":323},[155,187604,736],{"class":171},[155,187606,187607,187609,187611,187614,187616,187618],{"class":157,"line":46},[155,187608,187447],{"class":323},[155,187610,187450],{"class":171},[155,187612,187613],{"class":732},"\"程序启动",[155,187615,175088],{"class":263},[155,187617,2033],{"class":732},[155,187619,363],{"class":171},[24,187621,187622],{},"日志类文件常用追加模式。",[20037,187624,187626],{"id":187625},"_88-文件编码","8.8 文件编码",[24,187628,187629],{},"编码决定文字如何保存为字节。",[24,187631,187632],{},"常见编码：",[28,187634,187635,187638],{},[31,187636,187637],{},"UTF-8：推荐。",[31,187639,187640],{},"GBK：部分 Windows 中文文件常见。",[24,187642,187643],{},"读取文件乱码时，可以尝试：",[146,187645,187647],{"className":148,"code":187646,"language":150,"meta":39,"style":39},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[152,187648,187649,187680],{"__ignoreMap":39},[155,187650,187651,187653,187655,187657,187659,187661,187663,187665,187667,187669,187672,187674,187676,187678],{"class":157,"line":158},[155,187652,126396],{"class":167},[155,187654,165354],{"class":263},[155,187656,230],{"class":171},[155,187658,165359],{"class":732},[155,187660,7589],{"class":171},[155,187662,165364],{"class":732},[155,187664,7589],{"class":171},[155,187666,165369],{"class":323},[155,187668,317],{"class":167},[155,187670,187671],{"class":732},"\"gbk\"",[155,187673,33541],{"class":171},[155,187675,907],{"class":167},[155,187677,166716],{"class":323},[155,187679,736],{"class":171},[155,187681,187682,187684,187686,187688],{"class":157,"line":46},[155,187683,165386],{"class":171},[155,187685,317],{"class":167},[155,187687,166716],{"class":323},[155,187689,187064],{"class":171},[24,187691,187692],{},"写文件时建议统一 UTF-8：",[146,187694,187696],{"className":148,"code":187695,"language":150,"meta":39,"style":39},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[152,187697,187698,187728],{"__ignoreMap":39},[155,187699,187700,187702,187704,187706,187708,187710,187712,187714,187716,187718,187720,187722,187724,187726],{"class":157,"line":158},[155,187701,126396],{"class":167},[155,187703,165354],{"class":263},[155,187705,230],{"class":171},[155,187707,165359],{"class":732},[155,187709,7589],{"class":171},[155,187711,170539],{"class":732},[155,187713,7589],{"class":171},[155,187715,165369],{"class":323},[155,187717,317],{"class":167},[155,187719,165374],{"class":732},[155,187721,33541],{"class":171},[155,187723,907],{"class":167},[155,187725,166716],{"class":323},[155,187727,736],{"class":171},[155,187729,187730,187732,187734,187737],{"class":157,"line":46},[155,187731,187447],{"class":323},[155,187733,187450],{"class":171},[155,187735,187736],{"class":732},"\"中文内容\"",[155,187738,363],{"class":171},[20037,187740,187742],{"id":187741},"_89-pathlib","8.9 pathlib",[24,187744,187745,187748],{},[152,187746,187747],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[146,187750,187752],{"className":148,"code":187751,"language":150,"meta":39,"style":39},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[152,187753,187754,187764,187768,187786],{"__ignoreMap":39},[155,187755,187756,187758,187760,187762],{"class":157,"line":158},[155,187757,183],{"class":167},[155,187759,126874],{"class":171},[155,187761,168],{"class":167},[155,187763,126879],{"class":171},[155,187765,187766],{"class":157,"line":46},[155,187767,217],{"emptyLinePlaceholder":216},[155,187769,187770,187772,187774,187776,187779,187781,187783],{"class":157,"line":121},[155,187771,186874],{"class":171},[155,187773,317],{"class":167},[155,187775,127108],{"class":171},[155,187777,187778],{"class":732},"\"data\"",[155,187780,33541],{"class":171},[155,187782,2028],{"class":167},[155,187784,187785],{"class":732}," \"students.txt\"\n",[155,187787,187788,187790],{"class":157,"line":180},[155,187789,15451],{"class":263},[155,187791,187792],{"class":171},"(path)\n",[24,187794,187795],{},"创建目录：",[146,187797,187799],{"className":148,"code":187798,"language":150,"meta":39,"style":39},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[152,187800,187801,187811,187815,187828],{"__ignoreMap":39},[155,187802,187803,187805,187807,187809],{"class":157,"line":158},[155,187804,183],{"class":167},[155,187806,126874],{"class":171},[155,187808,168],{"class":167},[155,187810,126879],{"class":171},[155,187812,187813],{"class":157,"line":46},[155,187814,217],{"emptyLinePlaceholder":216},[155,187816,187817,187820,187822,187824,187826],{"class":157,"line":121},[155,187818,187819],{"class":171},"data_dir ",[155,187821,317],{"class":167},[155,187823,127108],{"class":171},[155,187825,187778],{"class":732},[155,187827,363],{"class":171},[155,187829,187830,187833,187836,187838,187840],{"class":157,"line":180},[155,187831,187832],{"class":171},"data_dir.mkdir(",[155,187834,187835],{"class":323},"exist_ok",[155,187837,317],{"class":167},[155,187839,1000],{"class":263},[155,187841,363],{"class":171},[24,187843,187844],{},"判断文件是否存在：",[146,187846,187848],{"className":148,"code":187847,"language":150,"meta":39,"style":39},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[152,187849,187850,187863,187867,187874],{"__ignoreMap":39},[155,187851,187852,187854,187856,187858,187861],{"class":157,"line":158},[155,187853,186874],{"class":171},[155,187855,317],{"class":167},[155,187857,127108],{"class":171},[155,187859,187860],{"class":732},"\"data\u002Fstudents.txt\"",[155,187862,363],{"class":171},[155,187864,187865],{"class":157,"line":46},[155,187866,217],{"emptyLinePlaceholder":216},[155,187868,187869,187871],{"class":157,"line":121},[155,187870,723],{"class":167},[155,187872,187873],{"class":171}," path.exists():\n",[155,187875,187876,187878,187880,187883],{"class":157,"line":180},[155,187877,822],{"class":263},[155,187879,230],{"class":171},[155,187881,187882],{"class":732},"\"文件存在\"",[155,187884,363],{"class":171},[24,187886,187887],{},"读写文本：",[146,187889,187891],{"className":148,"code":187890,"language":150,"meta":39,"style":39},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[152,187892,187893,187905,187909,187926,187943],{"__ignoreMap":39},[155,187894,187895,187897,187899,187901,187903],{"class":157,"line":158},[155,187896,186874],{"class":171},[155,187898,317],{"class":167},[155,187900,127108],{"class":171},[155,187902,165359],{"class":732},[155,187904,363],{"class":171},[155,187906,187907],{"class":157,"line":46},[155,187908,217],{"emptyLinePlaceholder":216},[155,187910,187911,187914,187916,187918,187920,187922,187924],{"class":157,"line":121},[155,187912,187913],{"class":171},"path.write_text(",[155,187915,164439],{"class":732},[155,187917,7589],{"class":171},[155,187919,165369],{"class":323},[155,187921,317],{"class":167},[155,187923,165374],{"class":732},[155,187925,363],{"class":171},[155,187927,187928,187930,187932,187935,187937,187939,187941],{"class":157,"line":180},[155,187929,187057],{"class":171},[155,187931,317],{"class":167},[155,187933,187934],{"class":171}," path.read_text(",[155,187936,165369],{"class":323},[155,187938,317],{"class":167},[155,187940,165374],{"class":732},[155,187942,363],{"class":171},[155,187944,187945,187947],{"class":157,"line":194},[155,187946,15451],{"class":263},[155,187948,187071],{"class":171},[20037,187950,187952],{"id":187951},"_810-json文件","8.10 JSON文件",[24,187954,187955],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[146,187957,187959],{"className":148,"code":187958,"language":150,"meta":39,"style":39},"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",[152,187960,187961,187967,187971,187979,187989,187999,188007,188011,188015,188040],{"__ignoreMap":39},[155,187962,187963,187965],{"class":157,"line":158},[155,187964,168],{"class":167},[155,187966,165654],{"class":171},[155,187968,187969],{"class":157,"line":46},[155,187970,217],{"emptyLinePlaceholder":216},[155,187972,187973,187975,187977],{"class":157,"line":121},[155,187974,168044],{"class":171},[155,187976,317],{"class":167},[155,187978,35397],{"class":171},[155,187980,187981,187983,187985,187987],{"class":157,"line":180},[155,187982,165583],{"class":732},[155,187984,70000],{"class":171},[155,187986,168451],{"class":732},[155,187988,990],{"class":171},[155,187990,187991,187993,187995,187997],{"class":157,"line":194},[155,187992,183100],{"class":732},[155,187994,70000],{"class":171},[155,187996,20709],{"class":263},[155,187998,990],{"class":171},[155,188000,188001,188003,188005],{"class":157,"line":200},[155,188002,183111],{"class":732},[155,188004,70000],{"class":171},[155,188006,183116],{"class":263},[155,188008,188009],{"class":157,"line":213},[155,188010,21475],{"class":171},[155,188012,188013],{"class":157,"line":220},[155,188014,217],{"emptyLinePlaceholder":216},[155,188016,188017,188019,188021,188024,188026,188028,188030,188032,188034,188036,188038],{"class":157,"line":245},[155,188018,175007],{"class":171},[155,188020,317],{"class":167},[155,188022,188023],{"class":171}," json.dumps(student, ",[155,188025,165700],{"class":323},[155,188027,317],{"class":167},[155,188029,3592],{"class":263},[155,188031,7589],{"class":171},[155,188033,170575],{"class":323},[155,188035,317],{"class":167},[155,188037,360],{"class":263},[155,188039,363],{"class":171},[155,188041,188042,188044],{"class":157,"line":251},[155,188043,15451],{"class":263},[155,188045,182634],{"class":171},[24,188047,188048],{},"写入 JSON 文件：",[146,188050,188052],{"className":148,"code":188051,"language":150,"meta":39,"style":39},"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",[152,188053,188054,188060,188064,188072,188100,188128,188132,188136,188166],{"__ignoreMap":39},[155,188055,188056,188058],{"class":157,"line":158},[155,188057,168],{"class":167},[155,188059,165654],{"class":171},[155,188061,188062],{"class":157,"line":46},[155,188063,217],{"emptyLinePlaceholder":216},[155,188065,188066,188068,188070],{"class":157,"line":121},[155,188067,178279],{"class":171},[155,188069,317],{"class":167},[155,188071,74010],{"class":171},[155,188073,188074,188076,188078,188080,188082,188084,188086,188088,188090,188092,188094,188096,188098],{"class":157,"line":180},[155,188075,166948],{"class":171},[155,188077,81242],{"class":732},[155,188079,70000],{"class":171},[155,188081,168451],{"class":732},[155,188083,7589],{"class":171},[155,188085,87687],{"class":732},[155,188087,70000],{"class":171},[155,188089,20709],{"class":263},[155,188091,7589],{"class":171},[155,188093,170035],{"class":732},[155,188095,70000],{"class":171},[155,188097,21034],{"class":263},[155,188099,24794],{"class":171},[155,188101,188102,188104,188106,188108,188110,188112,188114,188116,188118,188120,188122,188124,188126],{"class":157,"line":194},[155,188103,166948],{"class":171},[155,188105,81242],{"class":732},[155,188107,70000],{"class":171},[155,188109,169499],{"class":732},[155,188111,7589],{"class":171},[155,188113,87687],{"class":732},[155,188115,70000],{"class":171},[155,188117,20684],{"class":263},[155,188119,7589],{"class":171},[155,188121,170035],{"class":732},[155,188123,70000],{"class":171},[155,188125,20866],{"class":263},[155,188127,24794],{"class":171},[155,188129,188130],{"class":157,"line":200},[155,188131,2845],{"class":171},[155,188133,188134],{"class":157,"line":213},[155,188135,217],{"emptyLinePlaceholder":216},[155,188137,188138,188140,188142,188144,188146,188148,188150,188152,188154,188156,188158,188160,188162,188164],{"class":157,"line":220},[155,188139,126396],{"class":167},[155,188141,165354],{"class":263},[155,188143,230],{"class":171},[155,188145,170394],{"class":732},[155,188147,7589],{"class":171},[155,188149,170539],{"class":732},[155,188151,7589],{"class":171},[155,188153,165369],{"class":323},[155,188155,317],{"class":167},[155,188157,165374],{"class":732},[155,188159,33541],{"class":171},[155,188161,907],{"class":167},[155,188163,166716],{"class":323},[155,188165,736],{"class":171},[155,188167,188168,188171,188173,188175,188177,188179,188181,188183,188185,188187,188189],{"class":157,"line":245},[155,188169,188170],{"class":171},"    json.dump(students, ",[155,188172,14974],{"class":323},[155,188174,7589],{"class":171},[155,188176,165700],{"class":323},[155,188178,317],{"class":167},[155,188180,3592],{"class":263},[155,188182,7589],{"class":171},[155,188184,170575],{"class":323},[155,188186,317],{"class":167},[155,188188,360],{"class":263},[155,188190,363],{"class":171},[24,188192,188193],{},"读取 JSON 文件：",[146,188195,188197],{"className":148,"code":188196,"language":150,"meta":39,"style":39},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[152,188198,188199,188205,188209,188239,188251,188255],{"__ignoreMap":39},[155,188200,188201,188203],{"class":157,"line":158},[155,188202,168],{"class":167},[155,188204,165654],{"class":171},[155,188206,188207],{"class":157,"line":46},[155,188208,217],{"emptyLinePlaceholder":216},[155,188210,188211,188213,188215,188217,188219,188221,188223,188225,188227,188229,188231,188233,188235,188237],{"class":157,"line":121},[155,188212,126396],{"class":167},[155,188214,165354],{"class":263},[155,188216,230],{"class":171},[155,188218,170394],{"class":732},[155,188220,7589],{"class":171},[155,188222,165364],{"class":732},[155,188224,7589],{"class":171},[155,188226,165369],{"class":323},[155,188228,317],{"class":167},[155,188230,165374],{"class":732},[155,188232,33541],{"class":171},[155,188234,907],{"class":167},[155,188236,166716],{"class":323},[155,188238,736],{"class":171},[155,188240,188241,188243,188245,188247,188249],{"class":157,"line":180},[155,188242,171600],{"class":171},[155,188244,317],{"class":167},[155,188246,166727],{"class":171},[155,188248,14974],{"class":323},[155,188250,363],{"class":171},[155,188252,188253],{"class":157,"line":194},[155,188254,217],{"emptyLinePlaceholder":216},[155,188256,188257,188259],{"class":157,"line":200},[155,188258,15451],{"class":263},[155,188260,183558],{"class":171},[20037,188262,188264],{"id":188263},"_811-csv文件","8.11 CSV文件",[24,188266,188267],{},"CSV 是逗号分隔值，常用于表格数据。",[24,188269,188270],{},"写入 CSV：",[146,188272,188274],{"className":148,"code":188273,"language":150,"meta":39,"style":39},"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",[152,188275,188276,188283,188287,188295,188313,188329,188345,188349,188353,188393,188407],{"__ignoreMap":39},[155,188277,188278,188280],{"class":157,"line":158},[155,188279,168],{"class":167},[155,188281,188282],{"class":171}," csv\n",[155,188284,188285],{"class":157,"line":46},[155,188286,217],{"emptyLinePlaceholder":216},[155,188288,188289,188291,188293],{"class":157,"line":121},[155,188290,178279],{"class":171},[155,188292,317],{"class":167},[155,188294,74010],{"class":171},[155,188296,188297,188300,188302,188304,188306,188308,188311],{"class":157,"line":180},[155,188298,188299],{"class":171},"    [",[155,188301,91662],{"class":732},[155,188303,7589],{"class":171},[155,188305,91695],{"class":732},[155,188307,7589],{"class":171},[155,188309,188310],{"class":732},"\"成绩\"",[155,188312,106399],{"class":171},[155,188314,188315,188317,188319,188321,188323,188325,188327],{"class":157,"line":194},[155,188316,188299],{"class":171},[155,188318,168451],{"class":732},[155,188320,7589],{"class":171},[155,188322,20709],{"class":263},[155,188324,7589],{"class":171},[155,188326,21034],{"class":263},[155,188328,106399],{"class":171},[155,188330,188331,188333,188335,188337,188339,188341,188343],{"class":157,"line":200},[155,188332,188299],{"class":171},[155,188334,169499],{"class":732},[155,188336,7589],{"class":171},[155,188338,20684],{"class":263},[155,188340,7589],{"class":171},[155,188342,20866],{"class":263},[155,188344,106399],{"class":171},[155,188346,188347],{"class":157,"line":213},[155,188348,2845],{"class":171},[155,188350,188351],{"class":157,"line":220},[155,188352,217],{"emptyLinePlaceholder":216},[155,188354,188355,188357,188359,188361,188364,188366,188368,188370,188372,188374,188376,188378,188381,188383,188385,188387,188389,188391],{"class":157,"line":245},[155,188356,126396],{"class":167},[155,188358,165354],{"class":263},[155,188360,230],{"class":171},[155,188362,188363],{"class":732},"\"students.csv\"",[155,188365,7589],{"class":171},[155,188367,170539],{"class":732},[155,188369,7589],{"class":171},[155,188371,165369],{"class":323},[155,188373,317],{"class":167},[155,188375,165374],{"class":732},[155,188377,7589],{"class":171},[155,188379,188380],{"class":323},"newline",[155,188382,317],{"class":167},[155,188384,15430],{"class":732},[155,188386,33541],{"class":171},[155,188388,907],{"class":167},[155,188390,166716],{"class":323},[155,188392,736],{"class":171},[155,188394,188395,188398,188400,188403,188405],{"class":157,"line":251},[155,188396,188397],{"class":171},"    writer ",[155,188399,317],{"class":167},[155,188401,188402],{"class":171}," csv.writer(",[155,188404,14974],{"class":323},[155,188406,363],{"class":171},[155,188408,188409],{"class":157,"line":257},[155,188410,188411],{"class":171},"    writer.writerows(students)\n",[24,188413,188414],{},"读取 CSV：",[146,188416,188418],{"className":148,"code":188417,"language":150,"meta":39,"style":39},"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",[152,188419,188420,188426,188430,188460,188474,188486],{"__ignoreMap":39},[155,188421,188422,188424],{"class":157,"line":158},[155,188423,168],{"class":167},[155,188425,188282],{"class":171},[155,188427,188428],{"class":157,"line":46},[155,188429,217],{"emptyLinePlaceholder":216},[155,188431,188432,188434,188436,188438,188440,188442,188444,188446,188448,188450,188452,188454,188456,188458],{"class":157,"line":121},[155,188433,126396],{"class":167},[155,188435,165354],{"class":263},[155,188437,230],{"class":171},[155,188439,188363],{"class":732},[155,188441,7589],{"class":171},[155,188443,165364],{"class":732},[155,188445,7589],{"class":171},[155,188447,165369],{"class":323},[155,188449,317],{"class":167},[155,188451,165374],{"class":732},[155,188453,33541],{"class":171},[155,188455,907],{"class":167},[155,188457,166716],{"class":323},[155,188459,736],{"class":171},[155,188461,188462,188465,188467,188470,188472],{"class":157,"line":180},[155,188463,188464],{"class":171},"    reader ",[155,188466,317],{"class":167},[155,188468,188469],{"class":171}," csv.reader(",[155,188471,14974],{"class":323},[155,188473,363],{"class":171},[155,188475,188476,188478,188481,188483],{"class":157,"line":194},[155,188477,2000],{"class":167},[155,188479,188480],{"class":171}," row ",[155,188482,1131],{"class":167},[155,188484,188485],{"class":171}," reader:\n",[155,188487,188488,188490],{"class":157,"line":200},[155,188489,2017],{"class":263},[155,188491,188492],{"class":171},"(row)\n",[24,188494,188495],{},"使用字典写入：",[146,188497,188499],{"className":148,"code":188498,"language":150,"meta":39,"style":39},"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",[152,188500,188501,188507,188511,188519,188547,188575,188579,188583,188621,188642,188663,188668],{"__ignoreMap":39},[155,188502,188503,188505],{"class":157,"line":158},[155,188504,168],{"class":167},[155,188506,188282],{"class":171},[155,188508,188509],{"class":157,"line":46},[155,188510,217],{"emptyLinePlaceholder":216},[155,188512,188513,188515,188517],{"class":157,"line":121},[155,188514,178279],{"class":171},[155,188516,317],{"class":167},[155,188518,74010],{"class":171},[155,188520,188521,188523,188525,188527,188529,188531,188533,188535,188537,188539,188541,188543,188545],{"class":157,"line":180},[155,188522,166948],{"class":171},[155,188524,81242],{"class":732},[155,188526,70000],{"class":171},[155,188528,168451],{"class":732},[155,188530,7589],{"class":171},[155,188532,87687],{"class":732},[155,188534,70000],{"class":171},[155,188536,20709],{"class":263},[155,188538,7589],{"class":171},[155,188540,170035],{"class":732},[155,188542,70000],{"class":171},[155,188544,21034],{"class":263},[155,188546,24794],{"class":171},[155,188548,188549,188551,188553,188555,188557,188559,188561,188563,188565,188567,188569,188571,188573],{"class":157,"line":194},[155,188550,166948],{"class":171},[155,188552,81242],{"class":732},[155,188554,70000],{"class":171},[155,188556,169499],{"class":732},[155,188558,7589],{"class":171},[155,188560,87687],{"class":732},[155,188562,70000],{"class":171},[155,188564,20684],{"class":263},[155,188566,7589],{"class":171},[155,188568,170035],{"class":732},[155,188570,70000],{"class":171},[155,188572,20866],{"class":263},[155,188574,24794],{"class":171},[155,188576,188577],{"class":157,"line":200},[155,188578,2845],{"class":171},[155,188580,188581],{"class":157,"line":213},[155,188582,217],{"emptyLinePlaceholder":216},[155,188584,188585,188587,188589,188591,188593,188595,188597,188599,188601,188603,188605,188607,188609,188611,188613,188615,188617,188619],{"class":157,"line":220},[155,188586,126396],{"class":167},[155,188588,165354],{"class":263},[155,188590,230],{"class":171},[155,188592,188363],{"class":732},[155,188594,7589],{"class":171},[155,188596,170539],{"class":732},[155,188598,7589],{"class":171},[155,188600,165369],{"class":323},[155,188602,317],{"class":167},[155,188604,165374],{"class":732},[155,188606,7589],{"class":171},[155,188608,188380],{"class":323},[155,188610,317],{"class":167},[155,188612,15430],{"class":732},[155,188614,33541],{"class":171},[155,188616,907],{"class":167},[155,188618,166716],{"class":323},[155,188620,736],{"class":171},[155,188622,188623,188626,188628,188630,188632,188634,188636,188638,188640],{"class":157,"line":245},[155,188624,188625],{"class":171},"    fieldnames ",[155,188627,317],{"class":167},[155,188629,70789],{"class":171},[155,188631,81242],{"class":732},[155,188633,7589],{"class":171},[155,188635,87687],{"class":732},[155,188637,7589],{"class":171},[155,188639,170035],{"class":732},[155,188641,2845],{"class":171},[155,188643,188644,188646,188648,188651,188653,188655,188658,188660],{"class":157,"line":251},[155,188645,188397],{"class":171},[155,188647,317],{"class":167},[155,188649,188650],{"class":171}," csv.DictWriter(",[155,188652,14974],{"class":323},[155,188654,7589],{"class":171},[155,188656,188657],{"class":323},"fieldnames",[155,188659,317],{"class":167},[155,188661,188662],{"class":171},"fieldnames)\n",[155,188664,188665],{"class":157,"line":257},[155,188666,188667],{"class":171},"    writer.writeheader()\n",[155,188669,188670],{"class":157,"line":270},[155,188671,188411],{"class":171},[20037,188673,188675],{"id":188674},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[24,188677,141855],{},[28,188679,188680,188683,188686],{},[31,188681,188682],{},"读取文本文件。",[31,188684,188685],{},"统计每个单词出现次数。",[31,188687,188688],{},"输出出现次数最多的前 10 个单词。",[24,188690,29864],{},[146,188692,188694],{"className":148,"code":188693,"language":150,"meta":39,"style":39},"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",[152,188695,188696,188706,188710,188723,188739,188743,188753,188762,188766,188778,188798,188807,188811,188829,188833,188863,188867,188883],{"__ignoreMap":39},[155,188697,188698,188700,188702,188704],{"class":157,"line":158},[155,188699,183],{"class":167},[155,188701,126874],{"class":171},[155,188703,168],{"class":167},[155,188705,126879],{"class":171},[155,188707,188708],{"class":157,"line":46},[155,188709,217],{"emptyLinePlaceholder":216},[155,188711,188712,188714,188716,188718,188721],{"class":157,"line":121},[155,188713,186874],{"class":171},[155,188715,317],{"class":167},[155,188717,127108],{"class":171},[155,188719,188720],{"class":732},"\"article.txt\"",[155,188722,363],{"class":171},[155,188724,188725,188727,188729,188731,188733,188735,188737],{"class":157,"line":180},[155,188726,187057],{"class":171},[155,188728,317],{"class":167},[155,188730,187934],{"class":171},[155,188732,165369],{"class":323},[155,188734,317],{"class":167},[155,188736,165374],{"class":732},[155,188738,363],{"class":171},[155,188740,188741],{"class":157,"line":194},[155,188742,217],{"emptyLinePlaceholder":216},[155,188744,188745,188748,188750],{"class":157,"line":200},[155,188746,188747],{"class":171},"words ",[155,188749,317],{"class":167},[155,188751,188752],{"class":171}," content.lower().split()\n",[155,188754,188755,188758,188760],{"class":157,"line":213},[155,188756,188757],{"class":171},"counter ",[155,188759,317],{"class":167},[155,188761,106431],{"class":171},[155,188763,188764],{"class":157,"line":220},[155,188765,217],{"emptyLinePlaceholder":216},[155,188767,188768,188770,188773,188775],{"class":157,"line":245},[155,188769,1125],{"class":167},[155,188771,188772],{"class":171}," word ",[155,188774,1131],{"class":167},[155,188776,188777],{"class":171}," words:\n",[155,188779,188780,188783,188785,188788,188791,188793,188796],{"class":157,"line":251},[155,188781,188782],{"class":171},"    word ",[155,188784,317],{"class":167},[155,188786,188787],{"class":171}," word.strip(",[155,188789,188790],{"class":732},"\".,!?;:",[155,188792,175058],{"class":263},[155,188794,188795],{"class":732},"'()[]\"",[155,188797,363],{"class":171},[155,188799,188800,188802,188804],{"class":157,"line":257},[155,188801,1142],{"class":167},[155,188803,8542],{"class":167},[155,188805,188806],{"class":171}," word:\n",[155,188808,188809],{"class":157,"line":270},[155,188810,167075],{"class":167},[155,188812,188813,188816,188818,188821,188823,188825,188827],{"class":157,"line":276},[155,188814,188815],{"class":171},"    counter[word] ",[155,188817,317],{"class":167},[155,188819,188820],{"class":171}," counter.get(word, ",[155,188822,1109],{"class":263},[155,188824,33541],{"class":171},[155,188826,1274],{"class":167},[155,188828,74262],{"class":263},[155,188830,188831],{"class":157,"line":297},[155,188832,217],{"emptyLinePlaceholder":216},[155,188834,188835,188838,188840,188842,188845,188847,188849,188851,188853,188855,188857,188859,188861],{"class":157,"line":302},[155,188836,188837],{"class":171},"items ",[155,188839,317],{"class":167},[155,188841,182167],{"class":263},[155,188843,188844],{"class":171},"(counter.items(), ",[155,188846,172509],{"class":323},[155,188848,172512],{"class":167},[155,188850,172515],{"class":171},[155,188852,329],{"class":263},[155,188854,130765],{"class":171},[155,188856,182091],{"class":323},[155,188858,317],{"class":167},[155,188860,1000],{"class":263},[155,188862,363],{"class":171},[155,188864,188865],{"class":157,"line":308},[155,188866,217],{"emptyLinePlaceholder":216},[155,188868,188869,188871,188874,188876,188879,188881],{"class":157,"line":366},[155,188870,1125],{"class":167},[155,188872,188873],{"class":171}," word, count ",[155,188875,1131],{"class":167},[155,188877,188878],{"class":171}," items[:",[155,188880,565],{"class":263},[155,188882,184318],{"class":171},[155,188884,188885,188887],{"class":157,"line":379},[155,188886,822],{"class":263},[155,188888,188889],{"class":171},"(word, count)\n",[20037,188891,188893],{"id":188892},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[146,188895,188897],{"className":148,"code":188896,"language":150,"meta":39,"style":39},"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",[152,188898,188899,188905,188915,188919,188931,188935,188939,188947,188957,188963,188967,188997,189007,189011,189015,189023,189053,189077,189081,189085,189093,189122,189127],{"__ignoreMap":39},[155,188900,188901,188903],{"class":157,"line":158},[155,188902,168],{"class":167},[155,188904,165654],{"class":171},[155,188906,188907,188909,188911,188913],{"class":157,"line":46},[155,188908,183],{"class":167},[155,188910,126874],{"class":171},[155,188912,168],{"class":167},[155,188914,126879],{"class":171},[155,188916,188917],{"class":157,"line":121},[155,188918,217],{"emptyLinePlaceholder":216},[155,188920,188921,188923,188925,188927,188929],{"class":157,"line":180},[155,188922,170387],{"class":263},[155,188924,33391],{"class":167},[155,188926,127108],{"class":171},[155,188928,170394],{"class":732},[155,188930,363],{"class":171},[155,188932,188933],{"class":157,"line":194},[155,188934,217],{"emptyLinePlaceholder":216},[155,188936,188937],{"class":157,"line":200},[155,188938,217],{"emptyLinePlaceholder":216},[155,188940,188941,188943,188945],{"class":157,"line":213},[155,188942,1484],{"class":167},[155,188944,170411],{"class":226},[155,188946,1490],{"class":171},[155,188948,188949,188951,188953,188955],{"class":157,"line":220},[155,188950,1142],{"class":167},[155,188952,8542],{"class":167},[155,188954,170422],{"class":263},[155,188956,170425],{"class":171},[155,188958,188959,188961],{"class":157,"line":245},[155,188960,709],{"class":167},[155,188962,70401],{"class":171},[155,188964,188965],{"class":157,"line":251},[155,188966,217],{"emptyLinePlaceholder":216},[155,188968,188969,188971,188973,188975,188977,188979,188981,188983,188985,188987,188989,188991,188993,188995],{"class":157,"line":257},[155,188970,3783],{"class":167},[155,188972,165354],{"class":263},[155,188974,230],{"class":171},[155,188976,170387],{"class":263},[155,188978,7589],{"class":171},[155,188980,165364],{"class":732},[155,188982,7589],{"class":171},[155,188984,165369],{"class":323},[155,188986,317],{"class":167},[155,188988,165374],{"class":732},[155,188990,33541],{"class":171},[155,188992,907],{"class":167},[155,188994,166716],{"class":323},[155,188996,736],{"class":171},[155,188998,188999,189001,189003,189005],{"class":157,"line":270},[155,189000,709],{"class":167},[155,189002,166727],{"class":171},[155,189004,14974],{"class":323},[155,189006,363],{"class":171},[155,189008,189009],{"class":157,"line":276},[155,189010,217],{"emptyLinePlaceholder":216},[155,189012,189013],{"class":157,"line":297},[155,189014,217],{"emptyLinePlaceholder":216},[155,189016,189017,189019,189021],{"class":157,"line":302},[155,189018,1484],{"class":167},[155,189020,170521],{"class":226},[155,189022,170524],{"class":171},[155,189024,189025,189027,189029,189031,189033,189035,189037,189039,189041,189043,189045,189047,189049,189051],{"class":157,"line":308},[155,189026,3783],{"class":167},[155,189028,165354],{"class":263},[155,189030,230],{"class":171},[155,189032,170387],{"class":263},[155,189034,7589],{"class":171},[155,189036,170539],{"class":732},[155,189038,7589],{"class":171},[155,189040,165369],{"class":323},[155,189042,317],{"class":167},[155,189044,165374],{"class":732},[155,189046,33541],{"class":171},[155,189048,907],{"class":167},[155,189050,166716],{"class":323},[155,189052,736],{"class":171},[155,189054,189055,189057,189059,189061,189063,189065,189067,189069,189071,189073,189075],{"class":157,"line":366},[155,189056,170560],{"class":171},[155,189058,14974],{"class":323},[155,189060,7589],{"class":171},[155,189062,165700],{"class":323},[155,189064,317],{"class":167},[155,189066,3592],{"class":263},[155,189068,7589],{"class":171},[155,189070,170575],{"class":323},[155,189072,317],{"class":167},[155,189074,360],{"class":263},[155,189076,363],{"class":171},[155,189078,189079],{"class":157,"line":379},[155,189080,217],{"emptyLinePlaceholder":216},[155,189082,189083],{"class":157,"line":385},[155,189084,217],{"emptyLinePlaceholder":216},[155,189086,189087,189089,189091],{"class":157,"line":415},[155,189088,178279],{"class":171},[155,189090,317],{"class":167},[155,189092,171605],{"class":171},[155,189094,189095,189098,189100,189102,189104,189106,189108,189110,189112,189114,189116,189118,189120],{"class":157,"line":452},[155,189096,189097],{"class":171},"students.append({",[155,189099,81242],{"class":732},[155,189101,70000],{"class":171},[155,189103,168451],{"class":732},[155,189105,7589],{"class":171},[155,189107,87687],{"class":732},[155,189109,70000],{"class":171},[155,189111,20709],{"class":263},[155,189113,7589],{"class":171},[155,189115,170035],{"class":732},[155,189117,70000],{"class":171},[155,189119,21034],{"class":263},[155,189121,183715],{"class":171},[155,189123,189124],{"class":157,"line":480},[155,189125,189126],{"class":171},"save_students(students)\n",[155,189128,189129,189131,189133,189136],{"class":157,"line":486},[155,189130,15451],{"class":263},[155,189132,230],{"class":171},[155,189134,189135],{"class":732},"\"保存成功\"",[155,189137,363],{"class":171},[20037,189139,189141],{"id":189140},"_814-易错点","8.14 易错点",[28,189143,189144,189148,189154,189159,189166,189173],{},[31,189145,189146,187407],{},[152,189147,20851],{},[31,189149,189150,189151,48174],{},"读写中文要指定 ",[152,189152,189153],{},"encoding=\"utf-8\"",[31,189155,189156,189157,48174],{},"打开文件后要关闭，推荐使用 ",[152,189158,126396],{},[31,189160,189161,189162,189165],{},"读取大文件不要直接 ",[152,189163,189164],{},"read()"," 全部内容。",[31,189167,189168,189169,189172],{},"Windows 写 CSV 时建议加 ",[152,189170,189171],{},"newline=\"\"","，避免空行。",[31,189174,189175],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[20037,189177,189179],{"id":189178},"_815-本章练习","8.15 本章练习",[28,189181,189182,189189,189194,189197,189200],{},[31,189183,189184,189185,189188],{},"写入一个 ",[152,189186,189187],{},"students.txt","，每行保存一个学生姓名。",[31,189190,122918,189191,189193],{},[152,189192,189187],{}," 并输出所有学生。",[31,189195,189196],{},"把学生列表保存为 JSON 文件。",[31,189198,189199],{},"从 JSON 文件读取学生数据，计算平均分。",[31,189201,189202,189203,189206,189207,189210],{},"写一个日志函数 ",[152,189204,189205],{},"write_log(message)","，每次调用向 ",[152,189208,189209],{},"app.log"," 追加一行。",[20011,189212,189213],{},"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":39,"searchDepth":46,"depth":46,"links":189215},[189216,189217,189221,189222,189228,189229,189230,189231,189232,189233,189234,189235,189236,189237,189238],{"id":186727,"depth":46,"text":186728},{"id":186768,"depth":46,"text":186769,"children":189218},[189219,189220],{"id":186772,"depth":121,"text":186773},{"id":186806,"depth":121,"text":186807},{"id":186920,"depth":46,"text":186921},{"id":187013,"depth":46,"text":187014,"children":189223},[189224,189225,189226,189227],{"id":187017,"depth":121,"text":187018},{"id":187104,"depth":121,"text":187105},{"id":187174,"depth":121,"text":187175},{"id":187268,"depth":121,"text":187269},{"id":187338,"depth":46,"text":187339},{"id":187401,"depth":46,"text":187402},{"id":187562,"depth":46,"text":187563},{"id":187625,"depth":46,"text":187626},{"id":187741,"depth":46,"text":187742},{"id":187951,"depth":46,"text":187952},{"id":188263,"depth":46,"text":188264},{"id":188674,"depth":46,"text":188675},{"id":188892,"depth":46,"text":188893},{"id":189140,"depth":46,"text":189141},{"id":189178,"depth":46,"text":189179},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":186719,"description":20020},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":189245,"title":189246,"body":189247,"description":20020,"extension":20021,"meta":191433,"navigation":216,"path":191434,"seo":191435,"stem":191436,"__hash__":191437},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":189248,"toc":191400},[189249,189252,189256,189259,189262,189354,189356,189375,189380,189384,189387,189390,189419,189426,189429,189433,189436,189465,189467,189519,189525,189578,189582,189680,189683,189750,189754,189811,189813,189819,189823,189828,189834,189925,189930,189934,189937,190015,190018,190056,190060,190178,190181,190185,190188,190233,190236,190240,190245,190251,190301,190304,190335,190339,190343,190373,190377,190412,190416,190451,190491,190495,190511,190514,190518,190522,190601,190605,190646,190650,190705,190709,190743,190747,190777,190786,190793,190799,190856,190859,190867,190870,190874,190881,190884,190890,190893,190910,190915,190919,190925,190938,190941,190978,190981,190992,190995,191009,191012,191026,191030,191037,191070,191073,191075,191081,191084,191088,191090,191096,191101,191274,191278,191341,191345,191369,191373,191397],[10,189250,189246],{"id":189251},"_9-异常模块与包",[20037,189253,189255],{"id":189254},"_91-什么是异常","9.1 什么是异常",[24,189257,189258],{},"异常是程序运行过程中出现的错误。",[24,189260,189261],{},"常见异常：",[20222,189263,189264,189273],{},[20225,189265,189266],{},[20228,189267,189268,189271],{},[20231,189269,189270],{},"异常",[20231,189272,45659],{},[20269,189274,189275,189285,189295,189304,189314,189324,189334,189344],{},[20228,189276,189277,189282],{},[20274,189278,189279],{},[152,189280,189281],{},"NameError",[20274,189283,189284],{},"使用了未定义变量",[20228,189286,189287,189292],{},[20274,189288,189289],{},[152,189290,189291],{},"TypeError",[20274,189293,189294],{},"类型不匹配",[20228,189296,189297,189301],{},[20274,189298,189299],{},[152,189300,173397],{},[20274,189302,189303],{},"值不合法",[20228,189305,189306,189311],{},[20274,189307,189308],{},[152,189309,189310],{},"IndexError",[20274,189312,189313],{},"列表索引越界",[20228,189315,189316,189321],{},[20274,189317,189318],{},[152,189319,189320],{},"KeyError",[20274,189322,189323],{},"字典 key 不存在",[20228,189325,189326,189331],{},[20274,189327,189328],{},[152,189329,189330],{},"FileNotFoundError",[20274,189332,189333],{},"文件不存在",[20228,189335,189336,189341],{},[20274,189337,189338],{},[152,189339,189340],{},"ZeroDivisionError",[20274,189342,189343],{},"除数为 0",[20228,189345,189346,189351],{},[20274,189347,189348],{},[152,189349,189350],{},"ImportError",[20274,189352,189353],{},"导入失败",[24,189355,34960],{},[146,189357,189359],{"className":148,"code":189358,"language":150,"meta":39,"style":39},"num = int(\"abc\")\n",[152,189360,189361],{"__ignoreMap":39},[155,189362,189363,189365,189367,189369,189371,189373],{"class":157,"line":158},[155,189364,174350],{"class":171},[155,189366,317],{"class":167},[155,189368,22269],{"class":263},[155,189370,230],{"class":171},[155,189372,174443],{"class":732},[155,189374,363],{"class":171},[24,189376,189377,189378,48174],{},"会触发 ",[152,189379,173397],{},[20037,189381,189383],{"id":189382},"_92-为什么要处理异常","9.2 为什么要处理异常",[24,189385,189386],{},"如果不处理异常，程序会直接终止。",[24,189388,189389],{},"例如用户输入年龄：",[146,189391,189393],{"className":148,"code":189392,"language":150,"meta":39,"style":39},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[152,189394,189395,189413],{"__ignoreMap":39},[155,189396,189397,189399,189401,189403,189405,189407,189409,189411],{"class":157,"line":158},[155,189398,165109],{"class":171},[155,189400,317],{"class":167},[155,189402,22269],{"class":263},[155,189404,230],{"class":171},[155,189406,72384],{"class":263},[155,189408,230],{"class":171},[155,189410,170957],{"class":732},[155,189412,1238],{"class":171},[155,189414,189415,189417],{"class":157,"line":46},[155,189416,15451],{"class":263},[155,189418,174324],{"class":171},[24,189420,189421,189422,189425],{},"用户输入 ",[152,189423,189424],{},"abc","，程序就会报错退出。",[24,189427,189428],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[20037,189430,189432],{"id":189431},"_93-try-except","9.3 try except",[24,189434,189435],{},"基础语法：",[146,189437,189439],{"className":148,"code":189438,"language":150,"meta":39,"style":39},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[152,189440,189441,189448,189453,189460],{"__ignoreMap":39},[155,189442,189443,189446],{"class":157,"line":158},[155,189444,189445],{"class":167},"try",[155,189447,736],{"class":171},[155,189449,189450],{"class":157,"line":46},[155,189451,189452],{"class":171},"    可能出错的代码\n",[155,189454,189455,189458],{"class":157,"line":121},[155,189456,189457],{"class":167},"except",[155,189459,736],{"class":171},[155,189461,189462],{"class":157,"line":180},[155,189463,189464],{"class":171},"    出错后的处理代码\n",[24,189466,34960],{},[146,189468,189470],{"className":148,"code":189469,"language":150,"meta":39,"style":39},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[152,189471,189472,189478,189496,189502,189508],{"__ignoreMap":39},[155,189473,189474,189476],{"class":157,"line":158},[155,189475,189445],{"class":167},[155,189477,736],{"class":171},[155,189479,189480,189482,189484,189486,189488,189490,189492,189494],{"class":157,"line":46},[155,189481,170949],{"class":171},[155,189483,317],{"class":167},[155,189485,22269],{"class":263},[155,189487,230],{"class":171},[155,189489,72384],{"class":263},[155,189491,230],{"class":171},[155,189493,170957],{"class":732},[155,189495,1238],{"class":171},[155,189497,189498,189500],{"class":157,"line":121},[155,189499,822],{"class":263},[155,189501,174324],{"class":171},[155,189503,189504,189506],{"class":157,"line":180},[155,189505,189457],{"class":167},[155,189507,736],{"class":171},[155,189509,189510,189512,189514,189517],{"class":157,"line":194},[155,189511,822],{"class":263},[155,189513,230],{"class":171},[155,189515,189516],{"class":732},"\"年龄必须是数字\"",[155,189518,363],{"class":171},[24,189520,189521,189522,189524],{},"不建议裸写 ",[152,189523,189457],{},"，最好指定异常类型。",[146,189526,189528],{"className":148,"code":189527,"language":150,"meta":39,"style":39},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[152,189529,189530,189536,189554,189560,189568],{"__ignoreMap":39},[155,189531,189532,189534],{"class":157,"line":158},[155,189533,189445],{"class":167},[155,189535,736],{"class":171},[155,189537,189538,189540,189542,189544,189546,189548,189550,189552],{"class":157,"line":46},[155,189539,170949],{"class":171},[155,189541,317],{"class":167},[155,189543,22269],{"class":263},[155,189545,230],{"class":171},[155,189547,72384],{"class":263},[155,189549,230],{"class":171},[155,189551,170957],{"class":732},[155,189553,1238],{"class":171},[155,189555,189556,189558],{"class":157,"line":121},[155,189557,822],{"class":263},[155,189559,174324],{"class":171},[155,189561,189562,189564,189566],{"class":157,"line":180},[155,189563,189457],{"class":167},[155,189565,170789],{"class":263},[155,189567,736],{"class":171},[155,189569,189570,189572,189574,189576],{"class":157,"line":194},[155,189571,822],{"class":263},[155,189573,230],{"class":171},[155,189575,189516],{"class":732},[155,189577,363],{"class":171},[20037,189579,189581],{"id":189580},"_94-捕获多个异常","9.4 捕获多个异常",[146,189583,189585],{"className":148,"code":189584,"language":150,"meta":39,"style":39},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[152,189586,189587,189593,189614,189634,189641,189649,189660,189669],{"__ignoreMap":39},[155,189588,189589,189591],{"class":157,"line":158},[155,189590,189445],{"class":167},[155,189592,736],{"class":171},[155,189594,189595,189598,189600,189602,189604,189606,189608,189610,189612],{"class":157,"line":46},[155,189596,189597],{"class":171},"    nums ",[155,189599,317],{"class":167},[155,189601,70789],{"class":171},[155,189603,329],{"class":263},[155,189605,7589],{"class":171},[155,189607,360],{"class":263},[155,189609,7589],{"class":171},[155,189611,4444],{"class":263},[155,189613,2845],{"class":171},[155,189615,189616,189619,189621,189623,189625,189627,189629,189632],{"class":157,"line":121},[155,189617,189618],{"class":171},"    index ",[155,189620,317],{"class":167},[155,189622,22269],{"class":263},[155,189624,230],{"class":171},[155,189626,72384],{"class":263},[155,189628,230],{"class":171},[155,189630,189631],{"class":732},"\"请输入索引:\"",[155,189633,1238],{"class":171},[155,189635,189636,189638],{"class":157,"line":180},[155,189637,822],{"class":263},[155,189639,189640],{"class":171},"(nums[index])\n",[155,189642,189643,189645,189647],{"class":157,"line":194},[155,189644,189457],{"class":167},[155,189646,170789],{"class":263},[155,189648,736],{"class":171},[155,189650,189651,189653,189655,189658],{"class":157,"line":200},[155,189652,822],{"class":263},[155,189654,230],{"class":171},[155,189656,189657],{"class":732},"\"索引必须是整数\"",[155,189659,363],{"class":171},[155,189661,189662,189664,189667],{"class":157,"line":213},[155,189663,189457],{"class":167},[155,189665,189666],{"class":263}," IndexError",[155,189668,736],{"class":171},[155,189670,189671,189673,189675,189678],{"class":157,"line":220},[155,189672,822],{"class":263},[155,189674,230],{"class":171},[155,189676,189677],{"class":732},"\"索引越界\"",[155,189679,363],{"class":171},[24,189681,189682],{},"多个异常使用相同处理逻辑：",[146,189684,189686],{"className":148,"code":189685,"language":150,"meta":39,"style":39},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[152,189687,189688,189694,189712,189725,189739],{"__ignoreMap":39},[155,189689,189690,189692],{"class":157,"line":158},[155,189691,189445],{"class":167},[155,189693,736],{"class":171},[155,189695,189696,189698,189700,189702,189704,189706,189708,189710],{"class":157,"line":46},[155,189697,15213],{"class":171},[155,189699,317],{"class":167},[155,189701,22269],{"class":263},[155,189703,230],{"class":171},[155,189705,72384],{"class":263},[155,189707,230],{"class":171},[155,189709,174359],{"class":732},[155,189711,1238],{"class":171},[155,189713,189714,189716,189718,189720,189722],{"class":157,"line":121},[155,189715,822],{"class":263},[155,189717,230],{"class":171},[155,189719,565],{"class":263},[155,189721,174609],{"class":167},[155,189723,189724],{"class":171}," num)\n",[155,189726,189727,189729,189731,189733,189735,189737],{"class":157,"line":180},[155,189728,189457],{"class":167},[155,189730,21561],{"class":171},[155,189732,173397],{"class":263},[155,189734,7589],{"class":171},[155,189736,189340],{"class":263},[155,189738,242],{"class":171},[155,189740,189741,189743,189745,189748],{"class":157,"line":194},[155,189742,822],{"class":263},[155,189744,230],{"class":171},[155,189746,189747],{"class":732},"\"输入不合法\"",[155,189749,363],{"class":171},[20037,189751,189753],{"id":189752},"_95-获取异常信息","9.5 获取异常信息",[146,189755,189757],{"className":148,"code":189756,"language":150,"meta":39,"style":39},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[152,189758,189759,189765,189779,189790],{"__ignoreMap":39},[155,189760,189761,189763],{"class":157,"line":158},[155,189762,189445],{"class":167},[155,189764,736],{"class":171},[155,189766,189767,189769,189771,189773,189775,189777],{"class":157,"line":46},[155,189768,15213],{"class":171},[155,189770,317],{"class":167},[155,189772,22269],{"class":263},[155,189774,230],{"class":171},[155,189776,174443],{"class":732},[155,189778,363],{"class":171},[155,189780,189781,189783,189785,189787],{"class":157,"line":121},[155,189782,189457],{"class":167},[155,189784,170789],{"class":263},[155,189786,83167],{"class":167},[155,189788,189789],{"class":171}," e:\n",[155,189791,189792,189794,189796,189798,189801,189803,189805,189807,189809],{"class":157,"line":180},[155,189793,822],{"class":263},[155,189795,230],{"class":171},[155,189797,17391],{"class":167},[155,189799,189800],{"class":732},"\"出错了:",[155,189802,2705],{"class":263},[155,189804,20161],{"class":171},[155,189806,2711],{"class":263},[155,189808,2033],{"class":732},[155,189810,363],{"class":171},[24,189812,165020],{},[146,189814,189817],{"className":189815,"code":189816,"language":25051,"meta":39},[25049],"出错了:invalid literal for int() with base 10: 'abc'\n",[152,189818,189816],{"__ignoreMap":39},[20037,189820,189822],{"id":189821},"_96-else和finally","9.6 else和finally",[24,189824,189825,189827],{},[152,189826,765],{},"：没有异常时执行。",[24,189829,189830,189833],{},[152,189831,189832],{},"finally","：无论是否异常都会执行。",[146,189835,189837],{"className":148,"code":189836,"language":150,"meta":39,"style":39},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[152,189838,189839,189845,189863,189871,189881,189887,189908,189914],{"__ignoreMap":39},[155,189840,189841,189843],{"class":157,"line":158},[155,189842,189445],{"class":167},[155,189844,736],{"class":171},[155,189846,189847,189849,189851,189853,189855,189857,189859,189861],{"class":157,"line":46},[155,189848,15213],{"class":171},[155,189850,317],{"class":167},[155,189852,22269],{"class":263},[155,189854,230],{"class":171},[155,189856,72384],{"class":263},[155,189858,230],{"class":171},[155,189860,174359],{"class":732},[155,189862,1238],{"class":171},[155,189864,189865,189867,189869],{"class":157,"line":121},[155,189866,189457],{"class":167},[155,189868,170789],{"class":263},[155,189870,736],{"class":171},[155,189872,189873,189875,189877,189879],{"class":157,"line":180},[155,189874,822],{"class":263},[155,189876,230],{"class":171},[155,189878,171777],{"class":732},[155,189880,363],{"class":171},[155,189882,189883,189885],{"class":157,"line":194},[155,189884,765],{"class":167},[155,189886,736],{"class":171},[155,189888,189889,189891,189893,189895,189898,189900,189902,189904,189906],{"class":157,"line":200},[155,189890,822],{"class":263},[155,189892,230],{"class":171},[155,189894,17391],{"class":167},[155,189896,189897],{"class":732},"\"输入正确:",[155,189899,2705],{"class":263},[155,189901,21568],{"class":171},[155,189903,2711],{"class":263},[155,189905,2033],{"class":732},[155,189907,363],{"class":171},[155,189909,189910,189912],{"class":157,"line":213},[155,189911,189832],{"class":167},[155,189913,736],{"class":171},[155,189915,189916,189918,189920,189923],{"class":157,"line":220},[155,189917,822],{"class":263},[155,189919,230],{"class":171},[155,189921,189922],{"class":732},"\"程序结束\"",[155,189924,363],{"class":171},[24,189926,189927,189929],{},[152,189928,189832],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[20037,189931,189933],{"id":189932},"_97-抛出异常","9.7 抛出异常",[24,189935,189936],{},"程序可以主动抛出异常。",[146,189938,189940],{"className":148,"code":189939,"language":150,"meta":39,"style":39},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[152,189941,189942,189951,189963,189976,189996,190000,190004],{"__ignoreMap":39},[155,189943,189944,189946,189949],{"class":157,"line":158},[155,189945,1484],{"class":167},[155,189947,189948],{"class":226}," set_age",[155,189950,179978],{"class":171},[155,189952,189953,189955,189957,189959,189961],{"class":157,"line":46},[155,189954,1142],{"class":167},[155,189956,35532],{"class":171},[155,189958,20959],{"class":167},[155,189960,1151],{"class":263},[155,189962,736],{"class":171},[155,189964,189965,189967,189969,189971,189974],{"class":157,"line":121},[155,189966,121995],{"class":167},[155,189968,170789],{"class":263},[155,189970,230],{"class":171},[155,189972,189973],{"class":732},"\"年龄不能为负数\"",[155,189975,363],{"class":171},[155,189977,189978,189980,189982,189984,189986,189988,189990,189992,189994],{"class":157,"line":180},[155,189979,822],{"class":263},[155,189981,230],{"class":171},[155,189983,17391],{"class":167},[155,189985,180546],{"class":732},[155,189987,2705],{"class":263},[155,189989,88784],{"class":171},[155,189991,2711],{"class":263},[155,189993,2033],{"class":732},[155,189995,363],{"class":171},[155,189997,189998],{"class":157,"line":194},[155,189999,217],{"emptyLinePlaceholder":216},[155,190001,190002],{"class":157,"line":200},[155,190003,217],{"emptyLinePlaceholder":216},[155,190005,190006,190009,190011,190013],{"class":157,"line":213},[155,190007,190008],{"class":171},"set_age(",[155,190010,2039],{"class":167},[155,190012,329],{"class":263},[155,190014,363],{"class":171},[24,190016,190017],{},"调用者可以捕获：",[146,190019,190021],{"className":148,"code":190020,"language":150,"meta":39,"style":39},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[152,190022,190023,190029,190040,190050],{"__ignoreMap":39},[155,190024,190025,190027],{"class":157,"line":158},[155,190026,189445],{"class":167},[155,190028,736],{"class":171},[155,190030,190031,190034,190036,190038],{"class":157,"line":46},[155,190032,190033],{"class":171},"    set_age(",[155,190035,2039],{"class":167},[155,190037,329],{"class":263},[155,190039,363],{"class":171},[155,190041,190042,190044,190046,190048],{"class":157,"line":121},[155,190043,189457],{"class":167},[155,190045,170789],{"class":263},[155,190047,83167],{"class":167},[155,190049,189789],{"class":171},[155,190051,190052,190054],{"class":157,"line":180},[155,190053,822],{"class":263},[155,190055,85562],{"class":171},[20037,190057,190059],{"id":190058},"_98-自定义异常","9.8 自定义异常",[146,190061,190063],{"className":148,"code":190062,"language":150,"meta":39,"style":39},"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",[152,190064,190065,190079,190083,190087,190091,190099,190109,190120,190130,190134,190138,190144,190161,190172],{"__ignoreMap":39},[155,190066,190067,190069,190072,190074,190077],{"class":157,"line":158},[155,190068,223],{"class":167},[155,190070,190071],{"class":226}," BalanceNotEnoughError",[155,190073,230],{"class":171},[155,190075,190076],{"class":263},"Exception",[155,190078,242],{"class":171},[155,190080,190081],{"class":157,"line":46},[155,190082,168100],{"class":167},[155,190084,190085],{"class":157,"line":121},[155,190086,217],{"emptyLinePlaceholder":216},[155,190088,190089],{"class":157,"line":180},[155,190090,217],{"emptyLinePlaceholder":216},[155,190092,190093,190095,190097],{"class":157,"line":194},[155,190094,1484],{"class":167},[155,190096,168749],{"class":226},[155,190098,181375],{"class":171},[155,190100,190101,190103,190105,190107],{"class":157,"line":200},[155,190102,1142],{"class":167},[155,190104,168705],{"class":171},[155,190106,1148],{"class":167},[155,190108,181152],{"class":171},[155,190110,190111,190113,190116,190118],{"class":157,"line":213},[155,190112,121995],{"class":167},[155,190114,190115],{"class":171}," BalanceNotEnoughError(",[155,190117,168800],{"class":732},[155,190119,363],{"class":171},[155,190121,190122,190124,190126,190128],{"class":157,"line":220},[155,190123,1692],{"class":167},[155,190125,181382],{"class":171},[155,190127,2039],{"class":167},[155,190129,168738],{"class":171},[155,190131,190132],{"class":157,"line":245},[155,190133,217],{"emptyLinePlaceholder":216},[155,190135,190136],{"class":157,"line":251},[155,190137,217],{"emptyLinePlaceholder":216},[155,190139,190140,190142],{"class":157,"line":257},[155,190141,189445],{"class":167},[155,190143,736],{"class":171},[155,190145,190146,190148,190150,190153,190155,190157,190159],{"class":157,"line":270},[155,190147,181053],{"class":171},[155,190149,317],{"class":167},[155,190151,190152],{"class":171}," withdraw(",[155,190154,20389],{"class":263},[155,190156,7589],{"class":171},[155,190158,21619],{"class":263},[155,190160,363],{"class":171},[155,190162,190163,190165,190168,190170],{"class":157,"line":276},[155,190164,189457],{"class":167},[155,190166,190167],{"class":171}," BalanceNotEnoughError ",[155,190169,907],{"class":167},[155,190171,189789],{"class":171},[155,190173,190174,190176],{"class":157,"line":297},[155,190175,822],{"class":263},[155,190177,85562],{"class":171},[24,190179,190180],{},"入门阶段大多数情况使用内置异常即可。",[20037,190182,190184],{"id":190183},"_99-traceback","9.9 traceback",[24,190186,190187],{},"调试时可以输出完整异常堆栈。",[146,190189,190191],{"className":148,"code":190190,"language":150,"meta":39,"style":39},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[152,190192,190193,190200,190204,190210,190220,190228],{"__ignoreMap":39},[155,190194,190195,190197],{"class":157,"line":158},[155,190196,168],{"class":167},[155,190198,190199],{"class":171}," traceback\n",[155,190201,190202],{"class":157,"line":46},[155,190203,217],{"emptyLinePlaceholder":216},[155,190205,190206,190208],{"class":157,"line":121},[155,190207,189445],{"class":167},[155,190209,736],{"class":171},[155,190211,190212,190214,190216,190218],{"class":157,"line":180},[155,190213,21872],{"class":263},[155,190215,230],{"class":171},[155,190217,174443],{"class":732},[155,190219,363],{"class":171},[155,190221,190222,190224,190226],{"class":157,"line":194},[155,190223,189457],{"class":167},[155,190225,170789],{"class":263},[155,190227,736],{"class":171},[155,190229,190230],{"class":157,"line":200},[155,190231,190232],{"class":171},"    traceback.print_exc()\n",[24,190234,190235],{},"日志系统中常把异常堆栈记录到文件。",[20037,190237,190239],{"id":190238},"_910-什么是模块","9.10 什么是模块",[24,190241,190242,190243,144546],{},"模块就是一个 ",[152,190244,164915],{},[24,190246,190247,190248,44410],{},"例如创建 ",[152,190249,190250],{},"my_math.py",[146,190252,190254],{"className":148,"code":190253,"language":150,"meta":39,"style":39},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[152,190255,190256,190264,190274,190278,190282,190291],{"__ignoreMap":39},[155,190257,190258,190260,190262],{"class":157,"line":158},[155,190259,1484],{"class":167},[155,190261,25073],{"class":226},[155,190263,169656],{"class":171},[155,190265,190266,190268,190270,190272],{"class":157,"line":46},[155,190267,1692],{"class":167},[155,190269,30697],{"class":171},[155,190271,1274],{"class":167},[155,190273,169667],{"class":171},[155,190275,190276],{"class":157,"line":121},[155,190277,217],{"emptyLinePlaceholder":216},[155,190279,190280],{"class":157,"line":180},[155,190281,217],{"emptyLinePlaceholder":216},[155,190283,190284,190286,190289],{"class":157,"line":194},[155,190285,1484],{"class":167},[155,190287,190288],{"class":226}," sub",[155,190290,169656],{"class":171},[155,190292,190293,190295,190297,190299],{"class":157,"line":200},[155,190294,1692],{"class":167},[155,190296,30697],{"class":171},[155,190298,2039],{"class":167},[155,190300,169667],{"class":171},[24,190302,190303],{},"在另一个文件中导入：",[146,190305,190307],{"className":148,"code":190306,"language":150,"meta":39,"style":39},"import my_math\n\nprint(my_math.add(1, 2))\n",[152,190308,190309,190316,190320],{"__ignoreMap":39},[155,190310,190311,190313],{"class":157,"line":158},[155,190312,168],{"class":167},[155,190314,190315],{"class":171}," my_math\n",[155,190317,190318],{"class":157,"line":46},[155,190319,217],{"emptyLinePlaceholder":216},[155,190321,190322,190324,190327,190329,190331,190333],{"class":157,"line":121},[155,190323,15451],{"class":263},[155,190325,190326],{"class":171},"(my_math.add(",[155,190328,329],{"class":263},[155,190330,7589],{"class":171},[155,190332,360],{"class":263},[155,190334,1238],{"class":171},[20037,190336,190338],{"id":190337},"_911-import导入","9.11 import导入",[14,190340,190342],{"id":190341},"_9111-导入模块","9.11.1 导入模块",[146,190344,190346],{"className":148,"code":190345,"language":150,"meta":39,"style":39},"import random\n\nprint(random.randint(1, 10))\n",[152,190347,190348,190354,190358],{"__ignoreMap":39},[155,190349,190350,190352],{"class":157,"line":158},[155,190351,168],{"class":167},[155,190353,14948],{"class":171},[155,190355,190356],{"class":157,"line":46},[155,190357,217],{"emptyLinePlaceholder":216},[155,190359,190360,190362,190365,190367,190369,190371],{"class":157,"line":121},[155,190361,15451],{"class":263},[155,190363,190364],{"class":171},"(random.randint(",[155,190366,329],{"class":263},[155,190368,7589],{"class":171},[155,190370,565],{"class":263},[155,190372,1238],{"class":171},[14,190374,190376],{"id":190375},"_9112-导入指定内容","9.11.2 导入指定内容",[146,190378,190380],{"className":148,"code":190379,"language":150,"meta":39,"style":39},"from random import randint\n\nprint(randint(1, 10))\n",[152,190381,190382,190393,190397],{"__ignoreMap":39},[155,190383,190384,190386,190388,190390],{"class":157,"line":158},[155,190385,183],{"class":167},[155,190387,76359],{"class":171},[155,190389,168],{"class":167},[155,190391,190392],{"class":171}," randint\n",[155,190394,190395],{"class":157,"line":46},[155,190396,217],{"emptyLinePlaceholder":216},[155,190398,190399,190401,190404,190406,190408,190410],{"class":157,"line":121},[155,190400,15451],{"class":263},[155,190402,190403],{"class":171},"(randint(",[155,190405,329],{"class":263},[155,190407,7589],{"class":171},[155,190409,565],{"class":263},[155,190411,1238],{"class":171},[14,190413,190415],{"id":190414},"_9113-起别名","9.11.3 起别名",[146,190417,190419],{"className":148,"code":190418,"language":150,"meta":39,"style":39},"import random as rd\n\nprint(rd.randint(1, 10))\n",[152,190420,190421,190432,190436],{"__ignoreMap":39},[155,190422,190423,190425,190427,190429],{"class":157,"line":158},[155,190424,168],{"class":167},[155,190426,76359],{"class":171},[155,190428,907],{"class":167},[155,190430,190431],{"class":171}," rd\n",[155,190433,190434],{"class":157,"line":46},[155,190435,217],{"emptyLinePlaceholder":216},[155,190437,190438,190440,190443,190445,190447,190449],{"class":157,"line":121},[155,190439,15451],{"class":263},[155,190441,190442],{"class":171},"(rd.randint(",[155,190444,329],{"class":263},[155,190446,7589],{"class":171},[155,190448,565],{"class":263},[155,190450,1238],{"class":171},[146,190452,190454],{"className":148,"code":190453,"language":150,"meta":39,"style":39},"from random import randint as rint\n\nprint(rint(1, 10))\n",[152,190455,190456,190472,190476],{"__ignoreMap":39},[155,190457,190458,190460,190462,190464,190467,190469],{"class":157,"line":158},[155,190459,183],{"class":167},[155,190461,76359],{"class":171},[155,190463,168],{"class":167},[155,190465,190466],{"class":171}," randint ",[155,190468,907],{"class":167},[155,190470,190471],{"class":171}," rint\n",[155,190473,190474],{"class":157,"line":46},[155,190475,217],{"emptyLinePlaceholder":216},[155,190477,190478,190480,190483,190485,190487,190489],{"class":157,"line":121},[155,190479,15451],{"class":263},[155,190481,190482],{"class":171},"(rint(",[155,190484,329],{"class":263},[155,190486,7589],{"class":171},[155,190488,565],{"class":263},[155,190490,1238],{"class":171},[14,190492,190494],{"id":190493},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[146,190496,190498],{"className":148,"code":190497,"language":150,"meta":39,"style":39},"from random import *\n",[152,190499,190500],{"__ignoreMap":39},[155,190501,190502,190504,190506,190508],{"class":157,"line":158},[155,190503,183],{"class":167},[155,190505,76359],{"class":171},[155,190507,168],{"class":167},[155,190509,190510],{"class":167}," *\n",[24,190512,190513],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[20037,190515,190517],{"id":190516},"_912-常用内置模块","9.12 常用内置模块",[14,190519,190521],{"id":190520},"_9121-random","9.12.1 random",[146,190523,190525],{"className":148,"code":190524,"language":150,"meta":39,"style":39},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[152,190526,190527,190533,190537,190551,190570],{"__ignoreMap":39},[155,190528,190529,190531],{"class":157,"line":158},[155,190530,168],{"class":167},[155,190532,14948],{"class":171},[155,190534,190535],{"class":157,"line":46},[155,190536,217],{"emptyLinePlaceholder":216},[155,190538,190539,190541,190543,190545,190547,190549],{"class":157,"line":121},[155,190540,15451],{"class":263},[155,190542,190364],{"class":171},[155,190544,329],{"class":263},[155,190546,7589],{"class":171},[155,190548,565],{"class":263},[155,190550,1238],{"class":171},[155,190552,190553,190555,190558,190560,190562,190564,190566,190568],{"class":157,"line":180},[155,190554,15451],{"class":263},[155,190556,190557],{"class":171},"(random.choice([",[155,190559,168451],{"class":732},[155,190561,7589],{"class":171},[155,190563,169499],{"class":732},[155,190565,7589],{"class":171},[155,190567,178294],{"class":732},[155,190569,2739],{"class":171},[155,190571,190572,190574,190577,190579,190581,190583,190585,190587,190589,190591,190593,190595,190597,190599],{"class":157,"line":194},[155,190573,15451],{"class":263},[155,190575,190576],{"class":171},"(random.sample([",[155,190578,329],{"class":263},[155,190580,7589],{"class":171},[155,190582,360],{"class":263},[155,190584,7589],{"class":171},[155,190586,4444],{"class":263},[155,190588,7589],{"class":171},[155,190590,1264],{"class":263},[155,190592,7589],{"class":171},[155,190594,350],{"class":263},[155,190596,130765],{"class":171},[155,190598,360],{"class":263},[155,190600,1238],{"class":171},[14,190602,190604],{"id":190603},"_9122-time","9.12.2 time",[146,190606,190608],{"className":148,"code":190607,"language":150,"meta":39,"style":39},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[152,190609,190610,190616,190620,190627,190635],{"__ignoreMap":39},[155,190611,190612,190614],{"class":157,"line":158},[155,190613,168],{"class":167},[155,190615,1366],{"class":171},[155,190617,190618],{"class":157,"line":46},[155,190619,217],{"emptyLinePlaceholder":216},[155,190621,190622,190624],{"class":157,"line":121},[155,190623,15451],{"class":263},[155,190625,190626],{"class":171},"(time.time())\n",[155,190628,190629,190631,190633],{"class":157,"line":180},[155,190630,113634],{"class":171},[155,190632,329],{"class":263},[155,190634,363],{"class":171},[155,190636,190637,190639,190641,190644],{"class":157,"line":194},[155,190638,15451],{"class":263},[155,190640,230],{"class":171},[155,190642,190643],{"class":732},"\"1秒后执行\"",[155,190645,363],{"class":171},[14,190647,190649],{"id":190648},"_9123-datetime","9.12.3 datetime",[146,190651,190653],{"className":148,"code":190652,"language":150,"meta":39,"style":39},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[152,190654,190655,190667,190671,190681,190688],{"__ignoreMap":39},[155,190656,190657,190659,190662,190664],{"class":157,"line":158},[155,190658,183],{"class":167},[155,190660,190661],{"class":171}," datetime ",[155,190663,168],{"class":167},[155,190665,190666],{"class":171}," datetime\n",[155,190668,190669],{"class":157,"line":46},[155,190670,217],{"emptyLinePlaceholder":216},[155,190672,190673,190676,190678],{"class":157,"line":121},[155,190674,190675],{"class":171},"now ",[155,190677,317],{"class":167},[155,190679,190680],{"class":171}," datetime.now()\n",[155,190682,190683,190685],{"class":157,"line":180},[155,190684,15451],{"class":263},[155,190686,190687],{"class":171},"(now)\n",[155,190689,190690,190692,190695,190698,190700,190703],{"class":157,"line":194},[155,190691,15451],{"class":263},[155,190693,190694],{"class":171},"(now.strftime(",[155,190696,190697],{"class":732},"\"%Y-%m-",[155,190699,175254],{"class":263},[155,190701,190702],{"class":732}," %H:%M:%S\"",[155,190704,1238],{"class":171},[14,190706,190708],{"id":190707},"_9124-os","9.12.4 os",[146,190710,190712],{"className":148,"code":190711,"language":150,"meta":39,"style":39},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[152,190713,190714,190720,190724,190731],{"__ignoreMap":39},[155,190715,190716,190718],{"class":157,"line":158},[155,190717,168],{"class":167},[155,190719,14925],{"class":171},[155,190721,190722],{"class":157,"line":46},[155,190723,217],{"emptyLinePlaceholder":216},[155,190725,190726,190728],{"class":157,"line":121},[155,190727,15451],{"class":263},[155,190729,190730],{"class":171},"(os.getcwd())\n",[155,190732,190733,190735,190738,190741],{"class":157,"line":180},[155,190734,15451],{"class":263},[155,190736,190737],{"class":171},"(os.listdir(",[155,190739,190740],{"class":732},"\".\"",[155,190742,1238],{"class":171},[14,190744,190746],{"id":190745},"_9125-sys","9.12.5 sys",[146,190748,190750],{"className":148,"code":190749,"language":150,"meta":39,"style":39},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[152,190751,190752,190759,190763,190770],{"__ignoreMap":39},[155,190753,190754,190756],{"class":157,"line":158},[155,190755,168],{"class":167},[155,190757,190758],{"class":171}," sys\n",[155,190760,190761],{"class":157,"line":46},[155,190762,217],{"emptyLinePlaceholder":216},[155,190764,190765,190767],{"class":157,"line":121},[155,190766,15451],{"class":263},[155,190768,190769],{"class":171},"(sys.version)\n",[155,190771,190772,190774],{"class":157,"line":180},[155,190773,15451],{"class":263},[155,190775,190776],{"class":171},"(sys.path)\n",[20037,190778,190780,190781,190783,190784,2033],{"id":190779},"_913-if-name-main","9.13 if ",[20234,190782,98373],{}," == \"",[20234,190785,120621],{},[24,190787,190788,190789,190792],{},"模块被直接运行和被导入时，",[152,190790,190791],{},"__name__"," 的值不同。",[24,190794,190795,190796,44410],{},"创建 ",[152,190797,190798],{},"my_module.py",[146,190800,190802],{"className":148,"code":190801,"language":150,"meta":39,"style":39},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[152,190803,190804,190812,190822,190826,190830,190842],{"__ignoreMap":39},[155,190805,190806,190808,190810],{"class":157,"line":158},[155,190807,1484],{"class":167},[155,190809,25073],{"class":226},[155,190811,169656],{"class":171},[155,190813,190814,190816,190818,190820],{"class":157,"line":46},[155,190815,1692],{"class":167},[155,190817,30697],{"class":171},[155,190819,1274],{"class":167},[155,190821,169667],{"class":171},[155,190823,190824],{"class":157,"line":121},[155,190825,217],{"emptyLinePlaceholder":216},[155,190827,190828],{"class":157,"line":180},[155,190829,217],{"emptyLinePlaceholder":216},[155,190831,190832,190834,190836,190838,190840],{"class":157,"line":194},[155,190833,723],{"class":167},[155,190835,726],{"class":263},[155,190837,120122],{"class":167},[155,190839,120125],{"class":732},[155,190841,736],{"class":171},[155,190843,190844,190846,190848,190850,190852,190854],{"class":157,"line":200},[155,190845,822],{"class":263},[155,190847,185163],{"class":171},[155,190849,329],{"class":263},[155,190851,7589],{"class":171},[155,190853,360],{"class":263},[155,190855,1238],{"class":171},[24,190857,190858],{},"作用：",[28,190860,190861,190864],{},[31,190862,190863],{},"直接运行该文件时，执行测试代码。",[31,190865,190866],{},"被其他文件导入时，不执行测试代码。",[24,190868,190869],{},"这是写模块时很常用的习惯。",[20037,190871,190873],{"id":190872},"_914-包","9.14 包",[24,190875,190876,190877,190880],{},"包是包含 ",[152,190878,190879],{},"__init__.py"," 的目录，用于组织多个模块。",[24,190882,190883],{},"目录结构：",[146,190885,190888],{"className":190886,"code":190887,"language":25051,"meta":39},[25049],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[152,190889,190887],{"__ignoreMap":39},[24,190891,190892],{},"导入：",[146,190894,190896],{"className":148,"code":190895,"language":150,"meta":39,"style":39},"from utils.file_utils import read_file\n",[152,190897,190898],{"__ignoreMap":39},[155,190899,190900,190902,190905,190907],{"class":157,"line":158},[155,190901,183],{"class":167},[155,190903,190904],{"class":171}," utils.file_utils ",[155,190906,168],{"class":167},[155,190908,190909],{"class":171}," read_file\n",[24,190911,190912,190914],{},[152,190913,190879],{}," 可以为空，也可以写包初始化逻辑。",[20037,190916,190918],{"id":190917},"_915-第三方包","9.15 第三方包",[24,190920,190921,190922,190924],{},"第三方包通过 ",[152,190923,43622],{}," 安装。",[146,190926,190928],{"className":43613,"code":190927,"language":43615,"meta":39,"style":39},"pip install requests\n",[152,190929,190930],{"__ignoreMap":39},[155,190931,190932,190934,190936],{"class":157,"line":158},[155,190933,43622],{"class":226},[155,190935,43625],{"class":732},[155,190937,164661],{"class":732},[24,190939,190940],{},"使用：",[146,190942,190944],{"className":148,"code":190943,"language":150,"meta":39,"style":39},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[152,190945,190946,190952,190956,190971],{"__ignoreMap":39},[155,190947,190948,190950],{"class":157,"line":158},[155,190949,168],{"class":167},[155,190951,164661],{"class":171},[155,190953,190954],{"class":157,"line":46},[155,190955,217],{"emptyLinePlaceholder":216},[155,190957,190958,190961,190963,190966,190969],{"class":157,"line":121},[155,190959,190960],{"class":171},"response ",[155,190962,317],{"class":167},[155,190964,190965],{"class":171}," requests.get(",[155,190967,190968],{"class":732},"\"https:\u002F\u002Fwww.example.com\"",[155,190970,363],{"class":171},[155,190972,190973,190975],{"class":157,"line":180},[155,190974,15451],{"class":263},[155,190976,190977],{"class":171},"(response.status_code)\n",[24,190979,190980],{},"查看已安装包：",[146,190982,190984],{"className":43613,"code":190983,"language":43615,"meta":39,"style":39},"pip list\n",[152,190985,190986],{"__ignoreMap":39},[155,190987,190988,190990],{"class":157,"line":158},[155,190989,43622],{"class":226},[155,190991,137518],{"class":732},[24,190993,190994],{},"导出项目依赖：",[146,190996,190997],{"className":43613,"code":164856,"language":43615,"meta":39,"style":39},[152,190998,190999],{"__ignoreMap":39},[155,191000,191001,191003,191005,191007],{"class":157,"line":158},[155,191002,43622],{"class":226},[155,191004,164865],{"class":732},[155,191006,46011],{"class":167},[155,191008,164870],{"class":732},[24,191010,191011],{},"安装项目依赖：",[146,191013,191014],{"className":43613,"code":164876,"language":43615,"meta":39,"style":39},[152,191015,191016],{"__ignoreMap":39},[155,191017,191018,191020,191022,191024],{"class":157,"line":158},[155,191019,43622],{"class":226},[155,191021,43625],{"class":732},[155,191023,138202],{"class":263},[155,191025,164870],{"class":732},[20037,191027,191029],{"id":191028},"_916-模块搜索路径","9.16 模块搜索路径",[24,191031,191032,191033,191036],{},"Python 导入模块时会在 ",[152,191034,191035],{},"sys.path"," 中查找。",[146,191038,191040],{"className":148,"code":191039,"language":150,"meta":39,"style":39},"import sys\n\nfor path in sys.path:\n    print(path)\n",[152,191041,191042,191048,191052,191064],{"__ignoreMap":39},[155,191043,191044,191046],{"class":157,"line":158},[155,191045,168],{"class":167},[155,191047,190758],{"class":171},[155,191049,191050],{"class":157,"line":46},[155,191051,217],{"emptyLinePlaceholder":216},[155,191053,191054,191056,191059,191061],{"class":157,"line":121},[155,191055,1125],{"class":167},[155,191057,191058],{"class":171}," path ",[155,191060,1131],{"class":167},[155,191062,191063],{"class":171}," sys.path:\n",[155,191065,191066,191068],{"class":157,"line":180},[155,191067,822],{"class":263},[155,191069,187792],{"class":171},[24,191071,191072],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[24,191074,176186],{},[146,191076,191079],{"className":191077,"code":191078,"language":25051,"meta":39},[25049],"random.py\njson.py\ntime.py\n",[152,191080,191078],{"__ignoreMap":39},[24,191082,191083],{},"这些文件名可能导致导入异常。",[20037,191085,191087],{"id":191086},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[24,191089,190883],{},[146,191091,191094],{"className":191092,"code":191093,"language":25051,"meta":39},[25049],"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",[152,191095,191093],{"__ignoreMap":39},[24,191097,191098,44410],{},[152,191099,191100],{},"utils\u002Ffile_utils.py",[146,191102,191104],{"className":148,"code":191103,"language":150,"meta":39,"style":39},"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",[152,191105,191106,191112,191122,191126,191130,191140,191150,191158,191164,191168,191195,191205,191209,191213,191223,191249],{"__ignoreMap":39},[155,191107,191108,191110],{"class":157,"line":158},[155,191109,168],{"class":167},[155,191111,165654],{"class":171},[155,191113,191114,191116,191118,191120],{"class":157,"line":46},[155,191115,183],{"class":167},[155,191117,126874],{"class":171},[155,191119,168],{"class":167},[155,191121,126879],{"class":171},[155,191123,191124],{"class":157,"line":121},[155,191125,217],{"emptyLinePlaceholder":216},[155,191127,191128],{"class":157,"line":180},[155,191129,217],{"emptyLinePlaceholder":216},[155,191131,191132,191134,191137],{"class":157,"line":194},[155,191133,1484],{"class":167},[155,191135,191136],{"class":226}," read_json",[155,191138,191139],{"class":171},"(path):\n",[155,191141,191142,191145,191147],{"class":157,"line":200},[155,191143,191144],{"class":171},"    path ",[155,191146,317],{"class":167},[155,191148,191149],{"class":171}," Path(path)\n",[155,191151,191152,191154,191156],{"class":157,"line":213},[155,191153,1142],{"class":167},[155,191155,8542],{"class":167},[155,191157,187873],{"class":171},[155,191159,191160,191162],{"class":157,"line":220},[155,191161,709],{"class":167},[155,191163,70401],{"class":171},[155,191165,191166],{"class":157,"line":245},[155,191167,217],{"emptyLinePlaceholder":216},[155,191169,191170,191172,191174,191177,191179,191181,191183,191185,191187,191189,191191,191193],{"class":157,"line":251},[155,191171,3783],{"class":167},[155,191173,165354],{"class":263},[155,191175,191176],{"class":171},"(path, ",[155,191178,165364],{"class":732},[155,191180,7589],{"class":171},[155,191182,165369],{"class":323},[155,191184,317],{"class":167},[155,191186,165374],{"class":732},[155,191188,33541],{"class":171},[155,191190,907],{"class":167},[155,191192,166716],{"class":323},[155,191194,736],{"class":171},[155,191196,191197,191199,191201,191203],{"class":157,"line":257},[155,191198,709],{"class":167},[155,191200,166727],{"class":171},[155,191202,14974],{"class":323},[155,191204,363],{"class":171},[155,191206,191207],{"class":157,"line":270},[155,191208,217],{"emptyLinePlaceholder":216},[155,191210,191211],{"class":157,"line":276},[155,191212,217],{"emptyLinePlaceholder":216},[155,191214,191215,191217,191220],{"class":157,"line":297},[155,191216,1484],{"class":167},[155,191218,191219],{"class":226}," write_json",[155,191221,191222],{"class":171},"(path, data):\n",[155,191224,191225,191227,191229,191231,191233,191235,191237,191239,191241,191243,191245,191247],{"class":157,"line":302},[155,191226,3783],{"class":167},[155,191228,165354],{"class":263},[155,191230,191176],{"class":171},[155,191232,170539],{"class":732},[155,191234,7589],{"class":171},[155,191236,165369],{"class":323},[155,191238,317],{"class":167},[155,191240,165374],{"class":732},[155,191242,33541],{"class":171},[155,191244,907],{"class":167},[155,191246,166716],{"class":323},[155,191248,736],{"class":171},[155,191250,191251,191254,191256,191258,191260,191262,191264,191266,191268,191270,191272],{"class":157,"line":308},[155,191252,191253],{"class":171},"        json.dump(data, ",[155,191255,14974],{"class":323},[155,191257,7589],{"class":171},[155,191259,165700],{"class":323},[155,191261,317],{"class":167},[155,191263,3592],{"class":263},[155,191265,7589],{"class":171},[155,191267,170575],{"class":323},[155,191269,317],{"class":167},[155,191271,360],{"class":263},[155,191273,363],{"class":171},[24,191275,191276,44410],{},[152,191277,173170],{},[146,191279,191281],{"className":148,"code":191280,"language":150,"meta":39,"style":39},"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",[152,191282,191283,191294,191298,191311,191331],{"__ignoreMap":39},[155,191284,191285,191287,191289,191291],{"class":157,"line":158},[155,191286,183],{"class":167},[155,191288,190904],{"class":171},[155,191290,168],{"class":167},[155,191292,191293],{"class":171}," read_json, write_json\n",[155,191295,191296],{"class":157,"line":46},[155,191297,217],{"emptyLinePlaceholder":216},[155,191299,191300,191302,191304,191307,191309],{"class":157,"line":121},[155,191301,178279],{"class":171},[155,191303,317],{"class":167},[155,191305,191306],{"class":171}," read_json(",[155,191308,170394],{"class":732},[155,191310,363],{"class":171},[155,191312,191313,191315,191317,191319,191321,191323,191325,191327,191329],{"class":157,"line":180},[155,191314,189097],{"class":171},[155,191316,81242],{"class":732},[155,191318,70000],{"class":171},[155,191320,168451],{"class":732},[155,191322,7589],{"class":171},[155,191324,170035],{"class":732},[155,191326,70000],{"class":171},[155,191328,21034],{"class":263},[155,191330,183715],{"class":171},[155,191332,191333,191336,191338],{"class":157,"line":194},[155,191334,191335],{"class":171},"write_json(",[155,191337,170394],{"class":732},[155,191339,191340],{"class":171},", students)\n",[20037,191342,191344],{"id":191343},"_918-易错点","9.18 易错点",[28,191346,191347,191350,191355,191360,191363,191366],{},[31,191348,191349],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[31,191351,191352,191353,48174],{},"能指定异常类型就不要裸写 ",[152,191354,189457],{},[31,191356,191357,191359],{},[152,191358,189832],{}," 无论是否出错都会执行。",[31,191361,191362],{},"模块文件名不要和标准库重名。",[31,191364,191365],{},"导入自己写的模块时，要注意运行目录。",[31,191367,191368],{},"第三方包要安装到当前解释器或虚拟环境中。",[20037,191370,191372],{"id":191371},"_919-本章练习","9.19 本章练习",[28,191374,191375,191378,191381,191387,191394],{},[31,191376,191377],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[31,191379,191380],{},"写函数读取文件，如果文件不存在则返回空字符串。",[31,191382,190795,191383,191386],{},[152,191384,191385],{},"math_utils.py","，实现加减乘除函数并导入使用。",[31,191388,191389,191390,191393],{},"创建一个 ",[152,191391,191392],{},"utils"," 包，把 JSON 读写函数放进去。",[31,191395,191396],{},"写一个程序，捕获除零异常和输入格式异常。",[20011,191398,191399],{},"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":39,"searchDepth":46,"depth":46,"links":191401},[191402,191403,191404,191405,191406,191407,191408,191409,191410,191411,191412,191418,191425,191427,191428,191429,191430,191431,191432],{"id":189254,"depth":46,"text":189255},{"id":189382,"depth":46,"text":189383},{"id":189431,"depth":46,"text":189432},{"id":189580,"depth":46,"text":189581},{"id":189752,"depth":46,"text":189753},{"id":189821,"depth":46,"text":189822},{"id":189932,"depth":46,"text":189933},{"id":190058,"depth":46,"text":190059},{"id":190183,"depth":46,"text":190184},{"id":190238,"depth":46,"text":190239},{"id":190337,"depth":46,"text":190338,"children":191413},[191414,191415,191416,191417],{"id":190341,"depth":121,"text":190342},{"id":190375,"depth":121,"text":190376},{"id":190414,"depth":121,"text":190415},{"id":190493,"depth":121,"text":190494},{"id":190516,"depth":46,"text":190517,"children":191419},[191420,191421,191422,191423,191424],{"id":190520,"depth":121,"text":190521},{"id":190603,"depth":121,"text":190604},{"id":190648,"depth":121,"text":190649},{"id":190707,"depth":121,"text":190708},{"id":190745,"depth":121,"text":190746},{"id":190779,"depth":46,"text":191426},"9.13 if name == \"main\"",{"id":190872,"depth":46,"text":190873},{"id":190917,"depth":46,"text":190918},{"id":191028,"depth":46,"text":191029},{"id":191086,"depth":46,"text":191087},{"id":191343,"depth":46,"text":191344},{"id":191371,"depth":46,"text":191372},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":189246,"description":20020},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":191439,"title":191440,"body":191441,"description":191604,"extension":20021,"meta":191605,"navigation":216,"path":191606,"seo":191607,"stem":191608,"__hash__":191609},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":191442,"toc":191599},[191443,191446,191449,191452,191463,191465,191539,191542,191545,191548,191551,191554,191557,191560,191563,191566,191569],[10,191444,191440],{"id":191445},"python教程",[24,191447,191448],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[24,191450,191451],{},"建议学习环境：",[28,191453,191454,191457,191460],{},[31,191455,191456],{},"Python 版本：Python 3.10 及以上。",[31,191458,191459],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[31,191461,191462],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[20037,191464,135641],{"id":135641},[28,191466,191467,191473,191479,191485,191491,191497,191503,191509,191515,191521,191527,191533],{},[31,191468,191469],{},[20318,191470,191472],{"href":191471},".\u002Fch1-Python","Python环境与第一个程序",[31,191474,191475],{},[20318,191476,191478],{"href":191477},".\u002Fch2","基础语法、变量与字符串",[31,191480,191481],{},[20318,191482,191484],{"href":191483},".\u002Fch3","判断语句",[31,191486,191487],{},[20318,191488,191490],{"href":191489},".\u002Fch4","循环语句",[31,191492,191493],{},[20318,191494,191496],{"href":191495},".\u002Fch5","函数基础",[31,191498,191499],{},[20318,191500,191502],{"href":191501},".\u002Fch6","数据容器",[31,191504,191505],{},[20318,191506,191508],{"href":191507},".\u002Fch7","函数进阶",[31,191510,191511],{},[20318,191512,191514],{"href":191513},".\u002Fch8","文件操作",[31,191516,191517],{},[20318,191518,191520],{"href":191519},".\u002Fch9","异常、模块与包",[31,191522,191523],{},[20318,191524,191526],{"href":191525},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[31,191528,191529],{},[20318,191530,191532],{"href":191531},".\u002Fch11","面向对象基础",[31,191534,191535],{},[20318,191536,191538],{"href":191537},".\u002Fch12","综合案例与复习路线",[20037,191540,191541],{"id":191541},"学习路线",[24,191543,191544],{},"第一阶段：能运行程序。",[24,191546,191547],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[24,191549,191550],{},"第二阶段：能组织数据。",[24,191552,191553],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[24,191555,191556],{},"第三阶段：能封装逻辑。",[24,191558,191559],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[24,191561,191562],{},"第四阶段：能做小项目。",[24,191564,191565],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[20037,191567,191568],{"id":191568},"参考资料",[28,191570,191571,191578,191585,191592],{},[31,191572,191573,191574],{},"黑马程序员 Python 入门教程推荐：",[20318,191575,191576],{"href":191576,"rel":191577},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[43656],[31,191579,191580,191581],{},"Python 官方中文教程：",[20318,191582,191583],{"href":191583,"rel":191584},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[43656],[31,191586,191587,191588],{},"Python 标准库文档：",[20318,191589,191590],{"href":191590,"rel":191591},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[43656],[31,191593,191594,191595],{},"pyecharts 文档：",[20318,191596,191597],{"href":191597,"rel":191598},"https:\u002F\u002Fpyecharts.org\u002F",[43656],{"title":39,"searchDepth":46,"depth":46,"links":191600},[191601,191602,191603],{"id":135641,"depth":46,"text":135641},{"id":191541,"depth":46,"text":191541},{"id":191568,"depth":46,"text":191568},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":43169},"\u002Fwiki\u002F2024-10-10-python",{"title":191440,"description":191604},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331379207]