函数能提升应用的模块性,和代码的重复利用率。在不少高级语言中,均可以使用函数实现多种功能。在以前的学习中,相信你已经知道Python提供了许多内建函数,好比print()。一样,你也能够本身建立函数,这被叫作用户自定义函数,来实现定制的功能。编程
函数是一段具备特定功能的、可重用的语句组,用函数名来表示并经过函数名进行功能调用。模块化
函数可以完成特定功能,与黑盒相似,对函数的实用不须要了解函数内部实现原理,只要了解函数的的输入和输出方式便可。因此说,函数是一种功能抽象。函数式编程
使用函数有两个目的:下降编程难度和代码重用。因此在编程中的复杂功能可使用函数实现。函数
其中,Python使用 def 保留字定义了一个函数,语法以下:学习
def <函数名> (<参数列表>):spa
<函数体>设计
return <返回值列表>
注:当参数类表中有多个参数,默认状况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。code
程序调用一个函数需执行一下4个步骤:对象
(1)调用程序在调用处暂停执行。blog
(2)在调用时将实参复制给函数的形参。
(3)执行函数体语句。
(4)函数调用结束给出返回值,程序回到调用前的暂停处继续执行。
从函数的调用过程当中,人们引伸出了函数式编程这个概念。函数式编程是一种编程范式,常见的编程范式还包括命令式编程和面向对象编程等。函数编程的主要思想是把程序过程经过使用一系列函数可以使代码编写更简洁、更易于理解,是中小规模软件项目中最多见的一种编程方式。
可选参数
在定义函数时,若是有些参数存在默认值,即部分函数不必定须要调用程序输入,能够在定义函数时直接为这些参数指定默认值。当函数被调用时,若是没有传入对应的参数值,则使用函数定义时的默认值替代。例如:
使用默认参数:
def printf(str, times = 3): print(str * times)
>>>printf("hello")
hello
hello
hello
输入参数
def printf(str, times = 3): print(str * times) >>>printf("hello",2)
hello
hello
可变量参数
在函数定义时,也能够设计可变量参数,经过在参数前增长星号(*)实现。带有星号的可变参数只能出如今参数列表的最后。调用时,这些参数被看成元组类型传递到函数中。
例如:
def printf(times,*b): print(b*times) printf(2,1,2,3) >>>(1, 2, 3, 1, 2, 3)
Python中提供了按照形参名称输入实参的方式,例如
return = fuc(x1=2, x2=5, x3=8) #其中参数由函数 fuc 决定
因为调用函数时指定了参数名称,因此参数之间的顺序能够任意调整。
return语句用来退出函数并将程序返回被调用的位置继续执行。
同时,函数能够没有return,此时函数并不返回值。函数也能够用return返回多个值,多个值以元组类型保存。
一个程序中的变量包括两类:全局变量和局部变量。全局变量指在函数以外定义的变量,通常没有缩进,在程序执行全过程有效。局部变量指在函数内部使用的变量,仅在函数内部有效,当函数退出时变量将不存在。
其中Python函数对变量的做用遵照以下原则:
(1)简单数据类型变量不管是否与全局变量重名,仅在函数内部建立和使用,函数退出后变量被释放,若有全局同名变量,其值不变。
(2)简单数据类型变量在用 global 保留字声明后,做为全局变量使用,函数退出后该变量保留且值被函数改变。
(3)对于组合数据类型的全局变量,若是在函数内部没有被真实建立的同名变量,则函数内部可使用并修改全局变量的值。
(4)若是函数内部真实建立了组合数据类型变量,不管是否有同名全局变量,函数仅对局部变量进行操做,函数退出后局部变量被释放,全局变量值不变。
函数是程序的一种抽象,它经过封装实现代码复用。能够利用函数对程序进行模块化设计。
程序由一系列代码组成,若是代码是顺序但无组织的,不只不利于阅读和理解,也很难进行维护和升级。所以,把代码当成资源的抽象,造成易于理解的结构。
函数是程序的一种基本抽象方式,它将一系列代码组织起来经过命名供其余程序使用。函数封装的直接好处是代码复用,任何其余代码只要输入参数便可调用函数,从而避免相同代码在被调用处重复编写。代码复用产生了另外一个好处,当更新函数时,全部被调用处的功能都能被更新。
模块化设计指经过函数或对象的封装功能将程序划分红主程序、子程序和子程序间关系的表达。模块化设计是使用函数和对象设计程序的思考方法,以功能块为基本单位,通常有如下两个基本要求:
(1)紧耦合:尽量合理划分功能块,功能块内部耦合紧密。
(2)松耦合:模块间关系尽量简单,功能块之间耦合度低。
归纳来讲,就是模块内部紧耦合、模块之间松耦合
函数做为一种代码封装,能够被其余程序调用,固然,也能够被函数内部代码调用。这种函数定义中调用函数自身的方式称为递归。
递归的两个关键特征:
(1)存在一个或多个基例(问题的最小规模下的解),基例不须要再次递归,它是肯定的表达式。
(2)全部递归要以一个或多个基例结尾。
实例:阶乘的计算。
def fact(n): if n == 0: return 1 else: return n * fact(n-1) n=eval(print()) print(fact(abs(int(n))))
输入:
>>>10 26288800