递归
特性python
- 必须有明确的结束条件; - 每进入深一层递归,问题规模比上层应有所减小;
def calc(n): print(n) if n // 2 > 0: return calc(n // 2) calc(10)
函数式编程
高阶函数
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()
欢迎关注微信公众号: 村雨1943;创做不易,未经赞成,转载请注明出处~