Python財經應用-編程基礎、數據分析與可視化課件 第2章-Python程序設計基礎-2.3函數與函數式編程_第1頁
Python財經應用-編程基礎、數據分析與可視化課件 第2章-Python程序設計基礎-2.3函數與函數式編程_第2頁
Python財經應用-編程基礎、數據分析與可視化課件 第2章-Python程序設計基礎-2.3函數與函數式編程_第3頁
Python財經應用-編程基礎、數據分析與可視化課件 第2章-Python程序設計基礎-2.3函數與函數式編程_第4頁
Python財經應用-編程基礎、數據分析與可視化課件 第2章-Python程序設計基礎-2.3函數與函數式編程_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Python財經應用:編程基礎、數據分析與可視化第二章Python程序設計基礎中國農業(yè)大學李輝01

程序基本流程控制02

典型序列數據結構03

函數與函數式編程04

面向對象程序設計01

程序基本流程控制02

典型序列數據結構03

函數與函數式編程04

面向對象程序設計2.3函數與函數式編程第二章Python程序設計基礎在Python中,將用于實現某種特定功能的若干條語句組合在一起,稱為函數。本節(jié)將簡要介紹Python中的函數定義及使用方法。函數與函數式編程函數與函數式編程——函數的定義與調用函數定義的一般形式:函數定義的語法格式如下所示:說明:函數代碼塊以def關鍵詞開頭,后接函數標識符名稱和圓括號()。function_name是用戶自定義的函數名稱。arguments是零個或多個參數,且任何傳入參數必須放在圓括號內。如果有多個參數,則必須用英文逗號分隔。即使沒有任何參數,也必須保留一對空的圓括號。括號后邊的冒號表示縮進的開始。最后必須跟一個冒號(:),函數體從冒號開始,并且縮進。function_block是實現函數功能的語句塊。在函數體中,可以使用return語句返回函數代碼的執(zhí)行結果,返回值可以有一個或多個。如果沒有return語句,則默認返回None(空對象)。deffunction_name(arguments):函數與函數式編程——函數的定義與調用函數調用:調用函數也就是執(zhí)行函數。在Python中,直接使用函數名調用函數。如果定義的函數包含有參數,則調用函數時也必須使用參數。調用函數的語法如下:說明:function_name:函數名稱,要調用的函數名稱,必須是已經定義好的。arguments:可選參數,用于指定各個參數的值。如果需要傳遞多個參數值,則各個參數值間使用逗號“,”分隔;如果該函數沒有參數,則直接寫一對小括號即可。function_name(arguments)函數與函數式編程——函數的定義與調用函數的返回值:在Python中,可以在函數體內使用return語句為函數指定返回值。該返回值可以是任意類型,并且無論return語句出現在函數的什么位置,只要得到執(zhí)行,就會直接結束函數的執(zhí)行。return語句的語法如下:說明:value為可選參數,用于指定要返回的值,可以返回一個值,也可以返回多個值。returnvalue函數與函數式編程——函數的定義與調用【例2-24】自定義函數名稱為fun_area的函數,用于計算矩形的面積,該函數包括兩個參數,分別為矩形的長和寬,返回值為的矩形面積。

#計算矩形面積的函數deffun_area(width,height):ifstr(width).isdigit()andstr(height).isdigit():#驗證數據是否合法area=width*height#計算矩形面積else:area=0returnarea#返回矩形的面積w=20#矩形的長h=15#矩形的寬area=fun_area(w,h)#調用函數print(area)運行結果如下:

300函數與函數式編程——函數參數類型在使用函數時,經常會用到形式參數和實際參數,兩者都叫作參數,二者之間的區(qū)別將先通過形式參數與實際參數的作用來進行講解。形參即形式參數,在使用def定義函數時,函數名后面的括號里的變量稱作形式參數。在調用函數時提供的值或者變量稱作實際參數,實際參數簡稱實參。定義函數時不需要聲明形參的數據類型,Python解釋器會根據實參的類型自動推斷形參的類型。函數是可以傳遞參數的,當然也可以不傳遞參數。同樣,函數可以有返回值,也可以沒有返回值。根據實際參數的類型不同,可以分為將實際參數的值傳遞給形式參數,和將實際參數的引用傳遞給形式參數兩種情況。其中,當實際參數為不可變對象時,進行的是值傳遞;當實際參數為可變對象時,進行的是引用傳遞。實際上,值傳遞和引用傳遞的基本區(qū)別就是,進行值傳遞后,改變形式參數的值,實際參數的值不變;而在進行引用傳遞后,改變形式參數的值,實際參數的值也一同改變。函數與函數式編程——函數參數類型默認參數傳遞Python支持默認值參數,即在定義函數時可以為形參設置默認值。調用帶有默認值參數的函數時,如果沒有給設置默認值的形參傳值,則函數會直接使用默認值。也可以通過傳遞實參替換默認值。

#定義函數defuser_info(name,age,gender='女'):print(f"您的名字是{name},年齡是{age},性別是{gender}")#調用函數user_info('Tom',20)user_info('Jack',18,'男')def函數名(…,形參名=默認值):函數體【例2-25】自定義函數user_info,定義時設置默認參數,調用時驗證其功能。函數與函數式編程——函數參數類型運行結果如下:定義函數時,為形式參數設置默認值要牢記一點:默認參數必須指向不可變對象。若使用可變對象作為函數參數的默認值時,多次調用可能會導致意料之外的情況。

您的名字是Tom,年齡是20,性別是女您的名字是Jack,年齡是18,性別是男函數與函數式編程——函數參數類型未知參數個數(可變)傳遞對于某些函數,我們不知道傳進來多少個參數,只知道對這些參數進行怎樣的處理。Python允許創(chuàng)造這樣的函數,即未知參數個數的傳遞機制,只需要在參數前面加個*就可以了。通過*arg和**kwargs這兩個特殊語法可以實現可變長參數:*arg:元組變長參數,可以以元組形式接收不定長度的實參。**kwargs:字典變長參數,可以以字典形式接收不定長度的鍵值對。函數與函數式編程——函數參數類型

defget_score(*names):result=[]fornameinnames:score=std_sc.get(name,-1)result.append((name,score))returnresultstd_sc={'Merry':95,'Jack':76,'Rose':88,'Xinyi':65}print(get_score('Merry'))print(get_score('Jack','Rose'))print(get_score('Merry','Xinyi','Jack'))【例2-26】自定義函數get_score,利用可變長參數,根據姓名同時查詢多人的成績。函數與函數式編程——函數參數類型運行結果如下:定義函數時,為形式參數設置默認值要牢記一點:默認參數必須指向不可變對象。若使用可變對象作為函數參數的默認值時,多次調用可能會導致意料之外的情況。

[('Merry',95)][('Jack',76),('Rose',88)][('Merry',95),('Xinyi',65),('Jack',76)]函數與函數式編程——函數參數類型關鍵字參數傳遞:關鍵字參數:使用形式參數的名字來確定輸入的參數值。通過該方式指定實際參數時,不再需要與形式參數的位置完全一致,只要將參數名寫正確即可。這樣可以避免用戶需要牢記參數位置的麻煩,使得函數的調用和參數傳遞更加靈活方便,即可以讓函數更加清晰、容易使用,同時也清除了參數的順序需求。調用函數時,可以通過“形參名=值”的形式傳遞參數,稱之為關鍵字參數。與位置參數相比,關鍵字參數可以通過參數名明確指定為哪個參數傳值,因此參數的順序可以與函數定義中的不一致。使用關鍵字參數傳參時,必須正確引用函數定義中的形參名稱。函數與函數式編程——函數參數類型

defuser_info(name,age,gender):print(f"您的名字是{name},年齡是{age},性別是{gender}")#函數調用user_info('Tom',age=20,gender='女')user_info('Jack',gender='男',age=18)【例2-27】定義一個函數,可以通過關鍵字傳遞實際參數。

您的名字是Tom,年齡是20,性別是女您的名字是Jack,年齡是18,性別是男運行結果如下:當位置參數與關鍵字參數混用時,位置參數必須在關鍵字參數的前面,關鍵字參數之間可以不區(qū)分先后順序。函數與函數式編程——函數參數的作用域函數參數(變量)的作用域:程序代碼能夠訪問該變量的區(qū)域,如果超出該區(qū)域,再訪問時就會出現錯誤。在程序中,一般會根據變量的“有效范圍”將變量分為“全局變量”和“局部變量”。在函數體內部定義的變量或函數參數稱為局部變量,該變量只在該函數內部有效。在函數體外部定義的變量稱為全局變量,在變量定義后的代碼中都有效。當全局變量與局部變量同名時,則在定義局部變量的函數中,全局變量被屏蔽,只有局部變量有效。全局變量在使用前要先用關鍵字global聲明。

defmy_add():globalx#聲明全局變量print(x)#結果:5x=3#修改變量值returnx+xx=5print(my_add())#結果:6print(x)#結果:3【例2-28】global關鍵字使用示例。函數與函數式編程——函數參數的作用域

563運行結果如下:通過global關鍵字可以在函數內定義或者使用全局變量。如果要在函數內部修改一個定義在函數外部的變量值,則必須使用global關鍵字將該變量聲明為全局變量,否則會自動創(chuàng)建新的局部變量。函數與函數式編程——匿名函數匿名函數:不一定顯式地給出函數名字的函數,調用一次或幾次后就不再需要的函數,屬于“一次性”函數。Python中允許用lambda關鍵字通過表達式的形式定義一個匿名函數。匿名函數的語法格式為:[返回的函數名]=lambda參數列表:函數返回值表達式語句說明:函數名是可選項。如果沒有函數名,則表示這是一個匿名函數??梢越邮斩鄠€參數,但只能包含一個表達式,表示式中不允許包含復合語句(帶冒號和縮進的語句)。lambda表達式擁有自己的命名空間,不能訪問自有參數列表外或全局命名空間內的參數。lambda表達式相當于只有一條return語句的小函數,表達式的值作為函數的返回值。函數與函數式編程——匿名函數

bookinfo=[('數據庫技術與應用(MySQL版)',41.9,59),('PHP網站開發(fā)與設計',41.3,59),('Python程序設計基礎案例教程',31,49),('數據庫系統(tǒng)原理及MySQL應用教程',45,69)]print('爬取到的商品信息:\n')foriteminbookinfo:print(item)bookinfo.sort(key=lambdax:(x[1],x[1]/x[2]))#按指定規(guī)則進行排序print('排序后的商品信息:\n')foriteminbookinfo:print(item)【例2-29】應用lambda表達式實現對商品信息按指定的規(guī)則進行排序。假設采用爬蟲技術獲得到某商城的秒殺商品信息,并保存在列表中,現需要對這些信息進行排序,排序規(guī)則是優(yōu)先按秒殺金額升序排列,有重復的,再按折扣比例降序排列。函數與函數式編程——匿名函數

爬取到的商品信息:('數據庫技術與應用(

溫馨提示

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

評論

0/150

提交評論