首页 > 代码库 > python15 - day05 模块

python15 - day05 模块

列表生成式:

data = http://www.mamicode.com/[1,2,3,4,5,6,7,8,9]
data = http://www.mamicode.com/[i*2 if i>5 else i for  i in  data]
print(data)

说明:如果i的值大于5则乘以2,否则不变

生成器:

通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

惰性运算,边运算边生成。必须是从前到后的依次访问生成数据。

创建Lg的区别仅在于最外层的[]()L是一个list,而g是一个generator。

我们可以直接打印出list的每一个元素,但我们怎么打印出generator的每一个元素呢?

如果要一个一个打印出来,可以通过next()函数获得generator的下一个返回值

 

generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。

当然,上面这种不断调用next(g)实在是太变态了,正确的方法是使用for循环,因为generator也是可迭代对象

 

yield a #返回a, 同时挂起当前这个函数, a返回给了通过__next__()调用当前函数的人

 

迭代器:

所有的生成器都是迭代器,但是迭代器不一定是生成器。

迭代器是可以被next()函数调用并不断返回值的对象

for 循环本质上也是使用next()函数实现的。

 

装饰器:

作用:完全符合开发的开放-封闭的原则,开放扩展,封闭源代码,不改变原有的功能代码,不改变原有调用方式,实现扩展新的功能。

 

模块:

1. 自建模块

 

2. 第三方模块

Pypi

3. 标准库

OS模块  

提供对操作系统进行调用的接口

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径

os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd

os.curdir  返回当前目录: (‘.‘)

os.pardir  获取当前目录的父目录字符串名:(‘..‘)

os.makedirs(‘dirname1/dirname2‘)    可生成多层递归目录

os.removedirs(‘dirname1‘)    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推

os.mkdir(‘dirname‘)    生成单级目录;相当于shell中mkdir dirname

os.rmdir(‘dirname‘)    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname

os.listdir(‘dirname‘)    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印

os.remove()  删除一个文件

os.rename("oldname","newname")  重命名文件/目录

os.stat(‘path/filename‘)  获取文件/目录信息

os.sep    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"

os.linesep    输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"

os.pathsep    输出用于分割文件路径的字符串

os.name    输出字符串指示当前使用平台。win->‘nt‘; Linux->‘posix‘

os.system("bash command")  运行shell命令,直接显示

os.environ  获取系统环境变量

os.path.abspath(path)  返回path规范化的绝对路径

os.path.split(path)  将path分割成目录和文件名二元组返回

os.path.dirname(path)  返回path的目录。其实就是os.path.split(path)的第一个元素

os.path.basename(path)  返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素

os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False

os.path.isabs(path)  如果path是绝对路径,返回True

os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False

os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False

os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略

os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间

os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间

 

sys模块

1

2

3

4

5

6

7

8

sys.argv           命令行参数List,第一个元素是程序本身路径

sys.exit(n)        退出程序,正常退出时exit(0)

sys.version        获取Python解释程序的版本信息

sys.maxint         最大的Int值

sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值

sys.platform       返回操作系统平台名称

sys.stdout.write(‘please:‘)

val = sys.stdin.readline()[:-1]

>>> import sys

>>> import time

>>> for i in range(20):

...     sys.stdout.write("#")

...     time.sleep(0.3)

...

####################>>>

 

 

json序列化:

序列化的作用就是持久化内存数据对象。

把一个内存对象转为字符串的形式,就叫做序列化

把一个字符串转成对应的内存对象,就叫做反序列化。

json共四种方法:dumps、dump、loads、load

l  dumps和loads是对字符串进行操作。

l  dump和load可以直接对文件进行操作。

import json
f = open("test","w+",encoding="utf-8")
data = {"name":"kaige","age":22,"sex":"M"}

f.write(json.dumps(data))
f.close()

#读取文件内容
f = open("test","r+",encoding="utf-8")
data = json.loads(f.read())
print(data["age"])

 

import json
f = open("test","w+",encoding="utf-8")
data = {"name":"kaige","age":22}
json.dump(data,f)
f.close()

 

#读取文件内容

f = open("test","r+",encoding="utf-8")
data = json.load(f)
print(data["age"])

 

pickle序列化:

pickle可以对所有的数据类型进行序列化,包括函数,但是只支持python,json不可以序列化函数,支持所有的语言。

 

软件目录结构:

 

作业:

支持多用户,每个用户信息单独保存

新开用户默认额度15000

实现购物商场,买东西加入购物车,退出时调用信用卡接口结账,转到银行账户,输入银行账户密码,核对账户余额,扣费。

可以体现,手续费5%,最多值能取信用额度的50%

支持用户账户之间转账,账户余额的加减

记录每个月日常消费流水(日期、商品名称、消费金额、交易类型、手续费)

提供还款接口

用户认证使用装饰器

提供管理接口,包括添加账户、用户额度、冻结账户等

目录:bin conf core log db

 

 

 

 

 

 

 

python15 - day05 模块