遞歸
特性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;創做不易,未經贊成,轉載請註明出處~