[Python] Python中的模块、包和内置函数

1.模块

python 模块简单来说就是一个.py文件,程序的目的是运行,而模块的目的是供其他程序导入并且使用。
模块也有对象,每个模块对象都有一个特殊属性:__dict__,这是一个包含模块符号表的字典。

导入模块

import importable
import imporable1,imporable2
import importabl as name  #重命名

import 语句并不是需要模块对象或直接操作模块对象,它仅仅是需要导入模块的定义。

导入某一模块中的对象

from os import path
from importable import object
from importable import object as name
from importable import (object1,obj2,...,obj3)
from importable import* #可能会有名称冲突

如果使用最后那种格式,则将导入所有的非私有的对象,或者变量all中存放的名称列表。
导入一个模块时,Python会在sys.path列表中的路径中依次搜索该模块,我的sys.path路径如下:

path = [
    '/home/jiayongqiang/Downloads/deb package/pycharm-community-2017.3.4/helpers',
    '/usr/lib/python35.zip',
    '/usr/lib/python3.5',
    '/usr/lib/python3.5/plat-x86_64-linux-gnu',
    '/usr/lib/python3.5/lib-dynload',
    '/home/jiayongqiang/PycharmProjects/demo1/venv/lib/python3.5/site-packages',
    '/home/jiayongqiang/PycharmProjects/demo1/venv/lib/python3.5/site-packages/setuptools-28.8.0-py3.5.egg',
    '/home/jiayongqiang/PycharmProjects/demo1/venv/lib/python3.5/site-packages/pip-9.0.1-py3.5.egg',
]

如果自定义的模块和内置模块名称相同,那么会先使用自定义的模块,从而会导致一些问题,因此在自定义模块名时,不能和内置模块或其他Python库中的名称相同。

一般内置模块使用小写字母命名,所以自定义模块第一个字母大写,可以避免
可以在命令行使用如下命令检测是否内置有对应名称的模块,抛出异常则说明没有:

$ python -c "import sys"
$ python -c "import CustomModule"
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named 'CustomModule'
$ 

在pytho加载某个模块时,首先会找该模块同名、以.pyo结尾的文件,.pyo文件表示最优化的字节码编译版本,如果不存在该.pyo文件,则查找是否存在.pyc文件,该文件为非优化的字节码编译版本,如果不存在,则会加载.py文件,并将该文件编译成字节码编译文件。因此,无论哪种形式,Python都以字节码编译的形式将文件加载到内存中,从而在解释器执行时,有更快的速度,只需要加载、运行代码,而不是加载、编译、运行。

2.包

包是一个目录,包含一组模块和__init__.py文件,支持多层嵌套。格式如下:

├── MyPackage
│   ├── Basketball.py
│   ├── Football.py
│   └── __init__.py

使用时,通过import导入:

import MyPackage.Football
s = MyPackage.Football.play()

或者重命名简化模块名:

import MyPackage.Football as football
s = football.play()

或者使用from importable import …:

from MyPackage import Football
Football.play()

或者使from importable import*导入,这种导入方式需要在__init__.py中创建一个__all__变量存储名称,如:

__all__ =["Basketball","Football"]

再进行导入:

import sys
from MyPackage import *
Football.play()

3.常用内置函数

Python中提供了一些常用内置函数,其中有些已经用的非常多了,在这里进行下总结

3.1迭代操作

any(i):如果可迭代类型对象i(下同)中的任一项都为True,则返回True,否则返回False
all(i):如果i中的每一项都为True,则返回True,否则返回False
enumerate(i,start):常用于for…in…循环中,返回一个枚举对象,该对象也为一个迭代子,每次迭代会返回一个二元组,第一项为迭代次数,第二项为enumerate中的迭代项。索引起始值为0或start(如果指定),如:

>>> l = ["java","python","android"]
>>> for i,j in enumerate(l):
    print(i,j)
0 java
1 python
2 android
>>> 

len(x):返回x的长度,组合类型返回数据项个数,str类型返回字符个数
max(i,key):返回i中的最大项
min(i,key):返回i中的最小项
range(start,end,step):返回一个整数迭代子
reversed(i):反转i,并作为一个迭代子返回
sorted(i,key,reversed):对i进行排序并返回,key用于提供DSU修饰排序,reversed如果为True,则排序以反序进行。
sum(i,start):求和,如果指定start,则加上start值
zip(i1,...,in):以一个或多个iterable为参数,返回一个迭代子,该迭代子将返回元组,第一个元组中存放每个iterable的第一个数据项,第二个元组中存放每个iterable的第二个数据项,以此类推,如:

>>> for t in zip(range(4),range(2,24,2),range(3,20,2)):
    print(t)
(0, 2, 3)
(1, 4, 5)
(2, 6, 7)
(3, 8, 9)
>>> 

你可能感兴趣的:(Python)