函数

函数:指通过专门的代码组织,用来实现特定功能的代码段,具有相对的独立性,可以被其他代码重复调用。

  • 函数是一段具有特定功能的、可重用的语句组
  • 函数是一种功能的抽象,一般函数表达特定的功能
  • 两个作用:降低编程难度和代码复用
  • 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
  • 函数能提高应用的模块性,和代码的重复利用率。你已经知道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左右就会报错
 

递归的使用方法

  • 找到递归关系,即把一个复杂的问题转化为与它形式相似、但规模较小的问题
  • 找到递归出口,即问题转化时,当规模足够小,可以直接求解 

 

10-16 17:06