ChatGLM部署、微調(diào)與開發(fā) 課件 08 09第八章第九章-大模型課程_第1頁
ChatGLM部署、微調(diào)與開發(fā) 課件 08 09第八章第九章-大模型課程_第2頁
ChatGLM部署、微調(diào)與開發(fā) 課件 08 09第八章第九章-大模型課程_第3頁
ChatGLM部署、微調(diào)與開發(fā) 課件 08 09第八章第九章-大模型課程_第4頁
ChatGLM部署、微調(diào)與開發(fā) 課件 08 09第八章第九章-大模型課程_第5頁
已閱讀5頁,還剩65頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第8章

大模型與知識(shí)圖譜知識(shí)圖譜增強(qiáng)大模型一大模型增強(qiáng)知識(shí)圖譜二大模型與知識(shí)圖譜協(xié)同三知識(shí)圖譜在大模型中應(yīng)用四8.1知識(shí)圖譜增強(qiáng)大模型什么是知識(shí)圖譜?·定義:一種基于圖結(jié)構(gòu)的知識(shí)表示方法,通過節(jié)點(diǎn)和邊來描述實(shí)體和實(shí)體之間的關(guān)系·優(yōu)勢(shì):基于圖結(jié)構(gòu),支持深度復(fù)雜推理,具有強(qiáng)可解釋性·應(yīng)用領(lǐng)域:搜索引擎、推薦系統(tǒng)、問答系統(tǒng)8.1知識(shí)圖譜增強(qiáng)大模型知識(shí)圖譜VS.大模型知識(shí)圖譜大模型知識(shí)圖譜能夠?yàn)橥ㄓ么竽P偷墓I(yè)化應(yīng)用,彌補(bǔ)通用大模型語料里專業(yè)領(lǐng)域知識(shí)的不足。可以利用知識(shí)圖譜在大模型中引入指定約束,適度控制內(nèi)容生成,提高大模型在行業(yè)應(yīng)用場景中的適應(yīng)能力。知識(shí)圖譜中的知識(shí)構(gòu)建測(cè)試集,可對(duì)大模型的生成能力進(jìn)行各方面的評(píng)估,降低事實(shí)性錯(cuò)誤的發(fā)生概率。大模型可以利用語義理解和生成等能力抽取知識(shí),提高知識(shí)抽取的準(zhǔn)確性和蓋度,也可以抽取出隱含的、復(fù)雜的、多模態(tài)的知識(shí),降低圖譜構(gòu)建成本。大模型可以利用其語義理解和指令遵循等能力輔助知識(shí)圖譜的半自動(dòng)化構(gòu)建設(shè)計(jì)、增加知識(shí)的全面性和覆蓋度,協(xié)助更好的完成知識(shí)融合和更新。大模型可以輔助提升知識(shí)圖譜的輸出效果,生成更加合理、連貫、有創(chuàng)新性的內(nèi)容,例如文本、圖像、音頻等?;パa(bǔ)關(guān)系融合互補(bǔ)大模型擅長處理自然語言和模糊知識(shí),而知識(shí)圖譜擅長表示結(jié)構(gòu)化知識(shí)并進(jìn)行推理。相互結(jié)合,可以充分發(fā)揮它們的優(yōu)勢(shì),解決更復(fù)雜的問題。互動(dòng)大模型可以用于從文本中提取知識(shí)、從而擴(kuò)展和豐富知識(shí)圖譜的內(nèi)容。知識(shí)圖譜可以為大模型提供結(jié)構(gòu)化知識(shí)進(jìn)行語義補(bǔ)充和生成引導(dǎo)。增強(qiáng)知識(shí)圖譜和大模型融合可以相互增強(qiáng)各自的能力。知識(shí)圖譜可以提高大模型的語義理解和準(zhǔn)確性,而大模型可以為知識(shí)圖譜提供更豐富的語言知識(shí)和生成能力。大模型與知識(shí)圖譜如何融合?——技術(shù)路徑8.1知識(shí)圖譜增強(qiáng)大模型LLM賦能KG數(shù)據(jù)標(biāo)注知識(shí)抽取知識(shí)建模表示學(xué)習(xí)知識(shí)補(bǔ)全圖譜構(gòu)建…KG賦能LLM增強(qiáng)預(yù)訓(xùn)練增強(qiáng)微調(diào)增強(qiáng)推理能力增強(qiáng)可解釋性...知識(shí)圖譜增強(qiáng)大模型預(yù)訓(xùn)練8.1知識(shí)圖譜增強(qiáng)大模型1)利用知識(shí)圖譜增強(qiáng)大模型預(yù)訓(xùn)練使用圖結(jié)構(gòu)將知識(shí)圖譜信息注入到大模型的輸入中,增強(qiáng)大模型預(yù)訓(xùn)練能力;通過附加的融合模塊將知識(shí)圖譜注入到大模型,在預(yù)訓(xùn)練模型中,可以設(shè)計(jì)額外的輔助任務(wù),然后通過輔助任務(wù)對(duì)預(yù)訓(xùn)練模型加約束來增強(qiáng)大模型預(yù)訓(xùn)練能力;知識(shí)圖譜的鏈?zhǔn)疥P(guān)系輸入到大模型中,作為大模型的預(yù)訓(xùn)練語料。知識(shí)圖譜增強(qiáng)大模型微調(diào)8.1知識(shí)圖譜增強(qiáng)大模型2)利用知識(shí)圖譜增強(qiáng)大模型的監(jiān)督微調(diào)/對(duì)齊微調(diào)通過指令微調(diào)訓(xùn)練和基于知識(shí)圖譜反饋的強(qiáng)化學(xué)習(xí);?通過文本-知識(shí)對(duì)齊將知識(shí)圖譜信息注入到大模型的訓(xùn)練目標(biāo)中,增強(qiáng)大模型預(yù)訓(xùn)練能力。三類主流微調(diào)方法:知識(shí)提示范式微調(diào)本體提示范式微調(diào)知識(shí)圖譜結(jié)構(gòu)微調(diào)知識(shí)圖譜增強(qiáng)大模型推理8.1知識(shí)圖譜增強(qiáng)大模型3)用知識(shí)圖譜增強(qiáng)大模型的常識(shí)和領(lǐng)域知識(shí)推理能力把知識(shí)圖譜當(dāng)作一個(gè)準(zhǔn)確的知識(shí)庫,作為一個(gè)外部檢索的知識(shí)源,提升常識(shí)和領(lǐng)域知識(shí)方面的推理能力;利用知識(shí)圖譜的多跳路徑作為大模型的輸入,提升模型專業(yè)性、可信性、真實(shí)性與可解釋性;使用知識(shí)模型根據(jù)問題生成知識(shí)陳述;兩個(gè)主要方法:基于檢索增強(qiáng)的知識(shí)融合基于知識(shí)圖譜的提示知識(shí)圖譜增強(qiáng)大模型可解釋性8.1知識(shí)圖譜增強(qiáng)大模型4)用知識(shí)圖譜增強(qiáng)大模型推理的可解釋性通過動(dòng)態(tài)知識(shí)圖譜融合增強(qiáng)大模型的推理能力,從知識(shí)圖譜中較容易地獲得一系列規(guī)則,既從數(shù)據(jù)中總結(jié)得出的特征子圖,作為COT、TOT的指令。通過檢索增強(qiáng)知識(shí)融合增強(qiáng)大模型的推理能力,知識(shí)圖譜是典型的圖結(jié)構(gòu),有大量的路徑。借助這種鏈?zhǔn)疥P(guān)系可提升大模型推理的可解釋性。使用知識(shí)模型根據(jù)問題生成知識(shí)陳述;利用大語言模型對(duì)基于知識(shí)圖譜生成的問題進(jìn)行預(yù)測(cè),驗(yàn)證大模型的可解釋性。第8章

大模型與知識(shí)圖譜知識(shí)圖譜增強(qiáng)大模型一大模型增強(qiáng)知識(shí)圖譜二大模型與知識(shí)圖譜協(xié)同三知識(shí)圖譜在大模型中應(yīng)用四大模型增強(qiáng)知識(shí)圖譜8.2大模型增強(qiáng)知識(shí)圖譜1)用大模型增強(qiáng)數(shù)據(jù)標(biāo)注利用大模型對(duì)原始數(shù)據(jù)進(jìn)行實(shí)體、關(guān)系、事件等標(biāo)注。2)用大模型增強(qiáng)知識(shí)抽取利用大模型進(jìn)行實(shí)體抽取、關(guān)系抽取、事件抽取、因果關(guān)系抽取等,例如:DeepKE-LLM。3)用大模型增強(qiáng)知識(shí)建模4)用大模型增強(qiáng)知識(shí)圖譜嵌入與表示學(xué)習(xí)5)用大模型增強(qiáng)知識(shí)圖譜補(bǔ)全6)用大模型增強(qiáng)知識(shí)圖譜構(gòu)建利用大模型進(jìn)行實(shí)體類型提取、關(guān)系類型提取、事件類型提取、知識(shí)體系提取等。利用大模型作為知識(shí)圖譜嵌入的文本和圖結(jié)構(gòu)編碼器,解決結(jié)構(gòu)連通性有限的問題,提升知識(shí)抽取的能力。利用大模型作為編碼器或生成器來補(bǔ)全知識(shí)圖譜數(shù)據(jù),提升知識(shí)補(bǔ)全的能力。利用大模型開展實(shí)體發(fā)現(xiàn)、共指解析和關(guān)系提取,構(gòu)建特定領(lǐng)域內(nèi)的知識(shí)圖譜結(jié)構(gòu)。采用知識(shí)蒸餾等技術(shù)實(shí)現(xiàn)端到端的圖譜構(gòu)建大模型增強(qiáng)知識(shí)圖譜8.2大模型增強(qiáng)知識(shí)圖譜7)用大模型增強(qiáng)知識(shí)圖譜文本生成利用大模型自然語言理解方面的優(yōu)勢(shì)能夠提升從知識(shí)圖譜中生成文本的質(zhì)量,提高語言的準(zhǔn)確性和在現(xiàn)實(shí)場景中的可用性。用大模型抽取自然語言問題中的實(shí)體、關(guān)系,進(jìn)入結(jié)構(gòu)化的知識(shí)圖譜尋找問題答案,再通過大模型組合答案并結(jié)合大模型自身的知識(shí)廣度將更充實(shí)的答案以自然語言的方式輸出,增強(qiáng)知識(shí)圖譜問答的廣度、自然性和準(zhǔn)確性。大模型在其中扮演的角色:a.實(shí)體/關(guān)系抽取器b.答案推理器8)用大模型增強(qiáng)知識(shí)圖譜問答第8章

大模型與知識(shí)圖譜知識(shí)圖譜增強(qiáng)大模型一大模型增強(qiáng)知識(shí)圖譜二大模型與知識(shí)圖譜協(xié)同三知識(shí)圖譜在大模型中應(yīng)用四大模型與知識(shí)圖譜統(tǒng)一構(gòu)建技術(shù)框架8.3大模型與知識(shí)圖譜協(xié)同數(shù)據(jù)層:a.大模型處理文本數(shù)據(jù)b.知識(shí)圖譜處理結(jié)構(gòu)化數(shù)據(jù)c.框架可擴(kuò)展至多模態(tài)數(shù)據(jù),如視頻、音頻、圖像協(xié)同模型層:大模型和知識(shí)圖譜協(xié)同工作,提升各自能力技術(shù)層:融合大模型和知識(shí)圖譜的相關(guān)技術(shù),以增強(qiáng)框架性能應(yīng)用層:繼承大模型和知識(shí)圖譜,解決顯示問題。應(yīng)用領(lǐng)域包括搜索引擎、推薦系統(tǒng)和AI助手大模型與知識(shí)圖譜協(xié)同知識(shí)表示8.3大模型與知識(shí)圖譜協(xié)同知識(shí)互補(bǔ)性:文本語料庫包含隱式和非結(jié)構(gòu)化的知識(shí);知識(shí)圖譜包含顯示和結(jié)構(gòu)化的知識(shí)協(xié)同模型目標(biāo):設(shè)計(jì)模型以有效結(jié)合和表示兩種知識(shí)源。提升模型對(duì)知識(shí)的理解和下游任務(wù)的性能。實(shí)現(xiàn)方法:引入知識(shí)圖譜融合模塊與大模型共同訓(xùn)練;采用文本-知識(shí)對(duì)偶編碼器架構(gòu);效果增強(qiáng):通過統(tǒng)一表征大模型和知識(shí)圖譜的知識(shí),提高準(zhǔn)確性。大模型與知識(shí)圖譜協(xié)同推理8.3大模型與知識(shí)圖譜協(xié)同串行推理技術(shù)并行推理技術(shù)知識(shí)融合:采用雙編碼器架構(gòu),使用獨(dú)立的大模型和知識(shí)圖譜編碼器分別處理文本和結(jié)構(gòu)化知識(shí);Agent交互:大模型作為Agent與知識(shí)圖譜交互,進(jìn)行知識(shí)推理。推理方式:串行推理:先通過知識(shí)圖譜結(jié)構(gòu)化信息,再由大模型進(jìn)行預(yù)測(cè);并行推理:大模型與知識(shí)圖譜同時(shí)工作,動(dòng)態(tài)協(xié)同推理并融合答案增強(qiáng)效果:串行推理提高預(yù)測(cè)準(zhǔn)確性并行推理拓展知識(shí)邊界并增強(qiáng)推理結(jié)果的準(zhǔn)確性第8章

大模型與知識(shí)圖譜知識(shí)圖譜增強(qiáng)大模型一大模型增強(qiáng)知識(shí)圖譜二大模型與知識(shí)圖譜協(xié)同三知識(shí)圖譜在大模型中應(yīng)用四知識(shí)圖譜在大模型中應(yīng)用8.4知識(shí)圖譜在大模型中應(yīng)用如前所述“基于知識(shí)圖譜的提示”方法屬于知識(shí)圖譜增強(qiáng)大模型推理的一類子方法,旨在通過檢索圖數(shù)據(jù)庫中的知識(shí)圖譜事實(shí)三元組來擴(kuò)展大模型的知識(shí)范圍,提高大模型推理的準(zhǔn)確性和可靠性,降低大模型的“幻覺”性。用戶輸入實(shí)體識(shí)別三元組檢索Prompt構(gòu)建執(zhí)行問答基于知識(shí)圖譜提示方法的基本范式本書案例FQA——電影客服智能體8.4知識(shí)圖譜在大模型中應(yīng)用本書的案例——“基于GLM智能體虛擬角色養(yǎng)成系統(tǒng)(GLM-basedAgentSystemforVirtualRoleCultivation,GAS)”,是一個(gè)由GLM大模型驅(qū)動(dòng)的人設(shè)生成以及智能對(duì)話系統(tǒng),允許用戶自行創(chuàng)建個(gè)性化虛擬角色,并與其進(jìn)行相應(yīng)領(lǐng)域的對(duì)話。這里,為了進(jìn)一步說明“基于知識(shí)圖譜的提示”方法基本范式的具體實(shí)施方式,本書在GAS系統(tǒng)中專門設(shè)立了一個(gè)特定的虛擬角色:“電影客服智能體(FilmQueryingAgent,簡稱FQA)”,以用來專門回答用戶提出的與電影相關(guān)的問題,相當(dāng)于一個(gè)“電影知識(shí)科普咨詢?nèi)藛T”。FQA的具體技術(shù)路線Python基本概念一Python數(shù)據(jù)結(jié)構(gòu)二函數(shù)與模塊三面向?qū)ο缶幊趟漠惓L幚砼c調(diào)試五I/O操作與文件處理六第9章Python語言基礎(chǔ)ChatGLM開發(fā)接口與實(shí)例七9.1Python基本概念Python中的變量1.動(dòng)態(tài)類型:Python不要求在聲明變量時(shí)指定數(shù)據(jù)類型,類型會(huì)在變量賦值時(shí)自動(dòng)確定。2.類型靈活:同一變量可存儲(chǔ)不同類型的數(shù)據(jù),如整數(shù)、浮點(diǎn)數(shù)、字符串、列表、字典等。3.賦值操作:變量與數(shù)據(jù)的綁定通過賦值操作實(shí)現(xiàn),如x=2將整數(shù)2賦值給變量x。4.無需顯式聲明:在Python中,變量在使用前無需顯式聲明類型,直接賦值即可使用。9.1Python基本概念Python中的數(shù)據(jù)類型數(shù)據(jù)類型類別數(shù)據(jù)類型描述例子數(shù)字類型整型(int)表示整數(shù),包括正整數(shù)、負(fù)整數(shù)和零。int_example=10浮點(diǎn)型(float)表示小數(shù)或浮點(diǎn)數(shù),可以有小數(shù)點(diǎn)。float_example=3.14復(fù)數(shù)型(complex)表示復(fù)數(shù),包含實(shí)數(shù)部分和虛數(shù)部分。complex_example=2+3j序列類型字符串(str)表示文本,可以是字母、數(shù)字、符號(hào)等字符的序列。str_example='hello'列表(list)表示有序的元素集合,元素可以是不同類型,且可變。list_example=[1,"a",3.14]元組(tuple)表示不可變的有序元素集合。tuple_example=(1,"a",3.14)映射類型字典(dict)表示鍵值對(duì)的集合,鍵必須是不可變類型,且唯一。dict_example={'name':'John','age':30}集合類型集合(set)表示無序且元素唯一的集合,可變。set_example={1,2,3}凍結(jié)集合(frozenset)表示不可變的集合類型。frozenset_example=frozenset([1,2,3])布爾類型布爾(bool)表示邏輯值,只有True和False兩種值。9.1Python基本概念操作符與表達(dá)式——算術(shù)運(yùn)算符類別操作符描述例子結(jié)果算數(shù)運(yùn)算符+加法3+47-減法3-4-1*乘法3*412/除法4/22.0//整除5//22%取模(余數(shù))5%21**冪運(yùn)算2**389.1Python基本概念操作符與表達(dá)式——比較運(yùn)算符類別操作符描述例子結(jié)果比較運(yùn)算符==等于3==3True!=不等于3!=3False>大于3>2True<小于2<3True>=大于等于3>=3True<=小于等于2<=3True9.1Python基本概念操作符與表達(dá)式——邏輯運(yùn)算符類別操作符描述例子結(jié)果邏輯運(yùn)算符and邏輯與TrueandTrueTrueor邏輯或TrueorFalseTruenot邏輯非notTrueFalse9.1Python基本概念操作符與表達(dá)式——賦值運(yùn)算符類別操作符描述例子賦值運(yùn)算符=簡單賦值a=3+=復(fù)合賦值(加法)a+=1-=復(fù)合賦值(減法)a-=1*=復(fù)合賦值(乘法)a*=2/=復(fù)合賦值(除法)a/=2//=復(fù)合賦值(整除)a//=2%=復(fù)合賦值(取模)a%=2**=復(fù)合賦值(冪運(yùn)算)a**=29.1Python基本概念操作符與表達(dá)式——位運(yùn)算符類別操作符描述例子結(jié)果位運(yùn)算符&按位與6&52|按位或6|57^按位異或6^53~按位取反~6-7<<左移6<<112>>右移6>>139.1Python基本概念操作符與表達(dá)式——成員運(yùn)算符、身份運(yùn)算符類別操作符描述例子結(jié)果成員運(yùn)算符in是否存在于序列中'apple'in['banana','apple','orange']Truenotin是否不存在于序列中'banana'notin['banana','apple','orange']False身份運(yùn)算符is是否為同一對(duì)象aisb根據(jù)實(shí)際情況isnot是否不為同一對(duì)象aisnotb根據(jù)實(shí)際情況9.1Python基本概念控制流語句——條件語句if…elif…elseif條件1:#條件1為真時(shí)執(zhí)行的代碼elif條件2:#條件1不為真,條件2為真時(shí)執(zhí)行的代碼else:#上述條件都不為真時(shí)執(zhí)行的代碼9.1Python基本概念控制流語句——循環(huán)語句for循環(huán)for變量in序列:#對(duì)序列中的每個(gè)元素執(zhí)行的代碼【例9-2】for循環(huán)用法#定義一個(gè)包含多個(gè)元素的列表fruits=["apple","banana","cherry","date"]forfruitinfruits:#打印每個(gè)水果的名字print(fruit)9.1Python基本概念控制流語句——循環(huán)語句while循環(huán)while條件:#條件為真時(shí)不斷執(zhí)行的代碼#定義一個(gè)變量,用于存儲(chǔ)用戶輸入的數(shù)字number=0#使用while循環(huán),只要number小于10,就會(huì)不斷執(zhí)行循環(huán)體whilenumber<10:#打印當(dāng)前的number值print(number)#將number增加1,以便在下一次循環(huán)中打印下一個(gè)數(shù)字number+=19.1Python基本概念控制流語句——循環(huán)控制語句、異常處理語句循環(huán)控制語句繼續(xù)(break):立即退出循環(huán)體。循環(huán)迭代(next):跳過當(dāng)前循環(huán)的剩余代碼,繼續(xù)下一次循環(huán)。返回(return):退出循環(huán)并從包含循環(huán)的函數(shù)中返回。異常處理語句try:#嘗試執(zhí)行的代碼except異常類型:#出現(xiàn)特定異常時(shí)執(zhí)行的代碼finally:#無論是否出現(xiàn)異常都會(huì)執(zhí)行的代碼Python基本概念一Python數(shù)據(jù)結(jié)構(gòu)二函數(shù)與模塊三面向?qū)ο缶幊趟漠惓L幚砼c調(diào)試五I/O操作與文件處理六第9章Python語言基礎(chǔ)ChatGLM開發(fā)接口與實(shí)例七9.2Python數(shù)據(jù)結(jié)構(gòu)列表(List)Python中的列表(List)是一種可變的序列類型,它可以包含任意類型的元素,包括數(shù)字、字符串、其他列表等。列表是非常靈活的數(shù)據(jù)結(jié)構(gòu),支持多種操作和方法。常用的列表操作如下:類別操作符描述類別操作符描述創(chuàng)建列表創(chuàng)建一個(gè)包含元素的列表my_list=[1,2,3,4,5]切片獲取列表的一部分sub_list=my_list[1:3]訪問元素通過索引訪問列表中的元素print(my_list[0])遍歷遍歷列表中的每個(gè)元素foriteminmy_list:print(item)修改元素通過索引修改列表中的元素my_list[0]=100長度獲取列表的長度length=len(my_list)添加元素在列表末尾或指定位置添加元素my_list.append(6)my_list.insert(1,200)排序?qū)α斜磉M(jìn)行排序numbers.sort()

numbers.sort(reverse=True)刪除元素刪除列表中的元素delmy_list[0]my_list.remove(200)

popped_element=my_list.pop()推導(dǎo)式根據(jù)某個(gè)規(guī)則創(chuàng)建新列表squares=[x**2forxinrange(10)]9.2Python數(shù)據(jù)結(jié)構(gòu)元組(Tuple)元組與列表一樣,同樣是序列,但是不同于列表的是元組是不允許修改的。元組通常用圓括號(hào)()括起。以下是元組的基礎(chǔ)操作:類別操作符描述創(chuàng)建元組創(chuàng)建一個(gè)包含元素的元組my_tuple=(1,2,3,4,5)訪問元素通過索引訪問元組中的元素print(my_tuple[1:3])9.2Python數(shù)據(jù)結(jié)構(gòu)字典(Dict)Python中的字典(Dictionary)是一種集合類型,它存儲(chǔ)鍵值對(duì)。字典是一種非常靈活的數(shù)據(jù)結(jié)構(gòu),可以用來存儲(chǔ)鍵值對(duì),其中每個(gè)鍵都映射到一個(gè)值。字典中的鍵必須是唯一的,而且必須是不可變的數(shù)據(jù)類型,比如數(shù)字、字符串或元組。值可以是任何數(shù)據(jù)類型,包括數(shù)字、字符串、列表、字典等。類別操作符描述類別操作符描述創(chuàng)建字典創(chuàng)建一個(gè)包含鍵值對(duì)的字典my_dict={'name':'Alice','age':25}檢查鍵存在檢查鍵是否存在于字典中if'name'inmy_dict:print("Keyexists.")訪問元素通過鍵訪問字典中的值print(my_dict['name'])遍歷遍歷字典中的鍵值對(duì)forkey,valueinmy_dict.items():print(f"Key:{key},Value:{value}")修改元素修改字典中的值my_dict['age']=30長度獲取字典中的鍵值對(duì)數(shù)量print(len(my_dict))刪除元素刪除字典中的鍵值對(duì)delmy_dict['age']9.2Python數(shù)據(jù)結(jié)構(gòu)集合(Set)Python中的集合(Set)是一種無序的、不包含重復(fù)元素的數(shù)據(jù)結(jié)構(gòu)。集合是由花括號(hào)`{}`或`set()`函數(shù)創(chuàng)建的,它們用于存儲(chǔ)任何類型的唯一元素。集合是可變的,這意味著可以添加或刪除元素。類別操作符描述創(chuàng)建集合創(chuàng)建一個(gè)包含元素的集合my_set={1,2,3,4,5}添加元素向集合中添加元素my_set.add(6)my_set.update([7,8,9])刪除元素從集合中刪除元素my_set.remove(6)my_set.discard(10)my_set.pop()集合操作并集、交集、差集、對(duì)稱差集A={1,2,3}B={3,4,5}print(A|B)#集合的并集print(A&B)#集合的交集print(A-B)#集合的差集(A中有,B中沒有的元素)print(A^B)#集合的對(duì)稱差集(A和B中有,但不在兩者共同集合中的元素)檢查元素存在檢查元素是否存在于集合中if1inmy_set:print("1isintheset.")Python基本概念一Python數(shù)據(jù)結(jié)構(gòu)二函數(shù)與模塊三面向?qū)ο缶幊趟漠惓L幚砼c調(diào)試五I/O操作與文件處理六第9章Python語言基礎(chǔ)ChatGLM開發(fā)接口與實(shí)例七9.3函數(shù)與模塊函數(shù)定義在Python中,定義和調(diào)用函數(shù)是編程的基礎(chǔ)。函數(shù)是一段可以重復(fù)使用的代碼塊,它用于執(zhí)行一個(gè)特定的任務(wù)。下面是定義和調(diào)用函數(shù)的基本步驟。def

my_function(param1,param2):

#定義一個(gè)函數(shù),它接受兩個(gè)參數(shù)

#在這里編寫函數(shù)體

returnresult

#如果函數(shù)有返回值,使用return語句返回函數(shù)定義的基本組成部分:-`def`關(guān)鍵字:用于聲明一個(gè)函數(shù)。-函數(shù)名:應(yīng)遵循標(biāo)識(shí)符的命名規(guī)則,以字母或下劃線開頭,后面可以跟字母、數(shù)字或下劃線。-參數(shù)列表:圓括號(hào)內(nèi)可以是零個(gè)、一個(gè)或多個(gè)參數(shù),參數(shù)之間用逗號(hào)分隔。-冒號(hào)`:`:用于開始函數(shù)定義塊。-函數(shù)體:縮進(jìn)的代碼塊,用于實(shí)現(xiàn)函數(shù)的功能。-`return`語句:可選,用于從函數(shù)中返回值。9.3函數(shù)與模塊函數(shù)調(diào)用調(diào)用函數(shù)時(shí),需要在函數(shù)名后面加上括號(hào),并在括號(hào)內(nèi)提供所需的參數(shù)。參數(shù)的順序應(yīng)與函數(shù)定義時(shí)指定的參數(shù)順序一致。my_function(arg1,arg2)#調(diào)用函數(shù),并傳入?yún)?shù)函數(shù)代碼示例:#定義函數(shù)defgreet(name,message):returnf"{message},{name}!"#調(diào)用函數(shù)greeting=greet("Alice","Hello")print(greeting)#輸出:Hello,Alice!9.3函數(shù)與模塊函數(shù)參數(shù)函數(shù)參數(shù)是指在定義函數(shù)時(shí)用于接收外部傳入值的變量。參數(shù)允許函數(shù)根據(jù)不同的輸入執(zhí)行不同的操作。參數(shù)類型描述語法示例代碼示例解釋默認(rèn)參數(shù)為參數(shù)指定默認(rèn)值,若調(diào)用時(shí)未提供,則使用默認(rèn)值deffunction_name(param1=default_value):defgreet(name,message="Hello"):

returnf"{message},{name}!"如果調(diào)用

greet("Alice"),輸出為"Hello,Alice!"可變參數(shù)允許傳入任意數(shù)量的參數(shù)deffunction_name(*args):defsum_all(*args):

returnsum(args)調(diào)用

sum_all(1,2,3,4,5),輸出為15關(guān)鍵字參數(shù)通過名稱傳遞參數(shù),允許傳入任意數(shù)量的命名參數(shù)deffunction_name(**kwargs):defgreet(name,message="Hello"):

returnf"{message},{name}!"調(diào)用

greet(name="Alice",message="Hi"),輸出為"Hi,Alice!"9.3函數(shù)與模塊函數(shù)返回值函數(shù)可以通過`return`語句返回一個(gè)或多個(gè)值。返回值可以是任何數(shù)據(jù)類型,包括數(shù)字、字符串、列表、字典等。返回一個(gè)值返回多個(gè)值defadd(a,b):returna+b#調(diào)用函數(shù)并接收返回值result=add(3,4)print(result)#輸出:7#函數(shù)可以有多個(gè)返回值,這時(shí)可以使用元組來接收:defsplit(string):returnstring[0],string[1:]#調(diào)用函數(shù)并接收兩個(gè)返回值first,rest=split("hello")print(first)#輸出:'h'print(rest)#輸出:'ello'9.3函數(shù)與模塊模塊的導(dǎo)入與使用Python模塊是一個(gè)包含Python定義和語句的文件。模塊可以定義函數(shù)、類和變量,也可以包含可執(zhí)行的代碼。模塊讓程序員能夠邏輯地組織自己的Python代碼段。把相關(guān)的代碼分配到一個(gè)模塊里能讓代碼更好用,更易懂。模塊也可以定義可重用的函數(shù)和變量。導(dǎo)入模塊使用模塊模塊的搜索路徑創(chuàng)建自己的模塊importmath#導(dǎo)入某個(gè)特定模塊frommathimportsqrt#導(dǎo)入模塊中的特定元素frommathimport*#導(dǎo)入模塊中所有的元素(不推薦)importmathasm#導(dǎo)入模塊并給它一個(gè)別名result=math.sqrt(9)#使用導(dǎo)入的整個(gè)模塊result=sqrt(9)#使用特定導(dǎo)入的元素result=m.sqrt(9)#使用別名訪問模塊元素importsysprint(sys.path)#mymodule.pydefgreeting(name):return"Hello,{name}!"person="JohnDoe"#然后,可以像導(dǎo)入其他模塊一樣導(dǎo)入`mymodule`。importmymoduleprint(mymodule.greeting("Alice"))print(mymodule.person)Python基本概念一Python數(shù)據(jù)結(jié)構(gòu)二函數(shù)與模塊三面向?qū)ο缶幊趟漠惓L幚砼c調(diào)試五I/O操作與文件處理六第9章Python語言基礎(chǔ)ChatGLM開發(fā)接口與實(shí)例七9.4面向?qū)ο缶幊填惻c對(duì)象Python是一種面向?qū)ο蟮木幊陶Z言。這意味著它允許開發(fā)者使用面向?qū)ο蟮木幊?OOP)范式來設(shè)計(jì)軟件。在面向?qū)ο缶幊讨?,我們將現(xiàn)實(shí)世界的實(shí)體抽象為程序中的對(duì)象,這些對(duì)象具有屬性(稱為字段)和行為(稱為方法)。概念描述示例代碼類(Class)定義對(duì)象的藍(lán)圖,包括屬性和方法classMyClass:def__init__(self,value):#構(gòu)造函數(shù)self.my_attribute=value#實(shí)例屬性defmy_method(self):#實(shí)例方法returnself.my_attribute對(duì)象(Object)對(duì)象是根據(jù)類定義創(chuàng)建的具體實(shí)體。每個(gè)對(duì)象都有自己的屬性和方法。#創(chuàng)建一個(gè)MyClass的實(shí)例my_object=MyClass(10)#訪問對(duì)象的屬性print(my_object.my_attribute)#輸出:10#調(diào)用對(duì)象的方法print(my_object.my_method())#輸出:109.4面向?qū)ο缶幊汤^承與多態(tài)——繼承在面向?qū)ο缶幊讨?,繼承和多態(tài)是兩個(gè)核心概念。概念描述示例代碼繼承(Inheritance)1.子類繼承父類的屬性和方法;2.子類可以添加新的屬性和方法,也可以覆蓋父類的方法;3.如果一個(gè)類沒有顯式地指定父類,那么它默認(rèn)繼承自object類,這是Python中的所有類的基類。classParent:def__init__(self):self.value="InsideParent"defshow(self):print(self.value)classChild(Parent):def__init__(self):super().__init__()#調(diào)用父類的構(gòu)造函數(shù)self.value="InsideChild"#創(chuàng)建子類的實(shí)例child_obj=Child()#調(diào)用子類的方法,這會(huì)調(diào)用父類中被覆蓋的方法child_obj.show()#輸出:"InsideChild"9.4面向?qū)ο缶幊汤^承與多態(tài)——多態(tài)在面向?qū)ο缶幊讨?,繼承和多態(tài)是兩個(gè)核心概念。概念描述示例代碼多態(tài)(Polymorphism)同一方法在不同對(duì)象中有不同的實(shí)現(xiàn);在面向?qū)ο缶幊讨?,這意味著我們可以定義一些公共接口,然后讓不同的類以不同的方式實(shí)現(xiàn)這些接口。classAnimal:defspeak(self):raiseNotImplementedError("Subclassmustimplementthismethod")classDog(Animal):defspeak(self):return"Woof!"classCat(Animal):defspeak(self):return"Meow!"#多態(tài)示例defanimal_speak(animal):returnanimal.speak()dog=Dog()cat=Cat()print(animal_speak(dog))#輸出:"Woof!"print(animal_speak(cat))#輸出:"Meow!"9.4面向?qū)ο缶幊谭庋b與解耦——封裝封裝是面向?qū)ο缶幊?OOP)的一個(gè)核心原則,它指的是將數(shù)據(jù)和操作數(shù)據(jù)的方法捆綁在一起,形成一個(gè)對(duì)象。這樣做的主要目的是隱藏對(duì)象的內(nèi)部細(xì)節(jié),只暴露一個(gè)公共的接口。封裝可以防止外部直接訪問對(duì)象內(nèi)部的數(shù)據(jù)(即屬性),確保數(shù)據(jù)只能通過定義良好的接口(即方法)來訪問和修改。在Python中,封裝通常通過以下方式實(shí)現(xiàn):-將對(duì)象的屬性設(shè)置為私有(使用兩個(gè)下劃線前綴)或受保護(hù)的(使用一個(gè)下劃線前綴)。-提供公共的getter和setter方法來訪問和修改對(duì)象的屬性。9.4面向?qū)ο缶幊谭庋b與解耦——封裝實(shí)例classPerson:def__init__(self,name,age):self.__name=name#私有屬性self.__age=age#私有屬性#公共方法來獲取私有屬性defget_name(self):returnself.__namedefget_age(self):returnself.__age#公共方法來設(shè)置私有屬性defset_name(self,name):self.__name=namedefset_age(self,age):ifage>=0:self.__age=ageelse:raiseValueError("Agecannotbenegative")#使用Person類person=Person("Alice",30)print(person.get_name())#輸出:Aliceprint(person.get_age())#輸出:30person.set_name("Bob")person.set_age(25)在左側(cè)的例子中,`__name`和`__age`是私有屬性,不能直接從外部訪問。相反,我們提供了`get_name`、`get_age`、`set_name`和`set_age`這些公共方法來間接訪問和修改這些屬性。9.4面向?qū)ο缶幊谭庋b與解耦——解耦解耦是指減少或消除不同軟件模塊之間的依賴性。解耦的代碼更容易維護(hù)和擴(kuò)展,因?yàn)樗试S獨(dú)立地修改和替換系統(tǒng)的各個(gè)部分,而不影響其他部分。在Python中,解耦可以通過以下方式實(shí)現(xiàn):-使用接口或抽象基類來定義公共的合同,而不是直接依賴具體的實(shí)現(xiàn)。-使用依賴注入或工廠模式來創(chuàng)建對(duì)象,從而允許在運(yùn)行時(shí)動(dòng)態(tài)地替換依賴項(xiàng)。-使用事件和監(jiān)聽器模式來允許對(duì)象在不直接引用彼此的情況下進(jìn)行通信。9.4面向?qū)ο缶幊谭庋b與解耦——解耦實(shí)例fromabcimportABC,abstractmethod#定義一個(gè)接口classAnimal(ABC):@abstractmethoddefmake_sound(self):pass#具體實(shí)現(xiàn)classDog(Animal):defmake_sound(self):return"Woof!"classCat(Animal):defmake_sound(self):return"Meow!"#使用接口而不是具體的類defanimal_sound(animal):returnanimal.make_sound()#創(chuàng)建具體的對(duì)象dog=Dog()cat=Cat()#調(diào)用函數(shù),傳入不同的對(duì)象print(animal_sound(dog))#輸出:Woof!print(animal_sound(cat))#輸出:Meow!在左側(cè)的例子中,`Animal`是一個(gè)接口,它定義了一個(gè)`make_sound`方法。`Dog`和`Cat`類實(shí)現(xiàn)了這個(gè)接口。`animal_sound`函數(shù)接受一個(gè)`Animal`類型的對(duì)象,并調(diào)用它的`make_sound`方法。這樣,`animal_sound`函數(shù)與任何具體的動(dòng)物類解耦,只依賴于`Animal`接口。Python基本概念一Python數(shù)據(jù)結(jié)構(gòu)二函數(shù)與模塊三面向?qū)ο缶幊趟漠惓L幚砼c調(diào)試五I/O操作與文件處理六第9章Python語言基礎(chǔ)ChatGLM開發(fā)接口與實(shí)例七9.5異常處理與調(diào)試什么是異常?即使語句或表達(dá)式使用了正確的語法,執(zhí)行時(shí)仍可能觸發(fā)錯(cuò)誤。執(zhí)行時(shí)檢測(cè)到的錯(cuò)誤稱為異常,異常不一定導(dǎo)致嚴(yán)重的后果。大多數(shù)異常不會(huì)被程序處理,而是顯示類似下列錯(cuò)誤信息:發(fā)生異常:ZeroDivisionErrordivisionbyzeroFile"<stdin>",line1,in<module>print(1/0)ZeroDivisionError:divisionbyzero錯(cuò)誤信息的最后一行說明程序遇到了什么類型的錯(cuò)誤。異常有不同的類型,而類型名稱會(huì)作為錯(cuò)誤信息的一部分中打印出來。9.5異常處理與調(diào)試異常類型類名描述Exception幾乎所有的異常類都是從它派生而來的AttributeError引用屬性或給它賦值失敗時(shí)引發(fā)OSError操作系統(tǒng)不能執(zhí)行指定的任務(wù)(如打開文件)時(shí)引發(fā),有多個(gè)子類IndexError使用序列中不存在的索引時(shí)引發(fā),為LookupError的子類KeyError使用映射中不存在的鍵時(shí)引發(fā),為LookupError的子類NameError找不到名稱(變量)時(shí)引發(fā)SyntaxError代碼不正確時(shí)引發(fā)TypeError將內(nèi)置操作或函數(shù)用于類型不正確的對(duì)象時(shí)引發(fā)ValueError將內(nèi)置操作或函數(shù)用于這樣的對(duì)象時(shí)引發(fā):其類型正確但包含的值不合適ZeroDivisionError在除法或求模運(yùn)算的第二個(gè)參數(shù)為零時(shí)引發(fā)9.5異常處理與調(diào)試捕獲異常Python使用try-except語句實(shí)現(xiàn)異常捕獲,其基本語法格式如下:try:<語句塊1>except<異常類型>:<語句塊2><語句塊1>:嘗試執(zhí)行的代碼。<異常類型>:捕獲的異常類型。<語句塊2>:異常發(fā)生時(shí)執(zhí)行的代碼。異常處理流程:-執(zhí)行try子句中的代碼。-如果無異常,跳過except子句。-如果有異常,執(zhí)行匹配的except子句。-未匹配的異常會(huì)傳遞到外層try或?qū)е挛刺幚懋惓!?.5異常處理與調(diào)試同時(shí)處理多個(gè)異常、異常處理實(shí)例使用元組指定多個(gè)異常類型:try:<可能引發(fā)多種異常的代碼>except(RuntimeError,TypeError,NameError)ase:print(f"Anerroroccurred:{e}")【實(shí)例】除零錯(cuò)誤:print(1/0)divisionbyzeroFile"division.py",line1,in<module>print(1/0)ZeroDivisionError:divisionbyzero【異常捕獲】:try:print(1/0)exceptZeroDivisionError:print("Youcan'tdividebyzero!")ZeroDivisionError:divisionbyzero9.5異常處理與調(diào)試自定義異常自定義異常允許開發(fā)者創(chuàng)建特定于應(yīng)用程序的異常類。通過繼承Exception類來實(shí)現(xiàn)。自定義異常類的代碼類似于下面所示:classSomeCustomException(Exception):pass【實(shí)例】自定義異常:#定義一個(gè)自定義異常類,名為NegativeNumberExceptionclassNegativeNumberException(Exception):def__init__(self,number,message="負(fù)數(shù)不允許"):self.number=numberself.message=messagesuper().__init__(f"{self.message}:{self.number}")【實(shí)例】使用自定義異常:#使用自定義異常try:#假設(shè)我們有一個(gè)函數(shù),它不應(yīng)該接受負(fù)數(shù)作為輸入defprocess_number(num):ifnum<0:raiseNegativeNumberException(num)#處理數(shù)字的邏輯pass#嘗試拋出異常process_number(-7)exceptNegativeNumberExceptionase:print(e)9.5異常處理與調(diào)試調(diào)試技巧與工具(了解)調(diào)試:軟件開發(fā)中識(shí)別和修復(fù)錯(cuò)誤的過程;基本調(diào)試方法:print()、斷言assert調(diào)試器pdb:使用pdb,首先需要importpdb進(jìn)行導(dǎo)入功能描述命令設(shè)置斷點(diǎn)在特定行設(shè)置斷點(diǎn)pdb.set_trace()

breakpoint()單步執(zhí)行逐行執(zhí)行代碼使用step命令或簡寫s繼續(xù)執(zhí)行繼續(xù)執(zhí)行直到下一個(gè)斷點(diǎn)或程序結(jié)束使用continue命令或簡寫c檢查變量查看當(dāng)前變量的值使用print(variable)或簡寫p列出源碼顯示當(dāng)前位置的源碼使用list命令或簡寫lPython基本概念一Python數(shù)據(jù)結(jié)構(gòu)二函數(shù)與模塊三面向?qū)ο缶幊趟漠惓L幚砼c調(diào)試五I/O操作與文件處理六第9章Python語言基礎(chǔ)ChatGLM開發(fā)接口與實(shí)例七9.6I/O操作與文件處理文件讀寫對(duì)文件進(jìn)行讀寫前,首先需要對(duì)文件使用open函數(shù)打開(open函數(shù)默認(rèn)采用rt【文本只讀】模式),open()函數(shù)格式如下:open()函數(shù)的7種基本打開模式:文件的打開模式含義‘r’只讀模式,如果文件不存在,返回異常FileNotFoundError,默認(rèn)值‘w’覆蓋寫模式,文件不存在則創(chuàng)建,存在則完全覆蓋‘x’創(chuàng)建寫模式,文件不存在則創(chuàng)建,存在則返回異常FileExistsError‘a(chǎn)’追加寫模式,文件不存在則創(chuàng)建,存在則在文件最后追加內(nèi)容‘b’二進(jìn)制文件模式‘t’文本文件模式,默認(rèn)值‘+’與r/w/x/a一同使用,在原功能基礎(chǔ)上增加同時(shí)讀寫功能9.6I/O操作與文件處理文件讀寫上述7種打開模式中,T、w、x、b可以和b、t、+組合使用,形成既表達(dá)讀寫又表達(dá)文件模式的方式。open函數(shù)默認(rèn)采用rt(文本只讀)模式。通常情況下,文件是以textmode打開的,也就是說,從文件中讀寫字符串,這些字符串是以特定的encoding編碼的。如果沒有指定encoding,默認(rèn)的是與平臺(tái)有關(guān)的。在處理文件對(duì)象時(shí),最好使用with關(guān)鍵字。優(yōu)點(diǎn)是子句體結(jié)束后,文件會(huì)正確關(guān)閉,即便觸發(fā)異常也可以。如果沒有使用with關(guān)鍵字,則應(yīng)調(diào)用f.close()關(guān)閉文件,即可釋放文件占用的系統(tǒng)資源。9.6I/O操作與文件處理文件操作函數(shù)——讀取函數(shù)與寫入函數(shù)讀取函數(shù):寫入函數(shù):操作方法含義<file>.readall0)讀入整個(gè)文件內(nèi)容,返回一個(gè)字符串或字節(jié)流*<file>.read(size=-1)從文件中讀入整個(gè)文件內(nèi)容,如果給出參數(shù),讀入前size長度的字節(jié)流<file>.readline(size=-1)從文件中讀入一行內(nèi)容,如果給出參數(shù),讀入該行前size長度的字符串或字節(jié)流<file>,readlines(hint=-1)從文件中讀入所有行,以每行為元素形成一個(gè)列表,如果給出參數(shù),讀入hint行操作方法含義<file>.readall0)讀入整個(gè)文件內(nèi)容,返回一個(gè)字符串或字節(jié)流<file>.read(size=-1)從文件中讀入整個(gè)文件內(nèi)容,如果給出參數(shù),讀入前size長度的字節(jié)流<file>.readline(size=-1)從文件中讀入一行內(nèi)容,如果給出參數(shù),讀入該行前size長度的字符串或字節(jié)流9.6I/O操作與文件處理文件操作函數(shù)——操作文件實(shí)例【實(shí)例】操作文件:importos#打開文件try:

withopen('example.txt','r',encoding='utf-8')asfile:

lines=file.readlines()

#讀取文件內(nèi)容到列表中,每次讀取一行

print("文件內(nèi)容如下:")

forlineinlines:

print(line.strip())

#使用strip()去除行尾的換行符

statinfo=os.stat('example.txt')

#獲取文件的狀態(tài)碼信息

print(f"文件大?。簕statinfo.st_size}字節(jié)")

print(f"最后修改時(shí)間:{statinfo.st_mtime}")

#文件已經(jīng)自動(dòng)關(guān)閉exceptFileNotFoundError:

print("文件未找到,請(qǐng)檢查文件路徑是否正確。")exceptIOError:

print("讀取文件時(shí)發(fā)生錯(cuò)誤。")【結(jié)果】:文件內(nèi)容如下:Hello,World!Thisisasecondline.文件大小:39字節(jié)最后修改時(shí)間:1713583243.22449029.6I/O操作與文件處理文件操作函數(shù)——寫入文件實(shí)例【實(shí)例】操作文件:importostry:withopen('example33.txt','a',encoding='utf-8')asfile:#寫入多行內(nèi)容,并在每行后面添加換行符file.write('你好\n')file.write('好\n')file.write('呀\n')print("內(nèi)容加到文件中。")exceptIOErrorase:print(f"寫入文件時(shí)發(fā)生錯(cuò)誤:{e}")9.6I/O操作與文件處理文本處理與正則表達(dá)式正則表達(dá)式是一種用于字符串搜索和操作的強(qiáng)大工具。通過re模塊提供,支持復(fù)雜的文本匹配和處理。常用的正則表達(dá)式:說明:反斜杠后面可以跟各種字符來表示各種特殊序列;它還用于轉(zhuǎn)義元字符,以便可以在表達(dá)式中匹配元字符本身。例如,如果需要匹配一個(gè)[或\,可以在其前面加上一個(gè)反斜杠來消除它們的特殊含義:\[或\

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論