本文將通過幾個例項介紹如何定義函式,以及如何設定預設引數。在文章的結尾,還專門針對預設引數介紹了兩種非常重要的技術要點,避免大家在實際工作中入坑。
首先,在Python中定義函式是使用def關鍵字。def之後是函式名稱,函式引數用圓括號包括起來,最後以冒號結尾。函式體應該緊跟著另起一行,並進行縮排。以上就是定義函式的文字描述,我們還是來一個例項,這樣可以直觀的理解其含義。
在這個例項中,我們定義了一個叫my_print的函式,它有一個叫info的引數。程式的功能是在控制檯上把info中的內容打印出來。以下是程式的執行效果。
我們給info增加了幾個星號和方括號,然後把拼接好的字串打印出來。
在上面的例子中,我們給函式傳入了一個引數,但是有的時候,我們可能不想給函式傳入引數,這時我們就需要使用預設引數了。比如,我們有一個函式,它可以給指定的數字加10,如果不指定數字,則預設是給1加10。那麼我們看一下這個功能是怎麼實現的。
在這個例項中,第一次函式呼叫,我們使用實參5呼叫函式,所以函式透過加10,返回15。第二次函式呼叫,我們沒有給出引數,所以函式使用預設引數1進行處理,1+10=11,所以最後返回11。
上面的例子中,我們的預設引數都是常量,當預設引數為變數時,情況就會有所不同。接下來我們介紹兩個非常重要的技術要點。
第一個技術要點:在定義的範圍內,預設引數是在函式定義時被計算的。例如:
當程式開始逐行執行時,i先是賦值為3,然後my_add10函式計算預設引數num的值時,num被賦值為3,之後雖然i又被賦值為2,但是由於函式只在定義時計算一次預設值,所以my_add10的引數num的預設值就只能是3了。下面我們看一下執行結果:
現在我們看一下第二個技術要點:如果預設值是list或者dictionary,那麼在函式的多次呼叫中,引數值將一直被使用。我們先看一個例子
程式的執行結果為:
透過執行結果,我們可以看出來,第一次呼叫時,list_param被append了一個"王99"。分隔線之後,我們再次呼叫函式時,我們先列印一下原始list的值時發現,就已經保留了一個"王99",透過第二次函式呼叫,我們又append了一個"王99",最終list_param,現在有兩個"王99"了。兩次函式呼叫"共享"了list1這個引數值。那麼如果我們不想在兩次呼叫中"共享"這個值,我們要使用None,下面我們看一下具體的用法:
程式執行結果如下:
透過在定義預設引數時使用None,我們可以看到兩次呼叫list_param並沒有像之前一樣,增加多個"王99",每次呼叫時,list引數都只增加了一個"王99",並且呼叫前的原始值也都是[],不再把之前呼叫的值"共享"過來。
大家在使用預設引數時,一定要注意這些細節,不然程式碼一旦多了,除錯起來真的可能會讓人崩潰,打好技術基礎,才能有備無患。
我使用的環境:Windows 7 + Python 2.7.17 + PyCharm Community Edition 2016.1.5