函数

来源:互联网 发布:exit code 139 linux 编辑:程序博客网 时间:2024/06/01 08:04

                       函数


1.简单函数的定义:

    def关键字,依次写出函数名、括号、括号中的参数和冒号 :
    在缩进块中编写函数体,函数的返回值用 return 语句返回

注:
    !! 函数在执行过程中一旦遇到return,函数就执行完毕,并将结果返回
    !! 函数在执行过程中没有遇到return,函数的返回值为 none
    !! 定义一个暂时不做动作的函数时,使用pass语句,作为一个占用符,让程序可以正常运行

示例:
    def hello():
        print 'NICE'
    print hello()

2.空函数:

    定义一个什么事也不做的空函数,可以用 pass 语句;
    pass 可以用来作为占位符,还没想好怎么写函数的代码,就可以先放一个 pass ,让代码能运行起来

示例:

    def func():
    pass

3.参数检查:

    调用函数时,如果参数个数不对,Python 解释器会自动检查出来,并抛出 TypeError;
    如果参数类型不对,Python解释器就无法帮我们检查。
    数据类型检查可以用内置函数isinstance 实现

4.函数返回值:

    函数返回值用return关键字;
    返回一个 tuple 可以省略括号;
    Python 的函数返回多值其实就是返回一个 tuple
    函数执行完毕也没有return 语句时,自动 return None

  小练习(1):
    定义一个函数func,传入两个数字,返回两个数字的平均值与最大值
   
程序:

def func(x,y):    if not isinstance(x,int) or notisinstance(y,int):        print 'Error Type'    avg=sum(x,y)/2    maxnum=max(x,y)    return "平均值:[%d],\t最大值:[%d],"%(avg,maxnum)print func(2,10)



5.函数参数:
    默认参数可以降低调用函数的难度

注:
    !! 有多个参数时,变化大放前面,变化小的放后面
    !! 必选参数在前,默认参数在后

小练习(2):
    定义一函数,计算x值的n次方。那如果计算x平方时只需要传入x值时怎么解决?

程序:

def power(x,n=2):    return x**nprint power(3,3)



注:
    !! 默认参数与必选参数同时存在时,必选参数必须在前


小练习(3):
    先定义一个函数,传入一个 list,添加一个END 再返回.

程序:

def wowo(li=None):    if li is None:        return ['END']    li.append("END")    return liprint wowo([1,2,3])print wowo()print wowo()


小练习(4):

程序:

def enrool(name,age=20,myclass="西开运维"):    print "name:"+name    print "age:%d " %age    print"myclass:"+myclassenrool("koko",19)enrool("lala")enrool("yuyu",19,"西开开发")



6.可变参数:

    可变参数就是传入的参数个数是可变的,可以是 1 个、2 个到任意个,还可以是 0 个
    Python中可以在list 或 tuple 前面加一个 * 号;
    把 list 或 tuple 的元素变成可变参数传进去;
示例:
    def fun(*args):       print type(args)       return max(args),min(args)    li = 44,7,56,21,0    print fun(*li)  (结果)/usr/bin/python2.7 /home/kiosk/PycharmProjects/panduan/zidian.py<type 'tuple'>(56, 0)




7.关键字参数

在填写参数的地方 先填写必须参数或者默认参数 在使用**kwargs参数定义关键字参数

示例:
def enroll(name, age=22, **kwargs):    print 'name:' + name    print 'age:%d' % age    for k, w in kwargs.items():        print '%s : %s' % (k, w)dic = {'myclass':'运维班',"gender":'male'}enroll('fentiao', **dic)





小练习(5):(递归函数)

    求 n!  (Tip:n!= 1x2x3x4x ... x n = (n-1)!xn = .....)

def fact(n):    if n == 0:        return 1    else:        return n*fact(n-1)Q = input("num:")print fact(Q)




总结:
    !! 在写递归函数时要有一个明确的结束条件;
    !! 在递归时, 问题规模要越来越小;
    !! 递归函数效率不高,函数调用是通过栈的数据结构来完成的;
    !! 函数每调用一次,栈就会多一层,最多999层,否则会出现栈满溢出现象

小练习(6):(实现二分法)

        例如: n =18 求输出 18 9 4 2 1

def fun(n):    if not isinstance(n,int):        print 'error type'    print n    b=int(n/2)    if b>0:        return fun(n/2)print fun(20)