列表生成式、生成器表达式、模块导入

一:列表生成式和生成器表达式

1.1.用传统的方法创建一个列表

l=[]
for i in range(100):
  l.append('egg%s' %i)
  print(l)

用传统的方法创建列表需要至少三行的代码,采用列表生成式:

l=['egg%s' %i for i in range(100)]

一行代码就已经搞定了列表的创建,大大简化了我们写代码的工作量,而且还可以在生成式里面添加一个判断。

l=['egg%s' %i for i in range(1000) if i > 10]

这样,列表生成的就是大于10的数字了。

1.2.生成器表达式

生成器的优势在于可以取得很多的数字,但是他并不像列表那样把所有的字符保存下来,提取时如果列表内含有的元素过多的话会爆掉内存。于是生成器就被需要了,把列表生成式的中括号换成小括号,得到的就是一个生成器,生成器又是迭代器,使用__next__方法一个个的取值,对内存占用极小。

l=('egg%s' %i for i in range(1000) if i > 10)#生成器表达式
print(next(l))#取值
print(next(l))
print(next(l))

二:模块

2.1.什么是模块?

模块就是一种系统功能的集合体,在python中一个.py文件就是一个模块,如modul.py文件,modul就是文件名。

2.2:使用模块

导入模块方法:

  1:import 模块名:调用模块内的方法必须加上前缀,调用不会出错。

  2:from...import...:调用模块内的方法不用加上前缀,但是有可能会和执行文件中的名字起冲突。

首次导入模块发生的三件事:

  1、创建一个模块的名称空间。

  2、执行模块对应文件,将产生的名字存放于1中的名称空间。

  3、在当前执行文件中拿到一个模块名,该模块名指向1的名称空间。

注意:1、首次导入之后重复导入,后续的导入会直接引用第一次的导入结果,不会再次执行文件内容。

   2、模块中功能的执行始终以模块自己的名称空间为准。

为模块起别名

  模块的名称一般来说是描述性的,有的时候会很长,如果每次调用都要在前面加上前缀的话,非常不方便,这个时候我们就可以给模块在导入时另外取一个简洁的名字。另外一种场景则是导入多个模块,其执行内容一致,但是需要判断条件来执行,这时就可以把两个导入的模块另外取名,然后判断,做具体调用运算。

engine=input('>>: ').strip()
if engine == 'mysql':
    import mysql as db
elif engine == 'oracle':
    import oracle as db

db.parse()

if__name__ =="__main__" #如果文件是直接被执行
# 在文件被直接执行的情况下等于__main__
# 在文件被导入的情况下,等于文件名
# if __name__ == "__main__":
# print("文件被当做脚本执行了")
# else:
# print("文件被导入啦")

常常可以在模块文件下看到这一行代码,这个代码的意思是,如果文件是直接被执行,那么会调用定义的函数如果是被当做模块导入的话,只会获取定义的名字,不会执行函数

三:模块中名字的查找顺序

内存中已经加载的名字》内置的名字》sys.path路径中包含的模块。

强调:sys.path的第一个路径是当前执行文件所在的文件夹

posted @ 2018-04-03 17:20  Leslie-x  阅读(124)  评论(0编辑  收藏  举报