函数
函数:指通过专门的代码组织,用来实现特定功能的代码段,具有相对的独立性,可以被其他代码重复调用。
- 函数是一段具有特定功能的、可重用的语句组
- 函数是一种功能的抽象,一般函数表达特定的功能
- 两个作用:降低编程难度和代码复用
- 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
- 函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
定义一个函数
函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号 : 起始,并且缩进。
return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。
Python 定义函数使用 def 作为关键字
def 函数名(参数列表):
函数体
函数调用
定义一个函数:给了函数一个名称,指定了函数里包含的参数,和代码块结构。
# 定义函数
def printme( str ):
# 打印任何传入的字符串
print (str)
return
# 调用函数
printme("我要调用用户自定义函数!")
printme("再次调用同一函数")
检查传入参数的类型
def my_ad(x):
if not isinstance(x,(int,float)):
raise TypeError#抛出异常
print("kk")
参数
必需参数,关键字参数,默认参数,不定长参数
必需参数
必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
调用 printme() 函数,你必须传入一个参数,不然会出现语法错误:
#可写函数说明
def printme( str ):
"打印任何传入的字符串"
print (str)
return
# 调用 printme 函数,不加参数会报错
printme()
结果
Traceback (most recent call last):
File "test.py", line 10, in <module>
printme()
TypeError: printme() missing 1 required positional argument: 'str'
关键字参数
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
命名关键字参数:限定后边的参数必须是以关键字形式传参
默认参数
调用函数时,如果没有传递参数,则会使用默认参数。以下实例中如果没有传入 age 参数,则使用默认值
return 语句
return语句就是把执行结果返回到调用的地方,并把程序的控制权一起返回
程序运行到所遇到的第一个return即返回(退出def块),不会再运行第二个return。
但是也并不意味着一个函数体中只能有一个return 语句
函数没有 return,默认 return一个 None 对象 ,else 中没有 return 就没有出口,这个程序是自己内部运行,程序没有返回
在交互模式下,return的结果会自动打印出来,而作为脚本单独运行时则需要print函数才能显示。
python中什么是交互模式:结尾有3个>符号(>>>)。>>>被叫做Python命令提示符(prompt)
输入一行python代码就会执行该代码,这种模式就叫做Python交互模式(interactive mode)
默认情况下,遇见 return 函数就会返回给调用者,但是 try,finally情况除外
函数递归
函数作为一种代码封装,可以被其他程序调用,当然,也可以被函数内部代码调用。这种函数定义中调用函数自身的方式称为递归。函数递归是在循环调用自己,是没有结束条件的,要想正常执行,必须要有结束条件如果没有结束条件就会陷入无限递归,不能出现无限递归,实际工作中要是有其他较好的办法建议不要使用递归函数
递归调用都是一个无限循环的过程,但在python对函数的递归调用的深度做了限制,这个限制就是
递归深度:python官网介绍:默认的递归深度是1000,不会超过1000但是会在996左右就会报错
递归的使用方法
- 找到递归关系,即把一个复杂的问题转化为与它形式相似、但规模较小的问题
- 找到递归出口,即问题转化时,当规模足够小,可以直接求解