美文网首页ITS·黑客
Python笔记5(函数可变、关键字参数及组合、递归函数)

Python笔记5(函数可变、关键字参数及组合、递归函数)

作者: 阿凯Awesome | 来源:发表于2017-04-08 10:52 被阅读20次

    可变函数:定义calc(numbers)后括号内必须要传入list或tuple。利用可变函数calc(*numbers)就直接可以输入元素。在这基础上,如果要传入list或tuple而非元素,可直接calc(*list)这样把其变为元素传入。

    可变参数在函数调用时自动将元素组装成tuple


    关键字参数:person(...,**kw)①关键字函数可以传入含参数名的函数,自动组装成一个dict,创建可选项。和可变参数类似可以先有一个dict,然后来传入person(....,**dict)②此时dict的所有key-value都会出现。①②相比,kw是已定义函数意义内,对调用的dict本身无影响。

    关键字参数传入时,要以x=y的形式传入。


    命名关键字参数:person(name,age,*,city,job)通过*来分隔前后,使后面的参数限制性接收的参数,此时就只接收city,job这些对应的key-value了。如果*这一项已经是一个可变参数,则后面的也是命名关键字参数。/命关字参数传入时,必须要带参数名,如city='Beijing ',不然就识别为位置函数而导致无法传入了。/命关字参数也可以设定默认值,设定默认参数。


    参数组合:参数定义顺序必须是,必选参数-默认-可变-命关字-关字参数。

    传入元素时,按照对应位置传入,可变、关字、命关字分别按相对应的形式传入。

    其中

    func(*args,**kw)

    调用函数时均可按照这个方式来,其也是按照不同的参数类型来传入元素的。f1(*args,...)可以连续传入,所以对于必选参数,也可以按照这种方式来进行,传入

    调用语法:可变参数,直接传入或*tuple传入;关键字参数,直接传入(x=y)或**dict传入;命名关键字参数,同关键字参数,但限制传入的类别(定义时,前棉要有可变参数或*来做分隔)


    递归函数:比如计算n!可以用循环来做,以这种逻辑为基础,定义函数内含有该定义函数,从而有清晰的循环。

    栈、栈帧:调用函数有栈之说,栈是数据结构,由栈帧来填充,进入函数调用会加一层栈帧,调用函数返回值时,栈就会减去一层栈帧。而栈的大小是有限的,递归只调用不返回值就会有溢出。

    尾递归优化:使函数调用返回值返回到函数本身内,调用-返回-调用-返回---,如此以只占用一层栈帧。

    但还是有遗憾...!?尾递归也会导致栈溢出?!

    任何递归函数都存在栈溢出问题。


    汉诺塔代码:(需要逻辑理解,无return)

    Python笔记5(函数可变、关键字参数及组合、递归函数)

    相关文章

      网友评论

        本文标题:Python笔记5(函数可变、关键字参数及组合、递归函数)

        本文链接:https://www.haomeiwen.com/subject/pfllattx.html