上次课学习了循环结构
这样 Python 程序结构已经明了(顺序, 选择, 循环三大结构)13.py
还学习了 python 内置的数据结构: 列表, 元组, 字典
以及相关操作
函数:
相当于一个盒子, 给一个输入, 盒子内部数据处理, 然后返回给你一个输出
例如 abs()函数 () 绝对值函数, 给一个数字进去, 非负不变, 负数变成相反数
函数组成:
函数名, 传入参数, 返回参数
def 函数名(传入参数): ---->14.py
.................. 一顿操作猛如虎
return ............ 一看输出 0-5
具体, 一次可以多个参数(以元组实现返回传递) 15.py
参数检查:
- print(abs('q'))
- TypeError: bad operand type for abs(): 'str'
- print(mylib.my_abs('i'))
- File "f:\pytest\mylib.py", line 6, in my_abs
- if x> 0:
- TypeError: '>' not supported between instances of 'str' and 'int'
我们自己定义的函数没有检查参数的正确性.
可以用 isinstace 函数检查参数, 具体将在错误中详细说明
- def my_abs(x):
- if not isinstance(x, (int, float)):
- raise TypeError('bad operand type')
- if x>= 0:
- return x
- else:
- return -x
默认参数: ---->16.py
常如 power()函数用语计算幂
power(a,b) 定义为 a 的 b 次幂, 默认 power(a)为平方
可变参数: ---->17.py
给进去不确定个数的数字, 求他们的和
参数加上 *
关键字参数: ---->18.py
可以自己给定一些参数进去, 以类似字典类型传入
命名关键字参数 ---->19.py
固定的给定的关键字参数名字, 传入时需要类似字典传入, 不能缺少, 不可重复
* 不是参数, 而是特殊分隔符.
如果缺少 * ,Python 解释器将无法识别位置参数和命名关键字参数:
混合:
- def f1(a, b, c=0, *args, **kw):
- print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
- def f2(a, b, c=0, *, d, **kw):
- print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
至此, Python 的函数与参数调用讲完了, 体会一下所有 python 函数都可以通过这种方式调用 f1(*args, **kw)
可以说, 默认参数, 可变参数都是以 tuple 方式传入, 关键字参数是以 dict 方式传入
递归函数: ---->20.py
- def fact(n):
- if n==1:
- return 1
- return n * fact(n - 1)
fact(5)的运算过程
- ===> 5 * fact(4)
- ===> 5 * (4 * fact(3))
- ===> 5 * (4 * (3 * fact(2)))
- ===> 5 * (4 * (3 * (2 * fact(1))))
- ===> 5 * (4 * (3 * (2 * 1)))
- ===> 5 * (4 * (3 * 2))
- ===> 5 * (4 * 6)
- ===> 5 * 24
- ===> 120
练习:
自制一个密码管理器, 用来保存你的各种密码, 要求功能:
1. 主界面(选项: 密码生成, 密码查询, 密码修改, 密码删除)
2. 密码生成: 自定义一个函数实现, 用户输入密码的描述, 输入密码的长度, 使用随机数生成一个比较复杂的密码, 并且保存在列表中
3. 密码查询, 用户输入关键词, 根据关键词, 查询对应的
4. 密码修改, 先查询到, 然后提示用户输入新的密码, 确定后保存
5. 密码删除, 首先根据关键词查找到你的密码, 然后确定删除后删除
来自为知笔记(Wiz) http://www.wiz.cn/i/77ad7a1f
来源: http://www.bubuko.com/infodetail-3016184.html