递归
- 特性
- 必须有明确的结束条件;
- 每进入深一层递归,问题规模比上层应有所减少;
- 递归效率不高,层次更多会导致栈溢出;
def calc(n): print(n) if n // 2 > 0: return calc(n // 2) calc(10)
函数式编程
计算机:在计算机层面,CPU执行的是加减乘除以及各种判断和跳转指令代码,因而汇编是最贴近计算机的语言,越接近计算机底层的语言执行效率越高;
计算:指数学意义上的计算,越抽象的计算,离计算机硬件越远,效率越低;
定义:一种抽象程度极高的编程范式,纯粹的函数式编程语言编写的函数没有变量,故对于一个函数,只要输入确定,输出就确定,函数式编程是一种讨论如何编程的方法论,主要思想是把运算过程尽量集成一系列嵌套的函数调用;
高阶函数
定义:把其他函数作为参数的函数叫做高阶函数;
def add(x, y, func): return func(x) * func(y) result = add(4, 8, abs) print(result)
修饰器
- 原则:
- 不能修改被装修函数的源代码;
- 不能修改被装饰函数的调用方式;
# --*--coding:utf-8--*-- #! /usr/bin/python3 user, passwd = 'k', '12345' def auth(func): def wrapper(*args, **kwargs): username = input('username:').strip() password = input('passwd:').strip() if user == username and passwd == password: print('passed') func(*args, **kwargs) else: exit('Invalid username or password.') return wrapper def index(): print('welcomt to index page') @auth def home(): print('welcome to home page') @auth def bbs(): print('welcomt to bbs page') index() home() bbs()
迭代器与生成器
生成器:generator,列表元素按某种算法推算而出,一边循环一边计算的机制,称为生成器,只有在调用时才产生相应数据;
直接作用域for循环的对象称为可迭代对象,Iterable,使用isinstance()判断一个对象是否为Iterable对象,可用于for循环的数据类型有 以下两类:
集合数据类型:list、tuple、dict、set、str等
generator,包括生成器和带yield的可迭代对象;
迭代器: 可以别next()函数调用并不断返回下一个值的对象称为迭代器,他们表示一个惰性计算的序列,Iterator;
生成对象都是迭代器对象,list、dict、str虽然是可迭代对象,但却不是迭代器,使用iter()函数可将他们从迭代对象转换为迭代器;
json 和 pickle 数据序列化
# json序列化与反序列化 import json info = { 'name':'k', 'age':22 'sex':'男' } # 序列化 f = open('test.txt', 'w') f.write(json.dumps(info)) # 反序列化 f = open('test.txt', 'r') data = json.loads(f.read()) print(data['sex']) f.close()
# pickle序列化与反序列化 import pickle info = { 'name':'k', 'age':22 'sex':'男' } # 序列化 f = open('test.txt', 'wb') f.write(pickle.dumps(info)) #与下一句作用相同 pickle.dump(info, f) # 反序列化 f = open('test.txt', 'rb') data = pickle.loads(f.read()) print(data['sex']) f.close()