python学习(5)—函数
1.定义函数:
def function_name():
'doc string' #文档字符串
body_suite #函数体
如果没有明确指定一个返回值,python默认会返回一个None。
>>> def func1():
'this is a test function\n.'
print 'func1 is called\n'
>>> ret=func1()
func1 is called
>>> print ret
None #由于函数定义的时候没有定义返回值,所以函数默认返回None
2.函数可以被别名
#注意这里用的是函数名func1,别名给另外一个变量
>>> func2=func1
#调用func2时其实就是调用原来的func1函数
>>> func2()
func1 is called
#可以看出两个其实是同一个对象,只是名称不同
>>> id(func1)
14337264
>>> id(func2)
14337264
3.把函数作为参数传递给另外一个函数
#实际上定义了一个调用函数的函数
>>> def mainfunc(fname):
fname()
#把func1作为参数传递给mainfunc函数
>>> mainfunc(func1)
func1 is called
4.函数的参数
函数的参数可以分为多种类型:
1)正式参数:
固定参数:必须按照他们在函数定义中的精确顺序传递,传递的参数个数必须与定义的个数完全相同。
关键字参数:可以通过参数的名字来分辨参数,可以不按定义时的顺序传递。
缺省参数:如果函数调用时没有给出参数值,就会使用函数定义时的缺省值。缺省参数必须在固定参数或 关键字参数后定义。
#固定参数
>>> def foo(who):
print 'Hello',who
>>> foo('World')
Hello World
#既然定义了一个固定参数,就必须传递一个参数
>>> foo()
Traceback (most recent call last): File "", line 1, in foo()TypeError: foo() takes exactly 1 argument (0 given)
#关键字参数
>>> def netConn(host,port):
print 'host=',host
print 'port=',port
#只要指定关键字,就不必按照函数定义的顺序传递参数
>>> netConn(port=1033,host='10.22.1.33')
host= 10.22.1.33
port= 1033
#缺省参数
>>> def func1(who,height=180,weight=80): print 'Hello',who print 'height=',height print 'weight=',weight#调用时没有给出另外两个参数,使用定义时的缺省值>>> func1('Tom')Hello Tomheight= 180weight= 80>>> func1('John',170,65)Hello Johnheight= 170
weight= 65
2)可变长参数
非关键字可变长参数:除了正式参数外,多余的参数被放入一个表列里,代表表列的变量名前要加一个*号表 示,如果没有多余的参数,表列就是空的。
关键字可变长参数:多余的参数被放入一个字典中去,关键字作为键字,值作为键值。代表字典的变量名前加 个**表示。
#非关键字可变长参数
>>> def func1(t1,t2='default2',*argv):
print 'arg1=',t1
print 'arg2=',t2
for eacharg in argv:
print 'other arg=',eacharg
>>> func1('test')
arg1= test
arg2= default2
#最后两个都是非关键字可变长参数
>>> func1('no1','no2','no3',3.14)
arg1= no1
arg2= no2
other arg= no3
other arg= 3.14
>>>
#关键字可变长参数和非关键字可变长参数可以用在同一个函数里,但必须关键字的字典在最后,非关键字的表列在它之前
>>> def func2(t1,t2,*argv,**kw):
print 'arg1=',t1
print 'arg2=',t2
for eacharg in argv:
print 'other arg=',eacharg
for eachkw in kw.keys():
print 'other kw %s:%s' % (eachkw,str(kw[eachkw]))
>>> func1('tt',1.5)
arg1= tt
arg2= 1.5
>>> func2('no1','no2',100,'test1',1.5,height=100,weight=200)
arg1= no1
arg2= no2
other arg= 100
other arg= test1
other arg= 1.5
other kw weight:200
other kw height:100
>>>