函數第一部分:經典的永遠是簡單的-Python基礎前傳(10)

(一)前言

對於零基礎學習Python或者轉行做數據分析的朋友,跟jacky交流最多的問題就是Python網絡爬蟲學習問題;比如說要爬取美團,或者說爬取攜程等等。在爬取的過程中,這些朋友總是會遇到這樣或者那樣的問題,我也看到了很多規範和不規範的代碼,很多朋友都是模仿視頻教學中的代碼遇到了問題,之後來跟jacky探討得;


說說jacky的立場:對於零基礎學習Python的朋友,jacky是反對在基礎不牢的時候,學習爬蟲的。

因爲爬蟲入門容易,但能做到應用還是比較複雜的,這需要我們綜合能力是很高的,如果不是計算機專業的同學,我們還是要把基礎打牢,再去學習爬蟲;

jacky要用十分鐘教你們一個爬蟲的實操也很簡單,但是作爲學習的我們不能自欺欺人,有些網站可以爬取,並不是因爲你會了爬蟲,而是這個網頁根本就沒有爬取的意義;

我們往往是由於一些基礎性的錯誤導致爬取數據不能成功,比如說雖然有BeautifulSoup這個強大的庫,但正則我們還是要會用的,看到太多朋友“流水賬的代碼”(面向過程編程),朋友們總是有些網絡數據可以爬取,那稍微複雜一點的代碼就爬取不了,這一切的原因都是基礎不牢,強行練習爬蟲,導致“走火入魔”。 

做任何事,最重要的都是基礎,學習Python,學習數據分析也一樣。在Python中,作爲Python學習中的重中之重,函數、對象和模塊是一定要熟記並且熟練應用的,本次分享,jacky將給大家Python函數的第一部分:經典的永遠是簡單的。

(二)爲什麼Python中要有函數

2.1 函數存在的用意

  • 如果Python中不創造出函數,那Python只能是面向過編程,代碼中出現重複功能我們只能再次寫一遍;

  • 如果有了函數,Python就可以面向函數編程,我們在函數裏寫相應的功能,在代碼中有同樣功能需求時,我們就可以直接調用函數,免去了重複勞動;

2.2 函數存在的本質

  • 函數存在的本質就是實現相應功能,封裝在函數中

2.3 面向過程、面向函數、面向對象的簡單解釋

  • 面向對象和麪向過程的簡單解釋:

    • 面向過程:和你談業務。把所有的事情都談妥了,開始做項目。一整套項目做下來了,有需求要變,還得整個改變。

    • 面向函數:一整套項目,分成了不同獨立的功能組,有需求要改變,只改變相應的功能組,不用改變整個業務。

    • 面向對象:邊做業務,邊談需求,這樣就能夠避免上面的問題。

(三)創建和調用函數

3.1 創建函數(定義函數)

  • 函數創建的組成:

    • 關鍵字:def

    • 函數名

    • 括號

    • 返回值

#定義函數def xx():
    print'jacky'#執行函數xx()

3.2 函數的返回值

比如我們要定義幾個函數,這幾個函數就是用來實現幾個功能的,我們假定這個函數是發郵件的,那發完郵件我們要知道郵件發送的成功還是沒成功,我們需要這樣一個反饋,這是我們就需要函數的返回值

--沒有返回值def email():
    print('我們要發郵件了')#調用函數email()
>>>我們要發郵件了

--設定返回值#那問題來了,我們調用的時候,怎麼知道郵件發送成功沒成功?是不是得給我返回一個值,告訴我們一下,否則我怎麼知道這個功能是不是實現了,這時就要用到關鍵字returndef email():
    print('我們要發郵件了')    
return'我告訴你了,郵件發送了,給你反饋了'
ret = email()#執行函數#函數return後面是什麼值,ret等於返回值

>>>我們要發郵件了 >>>我告訴你了,郵件發送了,給你反饋了

3.3 形式參數與實際參數

  • 形式參數和實際參數比較抽象,這裏jacky舉個栗子,來給大家說清楚這兩個概念,假設讓A同學幫我取快遞,我們用代碼和函數的形式來模擬這個過程,來幫助大家理解Python中參數這個概念:

    • 我們假設A的職業就是幫別人取快遞的,那我們要委託A給我們取快遞,我們就要給他一定憑證,是吧,有了這個憑證A才能取回我們的快遞;

3.3.1 第一階段的設計思路

def qukuaidi():
    站起來
    轉身
    走到快遞的地點
  • 我們粗略的用站起來,轉身,走到快遞的地點來模擬取快遞這一個過程

3.3.2 第二階段的設計思路

  • 小A取快遞,不光是給你一個人取,不能是給你取一個就寫一個程序,給別人取,在重新再寫一遍這個程序是,是吧,這樣就太繁瑣了,所以呢,在我們創建取快遞這個函數的時候,我們要給函數括號裏一個參數,比如說是anyone,這個anyone可以是取快遞的憑證,比如說只有用你的手機號,或是你的身份證號才能取到你的快遞,那我們模擬的代碼就是:

def qukuaidi(anyone):
    #站起來
    #轉身
    #走到快遞的地點
    print(anyone)    
   return True #返回True就是反饋給我們取成功了

3.3.3 第三階段的設計思路

  • 下面就是A要給我特定這個人拿快遞了,那上面那個參數,或者說是憑證anyone,就是特定的了,比如說是這個anyone,用我的名字jacky_zhuyuanlu作爲拿快遞的憑證,我們就可以調用上面我們設計的函數了

def qukuaidi(anyone):
    #站起來
    #轉身
    #走到快遞的地點
    print(anyone)    
   return True
   qukuaidi('jacky_zhuyuanlu')
   >>> jacky_zhuyuanlu
  • 上面的代碼,我們在規範的改進一下:

def qukuaidi(anyone):
    #站起來
    #轉身
    #走到快遞的地點
    print(anyone)    
   return True
   ret= qukuaidi('jacky_zhuyuanlu')
   if ret:        print('成功')
   >>> jacky_zhuyuanlu
   >>> 成功
  • 以上,anyone就叫形式參數,我們實際傳的值也就參數,jacky_zhuyuanlu就叫實際參數;

我們把上面的過程在引申一下:我們要設計這樣一個程序,就是A取快遞,只給jacky取,不給別人取,那我們的代碼就要這樣實現:

def qukuaidi(anyone):
    #站起來
    #轉身
    #走到快遞的地點
    #print(anyone)
    if p == 'jacky_zhuyuanlu':        
       return True    else:        
       return False

ret2 = qukuaidi('andy')
if ret2:    print('成功')
else:    print('失敗')
>>> 失敗
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章