函数、函数返回值、函数对象及特征和作用域

数学函数

函数定义

传统函数的定义:给定一个集合A,假设其中的元素为x,现对A中的元素x实加对应法则f,记作f(x),得到另一个数集B。假设B中的元素为y,则x和y直接的等量关系可以用y=f(x)表示,我们把这个关系式就叫函数关系式。
近代函数的定义:设A,B是非空的数集如果按照某种确定的对应关系f,使对于集合A中任意一个数x,在集合B中有唯一确定的数y和它对应,那么就称映射f:A-B为集合A到B的一个函数y=f(x)

数学模型

数据表模型

这里写图片描述

映射模型

由映射关系图可知,一个自变量x经过关系式后得到唯一的一个值,其中这个关系式也叫函数,得到的这个值就叫做函数返回值
这里写图片描述

函数模型

这里写图片描述
转化为程序语言为:

#!/bin/python3
#-*- coding: UTF-8 -*-
#created time 2018-04-14
def f(x):
    y = 0
    if x < 0:
        y = x-10
        return y
    elif x > 0:
        y = x+10
        return y
print(f(3))
运行结果:
[python@centos7 414]$./t.py 
13

模型对照总结

  • 函数返回值是一个具体经过关系式处理后得到一个数值或对象结果,而不是一个关系式(或表达式)
  • 函数中的自变量经过关系式后,必定在因变量中得到一个唯一的值
  • 数学函数中的f相当于计算机语言函数中的函数名,调用函数用()进行传参
  • 数学函数中的关系式在计算机语言中相当于函数体,用计算机语言来描述关系式
  • 函数得到返回值时,表示自变量经过关系式处理得到结果,说明计算完毕,函数调用完成

函数返回值

错误案例1

错误返回值是表达式

#!/bin/python3
#-*- coding: UTF-8 -*-
#created time 2018-04-14
def f(n):
    if n ==1:
        return 1
    return sumfactor = n*f(n-1)
print(f(5))
运行结果:
[python@centos7 414]$./factor.py 
  File "./factor.py", line 7
    return sumfactor = n*f(n-1)
                     ^
SyntaxError: invalid syntax

错误案例2

错误案例2:无法到达返回值

案例知识地基:压栈

字节码指令:https://docs.python.org/2/library/dis.html?highlight=load_const#opcode-LOAD_CONST
#!/bin/python3
#-*- coding: UTF-8 -*-
#created time 2018-04-14
import dis
def f(n):
    #sumfactor = n*f(n-1)
    a = 100000
    if n ==1:
        return 1
    return n*f(n-1)
print(dis.dis(f))

运行结果:

[python@centos7 414]$./factor.py 
  7           0 LOAD_CONST               1 (100000) #加载常量
              3 STORE_FAST               1 (a)  #添加本地

  8           6 LOAD_FAST                0 (n) #push到stack
              9 LOAD_CONST               2 (1) #加载常量
             12 COMPARE_OP               2 (==) #执行bool操作
             15 POP_JUMP_IF_FALSE       22 #若错误弹出最顶层的栈帧

  9          18 LOAD_CONST               2 (1) #加载常量
             21 RETURN_VALUE                   #返回

 10     >>   22 LOAD_FAST                0 (n) #压栈
             25 LOAD_GLOBAL              0 (f) #压栈全局对象f
             28 LOAD_FAST                0 (n) #压栈
             31 LOAD_CONST               2 (1) #加载常量
             34 BINARY_SUBTRACT                #tos=tos1-tos
             35 CALL_FUNCTION            1 (1 positional, 0 keyword pair)       #系统调用函数
             38 BINARY_MULTIPLY                #tos=tos1*tos
             39 RETURN_VALUE
None

错误案例循环无法到达返回值

#!/bin/python3
#-*- coding: UTF-8 -*-
#created time 2018-04-14
def f(n):
    sumfactor = n*f(n-1)
    if n ==1:
        return 1
    return sumfactor
print(f(5))
  • 函数在压栈时,首先对n*f(n-1)进行压栈,压栈发现又有函数调用,依次类推导致递归层到达限制,退出函数体

返回值为单值

#!/bin/python3
#-*- coding: UTF-8 -*-
#created time 2018-04-14
def f(n):
    return 1,2,3
def fn(n):
    return 1
def fnn(n):
    return [1,2,3]
print(f(5))
print(fn(5))
print(fnn(5))
运行结果:
[python
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值