- Django 2.0 入門與實踐
- 李健
- 934字
- 2020-06-30 17:19:12
5.3 函數參數
5.3.1 位置參數
位置參數就是在調用的時候必須要按照正確順序傳入的參數,調用時的數量必須與函數聲明一致。如加法運算函數中的參數x和y,調用時必須要接收兩個參數,這就是位置參數。
5.3.2 默認參數
某些時候函數的參數值很少發生變化,因此為了簡化調用方法,我們將這類很少變化的參數設置成默認參數,調用時不傳遞參數值,此時函數內部使用默認值。
下面是一個使用了默認參數的函數,該函數用來計算整數的n次方,在數學運算中絕大多數情況下只進行平方運算,對于高次方的運算很少,基于此設置函數第二個參數的默認值為2:
def power(x, n = 2): return x ** n
使用下面參數調用power函數:
>>> power(2) >>> power(2, 3) >>> power(2, 5)
輸出:
4 8 32
由此可見,默認參數可以簡化函數的調用。但是設置默認參數時仍需注意以下幾點:
□ 默認參數需要放在必選參數之后,如果有多個默認參數,那么所有默認參數都要放在必選參數之后。
□ 只為很少變化的參數設置默認參數。
下面舉一個現實中使用默認參數的例子,在小學生入學登記時需要填寫學生姓名、性別、年齡、城市信息。分析需求發現,對于一所學校的新生,他們的年齡基本一致都是7歲或8歲入學,而城市基本一致,性別只有男、女兩種情況。由此可見,如果將性別、年齡、城市設置為默認參數的話會大大提高學生信息錄入效率,據此編寫函數,如圖5-3所示。

圖5-3
輸出結果如圖5-4所示。

圖5-4
5.3.3 關鍵字參數
Python中有兩種類型的關鍵字參數:
□ 對于函數調用方,可以使用參數名傳遞參數值的參數;
□ 對于函數定義方,可以定義一個參數,這個參數類似于**kwargs形式,這個參數會接收所有命名參數。
上面關于小學生信息注冊的函數就屬于第一種關鍵字參數,我們發現,在調用register函數的時候使用了類似于gender = ‘男'這樣的寫法,這就是第一種關鍵字參數。
下面以第二種情況舉個例子:
編寫函數:
def foo(*positional, **keywords): print("Positional:", positional) print("Keywords:", keywords)
調用函數:
>>> foo('one', 'two', 'three')
輸出:
Positional: ('one', 'two', 'three') Keywords: {}
由此可見參數*positional接收了全部位置參數(positional argument)。
下面再看看關鍵字參數的調用:
>>> foo(a='one', b='two', c='three')
輸出:
Positional: () Keywords: {'a': 'one', 'b': 'two', 'c': 'three'}
此時雖然傳遞的參數個數、參數值都沒有變,但是為每個參數都傳遞了名字,輸出結果正好相反,第一次*positional接收了參數,第二次**keywords接收了參數。另外還可以看出positional是元組類型,keywords是字典類型。
下面再看一個混合調用的情況:
>>> foo('one','two',c='three',d='four')
輸出:
Positional: ('one', 'two') Keywords: {'c': 'three', 'd': 'four'}
符合我們的推測,*positional接收位置參數, **keywords接收命名參數。
- Getting started with Google Guava
- Apache Spark Graph Processing
- WordPress 4.0 Site Blueprints(Second Edition)
- Unity UI Cookbook
- HTML5從入門到精通(第4版)
- Visual C#.NET Web應用程序設計
- Android驅動開發權威指南
- C語言程序設計與應用(第2版)
- Python Machine Learning Cookbook
- ArcPy and ArcGIS(Second Edition)
- 零基礎學編程系列(全5冊)
- Mastering Python
- 生成藝術:Processing視覺創意入門
- C/C++語言程序開發參考手冊
- Go Programming Blueprints