1.函数
1.1 基本定义
定义 : 将一组语句的集合通过函数进行封装 , 简单来说是具有一定功能的代码容器 ,
想要执行这些语句 , 只需要调用函数的名称即可 .
特性 :
* 1. 可重复使用 , 减少代码冗余 .
* 2. 组织结构清晰 , 可读性增强 .
* 3. 可扩展性提高 , 便于维护 .
1.2 使用规则
函数必须先定义后使用 , 将一段代码封装成函数 , 在需时直接调用函数名 .
定义阶段 : 申请内存空间将函数体放进去 , 将内存地址绑定给函数名 .
调用阶段 : 通过函数名得到函数体的地址 , 加上括号执行函数体代码 .
定义阶段时只检测语法不执行代码 , 调用阶段才会执行函数体 , 逻辑错误才会被检查到 .
1.3 语法定义
需要关键字def声明函数 , 函数后面紧跟一个括号 , 括号后面紧跟 ':' 冒号 .
括号内可以写上参数 , 参数是对象的标识符 , 参数可以用多个 , 参数之间使用逗号隔开 .
: 冒号下一行跟函数的代码块 , 也称为函数体 .
缩进 , 表示代码块开始 , 写代码块 . . . 缩进结束表示代码块结束 .
def 函数名( 参数1 , ···) :
"""
函数的说明文档, 可以通过doc函数获取函数的信息.
:param : 参数的说明
:return: 返回值的说明
"""
代码1. . .
代码2. . .
return 值
函数名( 参数1 , . . . )
定义函数和类后面需要空两行 , 否则会提示PEP8规范 :
英 : PEP8 : E305 expected 2 blank lines after class or function definition , . . .
中 : PEP8 : E305类或函数定义后应有 2 个空行
1.4 语法检测
def func ( ) :
qwe
def func ( ) :
qwe
func( )
1.5 演变过程
* 1. 需要重复执行某一段代码 .
print ( 1 )
print ( 2 )
print ( 3 )
print ( 1 )
print ( 2 )
print ( 3 )
print ( 1 )
print ( 2 )
print ( 3 )
* 2. 将需要重新执行的代码进行缩进 , 在代码块上面使用def关键字声明一个函数来存储代码块 .
def func ( ) :
print ( 1 )
print ( 2 )
print ( 3 )
func( )
func( )
func( )
使用pythontutor查看程序的执行过程 .
* 1. 先检测函数体的语法
* 2. 调用函数 , 进行参数传递 , 这个没有设置参数 .
* 3. 执行函数体 , .
2. 函数体地址
2.1 函数名与变量名
变量名指向变量值的内存地址 , 值是一个字面常量 .
函数名指向函数体的内存地址 , 函数体体一段代码 .
打印变量名 , 引用对象本身 , 打印的就是值 .
print ( 变量名)------ > 被处理 ----- > 显示内存地址存放的值 , 不能在加 ( ) .
print ( 函数名 ) ------ > 没处理 ------ > 显示函数体所在内存的地址 , 加 ( ) 执行立刻函数体 .
函数可以加括号是语法定义的 .
函数名 + ( ) --- > 内存地址 + ()---- > 找到内存地址执行代码块 .
def func ( ) :
print ( 1 )
print ( func)
print ( type ( func) )
2.2 引用函数体地址
将函数的内存地址引用绑定给其它变量 .
其它的变量加上括号可以执行函数体代码 .
def func1 ( ) :
print ( 1 )
func2 = func1
print ( func1)
print ( func2)
func1( )
func2( )
3. 函数的类型
3.1 分类
函数的三种类型:
* 1. 无参函数 函数在定义阶段括号内没有参数 .
* 2. 有参函数 函数在定义阶段括号内有参数 , 提供参数后 , 参数可以在函数体中使用 .
* 3. 空函数 函数在定义阶段括号内没有参数 , 函数体为空 ( pass 或 ··· ) .
函数的 '参数' 与 '返回值' 取决于是否需要对函数传入值与需要返回值 .
'pass' 或 '···' , 表示空语句 , 本身没有含义 , 使用它是为了符合编码的规则 .
3.2 无参函数
def aa ( ) :
x = 10
y = 10
print ( x + y)
aa( )
3.3 有参函数
def bb ( x, y) :
print ( x + y)
bb( 10 , 10 )
3.4 空函数
def cc ( ) :
pass
cc( )
def dd ( ) :
. . .
dd( )
4. 函数返回值
4.1 返回值
返回值是函数执行结束时返回的结果 , 需要使用关键字return ,
格式 :
return 值 1 , . . .
返回值的情况 :
* 1. 没有return语句 , 默认为的放回值为None .
* 2. 只有return关键字 , 后面没有跟参数等同return None .
* 3. 返回单个值 : return 值 1
* 4. 返回多个值 : return 值 1 , 值 2 , . . . ( 多个以元组类型放回 )
* 返回的值可以赋值给一个变量 .
一个函数中可以没有return也可以有多个return , 只要执行一次return语句 ,
立刻将return后的值返回 , 并结束函数的运行 .
4.2 执行return
def aa ( ) :
return
print ( 666 )
print ( aa( ) )
res = aa( )
print ( res)
def bb ( ) :
print ( 123 )
return
print ( bb( ) )
4.3 不写return
def aa ( ) :
pass
print ( aa( ) )
4.4 只写return
def aa ( ) :
return
print ( aa( ) )
4.5 返回单个值
def aa ( ) :
return 1
res = aa( )
print ( res, type ( res) )
4.6 返回多个值
def aa ( ) :
return 1 , 2 , 3
res = aa( )
print ( res, type ( res) )
num = 1 , 2 , 3
print ( num, type ( num) )
4.7 返回表达式
return后面可以是一个表达式 , 先执行表达式得到结果 , 再将结果返回 .
def aa ( ) :
return 1 + 1
res = aa( )
print ( res)
4.8 解包赋值
将序列类型的返回值解包赋值给多个变量 .
def ee ( ) :
return 1 , 2 , 3
num1, num2, num3 = ee( )
print ( num1, num2, num3)
5. 函数说明文档
help ( ) 函数 : 能够打印出指定方法 , 函数 , 变量 , 类的说明信息 .
dir ( ) 函数 : 能够列出对象的所有成员 , 帮助你快速查找方法和变量 .
. __doc__方法 : 能够查看对象可以使用的方法 .
def func ( x, y) :
"""
:param x: 加数
:param y: 被加数
:return: 返回 x+y
"""
return x + y
res = func( 1 , 2 )
print ( res)
help ( func)
print ( func. __doc__)
print ( dir ( func) )
运行工具窗口显示 :
3
Help on function func in module __main__ :
func ( x , y )
: param x : 加数
: param y : 被加数
: return : 返回 x + y
: param x : 加数
: param y : 被加数
: return : 返回 x + y
[ '__annotations__' , '__call__' , '__class__' , '__closure__' , '__code__' , '__defaults__' , '__delattr__' , '__dict__' , '__dir__' , '__doc__' , '__eq__' , '__format__' , '__ge__' , '__get__' , '__getattribute__' , '__globals__' , '__gt__' , '__hash__' , '__init__' , '__init_subclass__' , '__kwdefaults__' , '__le__' , '__lt__' , '__module__' , '__name__' , '__ne__' , '__new__' , '__qualname__' , '__reduce__' , '__reduce_ex__' , '__repr__' , '__setattr__' , '__sizeof__' , '__str__' , '__subclasshook__' ]
6. 函数提示信息
函数的参数可以是任意类型但是 , 但传入的值不符合要求 , 就会报错 .
为了防止传参出错 , 可以设置参数提示 . :
使用方法 :
def 函数名 ( 参数 1 : 参数 1 的类型 , 参数 2 : 参数 2 的类型 ) - > 返回值的类型 :
pass
* 将数据类型的字面常量写上即可 , 其中any表示所有类型 .
def aa ( x: int , y: int ) - > int :
z = x + y
return z
aa( 1 , 2 )
当提供的参数 , 类型不符的时候会高亮提示 .
查看参数类型方式 :
* 1. 输入函数名后 , 光闭第一次进入括号后 , 会显示参数类型提示 .
* 2. 按住Ctrl将鼠标移动到函数名下面 , 会显示参数类型提示和返回值类型 .