python学习(5)—函数

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
>>>
               
               
               
               
               
               
               
               
               
               
               
               
               

好帖,我正在学习python,我想问的是python是脚本程序,能否打包成可执行程序呀,谢谢。