




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
項目7函數應用了解函數的概念及作用01理解函數的模塊化設計思想02掌握函數的定義和調用方法03知識目標理解return語句的作用和用法05理解函數的局部變量和全局變量06理解函數的遞歸和嵌套用法07理解函數的參數傳遞方式04能夠根據功能需求定義函數01能夠根據功能需求定義嵌套函數。02能夠運用不同的方式傳遞函數參數03能力目標能夠熟練運用匿名函數04能夠熟練運用遞歸函數解決復雜的問題05能夠處理函數的異常和錯誤06目錄簡易計算器設計任務1汽車進銷存管理系統設計任務2漢諾塔游戲設計任務3
任務1簡易計算器設計任務提出01任務分析02知識準備03任務實現04任務總結05任務提出Part.01提出任務運用PyCharm開發工具編寫Python程序,設計一個簡易的計算器,要求該計算器能實現兩個數字的加、減、乘、除(+、-、*、/)運算等功能,其中每一種運算都要求通過調用函數來完成。任務分析Part.02分析任務1.創建Python程序cal.py。2.設計命令行用戶界面,向用戶展示可用的運算選項。3.為加、減、乘、除每一種運算設計一個運算函數。4.通過input函數接受用戶的輸入,調用相應的函數進行計算。5.運行測試程序,通過驗證輸出的計算結果來測試程序。該任務主要完成的是兩個數字的加、減、乘、除運算,在運行的過程中,根據用戶選擇的運算來調用不同的函數完成計算,并給出計算結果。知識準備Part.03函數概述01函數的定義02函數調用03知識準備函數的嵌套定義04函數是組織好的、實現單一功能或相關聯功能,并可以重復使用的代碼,這段代碼已經被提前編寫好了,并且為其起一個“好聽”的名字。在后續編寫程序過程中,如果需要同樣的功能,直接通過起好的名字就可以調用這段代碼。函數概述Python中的函數可以分為內置函數、標準庫函數、第三方庫函數和用戶自定義函數等幾種類型。內置函數:Python語言自帶的函數,可以直接在任何Python程序中使用,無需導入任何庫。標準庫函數:Python的標準庫包含了許多模塊,這些模塊提供了大量的函數來處理各種常見任務。要使用這些函數,需要首先導入相應的模塊。例如,math模塊提供了各種數學函數,如sqrt()、sin()、cos()等,OS模塊則提供了與操作系統交互的函數,如exists()、listdir()等。函數概述第三方庫函數:除了標準庫之外,還有許多第三方庫可供Python程序員使用。這些庫通常需要通過包管理器pip進行安裝,然后才能在程序中使用。例如numpy庫提供了大量的數值計算函數,pandas庫提供了數據處理和分析的函數,matplotlib庫提供了繪圖函數等。用戶自定義函數:除了使用內置函數和庫函數之外,Python還允許程序員根據特定的需求定義自己的函數。函數概述函數的定義,也就是創建一個函數,可以理解為創建一個具有某些用途的工具。Python中使用關鍵字def來定義函數,其語法格式如下:函數的定義標記函數的開始函數的唯一標識傳入函數中的數據可以包含一個或多個參數也可以為空標記函數體的開始實現函數功能的具體代碼返回函數的處理結果給調用方標志著函數的結束,若函數沒有返回值,可以省略注意,在創建函數時,即使函數不需要參數,也必須保留一對空的“()”,否則Python解釋器將提示“invaildsyntax”錯誤。另外,如果想定義一個沒有任何功能的空函數,可以使用pass語句作為占位符。函數的定義#定義個空函數,沒有實際意義defpass_fun_():pass函數在定義完成后不會立刻執行,直到被程序調用時才會執行。函數調用語法格式如下:函數調用例如:area()#無參函數area_modify(9,7)#有參函數函數名([參數列表])程序在調用函數的位置暫停執行,將數據傳遞給函數參數;執行函數體中的語句;程序回到暫停處繼續執行。函數調用過程area()area_modify(9,7)例如調用過程area_modify(9,7)defarea_modify(a,b):
s=a*b
print(s)①②③④注意:函數調用函數的使用必須遵循先定義,后調用原則沒有事先定義函數,而直接引用函數名,就相當于在引用一個不存在的變量名函數定義階段:只檢測函數體的語法,不執行函數體代碼函數調用階段執行代碼說明:函數調用在函數定義階段括號內沒有參數注意:定義無參,意味著調用時也無需傳入參數應用:如果函數體的代碼邏輯不需要依賴外部傳入的值,必須定義無參函數(1)無參函數說明:函數調用在函數定義階段括號內有參數,稱為有參函數注意:定義時有參,意味著調用時也必須傳入參數應用:如果函數體代碼邏輯需要依賴外部傳入的值,必須定義成有參函數(2)有參函數函數在定義時可以在其內部嵌套定義另外一個函數,嵌套的函數稱為外層函數,被嵌套的函數稱為內層函數。函數的嵌套定義defouter():print("這是外層函數")
definner():print("這是內層函數")outer()例如:這是外層函數運行結果如下:由運行結果可知,程序沒有執行內層函數的打印語句,只輸出了外層函數的打印語句。這說明內層函數沒有被調用。函數的嵌套定義defouter():
print("這是外層函數")
definner():
print("這是內層函數")
inner()#在outer函數中調用inner()函數outer()將上面的代碼修改如下:這是外層函數這是內層函數運行結果如下:任務實現Part.04分析代碼01編寫代碼02任務實現1.分析代碼任務實現根據任務的功能需求,自定義4個函數add()、subtract()、multiply()、divide(),分別實現加法、減法、乘法和除法功能,每個函數定義兩個參數,用于接收參與運算的2個數字,并將運算結果作為函數的返回值。在執行除法運算時,需要考慮除數是否為0的情況,以免出現程序異常。1.分析代碼任務實現使用while循環語句保障程序持續運行,直至用戶選擇退出系統為止。在while循環體中包含三個部分:1)使用print()函數輸出簡易計算器的操作界面,并使用input()函數接收用戶的輸入。2)根據用戶的功能選擇和計算的數字,調用對應的函數進行計算,并輸出計算結果。3)通過break語句結束程序運行。2.
編寫代碼(1)任務實現defdivide(x,y):"""除法運算"""
ify!=0:returnx/yelse:return"除數不能為零"defadd(x,y):"""加法運算"""
returnx+ydefsubtract(x,y):"""減法運算"""
returnx-ydefmultiply(x,y):"""乘法運算"""
returnx*y2.
編寫代碼(2)任務實現whileTrue:
print("------------簡易計算器-------------\n選擇一個運算:")
print("1.加法")
print("2.減法")
print("3.乘法")
print("4.除法")
print("5.退出")
choice=input("輸入選項編號:")2.
編寫代碼(3)任務實現ifchoicein('1','2','3','4'):num1=float(input("輸入第一個數:"))
num2=float(input("輸入第二個數:"))
ifchoice=='1':print(f"結果:{add(num1,num2)}")elifchoice=='2':print(f"結果:{subtract(num1,num2)}")elifchoice=='3':print(f"結果:{multiply(num1,num2)}")elifchoice=='4':print(f"結果:{divide(num1,num2)}")elifchoice=='5':print("退出程序.")
breakelse:print("無效的選項,請重新輸入。")任務總結Part.05通過本任務的學習,掌握了函數的作用、類型,以及函數的定義、調用方法。在定義和調用函數時,需要注意以下幾點:函數命名:函數名應該遵循Python的標識符命名規則,一般使用小寫字母和下劃線的組合,應該能夠簡單、清晰地表達函數的功能。嵌套定義:定義嵌套函數時,在嵌套的外層函數體外,無法調用嵌套的內層函數。參數匹配:在調用函數時,必須提供正確數量和類型的參數。如果參數數量或類型不匹配,Python會報錯。返回值:函數可以通過return語句返回一個值。如果沒有return語句,或者return后面沒有跟任何值,那么函數會返回None。 嵌套定義:定義嵌套函數時,在嵌套的外層函數體外,無法調用嵌套的內層函數。文檔字符串:可以為每個函數添加文檔字符串,以描述函數的功能、參數和返回值。有助于其他人理解代碼和后期代碼的維護。 任務提出01任務分析02知識準備03任務2汽車進銷存管理系統設計任務實現04任務總結05任務1打印樹形圖案任務提出Part.01提出任務運用PyCharm開發工具編寫Python程序,設計一個簡單的進銷存管理系統,用于實現汽車4S店的進銷存業務管理,需要維護的汽車信息包括汽車品牌、顏色、價格、數量等。系統具有添加、刪除、修改、查詢汽車信息以及退出功能,任務分析Part.02分析任務1.創建Python程序car.py。2.定義一個列表用于存放所有的汽車信息。3.設計系統操作界面,接收用戶的輸入操作。4.根據功能模塊設計要求,為每項功能編寫函數,在函數主體中設計業務處理邏輯。5.根據用戶的功能選擇,調用并傳遞參數給不同的模塊函數,實現業務功能。6.運行測試程序,逐項測試各項功能是否正常。該任務主要實現的是汽車信息添加、修改、刪除、查詢等功能,可以根據功能設計不同的功能模塊函數,通過調用模塊函數并傳遞相應參數實現業務處理知識準備Part.03位置參數傳遞01關鍵字參數傳遞02默認值參數傳遞03知識準備可變參數傳遞04混合參數傳遞05函數的返回值06變量作用域07通常將定義函數時設置的參數稱為形式參數(簡稱為形參),將調用函數時傳入的參數稱為實際參數(簡稱為實參)。函數的參數傳遞是指將實際參數傳遞給形式參數的過程。函數參數傳遞形參實參函數在被調用時會將實參按照相應的位置依次傳遞給形參,也就是說將第一個實參傳遞給第一個形參,將第二個實參傳遞給第二個形參,以此類推。位置參數傳遞注意:位置參數傳遞位置參數:按位置指定,實參和形參數量必須?致函數調?時括號中只寫各個實參,這時形參的值與實參按照順序??對應在調?函數,指定的實際參數的數量,必須和形式參數的數量?致(傳多傳少都不行)關鍵字參數的傳遞是通過“形參=實參”的格式將實參與形參相關聯,將實參按照相應的關鍵字傳遞給形參。關鍵字參數傳遞傳遞方式的限定無論實參采用位置參數的方式傳遞,還是關鍵字參數的方式傳遞,每個形參都是有名稱的,怎么區分用哪種方式傳遞呢?符
號“/”傳遞方式的限定Python在3.8版本中新增了僅限位置形參的語法,使用符號“/”來限定部分形參只接收位置傳遞方式的實參。deffunc(a,b,/,c):print(a,b,c)
表示在/形參前的參數只能通過位置參數傳遞。Python允許為參數設置默認值,即在定義函數時,直接給形式參數指定一個默認值。默認參數傳遞默認參數傳遞不傳參默認參數傳遞傳參調用函數函數調用形式不傳參,調用函數就直接使用默認值。傳參,在調用時可以重新給予默認值的參數
通過位置傳參方式給值
通過關鍵詞傳參方式給值1.參數能不能全部定義為默認參數?函數調用形式2.默認參數位置會不會受約束呢?參數全部定義為默認參數默認參數位置變化注意:默認參數傳遞函數在定義時可以指定各參數的默認值;默認參數和其它參數同時存在,默認參數必須位于必選參數的后面。如果函數在定義時無法確定需要接收多少個數據,那么可以在定義函數時為形參添加“*”或“**”:可變參數的傳遞“*”:接收以元組形式打包的多個值“**”:接收以字典形式打包的多個值1.打包“*”定
義deff1(*args):print(args)#輸出參數的值調
用f1()#f1(‘a’,‘e’,‘u’,‘i’,‘o’)結
果()(‘a’,‘e’,‘u’,‘i’,‘o’)可變參數傳遞2.打包“**”定
義deff2(**kwargs):print(kwargs)#輸出參數的值調
用f2(name=‘john’,height=180,weight=70)f2()結
果{'name':'john','height':180,'weight':70}{}可變參數傳遞可變參數傳遞函數中添加“*”或“**”的形參可以是符合命名規范的任意名稱,建議使用*args和**kwargs。若函數沒有接收到任何數據,參數*args和**kwargs為空,即為空元組或空字典。
*的作用:在函數定義中,收集所有位置參數到一個新的元組,并將整個元組賦值給變量args。**
的作用:在函數定義中,收集關鍵字參數到一個新的字典,并將整個字典賦值給變量kwargs??勺儏祩鬟f1.實參是元組,可以使用“*”拆分成多個值,按位置參數傳給形參。2.實參是字典,可以使用“**”拆分成多個鍵值對,按關鍵字參數傳給形參。函數調用時——實參1.解包“*”定
義deffun1(c1,c2,c3,c4,c5):print(c1,c2,c3,c4,c5)調
用chs=(‘a’,‘e’,‘u’,‘i’,‘o’)fun1(*chs)結
果‘a’,‘e’,‘u’,‘i’,‘o’可變參數傳遞2.解包“**”定
義deffun2(name,height,weight):print(name,height,weight)調
用boy={'name':'john','height':180,'weight':70}
fun2(**boy)結
果john18070可變參數傳遞1.先按照參數的位置傳遞。2.再按照參數的關鍵字傳遞。3.最后按打包的形式傳遞?;旌蠀祩鬟f注意:定義函數時參數有默認值,則帶有默認值的參數必須跟在必選參數的后面?;旌蠀祩鬟ffunc(1,2)#按位置傳遞方式將1、2賦值給a、b,c采用默認值0func(1,2,c=3)#按位置傳遞方式將1、2賦值給a、b,將3賦值給c#a=1b=2c=3args=()kw={}func(1,2,3,‘x',‘y')#a=1b=2c=3args=(‘x',‘y')kw={}func(1,2,3,‘x',‘y',s=100)#a=1b=2c=3args=('a','b')kw={‘s':100}函數返回值函數中的return語句會在函數結束時將數據返回給程序,同時讓程序回到函數被調用的位置繼續執行。defadd(num1,num2):res=num1+num2returnres#returnnum1,num2
如果函數使用return語句返回了多個值,那么這些值將被保存到元組中。一般格式為return[返回值]函數返回值如果函數沒有返回值,即函數執行完畢后,不需要給調用處提供數據,那么return可以省略不寫。函數的返回值,如果是一個,直接返回原類型。函數的返回值如果是多個,返回的值為元組。函數返回值局部變量局部變量和全局變量定義:局部變量,就是在函數內部定義的變量約束:其作用范圍是這個函數內部,即只能在這個函數中使用,在函數的外部是不能使用的。全局變量局部變量和全局變量定義:在函數外邊定義的變量叫做全局變量。范圍:全局變量能夠在所有的函數中進行訪問。局部變量和全局變量訪問修改局部變量和全局變量1.局部變量和全局變量定義的位置不同,作用域不同。2.全局變量在函數內部只能被訪問,而無法直接修改。1.global關鍵字global和nonlocal關鍵字使用global關鍵字可以將局部變量聲明為全局變量,其使用方法如下:global變量名like1=10#like1在這里是一個全局變量deffunc():
globallike1#like1聲明時,不能直接賦值。like1+=20#函數內部修改變量like1print('函數內部修改后:',like1)2.nonlocal關鍵字global和nonlocal關鍵字使用nonlocal關鍵字可以在局部作用域中修改嵌套作用域中定義的變量,其使用方法如下:nonlocal變量名deftest():number=10deftest_in():
nonlocalnumbernumber=20test_in()print(number)test()任務實現Part.04分析代碼01編寫代碼02任務實現1.分析代碼任務實現(1)定義列表car_info用于保存所有的汽車信息,列表的元素為字典,字典中設置brand、color、price、num四個鍵分別對應汽車的品牌、顏色、價格、數量信息。(2)定義main_menu()函數,用于輸出系統的功能界面。(3)定義input_car_info()、add_car_info()、del_car_info(car)、modify_car_info()、show_car_info()功能函數用于實現錄入汽車信息、添加汽車信息入庫、修改已有汽車信息、刪除指定汽車信息、查詢全部汽車信息等功能。(4)在main()函數中,調用main_menu()函數,并接收用戶的功能選擇,調用相應的功能函數。定義列表輸出用戶操作界面任務實現2.編寫代碼啟動PyCharm,在項目文件夾Chapter07中新建Python文件car.py錄入汽車信息函數添加汽車信息函數任務實現2.編寫代碼刪除汽車信息函數修改汽車信息函數任務實現2.編寫代碼顯示所有的汽車信息函數任務實現2.編寫代碼主函數任務實現2.編寫代碼任務總結Part.05通過本任務的學習,系統掌握Python中參數的傳遞方法、不同類型返回值以及變量的作用域的靈活應用。在使用是需要注意以下幾點。參數命名:參數名應該盡量清晰、簡潔,并準確描述參數的作用;避免使用Python中的保留關鍵字作為參數名;遵循Python的命名慣例,使用小寫字母和下劃線來分隔單詞。參數類型:Python是一種動態類型語言,所以函數的參數不需要預先聲明類型。位置參數與關鍵字參數:在調用函數時,可以使用位置參數(按照參數在函數定義中的順序傳遞)或關鍵字參數(通過參數名明確指定)。使用關鍵字參數可以提高代碼的可讀性,并允許在調用函數時改變參數的順序。默認參數:可以為函數參數提供默認值,在調用函數時可以省略這些參數。如果帶有默認值的參數與必選參數同時存在,則帶有默認值的參數必須位于必選參數的后面。可變參數與關鍵字參數:使用*args可以接收任意數量的位置參數,它們被打包為一個元組。使用**kwargs可以接收任意數量的關鍵字參數,它們被打包為一個字典。當同時使用*args和**kwargs時,*args必須放在**kwargs前面。參數驗證:建議在函數內部對傳入的參數進行驗證,確保參數的數據類型、取值范圍等是符合預期的,對于不符合預期的參數值,可以提前拋出異常。變量重名:為了避免變量名稱沖突,在同一作用域中不能有重名,但是不同的作用域內可以重名。如果在函數內部定義了一個與全局變量同名的局部變量,那么在函數內部訪問該變量時,將優先使用局部變量,而不是全局變量。變量作用域:在函數內部,如果要修改全局變量,需要使用global關鍵字進行聲明。否則,Python會將其視為一個新的局部變量。在嵌套函數(內部函數)中,可以直接訪問外部函數(外部作用域)的局部變量,但是,外部函數不能直接訪問嵌套函數的局部變量。任務提出01任務分析02知識準備03任務3漢諾塔游戲設計任務實現04任務總結05任務1打印樹形圖案任務提出Part.01提出任務漢諾塔游戲是一個經典遞歸問題。假設有n個圓盤,編號從1到n,初始時按照從大到小的順序依次放置在A柱上,較大的圓盤在下,較小的圓盤在上。目標是將這些圓盤移動到C柱上,移動過程中可以借助B柱,但是在移動過程中大圓盤不能放到小圓盤上、每次只能移動一個圓盤,如圖所示。運用PyCharm開發工具編寫Python程序,完成圓盤從A柱到C柱的移動,并顯示移動過程。任務分析Part.02分析任務1.創建Python程序hanoi.py。2.創建遞歸函數。在遞歸函數中,記錄每一次移動的步驟。3.使用input()函數接受需要移動的盤子數量。4.調用遞歸函數,實現盤子的移動,輸出盤子移動的過程。5.運行測試,檢驗是否正確完成移動。本任務主要完成的是將A柱上所有的圓盤按照要求移動到C柱上,要解決這個問題,可以使用遞歸函數。具體的任務實施分析如下:知識準備Part.03匿名函數定義01匿名函數的應用02知識準備遞歸函數03遞歸函數經典應用04匿名函數是一類無須定義標識符的函數,它與普通函數一樣可以在任何地方使用,python中使用lambda關鍵字定義匿名函數。語法格式如下:匿名函數定義lambda<形式參數列表>:<表達式>匿名函數與普通函數的主要區別如下:匿名函數定義普通函數定義時有名稱函數體中包含有多條語句實現比較復雜的功能能被其他程序使用匿名函數匿名函數沒有名稱函數體只能是一個表達式實現的功能比較簡單不能被其他程序使用定義好的匿名函數不能直接使用,最好使用一個變量保存它,以便后期可以隨時使用這個函數。匿名函數定義示例#定義匿名函數,并將它返回的函數對象賦值給變量temptemp=lambdax:x**3temp(10)匿名函數跟函數一起使用,根據字符串長度進行排序。匿名函數的應用示例lst=['天宮一號','神州十三號','嫦娥號','北斗導航系統']print(sorted(lst,key=lambdas:len(s)))函數在定義時可以直接或間接地調用其他函數。若函數內部調用了自身,則這個函數被稱為遞歸函數。遞歸函數遞歸函數在定義時需要滿足兩個基本條件:一個是遞歸公式,另一個是邊界條件。其中:遞歸函數遞歸公式:是求解原問題或相似的子
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2019-2025年一級建造師之一建工程法規題庫練習試卷A卷附答案
- 福州合同協議書
- 代賣銷售合同樣本
- 機件不符的機動車的責任劃分及依據
- 綜合門診工作總結與患者體驗優化計劃
- 保險銷售代理合同樣本
- 出境領隊合同樣本
- 2025鋼筋工班組承包合同
- 業主公司合同樣本
- 提升團隊適應能力的行動計劃
- 先天性巨結腸遠期療效評估與隨訪
- DL∕T 246-2015 化學監督導則
- 《宜興市國土空間總體規劃(2021-2035年)》
- 全新只分紅不占股協議
- DZ∕T 0283-2015 地面沉降調查與監測規范(正式版)
- 江西省南昌市部分學校2023-2024學年七年級下學期期中數學試題(含答案)
- 地鐵安檢專業知識培訓課件
- 2024-2029年中國無人機自動機場行業市場現狀分析及競爭格局與投資發展研究報告
- 國有企業中層管理人員選拔任用管理辦法(價值極高參考版)
- 自來水公司招聘考試題庫
- 生物醫藥科技成果轉化
評論
0/150
提交評論