一 函数知识体系
什么是函数?
为什么要用函数?
函数的分类:内置函数与自定义函数
如何自定义函数
语法
定义有参数函数,及有参函数的应用场景
定义无参数函数,及无参函数的应用场景
定义空函数,及空函数的应用场景
调用函数
如何调用函数
函数的返回值
函数参数的应用:形参和实参,位置参数,关键字参数,默认参数,*args,**kwargs
高阶函数(函数对象)
函数嵌套
作用域与名称空间
装饰器
迭代器与生成器及协程函数
三元运算,列表解析、生成器表达式
函数的递归调用
内置函数
面向过程编程与函数式编程
二 函数基础
一 引子
1 1 什么是函数 2 函数1就是具备某一功能的工具 3 4 5 2 为什么要用函数 6 1 程序的组织结构不清晰,可读性差 7 2 代码冗余 8 3 可扩展性差 9 10 3 如何用函数 11 函数的使用必须遵循的原则:先定义,后调用 12 修理工事先准备工具的过程即函数的定义 13 修理工遇到应用场景拿来工具就用即函数的调用 14 15 语法: 16 def 函数名(参数1,参数2,...): 17 """ 18 文档注释 19 """ 20 code1 21 code2 22 code3 23 ...... 24 return 返回值 25 26 def:定义函数的关键字 27 函数名: 就相当于一个变量名,指向函数的内存地址, 28 注意:函数的内存地址()就可以出发函数体代码的执行 29 30 参数: 参数是函数的调用者为函数体代码传值的媒介,在python中函数的参数无需声明类型 31 """文档注释""" : 推荐写上 32 代码块:就是函数体功能的具体实现 33 return 返回值 :函数体代码块运行的成果 34 35 36 函数的使用分为两个阶段: 37 定义阶段: 只检测语法,不执行代码 38 调用阶段:运行函数体代码 39 def foo(): 40 xxx 41 print()
二 定义函数
三 调用函数
函数的调用:函数名加括号 1 先找到名字 2 根据名字调用代码
无return->None return 1个值->返回1个值 return 逗号分隔多个值->元组
四 函数的参数
#形参即变量名,实参即变量值,函数调用时,将值绑定到变量名上,函数调用结束,解除绑定
#1、位置参数:按照从左到右的顺序定义的参数 位置形参:必选参数 位置实参:按照位置给形参传值
总结:依位传值
#2、关键字参数:按照key=value的形式定义的实参 无需按照位置为形参传值 注意的问题: 1. 关键字实参必须在位置实参右面 2. 对同一个形参不能重复传值
总结:依关键词传值
#3、默认参数:形参在定义时就已经为其赋值 可以传值也可以不传值,经常需要变得参数定义成位置形参,变化较小的参数定义成默认参数(形参) 注意的问题: 1. 只在定义时赋值一次 2. 默认参数的定义应该在位置形参右面 3. 默认参数通常应该定义成不可变类型
总结:选择传值
#4、可变长参数: 可变长指的是实参值的个数不固定 而实参有按位置和按关键字两种形式定义,针对这两种形式的可变长,形参对应有两种解决方案来完整地存放它们,分别是*args,**kwargs
总结:*元组与位置参数转换,**字典与关键字参数转换
#5、命名关键字参数:
*后定义的参数,必须被传值(有默认值的除外),且必须按照关键字实参的形式传递可以保证,传入的参数中一定包含某些关键字
总结:限制关键词传值
五 练习题
三 函数对象、函数嵌套、名称空间与作用域、装饰器
四 迭代器、生成器、面向过程编程
五 三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数
六 函数草稿