2018北風網人工智能完結-三、python基礎1學習_第1頁
2018北風網人工智能完結-三、python基礎1學習_第2頁
2018北風網人工智能完結-三、python基礎1學習_第3頁
2018北風網人工智能完結-三、python基礎1學習_第4頁
2018北風網人工智能完結-三、python基礎1學習_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Python全棧開發(fā)工程師上海育創(chuàng)網絡科技有限公司主講人:菜芽

Python基礎編程函數第6章01定義函數調用函數0203本章目錄04函數返回值函數參數局部變量和全局變量05匿名函數06遞歸函數07高階函數定義函數01函數概述函數:組織好的、可重復使用的、用戶實現單一或者關聯功能的代碼段。函數能夠提高應用的模塊性和代碼的重復利用率。Python提供了很多內置的函數,比如len等等,另外也可以根據自己的業(yè)務需求進行用戶自定義函數的創(chuàng)建。函數的定義規(guī)則函數代碼塊以

def

關鍵詞開頭,后接函數標識符名稱和圓括號()。任何傳入參數和自變量必須放在圓括號中間。函數的第一行語句可以選擇性地使用文檔字符串---用于存放函數說明。函數內容以冒號起始,并且縮進。定義函數語法如下:

def函數名([參數列表]):#參數列表可選項

函數體示例def

PName():

#使用def定義一個函數PName()print("hello小明")PName()

#調用函數調用函數Python內置了很多函數,內置函數可以直接調用。調用一個函數需要知道函數的名稱和函數的參數。語法函數名([參數列表])函數名其實就是指向一個函數對象的引用,完全可以把函數名賦值給一個變量,相當于給這個函數起了一個別名students=[2,3,4,3,23,43]a=len#變量a指向len函數num=a(students)

#可以通過a調用到len函數print("studnets列表元素的個數為:",num)函數參數02形參和實參的概念示例#定義函數def

PName(userName):print("hello"+userName)#調用函數PName('小明')形參實參函數參數分類必備參數關鍵字參數默認參數不定長參數函數參數--必備參數函數定義中允許擁有多個形參,因此函數在調用的時候,也可能包含多個實參。向函數傳遞參數的方式有很多,通過實參和形參的順序對應,這就是位置實參。只有位置一致,才能被正確匹配。位置實參是最簡單也最常用的關聯方式。函數參數--關鍵字參數關鍵字實參是傳遞給函數的名稱-值對。直接在實參中將名稱和值關聯起來,因此向函數傳遞實參時不會混淆。函數調用使用關鍵字參數來確定傳入的值。使用關鍵字參數允許函數調用時參數的順序與聲明時不一致,因為Python解釋器能夠用參數名匹配參數值.函數參數--參數默認值函數定義的時候,設置的參數是形參。那么也可以給每個形參指定一個默認值。當調用函數時,如果沒有傳入實參,就使用形參的默認值。如果調用的時候傳入了實參,那么程序將使用傳入的實參。函數參數--不定長參數你可能需要一個函數能處理比當初聲明時更多的參數。這些參數叫做不定長參數。語法如下:示例:注意:加了星號(*)的變量名會存放所有未命名的變量參數。加了(**)會存放所有命名的變量參數回顧:可變對象與不可變對象的傳遞在python中,strings,tuples,和numbers是不可更改的對象,而list,dict,set等則是可以修改的對象。

不可變類型:變量賦值a=5后再賦值a=10,這里實際是新生成一個int值對象10,再讓a指向它,而5被丟棄,不是改變a的值,相當于新生成了a。

可變類型:變量賦值la=[1,2,3,4]后再賦值la[2]=5則是將listla的第三個元素值更改,本身la沒有動,只是其內部的一部分值被修改了不可變對象,傳遞的是對象的值,不是對象本身,如果修改值,修改的是另一個復制的對象,不會影響原來對象的本身可變對象,傳遞對象自己。函數內部如果修改值會影響對象本身。區(qū)別函數參數--可變對象與不可變對象(傳遞的時候)不可變類型:如整數、字符串、元組。如fun(a),傳遞的只是a的值,沒有影響a對象本身。比如在fun(a)內部修改a的值,只是修改另一個復制的對象,不會影響a本身。

可變類型:如列表,字典。如fun(la),則是將la真正的傳過去,修改后fun外部的la也會受影響函數返回值03什么是返回值

函數并非總是將結果直接輸出,相反,函數的調用者需要函數提供一些通過函數處理過后的一個或者一組數據,只有調用者擁有了這個數據,才能夠做一些其他的操作。那么這個時候,就需要函數返回給調用者數據,這個就被稱之為返回值,想要在函數中把結果返回給調用者,需要在函數中使用return。return語句return語句用于退出函數,選擇性的向調用者返回一個表達式。直接return的語句返回None。示例:def

sum(num1,num2):sum=num1+num2returnsumtotal=sum(80,80)

print(total)

注意:return后語句不再執(zhí)行。接收返回值

我們可以將函數的返回值保存在變量中示例:

思考:函數可以有多個返回值嗎?Return和print區(qū)別print是將結果輸出到控制臺,return語句結束函數的調用,并將結果返回給調用者,且返回的結果不能輸出到控制臺(也就是不能直接打印出來)需要通過print才能打印出來函數類型

通過以上學習,我們對函數的主要分為四種類型:無參數,無返回值的函數無參數,有返回值的函數有參數,無返回值的函數有參數,有返回值的函數什么是yield呢

yield的作用就是把一個函數變成一個generator,帶有yield的函數不再是一個普通函數,Python解釋器會將其視為一個生成器,如調用Xun函數,不會執(zhí)行該函數,而是返回一個iterable迭代對象!

區(qū)別:與return類似,都可以返回值,但不一樣的地方,yield可以返回多次值,而return只能返回一次。defXun(max):

n=0

b=1

whilen<max:

yieldb

#print(b)

b+=1

n=n+1迭代器

迭代器迭代是Python最強大的功能之一,是訪問集合元素的一種方式。。

迭代器是一個可以記住遍歷的位置的對象。迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。

迭代器只能往前不會后退。迭代器有兩個基本的方法:iter()和next()。

字符串,列表或元組,集合對象都可用于創(chuàng)建迭代器:>>>list=[1,2,3,4]>>>it=iter(list)#創(chuàng)建迭代器對象>>>print(next(it))#輸出迭代器的下一個元素1

>>>print(next(it))2生成器(generator)

使用了

yield的函數被稱為生成器。跟普通函數不同的是,生成器是一個返回迭代器的函數,只能用于迭代操作,更簡單點理解生成器就是一個迭代器。在調用生成器運行的過程中,每次遇到y(tǒng)ield時函數會暫停并保存當前所有的運行信息,返回yield的值。并在下一次從當前位置繼續(xù)運行。

注意:可以通過for循環(huán)或者手動調用Xun(5)的next()方法生成器(generator)

deff():print('start')a=yield1print(a)print('middle....')b=yield2#2這個值只是迭代值,調用next時候返回的值

print(b)print('next')c=yield3print(c)a=f()#print(next(a))#print(next(a))#print(next(a))print(next(a))print(a.send('msg'))print(a.send('msg1'))print(next(a))生成器-send(generator)

a=yield1這個表達式,如果這個表達式只是x=1,相信每個人都能理解是把1的值賦值給了x.而現在等號右邊是一個yield1,所以先要執(zhí)行yield1,然后才是賦值.

yield把1值返回到了調用者那里,因為執(zhí)行等號右邊的yield就是暫停,所以不會對a賦值

那這個表達式的下一步操作:賦值,卻換句話說a=yield1只執(zhí)行了一半

而send()里面的值的作用是把值傳進當前的yield.變量的作用域04變量的作用域一個程序的所有的變量并不是在哪個位置都可以訪問的。訪問權限決定于這個變量是在哪里賦值的。變量的作用域決定了在哪一部分程序你可以訪問哪個特定的變量名稱。兩種最基本的變量作用域如下:

全局變量

局部變量定義在函數內部的變量擁有一個局部作用域,定義在函數外的擁有全局作用域??勺冾愋偷娜肿兞繉τ诓豢勺冾愋偷娜肿兞縼碚f,要在函數中修改需要global聲明對于可變類型的全局變量來說,要在函數中修改可以不使用global聲明局部變量什么是局部變量局部變量,就是在函數內部定義的變量不同的函數,可以定義相同的名字的局部變量,但是各用個的不會產生影響全局變量全局變量是聲明在函數外部的變量,定義在函數外的擁有全局作用域修改全局變量global關鍵字要想在函數內部修改全局變量需要使用grobal關鍵字聲明。隨堂練習請思考:定義一個函數,實現兩個數四則運算,要注意有3個參數,分別是運算符和兩個用于運算的數字。要求:兩個數字和運算符需要接收用戶輸入的值時間:30分鐘匿名函數05匿名函數匿名函數:定義函數的過程中,沒有給定名稱的函數就叫做匿名函數;Python中使用lambda表達式來創(chuàng)建匿名函數。lambda來創(chuàng)建匿名函數規(guī)則。

●lambda只是一個表達式,函數體比def簡單很多?!駆ambda的主體是一個表達式,而不是一個代碼塊,所以不能寫太多的邏輯進去?!駆ambda函數擁有自己的命名空間,且不能訪問自有參數列表之外或全局命名空間里的參數?!駆ambda定義的函數的返回值就是表達式的返回值,不需要return語句塊●lambda表達式的主要應用場景就是賦值給變量、作為參數傳入其它函數lambda匿名函數的表達式規(guī)則是:lambda參數列表:表達式遞歸函數06遞歸函數遞歸函數:遞歸就是子程序(或函數)直接調用自己或通過一系列調用語句間接調用自己,是一種描述問題和解決問題的基本方法。(一句話,自己調用自己)

舉個例子,我們來計算階乘n!=1*2*3*...*n,用函數fact(n)表示,可以看出:1!=12!=2×1=2×1!3!=3×2×1=3×2!4!=4×3×2×1=4×3!...n!=n×(n-1)!

隨堂練習斐波那契數列(Fibonacci

sequence)指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以遞歸的方法定義:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)內置函數與高階函數07常用內置函數方法描述abs()函數返回數字的絕對值。num=-1print(abs(num))sorted(list)排序,返回排序后的listprint(sorted(['a','b','','d'],reverse=True))sum(list)求取list元素的和

sum([1,2,3])>>>6round(a,b)獲取指定位數的小數。a代表浮點數,b代表要保留的位數round(3.1415926,2)>>>3.14pow(a,b)

獲取乘方數pow(2,3)>>>8isinstance類型

溫馨提示

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

評論

0/150

提交評論