Python函數基礎

來源:互聯網
上載者:User

標籤:Python函數基礎

函數基礎

簡單地說,一個函數就是一組Python語句的組合,它們可以在程式中運行一次或多次運行。Python中的函數在其他語言中也叫做過程或子常式,那麼這些被封裝起來的語句通過一個函數名稱來調用。

有了函數,我們可以在很大程度上減少複製及粘貼代碼的次數了(相信很多人在剛開始時都有這樣的體驗)。我們可以把相同的代碼提煉出來做成一個函數,在需要的地方只需要調用即可。那麼,這樣就提高了代碼的複用率了,整體代碼看起來比較簡練,沒有那麼臃腫了。

函數在Python中是最基本的程式結構,用來最大化地讓我們的代碼進行複用;與此同時,函數可以把一個錯綜複雜的系統分割為可管理的多個部分,簡化編程、代碼複用。

接下來我們看看什麼是函數,及函數該如何定義。有兩種方式可以進行函數的定義,分別是deflambda關鍵字。

函數定義

先總結一下為什麼要使用函數?

  1. 代碼複用最大化及最小化冗餘代碼;
  2. 過程分解(拆解)。把一個複雜的任務拆解為多個小任務。

函數定義的文法為(使用def關鍵字建立了一個函數對象,並把該對象賦值給了一個函數名稱。):

def func_name(arg1, arg2, arg3, ..., argN):    statement    return value

根據上面定義,可以簡單地描述為:Python中的函數是具有0個或多個參數,具有若干行語句並且具有傳回值(傳回值可有可無)的一個語句塊(注意縮排)。

那麼我們就定義一個比較簡單的函數,該函數沒有參數,進入ipython互動式環境:

In [1]: def hello():  ...:    print(‘Leave me alone, the world‘)  ...:

def語句定義了一個函數,但是並不會調用該函數。我們在代碼中可以調用已定義的函數,在函數的名稱後面加上一對小括弧就可以調用,小括弧中還有可選的函數參數。接下來調用(執行)該函數。

In [2]: hello()Leave me alone, the world

我們發現hello()函數並沒有return語句,在Python中,如果沒有顯式的執行return語句,那麼函數的傳回值預設為None

我們說過,定義函數有兩種形式,另外一種形式是使用lambda來定義。使用lambda定義的函數是匿名函數,這個我們在後面的內容進行講解,這裡暫且不表。

接下來我們看看一個帶參數的函數定義及調用:

>>> def intersect(seq1, seq2):...    res = []...    for x in seq1:...        if x in seq2:...            res.append(x)...    return res... >>> s1 = ‘SPAM‘>>> s2 = ‘SCAM‘>>> intersect(s1, s2)[‘S‘, ‘A‘, ‘M‘]

這個例子主要作用是:傳入兩個列表,求它們的共同的元素。當我們調用該函數時,需要給此函數傳入兩個參數。這裡我們把s1傳遞給了函數體中的seq1,把s2傳遞給了seq2,然後把傳回值res返回給調用者。上面的示範中我們並沒有接收該函數的傳回值,如果在後面的代碼中需要用到該函數的傳回值,那麼可以把該函數的傳回值賦值給一個變數即可。如:

>>> result = intersect(s1, s2)>>> result[‘S‘, ‘A‘, ‘M‘]

針對上面的例子,可以使用前面文章中介紹過的列表推導式:

>>> [x for x in s1 if x in s2][‘S‘, ‘A‘, ‘M‘]
函數實戰

函數基礎就介紹到這裡,接下來上一個實際的小樣本,通過requests庫查詢手機號的歸屬地資訊。如果系統沒有安裝requests包,使用pip或easy_install進行安裝:

pip install requests

代碼為(在ipython互動式環境中執行的該代碼):

In [1]: import requestsIn [2]: def phone():   ...:     num = input(‘Enter your phone number>>> ‘)   ...:     api = ‘http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=‘   ...:     r = requests.get(api + num.strip())   ...:     if r.ok:   ...:         print(r.text)   ...:     r.close()   ...:     return None   ...: In [3]: phone()Enter your phone number>>> 13651813235__GetZoneResult_ = {    mts:‘1365181‘,    province:‘上海‘,    catName:‘中國移動‘,    telString:‘13651813235‘,areaVid:‘29423‘,ispVid:‘3236139‘,carrier:‘上海移動‘}

上面樣本中的函數並沒有接收參數,接下來把該函數改造為帶參數的。代碼為:

In [4]: def phone(phone_num):   ...:     api = ‘http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=‘   ...:     res = requests.get(api+phone_num)   ...:     if res.ok:   ...:         print(res.text)   ...:     res.close()   ...:     return None   ...: In [5]: phone(‘13651813235‘)__GetZoneResult_ = {    mts:‘1365181‘,    province:‘上海‘,    catName:‘中國移動‘,    telString:‘13651813235‘,areaVid:‘29423‘,ispVid:‘3236139‘,carrier:‘上海移動‘}
總結:函數設計原則
  • Coupling: use arguments for inputs and return for outputs
  • Coupling: use global variables only when truly necessary
  • Coupling: don‘t change mutable arguments unless the caller expects it
  • Cohesion: each function should have a single, unified purpose
  • Size: each function should be relatively small
  • Coupling: avoid changing variables in another module file directly

Python函數基礎

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.