函数 - 图1

功能介绍

函数function(或者称为方法method,当然,严格来说,这两者也有区别,不过我们一般认为两者等价),可能和数学中的函数如y = 2x+1的形式相差甚远,但是归根到底,两者有着非常深的内部关联,它们都是逻辑处理的集合,实现某种逻辑,函数的声明可以概括为三要素,方法名,参数,返回值。当然,必不可少的就是方法体,当然方法名可以为空,那就是匿名函数,返回值也可以为空,那就是不返回,参数也可以为空,也可以是多个参数,参数的多少没有特殊的限制,但是一般我们开发时会限制,避免传递过多的参数导致程序复杂化,对应到刚才数学中的函数的例子y = 2x+1来说,参数是x,方法体是return 2x+1,返回值就是y了,也就是2x+1。

使用说明

我们接刚才的例子,使用python写一个函数,y=2x+1

  1. def liner_fun(x:int):
  2. return 2*x+1
  3. #def 为python定义函数的关键字
  4. #此函数的名字为liner_fun
  5. #该函数只有一个参数x,参数的类型是int
  6. #函数处理的逻辑为2*x+1,为了便于其他代码调用该方法,需要将值返回
  7. y = liner_fun(10)
  8. print(y) #21
  9. #此处print()就是一个系统级别的函数,实现的逻辑功能就是将内容打印到控制台

函数名

对于以上例子中显式制定了函数的名字liner_fun,有些情况下,我们可能不需要该函数有名字(当然,函数有名字肯定没问题),简化代码量等,这时候就需要引出匿名函数,如下

  1. #语法 lambda 参数1,参数2,...,参数n:表达式
  2. s = lambda x:2*x+1
  3. print(s(10)) #21

参数

参数在Python3.6后引入了type hint(类型提示),即在python动态语言的框架下,增加了类型的提示

  1. def liner_fun(x:int): #有type hint ,即x的类型需要是int
  2. return 2*x+1
  3. def liner_fun(x): #没有type hint
  4. return 2*x+1

默认参数

有些时候我们在调用方法传递参数时,有些参数大多数情况下可以是一个默认值,如果该参数有默认值,那么我们便可以不用传递,节省开发工作量

  1. def calc(x=2,y=10): #参数x的默认值是2,y的默认值是10
  2. return x+y
  3. print(calc()) #12
  4. print(calc(6)) #16
  5. print(calc(y=6)) #8
  6. print(calc(1,2))#3

可变参数

有时,我们对于参数的长度不确定,比如说工作一周内每天的完成工件,可以通过可变参数的形式来实现对于不定长参数的控制

  1. def calc(*x): #在参数前增加*即表示为可变参数,本质是一个数组
  2. sum =0
  3. for i in x:
  4. sum+=i
  5. return sum
  6. print(calc(1,2,3,4,5))
  7. #关键字传递实参数量不定时,也能进行处理,如果形参列表的最后一个形参前缀为"**",那么所有多余的关键字传递实参将会被收入一个字典对象中
  8. def example_func(x,y,**other):
  9. print('others{0}'.format(list(other.keys())))
  10. for k in other.keys():
  11. print(k)
  12. example_func(1,y="22",foo=2,bar=5)
  13. #打印如下内容

others[‘foo’, ‘bar’] foo bar

Tips:

练习题

实现如下函数

  • n=0,1,2时返回n,其他大于零的情况返回值等于n-1的返回值和n-2的返回值之和
  • 某工厂车辆的初始速度一般为10公里每小时,加速度统一为5公里每小时,使用函数根据不同的初始速度,计算判断发动后某时点的时速
  • 编写一个匿名函数,实现将传入的手机号字符串中间四位星号展示