版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
函數(shù)學(xué)習(xí)目標(biāo)/Target了解函數(shù),能夠簡(jiǎn)述函數(shù)的概念以及程序中使用函數(shù)的好處掌握函數(shù)參數(shù)的傳遞方式,能夠通過(guò)各種類型的參數(shù)向函數(shù)內(nèi)部傳遞數(shù)據(jù)熟悉函數(shù)的返回值,能夠在程序中處理一個(gè)或多個(gè)返回值掌握函數(shù)的定義和調(diào)用,能夠根據(jù)需求定義和調(diào)用函數(shù)章節(jié)概述/Summary在Python編程中,函數(shù)是構(gòu)建復(fù)雜程序的基礎(chǔ)模塊。自定義函數(shù)賦予開(kāi)發(fā)者更大的創(chuàng)作自由,開(kāi)發(fā)者可以將特定功能代碼封裝成獨(dú)立單元,實(shí)現(xiàn)代碼復(fù)用與邏輯結(jié)構(gòu)化。本章將深入剖析自定義函數(shù)的定義、調(diào)用、參數(shù)傳遞與解包、返回值等核心知識(shí),助力讀者掌握靈活定制功能模塊的編程技巧,輕松應(yīng)對(duì)日益復(fù)雜的程序開(kāi)發(fā)需求。目錄/Contents01【案例5-1】智能光照控制系統(tǒng)02【案例5-2】疫苗接種信息管理系統(tǒng)03【案例5-3】斐波那契數(shù)列應(yīng)用【案例5-1】智能光照控制系統(tǒng)01案例分析
構(gòu)建一個(gè)智能光照控制系統(tǒng),系統(tǒng)預(yù)設(shè)10個(gè)可獨(dú)立控制的燈光設(shè)備及不同時(shí)段環(huán)境光照參數(shù)(如早晨1500lux、理想光照5000lux等),實(shí)現(xiàn)設(shè)備精準(zhǔn)定位,系統(tǒng)不僅能根據(jù)環(huán)境光照強(qiáng)度自動(dòng)啟停燈光并調(diào)節(jié)亮度,還支持單個(gè)設(shè)備精細(xì)控制與多設(shè)備批量管理。知識(shí)儲(chǔ)備函數(shù)定義函數(shù)調(diào)用參數(shù)傳遞參數(shù)解包知識(shí)儲(chǔ)備函數(shù)的返回值知識(shí)儲(chǔ)備—函數(shù)定義函數(shù)是組織良好、可重復(fù)使用的代碼單元,用于實(shí)現(xiàn)單一或相關(guān)聯(lián)的功能。Python既提供print()、len()等內(nèi)置函數(shù),也支持開(kāi)發(fā)者自己創(chuàng)建函數(shù),這被叫做用戶自定義函數(shù)。Python中使用def關(guān)鍵字來(lái)定義函數(shù),語(yǔ)法格式如下:def函數(shù)名([參數(shù)列表]):"""函數(shù)文檔字符串(可選)"""return語(yǔ)句聲明函數(shù)定義可選,多個(gè)參數(shù)用逗號(hào)分隔函數(shù)的唯一標(biāo)識(shí)函數(shù)功能的具體代碼可選,用于返回結(jié)果知識(shí)儲(chǔ)備—函數(shù)定義定義一個(gè)名稱為say_hello()的函數(shù),該函數(shù)輸出“Hello,World!”字符,代碼如下:defsay_hello():print("Hello,World!")示例1知識(shí)儲(chǔ)備—函數(shù)調(diào)用定義一個(gè)函數(shù)只給了函數(shù)一個(gè)名稱,指定了函數(shù)里包含的參數(shù)和代碼塊結(jié)構(gòu)。函數(shù)定義完成后,需要調(diào)用才會(huì)執(zhí)行,調(diào)用函數(shù)的語(yǔ)法格式如下:例如,調(diào)用前面定義的say_hello()函數(shù),代碼如下:say_hello()運(yùn)行結(jié)果:Hello,World!函數(shù)名([參數(shù)列表])語(yǔ)法格式知識(shí)儲(chǔ)備—函數(shù)調(diào)用定義一個(gè)計(jì)算正方形面積的函數(shù),并調(diào)用該函數(shù)輸出計(jì)算的結(jié)果,示例代碼如下:defsquare_area(side_length):returnside_length*side_lengtharea=square_area(5) #調(diào)用函數(shù)print(f"邊長(zhǎng)為5的正方形面積是:{area}")示例2在這個(gè)示例中,“square_area(5)”中的5就是正方形的邊長(zhǎng)參數(shù)。知識(shí)儲(chǔ)備—函數(shù)調(diào)用定義一個(gè)計(jì)算長(zhǎng)方體體積的函數(shù),示例代碼如下:defcuboid_volume(length,width,height):returnlength*width*heightvolume=cuboid_volume(3,4,5) #調(diào)用時(shí)要提供三個(gè)參數(shù)print(f"長(zhǎng)方體體積是:{volume}")示例3參數(shù)的有無(wú)及數(shù)量完全取決于函數(shù)定義和實(shí)際需求。而在一些復(fù)雜場(chǎng)景中,可能需要傳遞多個(gè)參數(shù)。知識(shí)儲(chǔ)備—參數(shù)傳遞函數(shù)的參數(shù)分為形式參數(shù)和實(shí)際參數(shù),簡(jiǎn)稱形參和實(shí)參。形參即在定義函數(shù)時(shí),括號(hào)內(nèi)聲明的參數(shù),形參本質(zhì)就是一個(gè)變量名,用來(lái)接收外部傳來(lái)的值。實(shí)參即在調(diào)用函數(shù)時(shí),括號(hào)內(nèi)傳入的值,值可以是常量、變量、表達(dá)式或三者的組合。參數(shù)傳遞是指將實(shí)際參數(shù)傳遞給形式參數(shù)的過(guò)程。參數(shù)傳遞可以分為位置參數(shù)傳遞、關(guān)鍵字參數(shù)傳遞、默認(rèn)參數(shù)傳遞、不定長(zhǎng)參數(shù)傳遞。知識(shí)儲(chǔ)備—參數(shù)傳遞1.位置參數(shù)傳遞依據(jù)參數(shù)在函數(shù)定義里的位置順序,將實(shí)參傳遞給對(duì)應(yīng)的形參。在調(diào)用函數(shù)時(shí),實(shí)參按照從左到右的順序和函數(shù)定義里的形參一一對(duì)應(yīng),這種傳參方式就是位置傳參。實(shí)參的數(shù)量必須和形參數(shù)量相同,否則會(huì)引發(fā)錯(cuò)誤。defgreet(name,age,city):print(f"你好,我叫{name},今年{age}歲,住在{city}。")greet("小明",25,"北京")#位置參數(shù)傳遞嚴(yán)格約束順序第一個(gè)實(shí)參小明傳遞給第一個(gè)形參name,第二個(gè)實(shí)參25傳遞給第二個(gè)形參age。第三個(gè)實(shí)參北京傳遞給第三個(gè)形參city。示例4定義一個(gè)函數(shù),該函數(shù)接收姓名、年齡、城市3個(gè)參數(shù),使用位置傳參傳遞的方式調(diào)用,示例代碼如下:知識(shí)儲(chǔ)備—參數(shù)傳遞2.關(guān)鍵字參數(shù)傳遞在Python中,關(guān)鍵字參數(shù)傳遞是一種通過(guò)參數(shù)名來(lái)傳遞參數(shù)的方式。這種方式可以在調(diào)用函數(shù)時(shí),不用嚴(yán)格按照函數(shù)定義中參數(shù)的順序來(lái)傳遞實(shí)參,提高了代碼的可讀性和靈活性。在調(diào)用函數(shù)時(shí),使用“參數(shù)名=值”的形式來(lái)傳遞實(shí)參,這樣就可以不按照形參定義的順序進(jìn)行傳參。defprint_person_info(name,age,city):print(f"姓名:{name},年齡:{age},城市:{city}")print_person_info(name='李四',age=30,city='上海')示例5定義一個(gè)打印個(gè)人信息的函數(shù),使用關(guān)鍵字參數(shù)傳遞的方式調(diào)用,代碼如下:知識(shí)儲(chǔ)備—參數(shù)傳遞使用關(guān)鍵字參數(shù)傳遞時(shí)參數(shù)順序可隨意,不要求實(shí)參順序和形參定義順序一致,只要參數(shù)名正確就行??珊臀恢脜?shù)傳遞混合使用,不過(guò),位置參數(shù)傳遞必須放在關(guān)鍵字參數(shù)傳遞前面,否則會(huì)報(bào)錯(cuò)。
print_person_info('李四',city='上海',age=30)print_person_info(city='上海',age=30,'李四') #報(bào)錯(cuò)Python要求關(guān)鍵字參數(shù)必須出現(xiàn)在所有位置參數(shù)之后。示例5調(diào)用上面示例的print_person_info()函數(shù)時(shí)同時(shí)使用位置參數(shù)傳遞和關(guān)鍵字參數(shù)傳遞:知識(shí)儲(chǔ)備—參數(shù)傳遞3.默認(rèn)參數(shù)傳遞在定義函數(shù)時(shí),就已經(jīng)為形參賦值,這類形參稱之為默認(rèn)參數(shù)。調(diào)用函數(shù)時(shí)若未為該參數(shù)傳值,則使用默認(rèn)值。defsend_email(to,content,subject='重要通知'):print(f"發(fā)送郵件給{to},主題:{subject},內(nèi)容:{content}")send_email('user@','會(huì)議時(shí)間變更')使用默認(rèn)參數(shù)傳遞時(shí)需要注意以下兩點(diǎn):默認(rèn)參數(shù)必須在位置參數(shù)之后,且默認(rèn)參數(shù)的值通常應(yīng)設(shè)為不可變類型默認(rèn)參數(shù)的值僅在函數(shù)定義階段被賦值一次示例6定義一個(gè)發(fā)送郵件的函數(shù),設(shè)置郵件主題的默認(rèn)值,代碼如下:知識(shí)儲(chǔ)備—參數(shù)傳遞4.不定長(zhǎng)參數(shù)傳遞在Python函數(shù)設(shè)計(jì)中,不定長(zhǎng)參數(shù)(Variable-LengthArguments)用于處理調(diào)用時(shí)參數(shù)數(shù)量不確定的場(chǎng)景。它允許函數(shù)接收任意多個(gè)位置參數(shù)或關(guān)鍵字參數(shù),是實(shí)現(xiàn)靈活接口的關(guān)鍵機(jī)制。Python提供兩種不定長(zhǎng)參數(shù)類型:*args(可變位置參數(shù))和**kwargs(可變關(guān)鍵字參數(shù))??勺兾恢脜?shù)(*args),接收任意數(shù)量的位置參數(shù),并將其打包為一個(gè)元組(tuple)。定義一個(gè)輸出個(gè)人信息的函數(shù),該函數(shù)具有一個(gè)普通參數(shù)和一個(gè)可變位置參數(shù)。defprint_info(name,*args): #name是普通參數(shù),*args是可變位置參數(shù)print(f"姓名:{name},其他信息:{args}")print_info("李四",25,"工程師")示例7知識(shí)儲(chǔ)備—參數(shù)傳遞4.不定長(zhǎng)參數(shù)傳遞②可變關(guān)鍵字參數(shù)(**kwargs)接收任意數(shù)量的關(guān)鍵字參數(shù),并將其打包為一個(gè)字典。其語(yǔ)法格式為:在參數(shù)名前加兩個(gè)星號(hào)**,通常命名為kwargs(可自定義)。定義一個(gè)函數(shù),該函數(shù)具有一個(gè)普通參數(shù)和一個(gè)可變關(guān)鍵字參數(shù),代碼如下:defuser_info(id,**kwargs):print(f"用戶ID:{id},其他信息:{kwargs}")user_info(1001,name="李四",role="admin")示例8知識(shí)儲(chǔ)備—參數(shù)傳遞4.不定長(zhǎng)參數(shù)傳遞③混合使用*args和**kwargs在實(shí)際開(kāi)發(fā)中,常組合使用兩種不定長(zhǎng)參數(shù),以處理更復(fù)雜的輸入場(chǎng)景。語(yǔ)法順序:(普通參數(shù),*args,**kwargs)。defcomplex_func(a,b,*args,c=10,**kwargs):result=a+b+cfornuminargs:result+=num #累加*args中的參數(shù)forvalueinkwargs.values():result+=value #累加**kwargs中的值returnresultprint(complex_func(1,2,3,4,c=20,d=5,e=6))complex_func()函數(shù)通過(guò)混合參數(shù)語(yǔ)法處理多種類型的輸入:位置參數(shù):a=1、b=2直接傳入并相加。可變參數(shù):*args捕獲額外的位置參數(shù)3,4,并累加到結(jié)果中。關(guān)鍵字參數(shù):c=20覆蓋默認(rèn)值10,參與計(jì)算??勺冴P(guān)鍵字參數(shù):**kwargs捕獲額外的關(guān)鍵字參數(shù)d=5,e=6,并將其值累加到結(jié)果中。示例9綜合參數(shù)處理函數(shù),代碼如下:知識(shí)儲(chǔ)備—參數(shù)解包參數(shù)解包是一種非常有用的特性,可將一個(gè)可迭代對(duì)象(比如列表或元組)的元素作為獨(dú)立的參數(shù)傳遞給函數(shù)??梢酝ㄟ^(guò)兩種主要方式實(shí)現(xiàn):位置參數(shù)解包和關(guān)鍵字參數(shù)解包。知識(shí)儲(chǔ)備—參數(shù)解包1.位置參數(shù)解包位置參數(shù)解包可將一個(gè)列表或元組中的元素作為獨(dú)立的參數(shù)傳遞給函數(shù)。這通過(guò)在函數(shù)調(diào)用時(shí)使用星號(hào)運(yùn)算符“*”實(shí)現(xiàn)。示例10使用“*”運(yùn)算符解包列表defexample_func(a,b,c):print(a,b,c)args=[1,2,3]example_func(*args)知識(shí)儲(chǔ)備—參數(shù)解包2.關(guān)鍵字參數(shù)解包關(guān)鍵字參數(shù)解包可將一個(gè)字典中的鍵值對(duì)作為關(guān)鍵字參數(shù)傳遞給函數(shù)。這通過(guò)在函數(shù)調(diào)用時(shí)使用雙星號(hào)運(yùn)算符“**”實(shí)現(xiàn)。示例11使用“**”運(yùn)算符解包字典defexample_func(a,b,c):print(a,b,c)kwargs={'a':1,'b':2,'c':3}example_func(**kwargs)知識(shí)儲(chǔ)備—參數(shù)解包可以在同一個(gè)函數(shù)中結(jié)合使用位置和關(guān)鍵字參數(shù)解包。示例12結(jié)合使用位置參數(shù)解包和關(guān)鍵字參數(shù)解包,示例代碼如下:defexample_func(a,b,c,d=4):print(a,b,c,d)args=[1,2,3]kwargs={'c':3,'d':5}example_func((*args,**kwargs)知識(shí)儲(chǔ)備—函數(shù)的返回值函數(shù)可以返回一個(gè)或多個(gè)值。返回值是通過(guò)return語(yǔ)句來(lái)指定的。如果只想返回一個(gè)值,直接在return語(yǔ)句后跟上這個(gè)值即可。defadd(a,b):returna+bresult=add(2,3)print(result)示例13定義一個(gè)求和函數(shù),返回求和的結(jié)果,代碼如下:知識(shí)儲(chǔ)備—函數(shù)的返回值Python允許返回多個(gè)值,這些值會(huì)作為一個(gè)元組(tuple)返回。這意味著可以一次性返回多個(gè)值,然后在調(diào)用函數(shù)時(shí),可以使用解包的方式來(lái)接收這些值。defget_dimensions():return10,20length,width=get_dimensions()print(length)print(width)get_dimensions()函數(shù)通過(guò)關(guān)鍵字return同時(shí)返回了10和20兩個(gè)值,返回的值按順序分別賦值給了變量length和變量width。示例14定義一個(gè)函數(shù),該函數(shù)的返回10和20兩個(gè)值,代碼如下:案例實(shí)現(xiàn)創(chuàng)建名稱為“智能光照控制系統(tǒng)”的項(xiàng)目,在項(xiàng)目下創(chuàng)建名稱為lighting_system的Python文件。準(zhǔn)備工作案例實(shí)現(xiàn)STEP01初始化數(shù)據(jù)定義系統(tǒng)所需的基礎(chǔ)數(shù)據(jù),包括燈光列表和預(yù)設(shè)環(huán)境光照列表。燈光列表:創(chuàng)建一個(gè)包含10個(gè)燈光對(duì)象的列表,每個(gè)燈光對(duì)象是一個(gè)字典,包含燈光的ID、開(kāi)關(guān)狀態(tài)和亮度信息,初始狀態(tài)為關(guān)閉且亮度為0。lights=[{"id":1,"status":False,"brightness":0},{"id":2,"status":False,"brightness":0},
……省略部分代碼{"id":10,"status":False,"brightness":0},]ENV_LIGHT_PRESETS=[1500,#早晨光照不足3000,#上午光照中等
……省略部分代碼4500,#傍晚光照]案例實(shí)現(xiàn)STEP02實(shí)現(xiàn)燈光查找函數(shù)根據(jù)燈光ID在燈光列表中查找對(duì)應(yīng)的燈光對(duì)象。遍歷燈光列表,比較每個(gè)燈光對(duì)象的ID與傳入的ID是否相等,如果相等則返回該燈光對(duì)象;若遍歷完列表仍未找到,則打印提示信息并返回None。defget_light(light_id):forlightinlights:iflight["id"]==light_id:returnlightprint(f"未找到ID為{light_id}的燈光")returnNone案例實(shí)現(xiàn)STEP03實(shí)現(xiàn)基礎(chǔ)控制函數(shù)控制單個(gè)燈光的開(kāi)關(guān)狀態(tài)和亮度,并返回控制結(jié)果。調(diào)用get_light()函數(shù)查找指定ID的燈光對(duì)象。根據(jù)傳入的status和brightness參數(shù)更新燈光對(duì)象的狀態(tài)和亮度。檢查亮度值是否在0到100的范圍內(nèi),如果超出范圍則返回錯(cuò)誤信息。defcontrol_light(light_id,status=None,brightness=None):light=get_light(light_id)ifstatusisnotNone:light["status"]=statusifbrightnessisnotNone:if0<=brightness<=100:light["brightness"]=brightnesselse:return{"success":False,"message":f"亮度值{brightness}超出范圍"}return{"success":True,"light":light.copy()}案例實(shí)現(xiàn)STEP04實(shí)現(xiàn)批量控制函數(shù)支持批量控制多個(gè)燈光的開(kāi)關(guān)狀態(tài)和亮度。遍歷傳入的燈光ID列表,對(duì)每個(gè)燈光ID調(diào)用control_light()函數(shù)進(jìn)行控制,并將控制結(jié)果存儲(chǔ)在一個(gè)列表中,最后返回該列表。defbatch_control(*light_ids,status=True,brightness=50):results=[]forlight_idinlight_ids:result=control_light(light_id,status,brightness)results.append(result)returnresults案例實(shí)現(xiàn)STEP05實(shí)現(xiàn)智能控制函數(shù)根據(jù)環(huán)境光照強(qiáng)度自動(dòng)調(diào)節(jié)所有燈光的開(kāi)關(guān)狀態(tài)和亮度。打印當(dāng)前檢測(cè)到的環(huán)境光照強(qiáng)度。比較環(huán)境光照強(qiáng)度與目標(biāo)光照強(qiáng)度,如果環(huán)境光照不足(小于目標(biāo)光照強(qiáng)度),計(jì)算平均亮度(增強(qiáng)系數(shù)為1.5),并調(diào)用batch_control()函數(shù)開(kāi)啟所有燈光并設(shè)置為計(jì)算得到的亮度。如果環(huán)境光照充足(大于等于目標(biāo)光照強(qiáng)度),調(diào)用batch_control()函數(shù)關(guān)閉所有燈光并將亮度設(shè)置為0。defsmart_control(env_light,target=5000,**light_settings):print(f"檢測(cè)到環(huán)境光照:{env_light}lux")ifenv_light<target:print(f"環(huán)境光照不足({env_light}lux<{target}lux),啟動(dòng)補(bǔ)光")#計(jì)算平均亮度,增強(qiáng)系數(shù)1.5avg_brightness=min(100,int((target-env_light)/100*1.5))returnbatch_control(*light_settings.values(),brightness=avg_brightness)else:print(f"環(huán)境光照充足({env_light}lux>={target}lux),關(guān)閉補(bǔ)光")returnbatch_control(*light_settings.values(),status=False,brightness=0)案例實(shí)現(xiàn)STEP06實(shí)現(xiàn)燈光狀態(tài)顯示函數(shù)顯示所有燈光的當(dāng)前狀態(tài),包括ID、開(kāi)關(guān)狀態(tài)和亮度。遍歷燈光列表,將每個(gè)燈光的狀態(tài)信息格式化輸出,顯示在控制臺(tái)。defshow_lights():print("\n當(dāng)前所有燈光狀態(tài):")print("ID\t狀態(tài)\t亮度")print("-"*10)forlightinlights:status="開(kāi)啟"iflight["status"]else"關(guān)閉"print(f"{light['id']}\t{status}\t{light['brightness']}%")print()案例實(shí)現(xiàn)STEP07主程序啟動(dòng)智能光照控制系統(tǒng),隨機(jī)選擇一個(gè)預(yù)設(shè)環(huán)境光照值,啟動(dòng)智能控制模式,并顯示所有燈光的最終狀態(tài)。importrandomif__name__=="__main__":print("===智能光照控制系統(tǒng)===")#隨機(jī)選擇一個(gè)預(yù)設(shè)環(huán)境光照值env_light=random.choice(ENV_LIGHT_PRESETS)print(f"系統(tǒng)啟動(dòng),當(dāng)前環(huán)境光照:{env_light}lux")print("啟動(dòng)智能控制模式...")#智能控制演示-使用全部10個(gè)燈光lights_dict={f"light{i}":iforiinrange(1,11)}smart_control(env_light,**lights_dict)show_lights()【案例5-2】疫苗接種信息管理系統(tǒng)02案例分析
疫苗接種是筑牢公共衛(wèi)生安全防線的關(guān)鍵舉措。通過(guò)將抗原注入人體激發(fā)免疫應(yīng)答,既能顯著降低個(gè)體感染新冠、流感等傳染病的風(fēng)險(xiǎn),減少重癥與死亡發(fā)生率,又能通過(guò)群體免疫效應(yīng)阻斷病毒傳播鏈,守護(hù)嬰幼兒、老年人等易感群體。這一科學(xué)手段不僅是個(gè)人健康的“防護(hù)盾”,更是保障社會(huì)經(jīng)濟(jì)穩(wěn)定運(yùn)行、維護(hù)全球公共衛(wèi)生安全的重要基石。隨著全球疫苗接種計(jì)劃的加速推進(jìn),疫苗接種信息的高效數(shù)字化管理成為公共衛(wèi)生領(lǐng)域的核心需求。案例分析本案例聚焦于構(gòu)建疫苗接種信息管理系統(tǒng),通過(guò)模塊化架構(gòu)設(shè)計(jì),實(shí)現(xiàn)三大核心功能板塊:基礎(chǔ)信息管理模塊:支持接種者檔案的創(chuàng)建、存儲(chǔ)與查詢,確保數(shù)據(jù)完整性;狀態(tài)動(dòng)態(tài)更新模塊:實(shí)時(shí)追蹤接種進(jìn)度,支持接種狀態(tài)與加強(qiáng)針信息的靈活修改;統(tǒng)計(jì)分析模塊:基于疫苗類型、接種人數(shù)等多維度數(shù)據(jù),提供可視化統(tǒng)計(jì)報(bào)表。知識(shí)儲(chǔ)備變量作用域global和nonlocal關(guān)鍵字知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備—變量作用域作用域(Scope)是指一個(gè)變量可以被訪問(wèn)和引用的范圍。變量并不是在每一個(gè)位置都可以訪問(wèn),訪問(wèn)權(quán)限取決于這個(gè)變量在哪里賦值。根據(jù)作用域的不同,變量可以分為全局變量和局部變量。局部變量局部變量指的是在函數(shù)內(nèi)部定義的變量,這些變量只能在該函數(shù)內(nèi)被訪問(wèn)和操作。局部變量是臨時(shí)的,函數(shù)執(zhí)行完畢后,變量會(huì)被銷毀。全局變量全局變量是指在函數(shù)外部定義的變量。全局變量可以在程序的任何位置被訪問(wèn)和修改,除非在函數(shù)內(nèi)部使用相同的變量名覆蓋了全局變量。知識(shí)儲(chǔ)備—變量作用域定義一個(gè)全局變量age和一個(gè)函數(shù)func(),在func()函數(shù)內(nèi)定義一個(gè)名為x的局部變量,代碼如下:age=18 #全局變量agedeffunc():x=20 #局部變量xprint(x)func()print(age)示例若局部變量與全局變量同名,局部變量會(huì)覆蓋全局變量的作用域。在上面示例的代碼中定義一個(gè)全局變量x,修改后的代碼如下:x=10 #全局變量xdeffunc():x=20 #局部變量x,與全局變量同名print(x)func()print(x)運(yùn)行結(jié)果:2018運(yùn)行結(jié)果:2010知識(shí)儲(chǔ)備—變量作用域局部變量和全局變量的區(qū)別:特性局部變量 示例全局變量定義位置函數(shù)內(nèi)部模塊頂層作用域僅限于定義它的函數(shù)整個(gè)模塊默認(rèn)修改權(quán)限可直接修改不可直接修改(需global聲明)同名處理覆蓋全局變量(函數(shù)內(nèi)部)被局部變量覆蓋(函數(shù)內(nèi)部)生命周期函數(shù)調(diào)用時(shí)創(chuàng)建,返回時(shí)銷毀程序運(yùn)行期間始終存在知識(shí)儲(chǔ)備—global和nonlocal關(guān)鍵字函數(shù)內(nèi)部無(wú)法直接修改全局變量,global和nonlocal關(guān)鍵字用于在函數(shù)內(nèi)部修改全局變量。1.global關(guān)鍵字使用global關(guān)鍵字可以將局部變量聲明為全局變量。x=10deffunc():globalx #將x聲明為全局變量x=20print(x)func()print(x)示例global變量語(yǔ)法格式使用global關(guān)鍵字在函數(shù)內(nèi)部修改全局變量的值,示例代碼如下;知識(shí)儲(chǔ)備—global和nonlocal關(guān)鍵字2.nonlocal關(guān)鍵字nonlocal關(guān)鍵字用來(lái)在函數(shù)或其他作用域中使用外層(非全局)變量。它主要用在嵌套函數(shù)中,當(dāng)需要修改嵌套作用域內(nèi)的變量時(shí)。defouter():x=10 #外層函數(shù)中的局部變量definner():nonlocalxx=20 #修改外層函數(shù)中的局部變量inner()returnxprint(outer())示例nonlocal變量語(yǔ)法格式使用nonlocal關(guān)鍵在嵌套函數(shù)中修改外層函數(shù)中的局部變量,示例代碼如下;案例實(shí)現(xiàn)創(chuàng)建名稱為“疫苗接種信息管理系統(tǒng)”的項(xiàng)目,在項(xiàng)目下創(chuàng)建名稱為vaccina_system的Python文件。準(zhǔn)備工作案例實(shí)現(xiàn)STEP01全局變量定義初始化兩個(gè)全局變量,vaccine_records用于存儲(chǔ)所有接種者的詳細(xì)信息,vaccine_stats用于記錄不同疫苗類型的接種人數(shù)統(tǒng)計(jì)。vaccine_records=[]vaccine_stats={}案例實(shí)現(xiàn)STEP02實(shí)現(xiàn)添加疫苗接種記錄的函數(shù)向系統(tǒng)中添加新的疫苗接種記錄,并更新疫苗類型的統(tǒng)計(jì)信息。首先,通過(guò)len(vaccine_records)+1生成一個(gè)唯一的記錄ID。然后,創(chuàng)建一個(gè)包含接種者姓名、疫苗類型、記錄ID和接種狀態(tài)的字典record。將該字典添加到vaccine_records列表中。defadd_vaccine_record(name,vaccine_type):record_id=len(vaccine_records)+1record={"id":record_id,"name":name,"vaccine_type":vaccine_type,"status":"已接種"}vaccine_records.append(record)print(f"已添加記錄:{name}-{vaccine_type}")案例實(shí)現(xiàn)STEP03更新疫苗接種狀態(tài)的函數(shù)根據(jù)記錄ID更新接種者的疫苗接種狀態(tài)。初始化一個(gè)target_record變量,用于存儲(chǔ)要更新的記錄。遍歷vaccine_records列表,查找與輸入的record_id匹配的記錄。defupdate_vaccine_status(record_id,new_status="已加強(qiáng)"):target_record=None#查找目標(biāo)記錄forrecordinvaccine_records:ifrecord["id"]==record_id:target_record=recordbreakifnottarget_record:print(f"錯(cuò)誤:未找到ID為{record_id}的記錄")returntarget_record["status"]=new_statusprint(f"\n記錄{record_id}狀態(tài)已更新為:{new_status}")案例實(shí)現(xiàn)STEP04更新疫苗類型統(tǒng)計(jì)信息的函數(shù)根據(jù)新添加的接種記錄,更新疫苗類型的統(tǒng)計(jì)信息。使用global關(guān)鍵字聲明使用全局變量vaccine_stats。檢查輸入的vaccine_type是否已經(jīng)存在于vaccine_stats字典中。如果存在,則將對(duì)應(yīng)的值加1;如果不存在,則將該疫苗類型作為新的鍵添加到字典中,并將值初始化為1。defupdate_statistics(vaccine_type):globalvaccine_statsifvaccine_typeinvaccine_stats:vaccine_stats[vaccine_type]+=1else:vaccine_stats[vaccine_type]=1]案例實(shí)現(xiàn)STEP05實(shí)現(xiàn)顯示所有接種記錄的函數(shù)顯示系統(tǒng)中所有接種者的詳細(xì)信息。遍歷vaccine_records列表,依次打印每個(gè)接種者的記錄ID、姓名、疫苗類型和接種狀態(tài)。defshow_vaccine_records():
print("\n當(dāng)前所有接種記錄:")forrecordinvaccine_records:print(f"{record['id']}.{record['name']}-{record['vaccine_type']}-{record['status']}")案例實(shí)現(xiàn)STEP06統(tǒng)計(jì)疫苗接種情況的函數(shù)顯示不同疫苗類型的接種人數(shù)統(tǒng)計(jì)信息。遍歷vaccine_stats字典,依次打印每種疫苗類型及其對(duì)應(yīng)的接種人數(shù)。defcount_vaccine_stats():print("\n疫苗接種統(tǒng)計(jì):")forvaccine,countinvaccine_stats.items():print(f"{vaccine}:{count}人")案例實(shí)現(xiàn)STEP07實(shí)現(xiàn)主函數(shù)并調(diào)用演示系統(tǒng)的主要功能,包括添加接種記錄、更新接種狀態(tài)、顯示記錄和統(tǒng)計(jì)信息。defmain():#添加接種記錄add_vaccine_record("張三","疫苗A")add_vaccine_record("李四","疫苗B")show_vaccine_records()#查看記錄#更新?tīng)顟B(tài)示例update_vaccine_status(1)show_vaccine_records()#添加更多記錄add_vaccine_record("王五","疫苗A")add_vaccine_record("趙六","疫苗C")add_vaccine_record("孫七","疫苗A")show_vaccine_records()#查看統(tǒng)計(jì)結(jié)果count_vaccine_stats()main()#調(diào)用主函數(shù)【案例5-3】斐波那契數(shù)列應(yīng)用03案例分析
斐波那契數(shù)列是由意大利數(shù)學(xué)家萊昂納多?斐波那契提出的經(jīng)典數(shù)列,其定義為:前兩項(xiàng)分別為0和1,從第三項(xiàng)開(kāi)始,每一項(xiàng)都等于前兩項(xiàng)之和,即F(0)=0,F(xiàn)(1)=1,F(xiàn)(n)=F(n?1)+F(n?2)(n≥2)。數(shù)列前幾項(xiàng)為0,1,1,2,3,5,8,13,21,34...本案例通過(guò)遞歸函數(shù)生成斐波那契數(shù)列,每一項(xiàng)依賴前兩項(xiàng)計(jì)算,恰似人生成果源于過(guò)往積累,起始條件如前行第一步雖平凡卻為基石;運(yùn)用匿名函數(shù)簡(jiǎn)潔高效地篩選計(jì)算數(shù)列數(shù)據(jù),如同在信息時(shí)代需快速精準(zhǔn)解決問(wèn)題。知識(shí)儲(chǔ)備遞歸函數(shù)匿名函數(shù)知識(shí)儲(chǔ)備知識(shí)儲(chǔ)備—遞歸函數(shù)遞歸函數(shù)的核心在于函數(shù)在執(zhí)行過(guò)程中調(diào)用自身。它就像一個(gè)人沿著螺旋樓梯不斷向上攀登,每一步都依賴上一步的位置,但如果沒(méi)有明確的終止條件,就會(huì)在這個(gè)循環(huán)中永無(wú)止境,陷入無(wú)限遞歸的困境。遞歸函數(shù)在定義時(shí)需要滿足兩個(gè)基本條件:一個(gè)是有遞歸公式,另一個(gè)是有邊界條件。語(yǔ)法格式如下所示:def函數(shù)名([參數(shù)列表]):if邊界條件:return結(jié)果else:return遞歸公式語(yǔ)法格式知識(shí)儲(chǔ)備—遞歸函數(shù)
遞歸函數(shù)適用于解決可分解為相同結(jié)構(gòu)子問(wèn)題的場(chǎng)景。計(jì)算階乘就是典型案例,n的階乘factorial(n)可分解為n*factorial(n-1),例如,計(jì)算斐波那契數(shù)列的函數(shù)factorial(n),在計(jì)算n大于1的項(xiàng)時(shí),會(huì)不斷調(diào)用自身計(jì)算前兩項(xiàng)的和。這與斐波那契數(shù)列中F(n)=F(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 未來(lái)五年印刷復(fù)制服務(wù)企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略分析研究報(bào)告
- 未來(lái)五年麥冬企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略分析研究報(bào)告
- 造口傷口護(hù)理進(jìn)修匯報(bào):綜合分析
- 安全培訓(xùn)管理檢討書(shū)課件
- 惡性骨腫瘤患者的疼痛評(píng)估
- 主題5各類統(tǒng)計(jì)圖的判讀課件06年中考地理二輪專題復(fù)習(xí)(廣東)
- 服裝服務(wù)培訓(xùn)課件
- 服裝搭配及妝容培訓(xùn)課件
- 安全培訓(xùn)答題技巧課件
- 年中考化學(xué)一輪復(fù)習(xí)課件專項(xiàng)突破一金屬活動(dòng)性順序的應(yīng)用課件
- 瀝青維護(hù)工程投標(biāo)方案技術(shù)標(biāo)
- 深圳機(jī)場(chǎng)突發(fā)事件應(yīng)急預(yù)案
- 水電站建筑物課程設(shè)計(jì)
- 個(gè)人借款合同個(gè)人借款協(xié)議
- 生物科技股份有限公司GMP質(zhì)量手冊(cè)(完整版)資料
- 兒童行為量表(CBCL)(可打印)
- 地貌學(xué)與第四紀(jì)地質(zhì)學(xué)總結(jié)
- 2023年德語(yǔ)專業(yè)四級(jí)考試真題
- GB/T 36713-2018能源管理體系能源基準(zhǔn)和能源績(jī)效參數(shù)
- 溫度儀表基礎(chǔ)知識(shí)課件
- OnyxWorks使用注意說(shuō)明
評(píng)論
0/150
提交評(píng)論