函数参数
来源:互联网 发布:做淘宝客服要交钱吗 编辑:程序博客网 时间:2024/06/06 10:54
Python中函数定义时,可以使用默认参数、可变参数及关键字参数,下面详细说明
默认参数
必须使用不变对象,如字符串等,如果默认参数是一个变量,多次调用的时候,参数就会发生改变,不是定义时的值。
def addFunc(T=[]): T.append("End") return T
正常使用时,不会发生错误:
>>> addFunc([1,2,3])[1, 2, 3, 'End']>>> addFunc(['x', 'y', 'z'])['x', 'y', 'z', 'End']
但是,多次使用默认参数时,结果就会出错:
>>> addFunc()['End']>>> addFunc()['End', 'End']
解释如下:
Python函数在定义的时候,默认参数T的值为[],默认参数T是一个变量,指向[],每次调用的时候,如果改变了T的值,则下次调用时,默认参数的值就会改变。
可变参数
传入的参数个数可变,从0到任意多个,需要在参数的前面加上一个*号。
定义以下函数:
def sumFunc(*nums): total = 0 for i in nums: total += i return total
然后使用:
>>> nums = [1, 2, 3]>>> sumFunc(*nums)6
关键字参数
允许传入0个或任意多个含参数名的参数,这些参数会自动组装成一个dict。
定义以下函数:
def person(name, age, **kw): print 'name:', name, 'age:', age, 'other:', kw
使用如下:
>>> kw = {'city': 'Shenzhen', 'job': 'Student'}>>> person('Jack', 24, **kw)name: Jack age: 24 other: {'city': 'Shenzhen', 'job': 'Student'}
- 参数组合
可将必选参数、默认参数、可变参数和关键字参数组合使用,参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数组合使用。
定义一个函数,包含4种参数:
def func(a, b, c=0, *args, **kw): print 'a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw
>>> func(1, 2)a = 1 b = 2 c = 0 args = () kw = {}>>> func(1, 2, c=3)a = 1 b = 2 c = 3 args = () kw = {}>>> func(1, 2, 3, 'a', 'b')a = 1 b = 2 c = 3 args = ('a', 'b') kw = {}>>> func(1, 2, 3, 'a', 'b', x=99)a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}
通过一个tuple和dict,也可以调用该函数:
>>> args = (1, 2, 3, 4)>>> kw = {'x': 99}>>> func(*args, **kw)a = 1 b = 2 c = 3 args = (4,) kw = {'x': 99}
所以,对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。
注释
*args是可变参数,接收的是一个tuple;
**kw是关键字参数,接收的是一个dict。
0 0
- 函数参数和参数
- 函数参数
- 函数参数
- 函数参数
- 函数参数
- 函数参数
- 函数参数
- 函数参数
- 函数参数
- 函数参数
- 函数参数
- 函数参数
- 函数参数
- 函数参数
- 函数参数和Catch参数
- 函数、默认参数、关键字参数
- 函数参数与函数作为参数
- 不定参数函数调用不定参数函数
- 贪心算法、分治算法、回溯算法
- 对jmeter的初步理解及应用——初级篇(一)
- Android Phone系统架构1
- oc——nonnull、nullable、null_resettable、__null_unspecified
- ios点击背景清除
- 函数参数
- C++学习笔记之——如何写一个异常处理
- js dropzone的使用方法
- D. String Game----二分答案
- 【EDA】EDA技术Quartus仿真步骤(图表仿真)
- Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
- Velocity语法
- Android 通过注入js实现读取webview中图片并放大的优化
- bzoj2190 SDOI2008仪仗队