天天看點

[Python學習] 專題一.函數的基礎知識

        最近才開始學習python語言,但就發現了它很多優勢(如語言簡潔、網絡爬蟲方面深有體會).我主要是通過《python基礎教程》和"51cto學院 智普教育的python視訊"學習,在看視訊中老師講述函數知識的時候覺得非常不錯,是以就寫了第一篇python學習的文章分享給大家.主要内容:

        1.python安裝與基本輸入輸出,print()函數和raw_input()函數簡單用法.

        2.我根據視訊中學到的知識,講解函數的基本知識:

            (1).系統提供内部函數:字元串函數庫、數學函數庫、網絡程式設計函數庫、os函數庫

            (2).第三方提供函數庫:講解如何安裝httplib2第三方函數庫,再做了個簡單的網頁爬蟲例子

            (3).使用者自定義函數:講解無傳回類型、有形參、預設值參數等自定義函數

        3.同時網絡程式設計中與c#以前學過的進行了簡單對比,發現python确實有很多優點,而且很友善強大.

        ps:文章中引用了很多視訊中的知識、書籍知識和自己的知識,感謝那些作者和老師,希望文章對大家有所幫助,才開始學習python知識,如果文章中有錯誤或不足之處,還請海涵,也希望大家提出意見與君共勉.勿噴~

integrated development environment,idle)即可.運作程式輸入">>>print 'hello world'"則python解釋器會列印輸出"hello world"字元串. 如下:

[Python學習] 專題一.函數的基礎知識
[Python學習] 專題一.函數的基礎知識

        然後講述python程式的基本架構是"輸入-處理-輸出",而輸入輸出函數如下:

        1.print()函數

        函數用于輸出或列印整型、浮點型、字元串資料至螢幕,如print(3)、print(12.5)、print('h').它輸出變量格式"print(x)或print x",而且可以輸出多個變量"print x,y,z".并且支援格式化輸出資料,調用format()函數,其格式為:

        print(format(val,format_modifier)) 其中val表示值,format_modifier表示格式字.

        2.raw_input()函數

        内建函數從sys.stdin接受輸入,讀取輸入語句并傳回string字元串.輸入以換行符結束,通過help(raw_input)可以查找幫助,常見格式為:

        s = raw_input([prompt]) 參數[prompt]可選,用于提示使用者輸入.

        注意raw_input()與input()的差別:(1).input支援合法python表格式"abc",字元串必須用引号括起,否則會報錯"nameerror: name 'abc' is not defined",而raw_input()任何類型輸入都可接受; (2).raw_input()将所有輸入作為字元串,傳回string,而input()輸入純數字時具有自己的特性,傳回輸入的數字類型int或float.舉例解釋如下:

        python提供的系統内部庫函數主要講述一下四種類型:(引自視訊,隻簡單介紹)

        1.字元串函數庫

        通過help(str)可以查詢字元串函數庫,其中查詢過程中"-more-"輸入回車實作滾動資訊,輸出"q"退出幫助(quit).字元串函數大家都比較熟悉,無論c\c++\c#\java都學過很多,而且基本大同小異.如:

        islower()函數判斷字元串是否大小寫,一個大寫傳回false.前面使用的format()函數、求字元串長度len()函數均屬于字元串函數庫,help(str.replace)可以查詢具體函數用法,該函數用于新字元串替換舊字元串.

        2.數學函數庫

        使用數學函數庫時需要注意的是導入庫"import math",該庫中函數我們也非常熟悉,如sin()求正弦,cos()求餘弦,pow(x,y)計算x的y次幂,如pow(3,4)=3*3*3*3,python中也可以使用3**4表示.help(math)中可以檢視詳細資訊,而且庫中定義了兩個常數data:

        e = 2.718281... pi = 3.14159265...

        3.網絡程式設計庫

        系統提供内部庫函數中網絡程式設計庫,我此處僅僅舉個簡單例子,socket(套接字網絡程式設計)擷取主機ip位址這是非常常見的運用,我将與c#網絡程式設計進行簡單對比.後面的博文中将詳細講述python網絡程式設計.

        61.135.169.121

        61.134.169.125

        4.作業系統(os)函數庫

        作業系統庫函數引用"import os",舉例擷取目前工作路徑和先死目前路徑下的檔案和目錄.使用os.system("cls")可以實作清屏功能.安裝python目錄lib檔案夾下含有很多py庫檔案供使用.

(一).安裝第三方函數庫httplib2過程

        python中第三方開源項目中提供函數庫供我們使用,比如使用httplib2庫函數.在linux中直接使用"easy_install httplib2"搜尋自動安裝,windows下python開發工具idle裡安裝httplib2子產品的過程如下(其他子產品類似).

        2.配置python運作環境

        右鍵"計算機"->"屬性"->在"系統"中選擇"進階系統設定"->在"系統屬性"中"進階"選擇"環境變量"

[Python學習] 專題一.函數的基礎知識

        在系統環境變量path後添加python安裝目錄"g:\software\program software\python\python insert"

[Python學習] 專題一.函數的基礎知識

        3.在dos下安裝httplib2

        管理者模式運作cmd,利用cd指令進入httplib2_0.8.zip解壓目錄,輸入"python settup.py install",如下圖所示安裝成功.

[Python學習] 專題一.函數的基礎知識

        4.使用httplib2

(二).簡單網頁爬蟲示例

        使用第三方函數庫時的具體格式為module_name.method(parametes) 第三方函數名.方法(參數).        

        講述一個引用web庫,urllib庫通路公網上網頁,webbrowser庫調用浏覽器操作,下載下傳csdn官網内容并通過浏覽器顯示的執行個體.

        content = urllib.urlopen(url).read()表示打開url并讀取指派

        open("soso.html","w").write(content)表示在python安裝目錄寫靜态soso.html檔案

        web.open_new_tab("soso.html")表示打開該靜态檔案新标簽.

        同樣可以使用web.open_new_tab('http://www.soso.com')直接在浏覽器打開動态網頁.效果如下圖所示:

[Python學習] 專題一.函數的基礎知識
[Python學習] 專題一.函數的基礎知識

        1.無傳回值自定義函數

        其基本文法格式如下:

                                          def function_name([parameters]):    函數名([參數]),其中參數可有可無

                                          (tab) statement1

                                          (tab) statement2

                                                  ...

        注意:(1).自定義函數名後面的冒号(:)不能省略,否則報錯"invalid syntax",而且無需像c語言一樣加{};

                 (2).函數裡每條語句前都有縮進tab,否則會報錯"there's an error in your programs:expected an indented block",它的功能相當于區分函數裡的語句與函數外的語句.

        舉例:打開idle工具->點選欄"file"->new file建立檔案->命名為test.py檔案,在test檔案裡添加代碼如下.

        儲存,在test.py檔案裡點選run->run module.輸出結果如下圖所示,其中fun1()函數無形參自定義函數,fun2(val1,val2)是有形參自定義函數,fun2(8,15)為函數的調用,實參8和15.

[Python學習] 專題一.函數的基礎知識

        2.有傳回值自定義函數

                                         def funtion_name([para1,para2...paran])

                                               statement1

                                               statement2

                                                    ....

                                               return value1,value2...valuen

        傳回值支援一個或多個傳回,需要注意的是自定義函數有傳回值,主調函數就需要接受值(接受傳回的結果).同時在定義變量時可能sum這些可能是關鍵字(注意顔色),最好使用不是關鍵字的變量.舉例:

        輸出結果如下,其中需要注意的是參數一一對應,在除法中2/10=0,**幂運算2的10次方=1024.而使用re=fun3(2,10)直接輸出的結果成為元組,後面會詳細講述,(12,-8,20,0,1024)元組中re[0]存儲12,re[1]存儲-8,依次~

3.自定義函數參數含預定義

        預設值的基本格式如下:

                                             def function_name(para1,para2...parai=default1...paran=defaultn)

                                                    statement1

                                                    statement2

                                                          ...

                                                    return value1,value2...valuen

        其中需要注意的是預定義值得參數不能先于無預定義值參數,舉個例子講解.

        輸出結果如下圖所示,預定義的參數在調用時,實參可以省略,也可以替換預設定義的預定義值.

        其中如果函數定義為def fun4(n3=10,n2,n1)就會報錯"non-default argument follows default argument"(沒預定義的參數在預定義參數的後面),是以定義函數時需要注意該點.

        同時需要注意函數調用時的指派順序問題,最好采用一對一複制,也可以函數調用中給出具體形參進行指派,但需要注意的是在函數調用過程中(使用函數時),有預定義值的參數不能先于無預定義值參數被指派.

        如例子中自定義函數def fun4(n1,n2,n3=10),在調用時可以:

        (1).s=fun4(2,3)省略預定義參數,它是一對一指派,其中n1指派2、n2指派3、n3指派10(預定義)

        (2).s=fun4(4,n2=1,n3=12)它也是一對一指派,而且預定義值n3替換為12

        (3).s=fun4(n2=1,n1=4,n3=15)它的順序與定義函數沒有對應,但是調用時給出具體對應也行

        下面的情況就會出現所述的"有預定義值的參數先于無預定義值參數被指派"錯誤:

        (1).s=fun4(n3=12,n2=1,4)此時會報錯"non-keyword arg after keyword arg",它不能指定n1=4,就是沒有指定預定值n1=4在有預定值n3=12,n2=1之後,如果改成s=fun4(4,n2=1,n3=12)或s=fun4(4,n3=12,n2=1)即可.

        (2).s=fun4(4,n1=2)此時也會報錯"typeerror: fun4() got multiple values for keyword argument 'n1'",它不能指定n1=2&n2=4,而是n1會指派多個.

        是以,最好還是一一對應的調用函數,平時寫程式沒有這樣去刁難自己,對應即可

        總結:文章從系統提供的内部函數、第三方提供函數庫+簡單爬出代碼及安裝httplib2子產品過程和使用者自定函數三個方面進行講述.文章中如果有錯誤或不足之處,海涵~最後感謝那個視訊老師和上述部落客、書籍老師及me.

        最後祝大家中秋節快樂!全家團圓,聚聚玩玩.