- 将一个函数转换为可共享的模块
对模块的主要需求就是要求文件名以.py结尾,这是python的扩展名
一个标准的python文件应该包含代码与注释,第一个注释描述模块,第二个描述函数。以第一章print_lol()函数为例,代码如下
"""这是“nester.py”模块,提供一个名为print_lol()的函数,这个函数的作用就是打印列表,其中有可能包含(也有可能不包含)嵌套列表。""" def print_lol(the_list): """这个函数取一个位置参数,名为“the_list”,这可以是任何python列表(也可以是包含嵌套列表的列表)。所指定的列表中的的每个数据项会(递归地)输出到屏幕上,各数据项各占一行。""" for each_item in the_list: if isinstance(each_item,list): print_lol(each_item) #递归调用 else: print(each_item)
- 如何构建、打包和发布你的模块?
1.为模块创建一个文件夹,将nester.py文件放入到文件夹nester中
2.在nester文件夹中创建一个名为“setup.py”的文件。增加一下代码:
from distutils.core import setup #从python发布工具导入“setup”函数 setup( name ='nester', version ='1.0.0', py_modules =['nester'], # 将模块的元数据与setup函数的参数关联 author ='hfpython', author_email ='xxx@xxx.com', url ='http://www.headfirstlabs.com', description ='A simple printer of nested lists', )
3.构建一个发布文件。在nester文件夹中打开一个终端窗口,键入命令: python3 setup.py sdist
4.将发布安装到你的Python本地副本中。 仍然在终端窗口键入命令: sudo python3 setup.py install
- Python的模块实现命名空间
命名空间的名字就是生活中的姓氏。关于区别请看下边代码:
import nester nester.print_lol(the_list) # 调用需要添加模块名
from nester import print_lol print_lol(the_list) #直接调用
- PyPI网站 http://pypi.python.org/
PyPI为Internet上的第三方Python模块提供一个集中的存储库。可以使用PyPI来发布你的模块,从而是你的代码可供他人使用。
- 写新代码之前,先考虑BIF(内置函数)
list() 这是一个工厂函数,创建一个新的空列表
range() 返回一个迭代器,根据需要生成一个指定范围的数字
enumerate() 创建成对数据的一个编号列表,从0开始
int() 将一个字符串或者另一个数转换为一个整数(如果可行)
id() 返回一个Python数据对象的唯一标识
next() 返回一个可迭代数据结构(如列表)中的下一项
- 使用可选参数
注意以下两种定义函数参数的写法
def print_lol(the_list,level): #这两个参数在函数调用时都是必须提供的
def print_lol(the_list,level=0): #增加一个缺省值使得level变成一个可选的参数
定义了参数的缺省值之后,可以采用多种不同的方法调用这个函数,如:
nester.print_lol(movies,0)
nester.print_lol(movies)
nester.print_lol(movies,2)
- 修改模块之后,模块支持两个API
修改模块之后如何创建并向PyPI上传一个新的发布,首先先修改setup.py程序中的version设置
name = 'nester' version = '1.2.0' #此处变为1.2版本 py_modules = ['nester']
修改代码后,上传PyPI: 命令: python3 setup.py sdist upload
- 再次修改模块
为函数增加第三个参数,使用这个参数来控制是否缩进代码
def print_lol(the_list,indent=False,level=0): for each_item in the_list: if isinstance(each_item,list): print_lol(each_item,indent,level+1) else: if indent: for tab_stop in range(level): print(" ",end=' ') print(each_item)