首页 > 代码库 > 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:
惰性运算,边运算边生成。必须是从前到后的依次访问生成数据。
创建L
和g
的区别仅在于最外层的[]
和()
,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 模块