版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/github_39655029/article/details/82765300
递归
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()