python封装函数、实现将任意的对象序列化到磁盘上_Python 第4周 – Python基础-装饰器/生成器/迭代器/内置函数/序列化/目录开发规范…

内容

装饰器

生成器

迭代器

内置函数讲解

Json and Pickle 数据序列化

软件目录开发规范

不同目录间的模块调用一、装饰器

装饰器:本质就是函数,定义函数器装饰其他函数,就是为其他函数添加附加功能。

原则:1、不能修改被装饰的函数的源代码

2、不能修改被装饰的函数的调用方式

实现装饰器,涉及到的知识量:

1、函数既“变量”

2、高阶函数

3、嵌套函数

高阶函数+嵌套函数 =》完成装饰器的使用

1、装饰器的调用方式:@

abs()#绝对值

all()#只要一个为假,都是假

any()#只要一个为真,都是真

ascii()#把一个内存形式打印成字符串的格式

bin()#一个整数,十进制转二进制

bool()#布尔值,判断真假

bytearray()

bytes()

callable()#判断可调用的信息

chr()#利用数字打印asscii码

ord()#利用asscii码取对应的数字

compile()#用于底层,把代码进行编译的工具

complex()

dict()#字典

dir()#查使用方法

divmod()#相除,返回余数

enumerate()

eval()exec()

filter()#一组数据里面,过滤你想要的数值,打印出来

如:

res= filter(lambda n:n>5,range(10))for i inres:print(i)

map()#把后面的值放给前面出来,并把结果打印

res = map(lambda n:n*n,range(10))for i inres:print(i)

reduce()#2.7版本还是可以直接调用,3版本以后都是放在模块里面了

importfunctools

res= functools.reduce(lambda x,y:x+y,range(10))print(res)

frozenset()#冻结,不可变的集合

globals()#返回当前整个程序里面所有变量的key/values模式

hash()#中文名散列,处理过程,需要找到一个固定的映射关系,通过递归的二分查找进行划分归类查找。

hex()#把一个数字转成16进制

locals()#用于函数内部本地打印

object()#对象,用类的时候使用。一个个体,就是对象。每个对象都有属于自己的属性。

oct()#八进制,逢8进1

pow()#多少次方

repr()#与ascii()一致

reversed()#反转

round()#round(1.222,2) 保留两位小数点

slice()#切片

如:d=range(10)

t= d[slice(2,5)]

sorted()#把字典排序,按key或values 来排序

如:

a= {6:2,9:0,3:4,6:5,10:7,11:22}print(sorted(a.items()))

输出:

[(3, 4), (6, 5), (9, 0), (10, 7), (11, 22)]print (sorted(a.items(),key = lambda n:n[1]))

输出:

[(9, 0), (3, 4), (6, 5), (10, 7), (11, 22)]

zip()#拉链式组合

如:

a= [1,2,3,4]

b= [“a”,”b”,”c”,”d”]for i inzip(a,b):print(i)

输出:

(1, ‘a’)

(2, ‘b’)

(3, ‘c’)

(4, ‘d’)__import__() #模块导入,

如:__import__(“chen1203”)

其他常见的内置函数不列举

关于对应内置函数理解

对应函数的官 链接:https://docs.python.org/3/library/functions.htmlighlight=built#ascii

五、Json and Pickle 数据序列化

1、序列化与反序列化的作用:

有两种方式json和pickle:json适合用其他的平台,pickle只能在python中应用。pickle 与json 模块通常是将python对象序列化为二进制流或文件,计算机底层是跟的二进制进行交互的。几

可以被序列化的类型有:

* None,True 和 False;

* 整数,浮点数,复数;

* 字符串,字节流,字节数组;

* 包含可pickle对象的tuples,lists,sets和dictionaries;

* 定义在module顶层的函数:

* 定义在module顶层的内置函数;

* 定义在module顶层的类;

* 拥有__dict__()或__setstate__()的自定义类型;

注意:对于函数或类的序列化是以名字来识别的,所以需要import相应的module。

序列化与反序列化,就是在内存之间进行数据翻译。pickle与json的功能效果差不多。但json并不完全能序列化,所以出现python专用的pickle,pickle 只能在python中使用。

2、json 序列化与反序列化

A、第一步:通过序列化,把info信息从内存写到文件中底

#json 序列化

importjson

info={“name”: “chenchangqing”,”work”:”IT”,”number”:”400-100-119″}

f= open(“test.txt”,”w+”)

f.write(json.dumps(info))#把info信息序列化

f.close()

B、第二步,查看test.txt 文件

#test.txt 文件内容的存储信息

{“number”: “400-100-119”, “work”: “IT”, “name”: “chenchangqing”}

C、第三步、json 反序列化

#json 反序列化

importjson

file= open(“test.txt”,”r”)

data=json.load(file)#通过使用json.load对文件信息反序列化出来。print(data)

file.close()

3、pickle 序列化与反序列化

pickle 是python通用的包括类、字典、对象、列表都可以序列化,json xml 都是平台通用。

A、第一步、pickle 序列化

pickle 字典序列化 Pickle.dump操作,dumps()函数执行和dump() 函数相同的序列化。取代接受流对象并将序列化后的数据保存到磁盘文件,这个函数简单的返回序列化的数据。

#pickle 序列化语法

importpickle

info={“name”: “chenchangqing”,”work”: “IT”,”number”: “400-100-119”}

f= open(“test_pickle.txt”, “wb”) #由于pickle是使用二进制,所以使用wb

f.write(pickle.dumps(info))

f.close()

B、第二步、查看test_pickle 文件

#文件内容?}q(XnumberqX400-100-119qXworkqXITqXnameqX chenchangqingqu.

六、软件目录开发规范

为什么要设计好目录结构/p>

设计一个层次清晰的目录结构,就是为了达到以下两点:

可读性高: 不熟悉这个项目的代码的人,一眼就能看懂目录结构,知道程序启动脚本是哪个,测试目录在哪儿,配置文件在哪儿等等。从而非常快速的了解这个项目。

可维护性高: 定义好组织规则后,维护者就能很明确地知道,新增的哪个文件和代码应该放在什么目录之下。这个好处是,随着时间的推移,代码/配置的规模增加,项目结构不会混乱,仍然能够组织良好。

目录组织方式

Foo/

|– bin/

| |– foo

|

|– foo/

| |– tests/

| | |– __init__.py

| | |– test_main.py

| |

| |– __init__.py

| |– main.py

|

|– docs/

| |– conf.py

| |– abc.rst

|

|– setup.py

|– requirements.txt

|– README

解析一下:

bin/: 存放项目的一些可执行文件,当然你可以起名script/之类的也行。

foo/: 存放项目的所有源代码。(1) 源代码中的所有模块、包都应该放在此目录。不要置于顶层目录。(2) 其子目录tests/存放单元测试代码; (3) 程序的入口最好命名为main.py。

docs/: 存放一些文档。

setup.py: 安装、部署、打包的脚本。

requirements.txt: 存放软件依赖的外部Python包列表。

README: 项目说明文件。

这里重点解析关于README的内容

它需要说明以下几个事项:

软件定位,软件的基本功能。

运行代码的方法: 安装环境、启动命令等。

简要的使用说明。

代码目录结构说明,更详细点可以说明软件的基本原理。

常见问题说明。七、不同目录间的模块调用

不同目录间的模块调用。使用 from  ..  import .. 的模式导入

961ddebeb323a10fe0623af514929fc1.png

实现ATM常用功能

功能全部用python的基础知识实现,用到了timeossysjsonopenlogging函数模块知识, 主要帮给大家一个简单的模块化编程的示例

注意:只实现了”还款”和”取现功能”程序结构:

day5-atm/├── README

├── atm#ATM主程目录

│ ├── __init__.py

│ ├── bin#ATM 执行文件 目录

│ │ ├── __init__.py

│ │ ├── atm.py#ATM 执行程序

│ │ └── manage.py #ATM 管理端,未实现

│ ├── conf #配置文件

│ │ ├── __init__.py

│ │ └── settings.py

│ ├── core#主要程序逻辑都 在这个目录 里

│ │ ├── __init__.py

│ │ ├── accounts.py#用于从文件里加载和存储账户数据

│ │ ├── auth.py #用户认证模块

│ │ ├── db_handler.py #数据库连接引擎

│ │ ├── logger.py #日志记录模块

│ │ ├── main.py #主逻辑交互程序

│ │ └── transaction.py #记账还钱取钱等所有的与账户金额相关的操作都 在这

│ ├── db #用户数据存储的地方

│ │ ├── __init__.py

│ │ ├── account_sample.py#生成一个初始的账户数据 ,把这个数据 存成一个 以这个账户id为文件名的文件,放在accounts目录 就行了,程序自己去会这里找

│ │ └── accounts #存各个用户的账户数据 ,一个用户一个文件

│ │ └── 1234.json #一个用户账户示例文件

│ └── log #日志目录

│ ├── __init__.py

│ ├── access.log#用户访问和操作的相关日志

│ └── transactions.log #所有的交易日志

└── shopping_mall #电子商城程序,需单独实现

└── __init__.py

作业示例

作业讲解

文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树高级教程函数208939 人正在系统学习中 相关资源:软件工程课件软件工程是指研究软件生产的一门学科,也就是将完善的…

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年1月26日
下一篇 2021年1月26日

相关推荐