列表生成式(生成列表)
res=[i for i in range(10) if i > 5] print(res) #[6, 7, 8, 9]
生成器表达式
#生成器表达式 g=(i for i in range(10) if i > 5) print(g) #<generator object <genexpr> at 0x000001DD9E4D9308> print(next(g)) #6 print(next(g)) #7 print(next(g)) #8 print(next(g)) #9
统计文件中字符的个数
with open('a.txt',mode='rt',encoding='utf-8') as f: print(len(f.read())) #PS.文件过大会导致占用内存过多
with open('a.txt',mode='rt',encoding='utf-8') as f: res=0 for line in f: res+=len(line) #迭代器,缺点是占用过多的内存 print(res)
如何用一行代码实现
with open('a.txt',mode='rt',encoding='utf-8') as f: res=sum([len(line) for line in f]) print(res)
with open('a.txt',mode='rt',encoding='utf-8') as f: g=(len(line) for line in f) res=sum(g) #生成器,不会占用过多内存 sum内置__iter__,__next__ print(res)
模块
1.什么是模块
模块就是一系列功能的集合体
模块分为四个通用的类别:
1.使用python编写的.py文件(*********)
2.已被编译为共享库或DLL的C或C++扩展
3.把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)(*****)
4.使用C编写并链接到python解释器的内置模块
模块有三种来源:
1.内置模块
2.第三方模块
3.自定义模块
2.为何要用模块
1.使用内置的或者第三方的模块的好处是:拿来主义,极大的提升开发效率
2.使用自定义的模块的好处是:将程序各部分组件共同的功能提取去除放到一个模块里,其他的组件通过导入的方式使用该模块,
该模块即自定义的模块,好处是可以减少代码冗余。
3.如何用模块
其他笔记run.py中查看
import导入模块,在同一文件夹下,以定义阶段为准
=============================================================================================================
以spam.py为例来介绍模块的使用:文件名spam.py 模块名为spam
import spam(同一个文件夹下)
首次导入模块会发生三件事 (使用加前缀)
1.会产生一个模块的名称空间
2.执行spam.py文件的内容,将产生的名字丢到模块的名称空间里面
3.在当前执行文件中拿到一个名字spam,该名字指向模块的名称空间
# 补充 # import spam as sm # print(sm.money) # import os,sys,spam
from...import导入模块
from导模块也会运行spam.py模块
from spam import money,read1,read2,change
首次导入模块会发生三件事
1.会产生一个模块的名称空间
2.执行spam.py文件的内容,将产生的名字丢到模块的名称空间里
3.在当前执行文件中拿到名字read1,该名字指向模块的名称空间中的read1
# print(money) # print(read1) # print(read2) # print(change)
from的方法简单了但是也有问题就是容易与当前名称空间的名字冲突
import总结
优点:指名道姓地问某一个名称空间要名字,不会与当前执行文件名称空间中的名字冲突
缺点:引用模块中名字必须加前缀(模块名.),使用不够简洁
from...import总结
优点:引用模块中的名字不用加前缀(模块名.),使用更为简洁
缺点:容易与当前执行文件名称空间中的名字冲突
补充:
__all__=['money','read1'] 可以导入模块里面所包含的函数
============================================================================
查找模块路径的优先级
1.内存
2.内置模块
3.sys.path(以执行文件为准的)
加载顺序,先找内存的,再找内置模块,最后找sys.path模块
研究模块一定要搞清楚谁是执行文件,谁是被导入文件,研究谁是执行文件,谁是被导入的模块
区分python文件两种用途
print(__name__)
当文件被当作执行文件时__name__的值为__main__
当文件被当做模块导入时__name__的值为模块名mmm
软件目录规范
日志不是业务逻辑,用户不用知道