西天取经python之路 DAY(十一)

#可以使用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)  # 简化版,和上面的作用完全一样

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值