zoukankan      html  css  js  c++  java
  • Python 函数

    2.2定义函数:

    函数体内部使用return 返回函数结果;

    函数没有返回时,自动使用return None;

    函数可以同时返回多个值,但其实就是一个tuple。

    2.3 函数的参数,有位置参数 有默认参数

    一是必选参数在前,默认参数在后,否则Python的解释器会报错

    二是如何设置默认参数     默认参数可以简化函数的调用,降低了函数调用的难度

    def power(x,n=2):

        s = 1

        while n > 0:

            n = n-1

            s = s*x

        return s

    测试power(5),power(5,4)

    Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。

    定义默认参数要牢记一点:默认参数必须指向不变对象!

    def add_end(L=None):

        if L is None:

            L = []

        L.append('end')

        return L

    add_end()  add_end()

     2.4 递归函数

     使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的

     解决递归调用栈溢出的方法是通过尾递归优化,尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,

     编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。

     def fact(n):

        return fact_iter(n, 1)

    def fact_iter(num, product):

        if num == 1:

            return product

        return fact_iter(num - 1, num * product)

        Python标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出的问题。

        汉诺塔:   保持上小下大的顺序,每次移动一个棋子  借助y=buff缓冲

       def hanoi(n,x,y,z):

        if n==1:

            print(x,'-->',z)

        else:

            hanoi(n-1,x,z,y)#将前n-1个盘子从x移动到y上

            hanoi(1,x,y,z)#将最底下的最后一个盘子从x移动到z上

            hanoi(n-1,y,x,z)#将y上的n-1个盘子移动到z上

    n=int(input('请输入汉诺塔的层数:'))

    hanoi(n,'x','y','z')

  • 相关阅读:
    mysql show的常见用法
    【转】在ubuntu下完美安装RTX(解决离线、乱码问题)(图片无法显示)
    bcdedit 替代easybcd 编辑grub
    Ruby学习札记(二)[数组]
    Ruby学习札记(一)常用数据
    [分布式]分布式锁
    移动docker数据文件到nas共享盘、释放C盘空间
    [分布式]分布式限流
    [分布式]分布式会话session、spring-session
    学习强国挑战答题学习资料
  • 原文地址:https://www.cnblogs.com/smartwen666/p/7911290.html
Copyright © 2011-2022 走看看