您的位置:首页 > 编程语言 > Python开发

python列表生成式,生成器表达式和模块基础

2019-01-18 14:54 543 查看

列表生成式

一个快速产生列表的表达式

new_list=[i for i in li],会从li依次取出所有值,然后装到新列表中

语法:[表达式 for in 遍历 if 条件]

#只提取大于30的数据到列表

new_list=[i for i in li if i >20]

 

生成器表达式

可以使用一种表达式来快速创建一个生成器

new_li=(i for i in li)

语法:(表达式 for i in li if 条件)

整体语法与列表生成式差不多

模块的使用

目前使用韩素湖来编写代码,虽然大幅度降低了代码冗余,并且组织结构清晰多了,但是随着项目功能的增加,如果还将代码全放在一个文件中,将出现下面的问题

1.维护性差

2函数太多,结构不清晰,可读性差

3.对于相同功能的函数,如果在不同文件中都要使用,就只能复制粘贴,又出现了重复代码

什么是模块:

模块就是一堆功能的集合体,以py文件的形式存在,简单的说就是具备一堆函数的py文件

模块的分类:

1.自定义模块(包含第三方模块)

2.内置模块,例如time,os(主要学怎么使用)

3.经过编译后的c或c++库,以DLL的形式存在

4.包(本质就是一个文件夹,其中包含了一堆模块)

import 用于导入一个模块

会立即执行模块中的代码

导入模块时,发生了什么

1.创建一个名称空间

2.开始执行模块中的代码,将内部名称与值的对应关系,存储到名称空间中

3.在当前执行文件创建一个名字,该名字指向被导入模块的名称空间

注意:模块之间的名称空间是相互独立的

模块中的代码仅在第一次被导入时执行

 

pycharm会自动帮你检测项目根目录下的模块,但是对于不在根目录下的,可能会报错,这是pycharm的问题,不影响执行

import 模块名 as 别名

import 模块名,模块名,模块名..导入多个模块

from导入:

使用from导入时,会把import后的名字直接放入当前名称空间

使用时不用写前缀

可能会与当前名称空间中的名字冲突

如果真的冲突,采取就近查找,谁最后定义我就用谁

from tools import func as f1,func1 as f2

from tools import *

*通配符,会将模块中,所有名字全部导入,极容易会出现名称冲突,慎用

在模块中,写__all__=[用于指定哪些名字可以被*导入]

__all__=['func1']

 

模块的两种执行方式

执行文件,导入文件

__name__可以获取当前模块的名字

当这个文件作为执行文件被执行时,__name__的名字为__main__,当这个文件被导入时,__name__的值时模块的名字

 

模块的搜索顺序

使用模块时必须先找到对应的模块文件,这就涉及到查找路径

1.查找内存中已经存在的

sys.modules,显示内存中已经加载的模块

模块名 in sys.modules,判断是否已经加载

2.内置

3.sys.path

当你要使用的模块不在执行文件同一级下时,就找不到,pycharm会自动把项目根目录加入sys.path,如果你碰巧要找的文件就在项目根目录下,就能找到,如果换了运行环境就可能找不到,所以为了保证项目在哪都能运行,所以我们需要将自己使用的文件路径添加到sys.path

可以把sys.path理解为解释器的环境变量

如果你的执行文件在根目录下,就能访问到当前项目中的所有文件,无需关系sys.path 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐