1. 程式人生 > >Python學習筆記__2.3章 函數的參數

Python學習筆記__2.3章 函數的參數

編程語言 Python

# 這是學習廖雪峰老師python教程的學習筆記

1、概覽

python中可用的參數有5種:

  • 必選參數

  • 默認參數

  • 可變參數

  • 關鍵字參數

  • 命名關鍵字參數

參數定義的順序是:必選參數、默認參數、可變參數、命名關鍵字參數、關鍵字參數

2、必選參數

必須傳入的參數。比如下面這個函數,x就是必須傳入的參數

def power(x):

return x * x

3、默認參數

默認參數是一個 事先定義好的參數。你可以不給它傳值,也可以傳一個值取代它

下面,n是默認參數。

可以power(5),只傳x參數

也可以power(5,3),傳兩個參數

def power(x, n=2):

s = x**n

return s

註:默認參數,必須放在必選參數後面,不然傳值會有歧義

void f(int a=0,int b,int c=0),當你調用f(1,1)時,到底是取f(1,1,0)呢 還是f(0,1,1)?

4、可變參數

可變參數就是傳入的參數個數是可變的。0個到多個都可以

下面這個函數,你可以傳多個參數累加。在函數內部,參數numbers接收到的是一個tuple

def calc(*numbers):

sum = 0

for n in numbers:

sum = sum + n

return sum

在調用時,也允許將list或tuple的元素變成可變參數傳進去:

nums = [1, 2, 3]

calc(*nums)

5、關鍵字參數

關鍵字參數允許你傳入0個或多個含參數名的參數,這些關鍵字參數在函數內部自動組裝為一個dict

# 定義一個函數

def person(name, age, **kw):

print('name:', name, 'age:', age, 'other:', kw)

# 不傳 **kw

>>> person('Michael', 30)

name: Michael age: 30 other: {}

# 傳任意個 **kw

>>> person('Bob', 35, city='Beijing'

)

name: Bob age: 35 other: {'city': 'Beijing'}

>>> person('Adam', 45, gender='M', job='Engineer')

name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

和可變參數類似,也可以先組裝出一個dict,然後,在參數調用該dict的值

extra = {'city': 'Beijing', 'job': 'Engineer'}

>>>person('Adam', 45, city=extra['city'], job=extra['job'])

>>>person('Jack', 24, **extra)

6、命名關鍵字參數

你必須傳的參數,並且必須傳入參數名。

# 必須傳入 city='xxx',job='xx'

def person(name, age, *, city, job):

print(name, age, city, job)

# 調用函數

>>>person('Jack', 24, city='Beijing', job='Engineer')

如果函數定義中已經有了一個可變參數,後面跟著的命名關鍵字參數就不再需要一個特殊分隔符*了

def person(name, age, *args, city, job):

命名關鍵字參數可以有缺省值,從而簡化調用

def person(name, age, *, city='Beijing', job):

7、小結

默認參數一定要用不可變對象,如果是可變對象,程序運行時會有邏輯錯誤!

要註意定義可變參數和關鍵字參數的語法:

*args是可變參數,args接收的是一個tuple;**kw是關鍵字參數,kw接收的是一個dict。

以及調用函數時如何傳入可變參數和關鍵字參數的語法:

  • 可變參數既可以直接傳入:func(1, 2, 3),又可以先組裝list或tuple,再通過*args傳入:func(*(1, 2, 3));

  • 關鍵字參數既可以直接傳入:func(a=1, b=2),又可以先組裝dict,再通過**kw傳入:func(**{'a': 1, 'b': 2})。

使用*args和**kw是Python的習慣寫法,當然也可以用其他參數名,但最好使用習慣用法。

命名的關鍵字參數是為了限制調用者可以傳入的參數名,同時可以提供默認值。

定義命名的關鍵字參數在沒有可變參數的情況下不要忘了寫分隔符*,否則定義的將是位置參數。

8、例題

編寫函數,允許接受多個參數,進行累乘

# -*- coding: utf-8 -*-

def product(*args):

if args ==():

raise TypeError

s=1

for n in args:

s=n*s

return s

Python學習筆記__2.3章 函數的參數