昨日内容回顾
-
多层语法糖的顺序
语法糖多层使用时,从被装饰的函数开始由下而上读取,由上而下执行。
-
有参装饰器
有参装饰器可以为装饰器提供额外的参数。
def wrapper(parameter_name): def outer(func): def inner(*args, **kwargs): res = func(*args, **kwargs) return res return inner return outer
-
装饰器的修复
装饰器的修复主要目的是为了提高装饰器的逼真程度。对应语句为:
from functools import wraps def outer(func): @wraps(func) def inner(*args, **kwargs): res = func(*args, **kwargs) return res return inner
-
递归函数的基本定义
函数直接或间接地调用自身成为函数的递归。递归函数的特征为,有明确的结束条件,且每次调用自身得到的结果都比上次调用得到的结果简单。
今日内容概要
- 递归函数的编写方法
- 算法简介及二分法
- 三元表达式
- 各种生成式
- 匿名函数
- 常用主要函数
今日内容详细
递归函数的编写方法
- 根据需求先按照依次写出需要执行的代码,写到能总结出规律为止;
- 观察重复的代码,将该部分代码定义为一个新的函数;
- 完善新的函数,确定函数递归的结束条件,明确函数运行需要的参数。
算法简介及二分法
算法是实现某种功能的方法。没有完美的算法,一种算法往往只能为某一类问题提供解决方法。
二分法常用来查找大量有序数字中的某一个,当查找的目标值位于序列中的首尾附近时,使用二分法的效率较低。
二分法的程序模板如下:
def get_number(list_of_num, target_num):
mid_point = len(list_of_num) // 2
if mid_point == 0:
print('Number not found.')
else:
if list_of_num[mid_point] > target_num:
left_list = list_of_num[:mid_point]
get_number(left_list, target_num)
elif list_of_num[mid_point] < target_num:
right_list = list_of_num[mid_point + 1:]
get_number(right_list, target_num)
else:
print('Completed.')
三元表达式
三元表达式适用于单if判断句,当子代码均为一行且较短时,可以采用三元表达式写法,三元表达式不建议嵌套。
if判断句三元表达式写法:"满足条件子代码" if "判断条件" else "不满足条件子代码"
各种生成式
列表生成式
当需要对一个容器类数据内的数据值做统一的操作生成一个新的列表时,可以使用列表生成式。
source_list = ['ada', 'bob']
new_list = [i + '_student' for i in source_list]
for 循环后可以跟if判断句,但不能有else。
字典生成式
字典生成式应用较少,实例:
new_dict = {i:j for i,j in enumerate('hello')}
集合生成式
集合生成式应用也不多,实例:
new_set = {i for i in 'hello'}
"元组生成式"
没有元组生成式,用上述类似形式生成元组得到的是元组生成器。
匿名函数
结构比较简单、不与函数名绑定的函数即为匿名函数。因为不与函数名绑定,所以匿名函数不能单独使用,常与其他函数并用。其结构组成为: lambda 变量名:函数子代码
常见内置函数
-
映射 map(func, iterables)
依次将一个容器对象内的数据,给某个函数传参,并获取其返回值。
-
最大值 max() 最小值 min()
获取一个容器对象内的最大值或最小值。字符串类型比较原则为比较其ASCII码。
-
整合 reduce()
接收一个容器对象内的所有值,按照一定规则整合为一个值返回。调用方式为:
from functools import reduce