内置函数补充,列表生成式与生成器,模块

一、内置函数补充

pow(2,3,3) # 返回 2的3次方 除以3
reversed(l) #反转值,让其顺序颠倒。并不排序
round(3.5) #四舍五入
sc=slice(1,5,2) #将切分的开始索引,结束索引和步进赋值给一个名称来使用

eft='hello'
right={'x':1,'y':2,'z':3}
zip(left,right) #zip将两个包含多个值得对象进行一一对应

二、列表生成式与生成器表达式


生成式表达式格式
l=['egg%s' %i for i in range(1000) if i > 10]

优点:方便快速生成了一个大容量数据的列表,数据量过大会占用较多内存

生成器表达式格式
l=('egg%s' %i for i in range(1000) if i > 10)

优点:省内存,一次只产生一个值在内存中

三、模块

1 什么是模块?
模块就一系统功能的集合体,在python中,一个py文件就是一个模块,比如module.py,其中模块名module
主要分为四种:
1 使用python编写的.py文件
  2 已被编译为共享库或DLL的C或C++扩展
  3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
  4 使用C编写并链接到python解释器的内置模块

2 使用模块

import 是Python中导入模块的命令,后面跟模块名
首次导入模块发生三件事
1、创建一个模块的名称空间
2、执行模块对应文件,将产生的名字存放于 1 中的名称空间
3、在当前执行文件中拿到一个模块名,该模块名指向 1 的名称空间
import spam
import spam
import spam
import spam
import spam


read1=11111111111111111111111111
spam.read2()

money=1111111111111111
spam.change()
print(money)
spam.read1()

强调:之后的导入会直接引用第一次导入的结果,不会重复执行文件
模块中功能的执行始终以模块自己的名称空间为准


3、为模块起别名
格式:import spam as sm

print(sm.money)
sm.read1()


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


4、一行导入多个模块(不推荐使用)
格式 import spam,mysql,oracle

Python推荐写成多行,更加清晰明了
import spam
import mysql
import orcacle

5、from...import 与import的对比

唯一的区别就是:使用from...import...则是将spam中的名字直接导入到当前的名称空间中,所以在当前名称空间中,直接使用名字就可以了、无需加前缀:spam.

好处:使用起来方便了
坏处:容易与当前执行文件中的名字冲突

6、也支持as

from spam import money as m
print(m)

7、、一行导入多个名字

from spam import read1,read2,money

8、from...import *

from spam import * 把spam中所有的不是以下划线(_)开头的名字都导入到当前位置

大部分情况下我们的python程序不应该使用这种导入方式,因为*你不知道你导入什么名字,很有可能会覆盖掉你之前已经定义的名字。
而且可读性极其的差,在交互式环境中导入时没有问题。可以使用__all__来控制*(用来发布新版本),在spam.py中新增一行
__all__=['money','read1'] 这样在另外一个文件中用from spam import *就这能导入列表中规定的两个名字

9、模块查找顺序

模块的查找顺序是:
1、内存中已经加载的模块
2、内置模块
3、sys.path路径中包含的模块

特别重要:
sys.path的第一个路径是当前执行文件所在的文件夹




posted on 2018-04-03 19:36  大白(●—●)小弟小白  阅读(142)  评论(0编辑  收藏  举报

导航