廖雪峰python学习笔记【5】函数的参数和递归函数

一、函数的参数

1. 位置参数:参数个数和位置确定,调用者必须依次传入。

2. 默认参数:

    2.1 定义方式:位置参数在前,默认参数在后。示例:def my_power(base, sqr=2) : # 不传入默认参数sqr时,默认计算base的2次方;传入sqr参数时,计算base的sqr次方。

    2.2 原则:变化大的参数作为位置参数,变化小的参数作为默认参数,降低程序调用的复杂性。

    2.3 当定义的函数存在多个默认参数时,调用和可以不按默认参数的顺序输入默认参数,但此时必须提供默认参数名。

    2.4 注意:关于默认参数的内存分配,在函数定义时,已经分配了存储默认参数变量的内存和默认参数指向的对象的内存。如果改变了默认参数指向对象的内存中的值,则每次调用函数,默认参数的值都被改变了。因此默认参数必须指向str和None等不可变对象!!!

        2.4.1

3. 可变参数:

    3.1 传入参数的个数是可变的。这些可变参数在函数调用是自动组装成一个tuple。示例:def my_power(*params) : # 在参数名前加'*'表示可变参数。

    3.2 如果事先定义了一个list或tuple时,希望将list或tuple的元素作为可变参数传递给函数,可通过my_power(*list)或my_power(*tuple)的方式调用函数。
4. 关键字参数:

    4.1 允许传入0个或任意个含参数名的参数。关键字参数在函数调用时,自动组装为一个dict。

    4.2 示例:
def person(name, age, **kw):

        4.2.1 调用方式:

                1)print(person("lfc", 28, city = "beijing"))

                2)print(person("lfc", 28, **{"city" : "beijing"}))

    4.3 事先定义好的dict可通过person(**dict)的方式调用。

5. 命名关键字参数:定义失败。

6. 参数组合:定义函数时,各种类型的参数需按如下顺序存放: 必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

二、递归函数

1. 每当进入一个函数调用,栈就会增加一层栈帧;每当函数返回,栈就会减少一层栈帧。

2. 尾递归:

    2.1 定义:函数返回时,完全调用自身,返回语句中不含表达式。

    2.2 作用:针对尾递归优化的编程语言,尾递归调用栈帧不会增加。python没有针对尾递归做优化。

    2.3 尾递归怎么优化??

3. 汉诺塔递归求解心得:

    3.1 不要试图重现递归的每一步。务必放弃对递归过程的展现!!!

    3.2 对于递归仅需要明确两点:

        3.2.1 递归的终止条件。

        3.2.2 怎么由n-1获取n。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值