Python基础篇--函数简介

python函数

    python中函数有两种,一种是内置函数,一种是自定义函数。这里不晓得有没有大牛知道为什么内置函数可以直接调用,没见在哪里定义了。另外一种是自定义函数,函数的定义方式如下,关键字def后面跟空格,再跟函数名,参数,函数体,函数名的命名可以使用posix命名或者小驼峰命名,函数定义了,但是不会自发执行函数体中的内容,只有在程序中显示的调用了函数才会执行函数体中的内容。

     定义函数   

        def  func(params):   #必须带:并且:后面必须为代码块,切代码块不能为空

                pass

     调用函数

         func(needParams) #调用函数直接用函数的方法名即可,且当参数不是收集参数时,实参必填

     函数中参数的作用域

         对于全局变量,函数可以自行调用,但是函数内部的变量则只能在内部使用,除非定义成全局变量,globals()和locals()为           两个内置函数,调用他们会返回全局参数的字典和局部参数的字典。对于变量,没有做特殊定义,只能局部变量在局部和           其内部调用,总之是只能从里面访问外面不能从外面访问里面。例外:函数内部的变量可以用global声明成全局变量

     函数中的参数:

        ·普通参数:就是一般的参数,可以根据位置来传参也可以通过关键字来传参

            def  commonArgs(name,age):pass

            commonArgs('zhangsan',20)     or     commonArgs(name = 'lisi' ,20)

        ·默认参数:也叫关键字参数,在定义函数时候给参数一个默认的值,所以这个参数可以传参也可不传参,

             def  defaultArgs(name,age = 18):pass

            defaultArgs('zhangsan')    or defaultArgs('zhangsan',age = 20)

        ·收集参数:在不确定有多少个传入参数的时候可以使用收集参数,收集参数又分普通收集参数和关键字收集参数

            def  collectionCArgs(*args):pass  #普通收集参数       def collectionDArgs(**args):pass #关键字收集参数

            collectionCArgs()  or    collectionCArgs('1',1)        collectionDArgs()  or collectionDArgs(name ='1',age=2)

     对于参数,用的最多的是混合使用,混合使用参数,一定是普通参数在前面,默认参数(关键字参数)在后面,当普通收集参数后面有普通参数时,给这个 普通参数传值一定要用关键字传值,

           def  egArgs(name,age,*args,hobby,sex='man',**othArgs,like = 'dodo'):pass

在这个函数中,前面都是普通参数,从sex参数后面都是关键字参数,顺序不能错,且给在收集参数后面的参数传值时一定要用关键字传值

           egArgs('张三',18,1,2,'33',hobby='jump',height='180',like='toto')


递归函数:函数的自我调用,优点:代码逻辑清晰,更贴近逻辑  。缺点:消耗性能,

    在python中,函数的递归不会导致程序崩溃,但是会抛出异常,python中限制了递归的深度,常见的递归有斐波拉契数列,二分查找算法,八皇后问题,汉诺塔问题,下面我就简单的写下汉诺塔的递归调用(伪代码),对于汉诺塔游戏有不清楚的可以自己去百度下怎么玩

    设计原型:柱子A,柱子B,柱子C ,碟子 n(不确定的正整数)

    把n个碟子从A -> C ,对于这样的问题,看起来很复杂,其实需要我们一层层的揭开就好理解了,就像高中数学,我们从一般推理出特殊,假定只有2个盘子,我们的做法是 A->B, A->C, B->C, 那么如果有三个盘子呢? 我们做法其实也三步 1:把A上的两个盘子移到b上,2:把A上的最后一个盘子移到C上,3:把B上的两个盘子移到C上,

    那么现在假定有n个 def  gameNuo(n,A,B,C): 要把n个盘子从A移动到C借助B

        1:把n-1个盘子从A移动到B借助C gameNuo(n-1,A,C,B)

        2:把A上的一个盘子移动到C上

        3:把B上的n-1个盘子移动到C上借助A gameNuo(n-1,B,A,C) ,至此盘子移动完毕,随着n的减少,当n = 2时就按照已有的程序执行,这就是递归,根据特殊情况推出一般情况

        def gameNuo(n,A,B,C):

               if n == 1 :

                    print(A,'->',C)

               gameNuo(n-1,A,C,B)

               pring(A,'->',C)

               gameNuo(n-1,B,A,C)

            

        

        

猜你喜欢

转载自blog.csdn.net/lx17671694697/article/details/80686005
今日推荐