Python機器學習 第2版 課件 第3章函數與模塊_第1頁
Python機器學習 第2版 課件 第3章函數與模塊_第2頁
Python機器學習 第2版 課件 第3章函數與模塊_第3頁
Python機器學習 第2版 課件 第3章函數與模塊_第4頁
Python機器學習 第2版 課件 第3章函數與模塊_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Machine

Learning

with

Python3.1目錄3.23.3函數的定義與調用函數參數與返回值兩類特殊函數常用內置函數3.53.43.6模塊和包案例——拼單詞游戲3.7延伸閱讀——軟件安全函數的定義與調用本節(jié)介紹函數的定義與函數的調用3.13

3.1.1

函數的定義函數是模塊化程序設計的基本構成單位,在Python語言中使用def語句定義函數,具體語法格式如下:

def函數名([參數列表]):函數體【例4-1】定義一個輸出hellopython!的無返回值的函數。defsay_hello():print('hellopython!')4

3.1.1函數的定義函數定義語法說明如下:使用關鍵字def聲明一個函數,函數由函數名和函數體兩部分組成。函數名應為有效的標識符,即由小寫字母組成。為了方便閱讀,也可以由小寫字母與下劃線組成。函數名中的形參列表用圓括號括起來,參數間用逗號隔開,參數可以為空,[]表示中括號中的參數可選。形參在函數被調用時用來接收主調程序傳遞過來的函數所需的參數的值,即實際參數,簡稱實參。定義的函數名以“:”結尾,然后另起一行開始函數體。def語句是復合語句,所以函數體需采用縮進書寫規(guī)則。函數可以使用return返回值。如果函數體中包含return語句,則返回值,否則不返回值,即返回值為空(None)。def是執(zhí)行語句,Python解釋執(zhí)行def語句時會創(chuàng)建一個函數對象,并綁定到函數名變量。5

3.1.2

函數的調用Python用函數名進行函數調用,在進行函數調用時,根據需要可以指定實際傳入的參數值,即實參。函數調用的語法格式如下:

函數名([實參列表])函數調用語法說明如下:函數名是當前作用域中可用的函數對象,即調用函數之前程序必須先執(zhí)行def語句,創(chuàng)建函數對象。調用函數時實參列表必須與函數定義的形參列表一一對應。函數調用是表達式語句,如果函數有返回值可以在表達式語句中直接使用,如果函數沒有返回值,則可以單獨作為表達式語句使用。函數參數與返回值本節(jié)介紹函數參數與函數返回值3.27

3.2.1

函數參數1)位置參數。調用函數時根據函數定義的位置參數來傳遞參數。2)關鍵字參數。通過“鍵-值”形式加以指定,可以讓函數更加清晰,容易使用,同時也清除了參數的順序要求。3)默認參數。定義函數時為參數提供的默認值,調用函數時,默認參數的值可傳可不傳。注意:所有的位置參數必須出現在默認參數前,包括函數定義和調用。4)可變參數。定義函數時,有時候不確定調用時會傳遞多少個參數。此時,可用定義任意位置參數或者關鍵字參數的方法來進行參數傳遞,會顯得非常方便。

8

3.2.2

函數返回值函數可以處理一些數據,并返回一個或一組值。函數返回的值稱為返回值。函數也可以沒有返回值,沒有返回值的函數類似于其他編程語言中的過程?!纠?-2】編寫程序,調用函數的返回值分別計算1天的單日利息和10天利息收入。defcal_interest(day,money=10000,interest_rate=0.05):income=0income=money*interest_rate*day/365returnincomex=cal_interest(1) #存儲調用函數的返回值,即1天的單日利息y=10*x #利用存儲對象計算10天的利息print('本金一萬元1天的利息收入:',x)print('本金一萬元10天的利息收入:',y)兩類特殊函數本節(jié)介紹匿名函數和遞歸函數3.310

3.3.1

匿名函數Python允許使用lambda語句創(chuàng)建匿名函數,lambda語句中,冒號前是函數參數,若有多個函數須使用逗號分隔;冒號后是返回值。lambda為定義匿名函數時的關鍵字,arguments為傳入函數的參數,expression為返回值。使用lambda語句定義匿名函數,應該注意如下3點:lambda定義的是單行函數,如果需要復雜的函數,應使用def語句。lambda語句可以包含多個參數。lambda語句只能有一個表達式,不用寫return,返回值就是該表達式的結果?!纠?-3】編寫程序,使用lambda語句創(chuàng)建匿名函數。f=lambdaa,b,c:a+b+c#使用lambda關鍵字定義匿名函數print(f(1,2,3))程序運行結果如下:611

3.3.2

遞歸函數

遞歸基本步驟1)初始化算法。遞歸程序通常需要一個開始時使用的種子值(seedvalue)。要完成此任務,可以向函數傳遞參數,或者提供一個入口函數,這個函數是非遞歸的,但可以為遞歸計算設置種子值。2)檢查要處理的當前值是否已經與基線條件相匹配(basecase)。如果匹配,則進行處理并返回值。3)使用更小的或更簡單的子問題(或多個子問題)來重新定義答案。4)對子問題運行算法。5)將結果合并入答案的表達式。6)返回結果。

主要應用范圍1)數據的定義是按遞歸定義的。例如Fibonacci數列。2)問題解法按遞歸算法實現。例如回溯算法。3)數據的結構形式是按遞歸定義的。例如樹的遍歷,圖的搜索等算法。12

3.3.2遞歸函數遞歸優(yōu)缺點優(yōu)點遞歸使代碼看起來更加整潔、優(yōu)雅??梢杂眠f歸將復雜任務分解成更簡單的子問題。使用遞歸比使用一些嵌套迭代更容易。缺點遞歸的邏輯很難調試、跟進。遞歸算法解題的運行效率較低。在遞歸調用的過程當中系統(tǒng)為每一層的返回點、局部量等開辟了棧來存儲。遞歸次數過多容易造成棧溢出等。在使用遞歸時,需要注意以下幾點:遞歸就是在過程或函數里調用自身。必須有一個明確的遞歸結束條件,即遞歸出口。常用內置函數本節(jié)介紹字符串處理函數和高級函數3.414

3.4.1字符串處理函數查找函數find()find()函數用來查找第一個匹配到的子字符串的起始位置。具體語法格式為:

find(sub,start,end)其中:sub:要查找位置的子字符串。start:開始查找的位置,如果不設置則默認從第一個字符開始查找。end:結束查找的位置,如果不設置則默認可以查找到最后。如果找到則返回位置,找不到返回-1。15

3.4.1字符串處理函數查找子串位置函數index()函數index()用來查找子字符串在大字符串中的位置,如果找到返回起始位置,找不到拋出異常。具體語法格式為:

index(sub,start,end)其中:sub:要查找位置的子字符串。start:開始查找的位置,如果不設置則默認從第一個字符開始查找。end:結束查找的位置,如果不設置則默認可以查找到最后。如果找到則返回起始位置,找不到拋出異常。16

3.4.1字符串處理函數統(tǒng)計函數count()count()函數用來統(tǒng)計某個字符串在大字符串中出現的次數。具體語法格式為:

count(x,start,end)其中:x:要查找次數的字符。start:開始查找的位置,如果不設置則默認從第一個字符開始查找。end:結束查找的位置,如果不設置則默認可以查找到最后。轉換大小寫函數upper(),lower()upper()把字符串全部轉化為大寫,并把轉化之后的字符串返回,lower()把字符串全部轉化為小寫,并把轉化之后的字符串返回。17

3.4.1字符串處理函數strip()函數strip([chars])用來去除字符串首尾兩端的指定字符,當不指定chars時默認去除字符串首尾兩端的空格。替換函數replace()replace()函數可以將字符串中的字符進行替換,具體語法格式為:

replace(old,new[,count])其中:old:要替換的字符串。new:替換之后的字符串。count:替換的次數。如不設置將用new替換所有的old。18

3.4.1字符串處理函數分割函數split()split()函數通過指定分隔符對字符串進行切片,具體語法格式為:

split(str[,num])其中:str:分隔符。不設置時默認為所有的空字符,包括空格、換行(\n)、制表符(\t)等。start:開始查找的位置,如果不設置則默認從第一個字符開始查找。num:分割次數。不設置時默認為-1,即分隔所有。如果設置num指定值,則分割為num+1個子字符串。合并函數join()join()方法用于將序列中的元素以指定的字符串連接生成一個新的字符串。具體語法格式為:

join(sequence)其中參數sequence為要連接的元素序列。返回值為通過指定字符連接序列中元素后生成的新字符串。19

3.4.1字符串處理函數startwith()與endwith()startswith()函數用來判斷某個字符串是否以某個字符串開頭,如果以某個字符串開頭,返回True,否則返回False。endswith()函數用來判斷某個字符串是否以某個字符串結束,如果以某個字符串結尾,返回True否則返回False?!纠?-4】編寫程序,使用startswith()函數和endswith()函數判斷字符串是否以指定字符開始和以指定字符結束。s1='123456789abcdef10'print(s1.startswith('1'))print(s1.endswith('f'))print(s1.endswith('10'))程序運行結果如下:TrueFalseTrue20

3.4.2高級函數map函數map函數是Python內置的高階函數,它的基本樣式為map(func,list)。其中,func是一個函數,list是一個序列對象。在執(zhí)行的時候,序列對象中的每個元素,按照從左到右的順序通過把函數func依次作用在list的每個元素上,得到一個新的list并返回。filter函數filter函數是Python內置的另一個常用的高階函數。它的基本樣式為filter(func,list)。filter函數接收一個函數func和一個列表list,函數func的作用是對每個元素進行判斷,通過返回True或False來過濾掉不符合條件的元素,符合條件的元素組成的新list。zip函數zip函數也是Python內置的另一個常用的高階函數。它的基本樣式為zip([iterable,...])。zip函數接受任意多個可迭代對象作為參數,將對象中對應的元素打包成一個元組,然后返回一個可迭代的zip對象。模塊和包本節(jié)介紹模塊與包的導入、常用模塊3.522

3.5.1模塊與包的導入

模塊的導入模塊是一個包含所有你定義的函數和變量的文件,其后綴名是.py。模塊導入的基本形式如下:

import模塊名 #導入模塊import模塊1,模塊2,...,模塊n #導入多個模塊import模塊名as模塊別名 #導入模塊并使用別名包的導入Python模塊是.py文件,而包是文件夾。只要文件夾中包含一個特殊的文件:__init__.py,則Python解釋器將該文件夾作為包,其中的模塊文件則屬于包中的模塊。包可以包含子包,沒有層次限制。特殊文件__init__.py可以為空也可以包含屬于包的代碼,當導入包或該包中的模塊時執(zhí)行__init__.py。包的導入與模塊的導入相似,使用import語句導入包中模塊時,需要指定對應的包名。其基本格式如下:

import[包名1.[包名2.…]].模塊名#導入包中模塊23

3.5.2常用模塊

math模塊math模塊是一個封裝了多個數學計算函數和變量的模塊。表4-1模塊math中一些常見的函數和變量函數/變量描述ceil(數值)向上取整操作。返回值:整型floor(數值)向下取整。返回值:整型round(數值[,n])四舍五入操作。返回值:若無參數n則返回整數,否則返回值帶n位小數pow(底數,冪)計算一個數的N次方。返回值:浮點類型sqrt(數值)開平方。返回值:浮點數fabs(數值)獲取一個數的絕對值操作。返回值:浮點數abs(數值)獲取一個數的絕對值操作。返回值:返回值類型由元數據類型決定modf(數值)將一個浮點數拆成小數和整數部分組成的元組。返回值:元組fsum(序列)將一個序列的數值進行相加求和。返回值:浮點數sum(序列)將一個序列的數值進行相加求和。返回值:數據類型Pi圓周率E自然對數24

3.5.2常用模塊

random模塊表4-2模塊random中一些常見的函數和變量函數/變量描述random()返回>=0.0&<1.0的隨機浮點數uniform(a,b)用于生成一個指定范圍內的隨機浮點數,兩個參數其中一個是上限,一個是下限。如果a>b,則生成的隨機數n:a<=n<=b。如果a<b,則b<=n<=arandrange(start,stop[,step])從指定范圍內,按指定基數遞增的集合中獲取一個隨機數。返回>=start&<stop,步長為step的隨機整數randint(a,b)用于生成一個指定范圍內的整數。其中參數a是下限,參數b是上限,生成的隨機數n:a<=n<=bchoice(sequence)從序列中獲取一個隨機元素,序列在python中不是一個特定的類型,而是泛指一系列的類型。列表,元組,字符串都屬于序列。shuffle(x[,random])用于將一個列表中的元素打亂,即將列表內的元素隨機排列sample(sequence,k)從指定序列中隨機獲取指定長度的片斷并隨機排列。注意:sample函數不會修改原有序列25

3.5.2常用模塊

datetime模塊

datetime模塊是date和time模塊的合集,datetime有兩個常量,MAXYEAR和MINYEAR,分別是9999和1。datetime模塊定義了5個類。表4-3模塊datetime中一些重要的類類描述Date表示日期的類datetime表示日期時間的類Time表示時間的類timedelta表示時間間隔,即兩個時間點的間隔Tzinfo時區(qū)的相關信息26

3.5.2常用模塊date類及其方法date類中有用于獲取當前時間、操作時間和日期、從字符串中讀取日期、將日期格式化為字符串的方法。datetime類及其方法datetime類有很多參數,datetime(year,month,day[,hour[,minute[,second[,microsecond[,tzinfo]]]]]),返回年月日,時分秒。datetime的time類time類有5個參數,datetime.time(hour,minute,second,microsecond,tzoninfo)。datetime的timedelta類datetime.datetime.timedelta類用于計算兩個日期之間的差值。27

3.5.2常用模塊

time模塊模塊time包含獲取當前時間、操作時間和日期、從字符串中讀取日期、將日期格式化為字符串的函數。time()函數以時間戳的形式顯示當前時間:從新紀元開始后的秒數,以UTC為準從1970年1月1日00:00:00開始按秒計算的偏移量。表4-4模塊time中一些重要的函數函數描述asctime([tuple])將時間元組轉換為字符串localtime([secs])將秒數轉換為表示當地時間的日期元組mktime(tuple)將時間元組轉換為當地時間sleep(secs)休眠(什么都不做)secs秒strptime(string[,format])將字符串轉換為時間元組time()當前時間(從新紀元開始后的秒數,以UTC為準)28

3.5.2常用模塊asctime([tuple])函數將時間元組轉換為字符串,沒有時間元組參數時默認將當前時間轉換為字符串。localtime([secs])函數將秒數轉換為表示當地時間的日期元組,沒有參數時默認將當前時間表示為當地時間的日期元組。strptime(string[,format])函數將字符串轉換為時間元組。mktime(tuple)函數mktime()函數執(zhí)行與gmtime(),localtime()相反的操作,它接收struct_time對象作為參數,返回用秒數來表示時間的浮點數。如果輸入的值不是一個合法的時間,將觸發(fā)OverflowError或ValueError。logging模塊Python的logging模塊提供了標準的日志接口,可以通過它存儲各種格式的日志,logging的日志可以分為debug(),info(),warning(),error()andcritical()5個級別。29

3.5.2常用模塊1)在控制臺進行顯示。使用('xxxxx')方法在控制臺顯示日志信息,日志信息有以下五個級別:debug、info、warning、error、critical。2)在日志中輸出。使用logging.basicConfig()方法將日志信息保存在日志文件中,日志級別同樣是有五個。3)日志與控制臺同時輸出。Python使用logging模塊記錄日志涉及4個主要類:

logger:提供應用程序可以直接使用的接口。handler:將logger創(chuàng)建的日志記錄發(fā)送到合適的目的輸出。filter:提供過濾條件,輸出指定的日志記錄。formatter:設置日志記錄的輸出格式??刂婆_和日志文件同時輸出的具體步驟為:生成logger對象。生成handler對象。把handler對象綁定到logger對象。生成formatter對象。將formatter對象綁定到handler對象。30

3.5.2常用模塊

sys模塊sys模塊負責程序與Python解釋器的交互,提供了一系列的函數和變量,用于操控Python運行時的環(huán)境。在控制臺進行顯示。表4-5模塊sys中一些重要的函數和變量函數/變量描述sys.argv接收命令行參數,生成一個List,第一個元素是程序本身路徑sys.modules.keys()返回所有已經導入的模塊列表sys.exc_info()獲取當前正在處理的異常類,exc_type、exc_value、exc_traceback當前處理的異常詳細信息sys.exit(n)退出程序,正常退出時exit(0)sys.hexversion獲取Python解釋程序的版本值,16進制格式如:0x020403F0sys.version獲取Python解釋程序的版本信息sys.maxint最大的Int值sys.maxunicode最大的Unicode值sys.modules返回系統(tǒng)導入的模塊字段,key是模塊名,value是模塊sys.path返回模塊的搜索路徑,初始化時使用PYTHONPATH環(huán)境變量的值sys.platform返回操作系統(tǒng)平臺名稱sys.stdout標準輸出sys.stdin標準輸入sys.stderr錯誤輸出sys.exc_clear()用來清除當前線程所出現的當前的或最近的錯誤信息sys.exec_prefix返回平臺獨立的Python文件安裝的位置sys.byteorder本地字節(jié)規(guī)則的指示器,big-endian平臺的值是'big',little-endian平臺的值是'little'sys.copyright記錄Python版權相關的東西sys.api_version解釋器的C的API版本31

3.5.2常用模塊

正則表達式在進行文本處理時,常常需要查找符合某些復雜規(guī)則的字符串。正則表達式語言就是用于描述這些規(guī)則的語言。使用正則表達式可以匹配和查找特定字符串,并對其進行相應的處理和修改。正則表達式是由普通字符(如字符a到z)及特殊字符(稱為元字符,包括:.^$*+?{}[]\|())組成的文字模式。正則表達式的模式可以包含普通字符(包括轉義字符)、字符類和預定義的字符類、邊界匹配符、重復限定符、選擇分支、分組和引用等。Python語言使用re模塊實現正則表達式處理的功能。導入re模塊后,使用findall、search函數可以進行匹配。具體使用語法如下:re.findall(pattern,string):如果匹配,返回匹配結果列表,否則返回空列表。re.search(pattern,string):如果匹配,返回匹配對象,否則返回None。re.match(pattern,string):如果匹配,返回匹配對象,否則返回None。32

3.5.2常用模塊1)普通字符和轉義字符最基本的正則表達式由單個或多個普通字符組成,用以匹配字符串中對應的單個或多個普通字符串。普通字符包括ASCII字符、Unicode字符和轉義字符。另外,正則表達式中的元字符(.^$*+?{}[]\|())包含特殊含義,如果要作為普通字符使用需要進行轉義。2)字符類和預定義字符類字符類是由一對方括號[]括起來的字符集,正則表達式引擎匹配字符集中的任意一個字符。3)邊界匹配符字符串匹配往往涉及從某個位置開始匹配,例如行的開始或結尾、單詞邊界等。邊界匹配符用于匹配字符串的位置。4)重復限定符使用重復限定符可以指定重復的次數。5)正則表達式對象使用pile函數可以將正則表達式編譯為正則表達式對象regex,然后使用其對象方法處理字符串。33

3.5.2常用模塊

正則表達式在進行文本處理時,常常需要查找符合某些復雜規(guī)則的字符串。正則表達式語言就是用于描述這些規(guī)則的語言。使用正則表達式可以匹配和查找特定字符串,并對其進行相應的處理和修改。正則表達式是由普通字符(如字符a到z)及特殊字符(稱為元字符,包括:.^$*+?{}[]\|())組成的文字模式。正則表達式的模式可以包含普通字符(包括轉義字符)、字符類和預定義的字符類、邊界匹配符、重復限定符、選擇分支、分組和引用等。Python語言使用re模塊實現正則表達式處理的功能。導入re模塊后,使用findall、search函數可以進行匹配。具體使用語法如下:re.findall(pattern,string):如果匹配,返回匹配結果列表,否則返回空列表。re.search(pattern,string):如果匹配,返回匹配對象,否則返回None。re.match(pattern,string):如果匹配,返回匹配對象,否則返回None。案例——拼單詞游戲3.635

3.6.1案例——拼單詞游戲

計算機隨機產生一個單詞,打亂字母順序,供玩家去拼單詞。程序中已定義所拼單詞。參考程序如下:

importrandomWORDS=('math','english','china','history','word','world')right='Y'print('歡迎參加拼單詞游戲!')whileright=='Y'orright=='y':word=random.choice(WORDS)correct=wordnewword=''whileword:pos=random.randrange(len(word))newword+=word[pos]#將word單詞下標為pos的字母去掉,取pos前面和后面的字母組成新的

word

word=word[:pos]+word[(pos+1):] #保證隨機字母出現不會重復print('你要拼的單詞為:',newword)

36

3.6.1案例——拼單詞游戲

guess=input('請輸入你的答案:')count=1whilecount<3:

溫馨提示

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

評論

0/150

提交評論