#可以使用isinstance()方法判断一个对象是不是iterable对象(可迭代对象)。
#可以被next()函数调用并不断返回下一个值的对象称为迭代器。
#可以直接作用于for循环的对象统称为可迭代对象。
#生成器都是Iterator对象,但list、dict、str、虽然是Iterable,却不是Iterator.
#可以使用iter()函数把list、dict、str等Iterable对象变成Iterator.
第一个程序
迭代器-Iterator
# encoding: utf-8
'''
# @Author : ccq
# @File : iterator.py
# @Time : 2019/6/11 20:44
'''
# 迭代器
a = [1, 2, 3]
b = iter(a)
count = 0
try: # 把可能出现异常的语句放到try里执行,一旦出现异常则中断运行并且换到except里去
print(b.__next__())
count += 1
print(b.__next__())
count += 1
print(b.__next__())
count += 1
print(b.__next__())
count += 1
except StopIteration: # 抛出异常,当遇到异常换到except里执行
print("超出范围,一共只进行了%s次" % (count))
#通过使用iter函数,把a这个可迭代对象变成迭代器。使用try和except进行异常处理。
#内置函数
#从python3.7的文档里截过来的。这些内置方法是在python一加载好之后就可以使用的方法。
#这些内置方法不必特别刻意的去记忆(我的意思是不用像背英语单词那样一个个去背诵),只要经常使用,自然而然就会记住
第二个程序
序列化和反序列化-serialize_deserialize
# encoding: utf-8
'''
# @Author : ccq
# @File : serialize_deserialize.py
# @Time : 2019/6/12 18:53
'''
# 序列化和反序列化
import json
# 序列化
info = {
'name': 'ccq',
'age': '20'
}
f1 = open("test.text", "w")
f1.write(json.dumps(info))
f1.close()
# 反序列化
import json
f2 = open("test.text", "r")
data = json.loads(f2.read())
print(data["age"])
f2.close()
#json的简单序列化和反序列化使用。
#json只能处理列表,元组,字典这些简单的类型。
#如果一定要处理复杂类型,可以使用pickle.如下:
# encoding: utf-8
'''
# @Author : ccq
# @File : pickle_serialize.py
# @Time : 2019/6/13 10:26
'''
import pickle
def func1(name):
print("welcome", name)
info = {
'name': 'ccq',
'age': '20',
'function': func1
}
# 序列化操作
with open("test2.text", "wb") as f1:
f1.write(pickle.dumps(info))
# 反序列化操作
with open("test2.text", "rb")as f2:
data = pickle.loads(f2.read())
print(data["function"]("ccq"))
#可以看出pickle的用法和json的用法几乎完全一致。
#有个小bug:如果你把反序列化放在另一个py文件里,需要把下面这段代码加进去。
def func1(name):
print("welcome", name)
#不加的话最后调用function的时候会出错。错误信息如下:
Error:
data = pickle.loads(f2.read())
AttributeError: Can't get attribute 'func1' on <module '__main__'
#即找不到func1.
#当然在写dumps和loads的时候会发现一个dump函数和load函数。用法如下:
f1.write(pickle.dumps(info))
pickle.dump(info, f1) # 简化版,和上面的作用完全一样
data = pickle.loads(f2.read())
data = pickle.load(f2) # 简化版,和上面的作用完全一样