在用python写一个函数时,方法为 def 方法名(参数):例如:写一个求两个数之和的函数。
def sum(a,b):
c = a+b
return c
当我们在一个类或方法中调用其它方法时,时常会因为参数的问题导致不易发现的错误,下面就把python函数中的各类参数归纳一下。
在python函数中共有五类参数,分别是:
①位置参数
②默认参数
③可变参数
④关键字参数
⑤命名关键字参数
<1>位置参数:对于上面举得那个sum函数的例子a和b就是位置参数,当我们调用该方法时必须传入两个参数,如果多传入或者少传入都会出现错误。
<2>默认参数:如果存在默认参数,可以给默认参数赋值,也可以不赋值。如果不给默认参数赋值那么该默认参数其实被赋予默认值。如下例子:
def student(num,name,major="chinese",college ="language"):#学号,姓名,主修专业,学院
print "%s's num is %d , major in %s and a member of %s college students"%(name,num,major,college)
#....学生的学号是....主修....专业,是......学院的学生在这个例子当中,主修专业默认为汉语,所以如果如下调用student函数:
>>>>student(12345,"Tom")
Tom's num is 12345 , major in chinese and a member of language college students
调用这个函数时,如果学生选修的不是汉语而是英语,则:
>>>student(12345,"Tom","English")
Tom's num is 12345 , major in English and a member of language college students默认参数可以减少调用函数时的赋值负担,因为大多数情况下,调用某个函数时大多数参数是固定不变的仅仅有个别参数改变,如果每次调用都要将全部参数赋值一遍怎样显然是没有必要的。有了默认参数,每次仅仅需要改变个别参数赋值就可以,减轻不必要的负担。
但是要注意如果有两个以上默认参数存在时,给默认参数赋予新值时,要写明参数的名字。如下例:
>>>student(12345,"Tom",major="computer",college ="computer")
Tom's num is 12345 , major in computer and a member of computer college students如果存在多个默认参数时,你赋值时不写参数名程也不知道你是给那个默认参数赋值,这样程序就会出现错误。
<3>可变参数:在python中存在一种参数称为可变参数。顾名思义,可变参数就是传入的参数个数是可以改变的。
举个求立方和的例子说明:
def sumCube(*nums):
sum = 0
for i in nums:
sum = sum +i*i*i
print sum在调用该方法时,需要传入可变参数(个数从0到任意数)
>>>sumCube(1,2,3)
36如果要传入的是一个列表或元组的话可以用如下方法,在list或者tuple前面加上一个“*”号:
>>>sumCube(*[1,2,3])
36<4>关键字参数:关键字参数一般在用户注册时用的比较多。比如说注册一个账号,用户名、密码这两项是必须填写的而祖籍、爱好、血型等都是可以选填的。关键字参数允许用户传入0个到任意个含参数名的参数,关键字参数在函数内部便会组成一个字典。
下面举个例子说明
def register(name,password,**others)
print "name :",name,"password :",password,"others :",others
当我们调用该函数时,只赋予位置参数值时
>>>register("Tom","12345")
name :Tom password :12345 others :{}
当我们调用该函数,不但赋予位置参数值,还赋予关键字参数值时
>>>register("Tom","12345",ancestralHome="Australian",hobby="pingpong",bloodType="AB")
name : Tom password :12345 others :{"ancestralHome":"Australian","hobby":"pingpong","bloodType":"AB"}
若果关键字参数对应的就是一个字典那么我们字需要在该字典名字前加“**”传入该参数即可
rw={"ancestralHome":"Australian","hobby":"pingpong","bloodType":"AB"}
>>>register("Tom","12345",**rw)
name : Tom password :12345 others :{"ancestralHome":"Australian","hobby":"pingpong","bloodType":"AB"}
<5>命名关键字参数:有时我们需要限制传入的关键字参数的名字,我们就会用到命名关键字。对于下面一个例子
def stduents(number,name,*,sex,major)
print number,name,sex,major
这个例子表明students方法只接收sex,major作为关键字参数,其中的“*”表明后面的sex,major为命名关键字参数。
这里要特别注意“*”不代表参数,它只是作为一个特殊的分隔符而已。
下面调用一下该函数
>>>>>studnets("123","Tom",sex="F",major="English")
123 Tom F English