g=(i for i in range(10) if i>5)
print(g) #generator 生成器print(next(g))print(next(g))print(next(g))print(next(g))with open('a.txt',mode='rt',encoding='utf-8') as f:
g=(len(line) for line in f ) res=sum(g) print(res)可以改写成 res=sum(len(line) for line in f) print(res)1.模块介绍 注意:名称空间的嵌套关系是在定义阶段就固定死的,与调用位置无关
1.什么是模块
模块就是一系列功能烦的集合体 模块分为四个通用的类别: 1.使用python编写py文件 2.已被便以为共享库或DLL的C或C++扩展 3.把一系列模块组织到一起的文件夹(注:文件夹下有一个__int__.py文件,该文件夹称之为包) 4.使用c编写并连接到python解释器的内置模块 模块有三种来源: 1.内置模块 2.第三方模块 3.自定义模块2.为何要用模块 1.使用内置的或者第三方模块的好处是:拿来主义,极大提升了开发的效率 2.使用自定义模块的好处是:将程序各部分组件共用的功能提取取出放到一个模块里,其他的组件通过导入的方式使用该模块,该模块即自定义模块,好处是可以减少代码冗余.3.如何用模块import spam
首次导入模块会发生三件事 1.会产生一个模块的名称空间 2.会执行spam.py文件的内容,将产生的名字丢到模块的名称空间里 3.在当前执行文件中拿到一个名字spam,该名字指向模块的名称空间使用: 模块名.前缀补充: import spam as sm(针对模块名过长) import 总结: 优点:指名道姓地问某一个名称空间要名字,不会与当前执行文件名称空间中的名字冲突 缺点:引用模块的名字必须加前缀(模块名),使用不够简洁from spam import money,read1,read2.change
首次导入会发生三件事 1.会产生一个模块的名称空间 2.会执行spam.py文件的内容,将产生的名字丢到模块的名称空间里 3.在当前执行文件夹中拿到名字read1,该名字指向模块的名称空间中的read1from...import总结:优点:引用模块中的名字不用加前缀(模块名),使用更为简洁缺点:容易与当前执行文件名称空间中的名字冲突可以用如下方法,但是不提倡:
from spam import *查找模块路径的优先级
1.内存import spamprint(spam.money)import timetime.sleep(10)import spamprint(spam.money)2.内置模块import timeprint(time)print(time.time())3.sys.path(环境变量,是以执行文件为准的,被导入的文件参照的全是执行文件的sys.path)import sysprint(sys.path) #第一个路径执行文件所在的文件夹 #第二个路径根文件夹① import sys
sys.path.append(r'E:\python-li\课堂\day15\aaa') import spam print(spam.money) ② from aaa import spam print(spam.money)当文件被当作执行文件执行时__name__的值为__main__
当文件被当作模块导入时__name__的值为模块名项目名:一个大文件夹,不要有中文 pacharm识别不了子文件夹目录,应该写在顶级
子文件夹:bin 里面放执行文件 start.py # 1. 应该把项目的根目录加到环境变量里 # 2. 应该把项目根目录所在绝对路径拿到,然后加到环境变量里 import sys import os BSAE_DIR=os.path.dirname(os.path.dirname(__file__)) sys.path.append(BSAE_DIR) 注意:bin可以不要,我们可以直接把start.py直接建到项目的根文件夹 conf 里面放配置文件 setting.py 设置 允许使用者配制 lib 里面放自定义模块 common.py 放一些常用的功能 跟业务无关 core 里面放核心逻辑 跟业务有关 src.py核心代码 db 里面放数据相关的文件 账号密码等 log 里面放日志 transcation.log readme 介绍这个软件