python里面的函数参数

原创 2015年11月18日 22:05:51

pyhton的定义函数中,可以使用4种参数:必选参数,默认参数,可变参数,关键字参数。同时,参数的定义顺序也必须按照此顺序。下面分别介绍这几种参数。

必选参数

>>>def power(base, exp):
...     if exp == 0:
...         return 1
...     return base * power(base, exp-1)

这里我定义了一个求base的exp次幂的函数,其中的base和exp都是必选参数,也就是说函数接收两个数字作为参数。如果不是传入两个参数就会报错。

>>>power(4, 2) 
16 
>>>power(1) 
Traceback (most recent call last):   File
 "<stdin>", line 1, in <module> TypeError: power() takes exactly 2 arguments (1 given)

默认参数

>>>def power(base, exp=2):
...     if exp == 0:
...         return 1
...     return base * power(base, exp-1)

还是上面的函数例子,但是对于exp进行了赋值,exp被称为默认参数,它可以简化函数的调用,当期望的幂数不是2时才需要自己输入不同的数值。

但是注意一点:默认参数必须指向不变的对象,比如字符串和元组,像列表这样可变的对象则不行。

>>>def add_end(L=[]):
...     L.append('END')
...     return L

原因:默认参数本身就是一个变量,如果指向一个可变对象,当该对象的值发生变化,下次调用默认参数指向的不是原来的那个值。

>>> add_end()
['END', 'END']
>>> add_end()
['END', 'END', 'END']

可变参数

所谓可变参数指的就是参数的个数可变,而不是像必选参数那样必须按照给定的参数个数来传入参数。我们在定义函数中经常使用*args表示可变参数。

>>>def test(*args):
...     sum = 0
...     for num in args:
...         sum += num
...     return sum

这里定义了一个累加求和的函数,注意参数args的前面加了一个 “*”,这个符号表示args这个参数就是一个可变参数。此时你可以向test函数里面传入任意个数参数,这些参数在函数调用的时候自动组装成一个元组,不会像上面必选参数那样报错。

>>>test()
0
>>>test(1,2,3)
6

但是如果想使用列表或者元组中的元素作为参数直接将列表或者元组传入则会报错。

>>>test((1,2,3))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in test
TypeError: unsupported operand type(s) for +=: 'int' and 'tuple'

这个时候出现了一个神器 “*”,和表示参数是可变参数一样,在调用的时候加在list或者是tuple前面,把它们中的元素变为可变参数传入函数。

>>>test(*(1,2,3))
6

关键字参数

关键字参数在函数调用的时候会自动组装成一个字典,它起到拓展函数的功能。

>>>def userInfo(name, id, **kw):
...     print 'name:',name,'id:',id,'otherInfo:',kw
...
>>>
>>>
>>>userInfo('James',1)
name: Jame id: 1 otherInfo: {}
>>>userInfo('Frank',2,age=21,job='student')
name: Frank id: 2 otherInfo: {'age': 21, 'job': 'student'}

和可变参数一样,在接收一个字典时候在前面加 “**”使得函数调用的时候将字典中的元素转化为可变参数传入到函数里面。不加的话则会报错。

>>>user = {'age': 21, 'job': 'student'}
>>>
>>>userInfo('Frank',2,**user)
name: Frank id: 2 otherInfo: {'age': 21, 'job': 'student'}
>>>
>>>userInfo('Frank',2,user)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: userInfo() takes exactly 2 arguments (3 given)
版权声明:本文为博主原创文章,未经博主允许不得转载。

php获取函数参数,获取类里面的方法名

有时候我们需要获取函数需要传入的参数,可以利用php的反射函数获取,或者类里面的所有公开的方法。1、获取函数参数名称:function getFucntionParameterName($func) ...

Android之解决aidl里面函数参数太大不能跨进程通信的问题

问题:          因为做的截屏拍照是跨进程通信的,所以需要用aidl,但是参数传递用的byte[] image,网上查了下aidl传递的基本参数类型,没有byte[], 然后把图片转化成St...

C里面多维数组作为函数参数的问题

二维数组作为函数参数传递剖析(C语言)(6.19更新第5种) 前言   很多文章不外乎告诉你下面这几种标准的形式,你如果按照它们来用,准没错: //对于一个2行13列int元素的二维...

Python中scatter函数参数详解

最近开始学习Python编程,遇到scatter函数,感觉里面的参数不知道什么意思于是查资料,最后总结如下: 1、scatter函数原型 2、其中散点的形状参数marker如下: 3、其中颜色参数...
  • AnneQiQi
  • AnneQiQi
  • 2017年03月20日 14:30
  • 12137

Python中函数参数(默认、列表、可变长度、字典类型)

#_*_coding:UTF-8_*_ # 1.默认参数 # 函数的参数支持默认。当某个参数没有传递实际值时,函数将使用默认参数计算。例如,可以向login()函数的username参数和passwo...

Python函数参数传递:传值还是传引用

引子 首先来看一个列子: def change(val): val.append(100) val = ['T', 'Z', 'Y'] nums = [0, 1] change...

python中类中函数参数self的说明

原文:http://sjolzy.cn/Why-should-self-Python.html             类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,...

浅析python函数参数类型

浅析python函数参数类型在python函数定义时,截止目前到3.x的版本,一共有五种类型的参数:(注:该文章基于python 3.4.4) POSITIONAL_OR_KEYWORD(位置或关键字...

Python函数参数类型

函数的参数 定义函数(参数): 普通参数,默认参数,可变参数(可变位置参数,可变关键字参数),keyword-only 参数 调用函数(传参): 位置参数,关键字参数,参数结构(位置参数解构,关键字参...

Python:函数参数传递:传值?引用?

首先要说的是:变量 与 对象 在python中,类型属于对象,变量是没有类型的,这正是python的语言特性,也是吸引着很多pythoner的一点。所有的变量都可以理解 是内存中一个对象的“引用”,...
  • ztf312
  • ztf312
  • 2015年09月13日 19:26
  • 615
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python里面的函数参数
举报原因:
原因补充:

(最多只允许输入30个字)