递归
- 特性
- 必须有明确的结束条件;
- 每进入深一层递归,问题规模比上层应有所减少;
- 递归效率不高,层次更多会导致栈溢出;
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()
欢迎关注微信公众号:村雨1943;创作不易,未经同意,转载请注明出处~