定义函数 Defining Functions

    赋值是一种简单的抽象方法:将名称与值绑定在一起。
    函数定义是一种更强大的抽象手段:将名称与表达式绑定在一起。

1. 定义函数(使用def语句)

def <name>(形参):
    return <返回表达式>
    
  • 函数签名表示函数接受多少个参数。
  • 函数体定义了当前函数被调用时所执行的计算。

  def语句的执行过程:

  1. 创建一个签名为 <name>(<形式参数>) 的函数。
  2. 设置该函数的主体,即第一行后缩进的所有内容。(主体在调用函数之前不会真正执行)
  3. 将<name>绑定到在环境的当前框架中创建的新函数。

2. 调用函数

    调用用户定义函数的过程:

  1. 添加一个本地框架,形成一个新环境。
  2. 将函数的形参绑定到该框架中的参数。
  3. 在新环境中执行函数的主体。

17a3fa31fe5b4c63a29c9ea9d139d688.jpg

ee10a50b046d47829ba837162c4e0ac7.jpg

    函数的签名包含了我们在这里构建的本地框架所需的所有信息

ecd22e180d8f460a9f307c5254d69355.jpg

  • square:命名本地框架
  • x:绑定到参数值的名称

3. 在环境中查找名称

    每个表达式都是在环境中进行评估的。
    到目前为止,当前环境要么是

  • 全局框架,或
  • 局部框架,然后是全局框架。

    (环境图中的一个框,环境是这些框的序列)

总结:

  1. 环境是一系列框架。框架是名称和值之间的绑定。
  2. 名称的计算结果为:在该名称所在当前环境的最早框架中,绑定到该名称的值。

    如果一个环境由一系列框架组成,并且想查找名称在该环境中的含义,应依次检查每个框架

    例如,在square函数的主体中查找某个名称:

  • 先在本地框架中查找该名称。
  • 如果未找到,则在全局框架中查找,因为那是环境中的下一个框架。

     (内置名称(如 "max")也在全局框架中,我们只是不显示它们)

示例:

f3bbfb2d3e3142ddbe3bc0214b5e9dc5.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值