4月3日 python学习总结
2024-09-03 03:58:30
1、 列表生成器
l=['egg%s' %i for i in range(100) if i>20 ]
print(l)
若将 [ ] 换成 ( ),则为生成器表达式,结果是一个迭代器
#求文件中每行字符数的最大值
with open('E:\\test.txt','r',encoding='utf-8') as f :
num=[len(line) for line in f]
print(max(num))
2、 模块
- 模块就是一系列功能的集合体,一个.py文件就是一个模块
#模块导入格式 #1、 import 模块名
# import 模块名,模块名,模块名... (在一行导入多个模块,不推荐使用) #2、 from 模块名 import 模块中的方法或参数 #3、 from 模块名 import * (*表示模块中的所有方法或参数)
'''
对于第三种方法,若不想用 * 取出全部名称时,可在被导入模块中加
__all__=['名称1','名称2','名称3','名称4',....]
将可以被取出的名称加入该列表中
'''
#要注意命名冲突问题
#1、后两种方法在运行时可以直接调用,不用加前缀
#2、若是当前文件也有同名方法或参数,本地优先
- 运行一个python文件,当首次执行到模块导入位置时:
- 先创造一个被导入模块的名称空间
- 执行该模块对应文件,将产生的名字放于该命名空间
- 在当前执行文件的内存空间中,创建名字来引用对应模块或参数
- 第一种导入方法:会有一个与被导入模块的名称相同的变量名,该名称指向被导入模块的地址;
- 第二种和第三种导入方法:与被导入模块中参数名或函数名相同的变量名,指向的是对应的地址
#1.为源文件(spam模块)创建新的名称空间,在spam中定义的函数和方法若是使用到了global时访问的就是这个名称空间。 #2.在新创建的命名空间中执行模块中包含的代码,见初始导入import spam
提示:导入模块时到底执行了什么?
In fact function definitions are also ‘statements’ that are
‘executed’; the execution of a module-level function definition
enters the function name in the module’s global symbol table.
事实上函数定义也是“被执行”的语句,模块级别函数定义的执行将函数名放
入模块全局名称空间表,用globals()可以查看 #3.创建名字spam来引用该命名空间
这个名字和变量名没什么区别,都是‘第一类的’,且使用spam.名字的方式
可以访问spam.py文件中定义的名字,spam.名字与test.py中的名字来自
两个完全不同的地方。
- 模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到入import语句时才执行(import语句是可以在程序中的任意位置使用的,且针对同一个模块很mport多次,为了防止你重复导入,python的优化手段是:第一次导入后就将模块名加载到内存了,后续的import语句仅是对已经加载到内存中的模块对象增加了一次引用,不会重新执行模块内的语句)
3、为模块起别名
# 为模块起别名 #1、import 模块名 as 别名 #2、from 模块名 import 参数/函数名 as 别名
4、__name__ (供测试代码时使用)
# __name__的值: if 文件被直接执行
__name__='__main__' if 文件被导入情况下执行
__name__=' 文件名 '
写模块测试时,可用 if 判断 __name__的值
当 __name__='__main__'时,执行测试代码
当 __name__='文件名'时,该模块被导入了,不执行测试代码
if __name__=='__main__' : 测试代码
5、模块的搜索路径
- 模块查询顺序:
- 内存中以加载的模块
- 内置模块
- sys.path 路径中包含的模块
- sys.path 控制了自定义模块以及第三方模块如何查找
sys.path 的第一个路径是当前执行文件路径,执行文件变则第一路径变
sys.modules 查找内存中已被导入的模块
sys.path.append(r' ...路径... ') 往 sys.path中加入新路径
作业:
'''
4月3号作业
''' '''
1.求文件中总共包含的字符个数?思考为何在第一次之后的哪次的n次sum求和得到的结果为0
''' with open(r'E:\\test.txt','r',encoding='utf-8') as f:
res=(len(line) for line in f)
print(res)
res=sum(res)
print(res) '''
2.思考题
'''
with open('E:\\test.txt','r',encoding='utf-8') as f:
g=(len(line) for line in f)
print(sum(g)) '''
3. 文件 shopping.txt内容如下:
mac,2000,3
lenovo,3000,10
tesla,1000000,10
chicken,200,1 求总共花了多少钱?
打印出所有商品信息,格式为
[{'name':'xxx','price':'3333','count':3},.....]
求单价大于10000的商品信息,格式同上 '''
with open(r'shopping.txt','r',encoding='utf-8')as f:
line = [line.strip('\n').split(',') for line in f]
shopping=[{'name': name,'price': price,'count': count} for name,price,count in line]
print(shopping)
# 求总共花了多少钱?
price=map(lambda x:int(x['price']) * int(x['count']),shopping)
sum_prce=sum(price)
print(sum_prce)
#求单价大于10000的商品信息
filter_shoop=filter(lambda x:int(x['price'])>10000,shopping)
print(list(filter_shoop)) '''
4、改写ATM作业,将重复用到的功能放到模块中,然后通过导入的方法使用
'''
"E:\Python 3.6.4\python.exe" F:/python/object/days2/day_14.py
<generator object <genexpr> at 0x00000000023001A8>
91
91
[{'name': 'mac', 'price': '2000', 'count': '3'}, {'name': 'lenovo', 'price': '3000', 'count': '10'}, {'name': 'tesla', 'price': '1000000', 'count': '10'}, {'name': 'chicken', 'price': '200', 'count': '1'}]
10036200
[{'name': 'tesla', 'price': '1000000', 'count': '10'}] Process finished with exit code 0
最新文章
- MSBuild 编译 C# Solution
- React入门最好的学习实例-TodoList
- WinForm------GridControl合并单元格
- MongoDB学习笔记-05 聚合
- myeclipse工程当中的.classpath 和.project文件什么作用?
- autoprefixer
- Linq to SQL 基础篇
- editplus 常用快捷键汇总 大小写代码折叠
- 【FFT】专题总结
- Python学习之路——迭代器、生成器、算法基础、正则
- Byte Array to Hexadecimal String
- yaf for ubuntu安装
- 【bzoj4445 scoi2015】小凸想跑步
- C++ 内链接 外链接
- Java IO笔记
- List接口的使用方法
- 【转】类似py2exe软件真的能保护python源码吗
- scala 几个函数小例子
- arm家族小检阅
- jQuery Validate使用说明
热门文章
- 基于ASP.NET Core 5.0使用RabbitMQ消息队列实现事件总线(EventBus)
- 02 HTML标签
- 海盗湾The Pirate Bay:每一名技术人员都应该思考的问题
- v80.01 鸿蒙内核源码分析(内核态锁篇) | 如何实现快锁Futex(下) | 百篇博客分析OpenHarmony源码
- ansible手动添加模块
- c++ 汇编代码看内存分配
- 云原生 PostgreSQL 集群 - PGO:5分钟快速上手
- 【C# 程序集】在.net中使用GAC 全局程序集缓存
- MapReduce中一次reduce方法的调用中key的值不断变化
- 哈工大 计算机网络 实验四 利用 Wireshark 进行协议分析